ofri masad has uploaded a new change for review. Change subject: core: Fix uninformative quota messages (#838589) ......................................................................
core: Fix uninformative quota messages (#838589) https://bugzilla.redhat.com/838589 When a quota is exceeded or reaches the warning threshold a log message is shown. The messages were amended to be more informative. Different messages are shown for Storage and Runtime qoutas and for passing the warning threshold, the qouta limit and the grace zone. Change-Id: Ie7c83616b773d7471447944e6dd9adcd49d2d5ac Signed-off-by: Ofri Masad <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties 2 files changed, 170 insertions(+), 129 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/7220/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java index 55881e6..1dc572f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java @@ -1,20 +1,11 @@ package org.ovirt.engine.core.bll.quota; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.ovirt.engine.core.common.AuditLogType; -import org.ovirt.engine.core.common.businessentities.Quota; -import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; -import org.ovirt.engine.core.common.businessentities.QuotaStorage; -import org.ovirt.engine.core.common.businessentities.QuotaVdsGroup; -import org.ovirt.engine.core.common.businessentities.VM; -import org.ovirt.engine.core.common.businessentities.storage_pool; +import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; @@ -42,24 +33,42 @@ .getQuotaDAO(); } - private AuditLogableBase getLoggableQuotaStorageParams(String quotaName, Double storageUsagePercentage) { + private AuditLogableBase getLoggableQuotaStorageParams(String quotaName, + double storageUsagePercentage, + double storageRequestedPercentage) { AuditLogableBase logable = new AuditLogableBase(); + logable.getUserName(); logable.AddCustomValue("QuotaName", quotaName); - logable.AddCustomValue("storageUsage", storageUsagePercentage.toString()); + logable.AddCustomValue("CurrentStorage", String.valueOf((int)storageUsagePercentage)); + logable.AddCustomValue("Requested", String.valueOf((int)storageRequestedPercentage)); + return logable; } private AuditLogableBase getLoggableQuotaVdsGroupParams(String quotaName, - Double value, - boolean isMemory) { + double cpuCurrentPercentage, + double cpuRequestPercentage, + double memCurrentPercentage, + double memRequestPercentage, + boolean cpuOverLimit, + boolean memOverLimit) { + AuditLogableBase logable = new AuditLogableBase(); logable.AddCustomValue("QuotaName", quotaName); - String str = isMemory ? "memPercentage" : "VCPUPercentage"; - logable.AddCustomValue(str, value.toString()); + + StringBuilder currentUtilization = new StringBuilder(); + currentUtilization.append(cpuOverLimit ? "vcpu:" + String.valueOf((int)cpuCurrentPercentage) + "% " : ""); + currentUtilization.append(memOverLimit ? "mem:" + String.valueOf((int)memCurrentPercentage) + "%" : ""); + + StringBuilder request = new StringBuilder(); + request.append(cpuOverLimit ? "vcpu:" + String.valueOf((int)cpuRequestPercentage) + "% " : ""); + request.append(memOverLimit ? "mem:" + String.valueOf((int)memRequestPercentage) + "%" : ""); + + logable.AddCustomValue("Utilization", currentUtilization.toString()); + logable.AddCustomValue("Requested", request.toString()); + return logable; } - - public boolean validateAndSetStorageQuota(storage_pool storagePool, List<StorageQuotaValidationParameter> parameters, @@ -170,28 +179,28 @@ for (Guid quotaId : desiredStorageSizeQuotaMap.keySet()) { Quota quota = quotaMap.get(quotaId); - if (quota.getGlobalQuotaStorage() != null) { //global storage quota - if (quota.getGlobalQuotaStorage().getStorageSizeGB() > UNLIMITED) { + if (quota.getGlobalQuotaStorage() != null) { // global storage quota + if (quota.getGlobalQuotaStorage().getStorageSizeGB() != UNLIMITED) { double sum = 0.0; for (Double size : desiredStorageSizeQuotaMap.get(quotaId).values()) { sum += size; } - if (isIncrease) { - sum += quota.getGlobalQuotaStorage().getStorageSizeGBUsage(); - } else { - sum = quota.getGlobalQuotaStorage().getStorageSizeGBUsage() - sum; - } - double storageUsagePercentage = sum + + double storageUsagePercentage = quota.getGlobalQuotaStorage().getStorageSizeGBUsage() / quota.getGlobalQuotaStorage().getStorageSizeGB() * 100; + double storageRequestPercentage = sum + / quota.getGlobalQuotaStorage().getStorageSizeGB() * 100; + if (!checkQuotaStorageLimits(storagePool.getQuotaEnforcementType(), quota, quota.getGlobalQuotaStorage().getStorageSizeGB(), - storageUsagePercentage, + storageUsagePercentage, storageRequestPercentage, canDoActionMessages, logPair)) { return false; } - newUsedGlobalStorageSize.put(quotaId, sum); + newUsedGlobalStorageSize.put(quotaId, sum + + quota.getGlobalQuotaStorage().getStorageSizeGBUsage()); } } else { newUsedSpecificStorageSize.put(quotaId, new HashMap<Guid, Double>()); @@ -200,29 +209,24 @@ for (QuotaStorage quotaStorage : quota.getQuotaStorages()) { if (quotaStorage.getStorageId().equals(storageId)) { hasStorageId = true; - if (quotaStorage.getStorageSizeGB() > UNLIMITED) { - double sum = 0; - if (isIncrease) { - sum = - desiredStorageSizeQuotaMap.get(quotaId).get(storageId) - + quotaStorage.getStorageSizeGBUsage(); - } else { - sum = - quotaStorage.getStorageSizeGBUsage() - - desiredStorageSizeQuotaMap.get(quotaId) - .get(storageId); - } - double storageUsagePercentage = sum - / quotaStorage.getStorageSizeGB() * 100; + if (quotaStorage.getStorageSizeGB() != UNLIMITED) { + double storageUsagePercentage = quotaStorage.getStorageSizeGBUsage() + / quota.getGlobalQuotaStorage().getStorageSizeGB() * 100; + double storageRequestPercentage = + desiredStorageSizeQuotaMap.get(quotaId) + .get(storageId) + / quota.getGlobalQuotaStorage().getStorageSizeGB() * 100; + if (!checkQuotaStorageLimits(storagePool.getQuotaEnforcementType(), quota, quotaStorage.getStorageSizeGB(), - storageUsagePercentage, + storageUsagePercentage, storageRequestPercentage, canDoActionMessages, logPair)) { return false; } - newUsedSpecificStorageSize.get(quotaId).put(storageId, sum); + newUsedSpecificStorageSize.get(quotaId).put(storageId, + storageUsagePercentage + storageRequestPercentage); break; } } @@ -275,22 +279,28 @@ Quota quota, double limit, double storageUsagePercentage, + double storageRequestPercentage, ArrayList<String> canDoActionMessages, Pair<AuditLogType, AuditLogableBase> log) { - if (limit == UNLIMITED || storageUsagePercentage <= quota.getThresholdStoragePercentage()) { + double storageTotalPercentage = storageUsagePercentage + storageRequestPercentage; + + if (limit == UNLIMITED || storageTotalPercentage <= quota.getThresholdStoragePercentage()) { return true; - } else if (storageUsagePercentage <= 100) { + } else if (storageTotalPercentage <= 100) { log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_STORAGE_THRESHOLD); log.setSecond(getLoggableQuotaStorageParams(quota.getQuotaName(), - storageUsagePercentage)); - } else if (storageUsagePercentage <= quota.getGraceStoragePercentage()) { + storageUsagePercentage + storageRequestPercentage, + storageRequestPercentage)); + } else if (storageTotalPercentage <= quota.getGraceStoragePercentage() + 100) { log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_STORAGE_LIMIT); log.setSecond(getLoggableQuotaStorageParams(quota.getQuotaName(), - storageUsagePercentage)); + storageUsagePercentage + storageRequestPercentage, + storageRequestPercentage)); } else { log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_STORAGE_GRACE_LIMIT); log.setSecond(getLoggableQuotaStorageParams(quota.getQuotaName(), - storageUsagePercentage)); + storageUsagePercentage, + storageRequestPercentage)); if (QuotaEnforcementTypeEnum.HARD_ENFORCEMENT.equals(quotaEnforcementTypeEnum)) { canDoActionMessages.add(VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_STORAGE_LIMIT_EXCEEDED.toString()); return false; @@ -299,37 +309,82 @@ return true; } - private boolean checkQuotaVdsGroupLimits(QuotaEnforcementTypeEnum quotaEnforcementTypeEnum, + private boolean checkQuotaClusterLimits(QuotaEnforcementTypeEnum quotaEnforcementTypeEnum, Quota quota, - double limit, - double percentage, - boolean isMemory, + QuotaVdsGroup quotaVdsGroup, + long memToAdd, + int vcpuToAdd, ArrayList<String> canDoActionMessages, Pair<AuditLogType, AuditLogableBase> log) { - if (limit == UNLIMITED || percentage <= quota.getThresholdVdsGroupPercentage()) { + if (quotaVdsGroup.getVirtualCpu() == 0 || quotaVdsGroup.getMemSizeMB() == 0) { + return false; + } + + double vcpuToAddPercentage = (double) vcpuToAdd / (double) quotaVdsGroup.getVirtualCpu() * 100; + double vcpuCurrentPercentage = + (double) quotaVdsGroup.getVirtualCpuUsage() / (double) quotaVdsGroup.getVirtualCpu() * 100; + double newVcpuPercent = vcpuToAddPercentage + vcpuCurrentPercentage; + double memToAddPercentage = (double) memToAdd / (double) quotaVdsGroup.getMemSizeMB() * 100; + double memCurrentPercentage = + (double) quotaVdsGroup.getMemSizeMBUsage() / (double) quotaVdsGroup.getMemSizeMB() * 100; + double newMemoryPercent = memToAddPercentage + memCurrentPercentage; + long newMemory = memToAdd + quotaVdsGroup.getMemSizeMBUsage(); + int newVcpu = vcpuToAdd + quotaVdsGroup.getVirtualCpuUsage(); + + long memLimit = quotaVdsGroup.getMemSizeMB(); + int cpuLimit = quotaVdsGroup.getVirtualCpu(); + + if (memLimit == UNLIMITED && cpuLimit == UNLIMITED) { // if both cpu and mem are unlimited + // cache + cacheNewValues(quotaVdsGroup, newMemory, newVcpu); return true; - } else if (percentage <= 100) { + } else if (newVcpuPercent <= quota.getThresholdVdsGroupPercentage() // if cpu and mem usages are under the limit + && newMemoryPercent <= quota.getThresholdVdsGroupPercentage()) { + // cache + cacheNewValues(quotaVdsGroup, newMemory, newVcpu); + return true; + } else if (newVcpuPercent <= 100 + && newMemoryPercent <= 100) { // passed the threshold (not the quota limit) log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_VDS_GROUP_THRESHOLD); log.setSecond(getLoggableQuotaVdsGroupParams(quota.getQuotaName(), - percentage, - isMemory)); - } else if (percentage <= quota.getGraceVdsGroupPercentage()) { + vcpuCurrentPercentage + vcpuToAddPercentage, + vcpuToAddPercentage, + memCurrentPercentage + memToAddPercentage, + memToAddPercentage, + newVcpuPercent > quota.getThresholdVdsGroupPercentage(), + newMemoryPercent > quota.getThresholdVdsGroupPercentage())); + } else if (newVcpuPercent <= quota.getGraceVdsGroupPercentage() + 100 + && newMemoryPercent <= quota.getGraceVdsGroupPercentage() + 100) { // passed the quota limit (not the grace) log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_VDS_GROUP_LIMIT); log.setSecond(getLoggableQuotaVdsGroupParams(quota.getQuotaName(), - percentage, - isMemory)); + vcpuCurrentPercentage + vcpuToAddPercentage, + vcpuToAddPercentage, + memCurrentPercentage + memToAddPercentage, + memToAddPercentage, + newVcpuPercent > 100, + newMemoryPercent > 100)); } else { - log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_VDS_GROUP_GRACE_LIMIT); + log.setFirst(AuditLogType.USER_EXCEEDED_QUOTA_VDS_GROUP_GRACE_LIMIT); // passed the grace log.setSecond(getLoggableQuotaVdsGroupParams(quota.getQuotaName(), - percentage, - isMemory)); + vcpuCurrentPercentage, + vcpuToAddPercentage, + memCurrentPercentage, + memToAddPercentage, + newVcpuPercent > quota.getGraceVdsGroupPercentage() + 100, + newMemoryPercent > quota.getGraceVdsGroupPercentage() + 100)); if (QuotaEnforcementTypeEnum.HARD_ENFORCEMENT.equals(quotaEnforcementTypeEnum)) { canDoActionMessages.add(VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_VDS_GROUP_LIMIT_EXCEEDED.toString()); return false; } } - + // cache + cacheNewValues(quotaVdsGroup, newMemory, newVcpu); return true; + } + + private void cacheNewValues(QuotaVdsGroup quotaVdsGroup, long newMemory, int newVcpu) { + quotaVdsGroup.setVirtualCpuUsage(newVcpu); + quotaVdsGroup.setMemSizeMBUsage(newMemory); } public boolean validateQuotaForStoragePool(storage_pool storagePool, @@ -368,7 +423,7 @@ } else { quota = quotaMap.get(quotaId); } - if (quota.getGlobalQuotaVdsGroup() != null) { //global cluster quota + if (quota.getGlobalQuotaVdsGroup() != null) { // global cluster quota return true; } else { boolean hasVdsGroup = false; @@ -417,7 +472,7 @@ return false; } QuotaVdsGroup quotaVdsGroup = null; - if (quota.getGlobalQuotaVdsGroup() != null) { //global cluster quota + if (quota.getGlobalQuotaVdsGroup() != null) { // global cluster quota quotaVdsGroup = quota.getGlobalQuotaVdsGroup(); } else { for (QuotaVdsGroup vdsGroup : quota.getQuotaVdsGroups()) { @@ -432,30 +487,16 @@ return false; } - int newVcpu = vcpu + quotaVdsGroup.getVirtualCpuUsage(); - double newVcpuPercent = (double) newVcpu / (double) quotaVdsGroup.getVirtualCpu() * 100; - boolean success = checkQuotaVdsGroupLimits(storagePool.getQuotaEnforcementType(), + boolean success = checkQuotaClusterLimits(storagePool.getQuotaEnforcementType(), quota, - quotaVdsGroup.getVirtualCpu(), - newVcpuPercent, - false, - canDoActionMessages, - logPair); - long newMemory = mem + quotaVdsGroup.getMemSizeMBUsage(); - double newMemoryPercent = (double) newMemory / (double) quotaVdsGroup.getMemSizeMB() * 100; - success &= checkQuotaVdsGroupLimits(storagePool.getQuotaEnforcementType(), - quota, - quotaVdsGroup.getMemSizeMB(), - newMemoryPercent, - true, + quotaVdsGroup, + mem, + vcpu, canDoActionMessages, logPair); if (!success) { return false; } - // cache - quotaVdsGroup.setVirtualCpuUsage(newVcpu); - quotaVdsGroup.setMemSizeMBUsage(newMemory); } return true; } finally { diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index 4d47f82..4091a9e 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -98,19 +98,19 @@ USER_ATTACH_DISK_TO_VM=Disk ${DiskAlias} was successfully attached to VM ${VmName} by ${UserName}. USER_FAILED_ATTACH_DISK_TO_VM=Failed to attach Disk ${DiskAlias} to VM ${VmName} (User: ${UserName}). USER_DETACH_DISK_FROM_VM=Disk ${DiskAlias} was successfully detached from VM ${VmName} by ${UserName}. -USER_FAILED_DETACH_DISK_FROM_VM=Failed to detach Disk ${DiskAlias} from VM ${VmName} (User: ${UserName}). +USER_FAILED_DETACH_DISK_FROM_VM=Failed to detach Disk ${DiskAlias} from VM ${VmName} (User: ${UserName}). USER_ADD_QUOTA=Quota ${QuotaName} has been added by ${UserName}. USER_FAILED_ADD_QUOTA=Failed to add Quota ${QuotaName}. The operation was initiated by ${UserName}. USER_UPDATE_QUOTA=Quota ${QuotaName} has been updated by ${UserName}. USER_FAILED_UPDATE_QUOTA=Failed to update Quota ${QuotaName}. The operation was initiated by ${UserName}.. USER_DELETE_QUOTA=Quota ${QuotaName} has been deleted by ${UserName}. USER_FAILED_DELETE_QUOTA=Failed to delete Quota ${QuotaName}. The operation was initiated by ${UserName}.. -USER_EXCEEDED_QUOTA_VDS_GROUP_GRACE_LIMIT=Quota ${QuotaName} has exceeded Cluster grace limitation. -USER_EXCEEDED_QUOTA_VDS_GROUP_LIMIT=Quota ${QuotaName} has exceeded Cluster limitation. -USER_EXCEEDED_QUOTA_VDS_GROUP_THRESHOLD=Quota ${QuotaName} has exceeded Cluster Threshold limitation. -USER_EXCEEDED_QUOTA_STORAGE_GRACE_LIMIT=Quota ${QuotaName} has exceeded Storage grace limitation. -USER_EXCEEDED_QUOTA_STORAGE_LIMIT=Quota ${QuotaName} has exceeded Storage limitation. -USER_EXCEEDED_QUOTA_STORAGE_THRESHOLD=Quota ${QuotaName} has exceeded Storage Threshold limitation. +USER_EXCEEDED_QUOTA_VDS_GROUP_GRACE_LIMIT=Cluster Quota ${QuotaName} reached grace limitation and blocked operation. Current utilization: ${Utilization}, Requested: ${Requested} - Please select a different quota or contact your administrator to extend the the quota. +USER_EXCEEDED_QUOTA_VDS_GROUP_LIMIT=Cluster Quota ${QuotaName} was exceeded and entered the grace zone. Current utilization: ${Utilization} (It is advised to select a different quota or contact your administrator to extend the the quota). +USER_EXCEEDED_QUOTA_VDS_GROUP_THRESHOLD=Cluster Quota ${QuotaName} is about to be exceeded . Current utilization: ${Utilization} +USER_EXCEEDED_QUOTA_STORAGE_GRACE_LIMIT=Storage Quota ${QuotaName} reached grace limitation and blocked operation. Current utilization: storage ${CurrentStorage}%, Requested: ${Requested}% - Please select a different quota or contact your administrator to extend the the quota. +USER_EXCEEDED_QUOTA_STORAGE_LIMIT=Storage Quota ${QuotaName} was exceeded and entered the grace zone. Current utilization: storage ${CurrentStorage}% (It is advised to select a different quota or contact your administrator to extend the the quota). +USER_EXCEEDED_QUOTA_STORAGE_THRESHOLD=Storage Quota ${QuotaName} is about to be exceeded. Current utilization: storage ${CurrentStorage}% USER_MOVED_VM=VM ${VmName} moving to Domain ${StorageDomainName} was initiated by ${UserName}. USER_MOVED_VM_FINISHED_SUCCESS=Moving VM ${VmName} to Domain ${StorageDomainName} has been completed. USER_MOVED_VM_FINISHED_FAILURE=Failed to complete moving of VM ${VmName} to Domain ${StorageDomainName}. @@ -188,7 +188,7 @@ VDS_RECOVER=Host ${VdsName} is rebooting. VDS_RECOVER_FAILED=Host ${VdsName} failed to recover. VDS_RECOVER_FAILED_VMS_UNKNOWN=Host ${VdsName} cannot be reached, VMs state on this host are marked as Unknown. -VM_DOWN=VM ${VmName} is down. ${ExitMessage} +VM_DOWN=VM ${VmName} is down. ${ExitMessage} USER_SUSPEND_VM_OK=VM ${VmName} on Host ${VdsName} was suspended. VM_FAILURE=VM ${VmName} cannot be found on Host ${VdsName}. VM_MIGRATION_ABORT=Migration of VM ${VmName} from Host ${VdsName} failed. Error: ${MigrationError} @@ -199,8 +199,8 @@ VM_MIGRATION_FAILED_FROM_TO=Migration Failed${DueToMigrationError}. (VM: ${VmName}, Source Host: ${VdsName}, Destination Host:${VdsToName} ). VM_MIGRATION_START=Starting migration of VM ${VmName} from Host ${VdsName} to Host ${VdsDestination} (User: ${UserName}.). VM_MIGRATION_TRYING_RERUN=Migration failed${DueToMigrationError} (VM: ${VmName}, Source Host: ${VdsName}). Trying to migrate to another Host. -VM_CANCEL_MIGRATION=Migration cancelled for VM: ${VmName} -VM_CANCEL_MIGRATION_FAILED=Failed to cancel migration for VM: ${VmName} +VM_CANCEL_MIGRATION=Migration cancelled for VM: ${VmName} +VM_CANCEL_MIGRATION_FAILED=Failed to cancel migration for VM: ${VmName} VDS_SLOW_STORAGE_RESPONSE_TIME=Slow storage response time on Host ${VdsName}. IRS_HOSTED_ON_VDS=Storage Pool Manager runs on Host ${VdsName} (Address: ${ServerIp}). USER_ATTACH_VM_POOL_TO_AD_GROUP=Group ${AdGroupName} was attached to VM Pool ${VmPoolName} by ${UserName}. @@ -313,7 +313,7 @@ VDS_INSTALL_IN_PROGRESS_WARNING=Host ${VdsName} installation in progress . ${Message}. USER_UPDATE_VM_POOL_WITH_VMS=VM Pool ${VmPoolName} was updated by ${UserName}, ${VmsCount} VMs were added. USER_UPDATE_VM_POOL_WITH_VMS_FAILED=Failed to update VM Pool ${VmPoolName}(User: ${UserName}). -USER_VM_POOL_MAX_SUBSEQUENT_FAILURES_REACHED=Not all VMs where successfully created in VM Pool ${VmPoolName}. +USER_VM_POOL_MAX_SUBSEQUENT_FAILURES_REACHED=Not all VMs where successfully created in VM Pool ${VmPoolName}. MAC_POOL_EMPTY=No MAC addresses left in the MAC Address Pool. MAC_ADDRESS_IS_IN_USE=Import Vm ${VmName}: Mac Address ${MACAddr} is in use USER_PASSWORD_CHANGED=Password changed successfully for ${UserName} @@ -324,10 +324,10 @@ VDS_RUN_IN_NO_KVM_MODE=Host ${VdsName} running without virtualization hardware acceleration VDS_VERSION_NOT_SUPPORTED_FOR_CLUSTER=Host ${VdsName} is compatible with versions (${VdsSupportedVersions}) and cannot join Cluster ${VdsGroupName} which is set to version ${CompatibilityVersion}. RUN_VM_FAILED=Cannot run VM ${VmName} on Host ${VdsName}. Error: ${ErrMsg} -USER_ADD_PERMISSION=User/Group ${SubjectName} was granted permission for Role ${RoleName} on ${VdcObjectType} ${VdcObjectName}, by ${UserName}. -USER_ADD_PERMISSION_FAILED=User ${UserName} failed to grant permission for Role ${RoleName} on ${VdcObjectType} ${VdcObjectName} to User/Group ${SubjectName}. -USER_REMOVE_PERMISSION=User/Group ${SubjectName} Role ${RoleName} permission was removed from ${VdcObjectType} ${VdcObjectName} by ${UserName} -USER_REMOVE_PERMISSION_FAILED=User ${UserName} failed to remove permission for Role ${RoleName} from ${VdcObjectType} ${VdcObjectName} to User/Group ${SubjectName} +USER_ADD_PERMISSION=User/Group ${SubjectName} was granted permission for Role ${RoleName} on ${VdcObjectType} ${VdcObjectName}, by ${UserName}. +USER_ADD_PERMISSION_FAILED=User ${UserName} failed to grant permission for Role ${RoleName} on ${VdcObjectType} ${VdcObjectName} to User/Group ${SubjectName}. +USER_REMOVE_PERMISSION=User/Group ${SubjectName} Role ${RoleName} permission was removed from ${VdcObjectType} ${VdcObjectName} by ${UserName} +USER_REMOVE_PERMISSION_FAILED=User ${UserName} failed to remove permission for Role ${RoleName} from ${VdcObjectType} ${VdcObjectName} to User/Group ${SubjectName} USER_ADD_ROLE=Role ${RoleName} granted to ${UserName} USER_ADD_ROLE_FAILED=Failed to grant role ${RoleName} (User ${UserName}) USER_REMOVE_ROLE=Role ${RoleName} removed from ${UserName} @@ -388,8 +388,8 @@ USER_ADD_STORAGE_POOL_FAILED=Failed to add Data Center ${StoragePoolName}. (User: ${UserName}) USER_ATTACH_STORAGE_DOMAIN_TO_POOL=Storage Domain ${StorageDomainName} was attached to Data Center ${StoragePoolName} by ${UserName} USER_ATTACH_STORAGE_DOMAIN_TO_POOL_FAILED=Failed to attach Storage Domain ${StorageDomainName} to Data Center ${StoragePoolName}. (User: ${UserName}) -USER_ATTACH_STORAGE_DOMAINS_TO_POOL=Storage Domains were attached to Data Center ${StoragePoolName} by ${UserName} -USER_ATTACH_STORAGE_DOMAINS_TO_POOL_FAILED=Failed to attach Storage Domains to Data Center ${StoragePoolName}. (User: ${UserName}) +USER_ATTACH_STORAGE_DOMAINS_TO_POOL=Storage Domains were attached to Data Center ${StoragePoolName} by ${UserName} +USER_ATTACH_STORAGE_DOMAINS_TO_POOL_FAILED=Failed to attach Storage Domains to Data Center ${StoragePoolName}. (User: ${UserName}) USER_DEACTIVATED_STORAGE_DOMAIN=Storage Domain ${StorageDomainName} (Data Center ${StoragePoolName}) was deactivated by ${UserName} USER_DEACTIVATE_STORAGE_DOMAIN_FAILED=Failed to deactivate Storage Domain ${StorageDomainName} (Data Center ${StoragePoolName}). (User: ${UserName}) USER_DETACH_STORAGE_DOMAIN_FROM_POOL=Storage Domain ${StorageDomainName} was detached from Data Center ${StoragePoolName} by ${UserName} @@ -407,7 +407,7 @@ VDS_SET_NONOPERATIONAL_NETWORK=Host ${VdsName} does not comply with the cluster ${VdsGroupName} networks, the following networks are missing on host: '${Networks}' VDS_NETWORKS_OUT_OF_SYNC=Host ${VdsName}'s following network(s) are not synchronized with their Logical Network configuration: ${Networks}. VDS_SET_NONOPERATIONAL_IFACE_DOWN=Host ${VdsName} moved to Non-Operational state because interfaces '${Interfaces}' are down which needed by networks '${Networks}' in the current cluster -BRIDGED_NETWORK_OVER_MULTIPLE_INTERFACES=Bridged network ${NetworkName} is attached to multiple interfaces: ${interfaces} on Host ${VdsName}. +BRIDGED_NETWORK_OVER_MULTIPLE_INTERFACES=Bridged network ${NetworkName} is attached to multiple interfaces: ${interfaces} on Host ${VdsName}. NETWORK_ADD_NETWORK=Network ${NetworkName} was added to data center: ${StoragePoolName} NETWORK_ADD_NETWORK_FAILED=Failed to add Network ${NetworkName} to data center: ${StoragePoolName} NETWORK_ADD_TEMPLATE_INTERFACE=Interface ${InterfaceName} (${InterfaceType}) was added to Template ${VmTemplateName}. (User: ${UserName}) @@ -488,8 +488,8 @@ USER_ADD_ROLE_WITH_ACTION_GROUP_FAILED=Failed to add role ${RoleName} VDS_ALERT_FENCING_IS_NOT_CONFIGURED=Failed to verify Power Management configuration for Host ${VdsName}. VDS_ALERT_FENCING_TEST_FAILED=Power Management test failed for Host ${VdsName}.${Reason} -VDS_ALERT_FENCING_OPERATION_FAILED=Failed to power fence host ${VdsName}. Please check the host status and it's power management settings, and then manually reboot it and click "Confirm Host Has Been Rebooted" -VDS_ALERT_FENCING_OPERATION_SKIPPED=Host ${VdsName} became non-responsive. It has no power management configured. Please check the host status, manually reboot it, and click "Confirm Host Has Been Rebooted" +VDS_ALERT_FENCING_OPERATION_FAILED=Failed to power fence host ${VdsName}. Please check the host status and it's power management settings, and then manually reboot it and click "Confirm Host Has Been Rebooted" +VDS_ALERT_FENCING_OPERATION_SKIPPED=Host ${VdsName} became non-responsive. It has no power management configured. Please check the host status, manually reboot it, and click "Confirm Host Has Been Rebooted" VDS_ALERT_FENCING_NO_PROXY_HOST=There is no other host in the data center that can be used to test the power management settings. VDS_ALERT_FENCING_STATUS_VERIFICATION_FAILED=Failed to verify Host ${Host} ${Status} status, Please ${Status} Host ${Host} manually. TASK_STOPPING_ASYNC_TASK=Stopping async task ${CommandName} that started at ${Date} @@ -505,39 +505,39 @@ VDS_LOW_MEM=Available memory of host ${HostName} [${AvailableMemory} MB] is under defined threshold [${Threshold} MB]. IMPORTEXPORT_FAILED_TO_IMPORT_VM=Failed to read VM '${ImportedVmName}' OVF, it may be corrupted IMPORTEXPORT_FAILED_TO_IMPORT_TEMPLATE=Failed to read Template '${Template}' OVF, it may be corrupted -CANNOT_HIBERNATE_RUNNING_VMS_AFTER_CLUSTER_CPU_UPGRADE=Hibernation of VMs after CPU upgrade of Cluster ${VdsGroup} is not supported. Please stop and restart those VMs in case you wish to hibernate them +CANNOT_HIBERNATE_RUNNING_VMS_AFTER_CLUSTER_CPU_UPGRADE=Hibernation of VMs after CPU upgrade of Cluster ${VdsGroup} is not supported. Please stop and restart those VMs in case you wish to hibernate them STORAGE_ALERT_VG_METADATA_CRITICALLY_FULL=The system has reached the 80% watermark on the VG metadata area size on ${StorageDomainName}.\nThis is due to a high number of Vdisks or large Vdisks size allocated on this specific VG. -STORAGE_ALERT_SMALL_VG_METADATA=The allocated VG metadata area size is smaller than 50MB on ${StorageDomainName},\nwhich might limit its capacity (the number of Vdisks and/or their size).\nPlease refer to the GSS knowledge base to understand the issue and how to resolve it. -RELOAD_CONFIGURATIONS_SUCCESS=System Configurations reloaded successfully. +STORAGE_ALERT_SMALL_VG_METADATA=The allocated VG metadata area size is smaller than 50MB on ${StorageDomainName},\nwhich might limit its capacity (the number of Vdisks and/or their size).\nPlease refer to the GSS knowledge base to understand the issue and how to resolve it. +RELOAD_CONFIGURATIONS_SUCCESS=System Configurations reloaded successfully. RELOAD_CONFIGURATIONS_FAILURE=System Configurations failed to reload. -USER_ACCOUNT_DISABLED_OR_LOCKED=User ${UserName} cannot login, as it got disabled or locked. Please contact the system administrator. +USER_ACCOUNT_DISABLED_OR_LOCKED=User ${UserName} cannot login, as it got disabled or locked. Please contact the system administrator. USER_ACCOUNT_PASSWORD_EXPIRED=User ${UserName} cannot login, as the user account password has expired. Please contact the system administrator. IMPORTEXPORT_IMPORT_VM_INTERFACES_ON_NON_VM_NETWORKS=Trying to import VM ${VmName} with the interface/s ${Interfaces} attached to non VM or non-existent cluster network/s ${Networks}. -VDS_SET_NON_OPERATIONAL_VM_NETWORK_IS_BRIDGELESS=Host ${VdsName} does not comply with the cluster ${VdsGroupName} networks, the following VM networks are bridgeless: '${Networks}' -# Gluster Messages -GLUSTER_VOLUME_CREATE=Gluster Volume ${glusterVolumeName} created. -GLUSTER_VOLUME_CREATE_FAILED=Creation of Gluster Volume ${glusterVolumeName} failed. -GLUSTER_VOLUME_OPTION_SET=Volume Option set on ${glusterVolumeName}. -GLUSTER_VOLUME_OPTION_SET_FAILED=Volume Option could not be set on ${glusterVolumeName}. -GLUSTER_VOLUME_START=Gluster Volume ${glusterVolumeName} started. -GLUSTER_VOLUME_START_FAILED=Could not start Gluster Volume ${glusterVolumeName}. +VDS_SET_NON_OPERATIONAL_VM_NETWORK_IS_BRIDGELESS=Host ${VdsName} does not comply with the cluster ${VdsGroupName} networks, the following VM networks are bridgeless: '${Networks}' +# Gluster Messages +GLUSTER_VOLUME_CREATE=Gluster Volume ${glusterVolumeName} created. +GLUSTER_VOLUME_CREATE_FAILED=Creation of Gluster Volume ${glusterVolumeName} failed. +GLUSTER_VOLUME_OPTION_SET=Volume Option set on ${glusterVolumeName}. +GLUSTER_VOLUME_OPTION_SET_FAILED=Volume Option could not be set on ${glusterVolumeName}. +GLUSTER_VOLUME_START=Gluster Volume ${glusterVolumeName} started. +GLUSTER_VOLUME_START_FAILED=Could not start Gluster Volume ${glusterVolumeName}. GLUSTER_VOLUME_STOP=Gluster Volume ${glusterVolumeName} stopped. GLUSTER_VOLUME_STOP_FAILED=Could not stop Gluster Volume ${glusterVolumeName}. GLUSTER_VOLUME_OPTIONS_RESET=Gluster Volume ${glusterVolumeName} Options reset. GLUSTER_VOLUME_OPTIONS_RESET_FAILED=Could not reset Gluster Volume ${glusterVolumeName} Options. -GLUSTER_VOLUME_DELETE=Gluster Volume ${glusterVolumeName} deleted. -GLUSTER_VOLUME_DELETE_FAILED=Could not delete Gluster Volume ${glusterVolumeName}. -GLUSTER_VOLUME_REMOVE_BRICKS=Gluster Volume ${glusterVolumeName} Bricks removed. -GLUSTER_VOLUME_REMOVE_BRICKS_FAILED=Could not remove Gluster Volume ${glusterVolumeName} Bricks. -GLUSTER_VOLUME_ADD_BRICK=Volume brick(s) added to the volume ${glusterVolumeName}. -GLUSTER_VOLUME_ADD_BRICK_FAILED=Gluster Volume ${glusterVolumeName} add brick failed. -GLUSTER_VOLUME_REBALANCE_START=Gluster Volume ${glusterVolumeName} rebalance started. +GLUSTER_VOLUME_DELETE=Gluster Volume ${glusterVolumeName} deleted. +GLUSTER_VOLUME_DELETE_FAILED=Could not delete Gluster Volume ${glusterVolumeName}. +GLUSTER_VOLUME_REMOVE_BRICKS=Gluster Volume ${glusterVolumeName} Bricks removed. +GLUSTER_VOLUME_REMOVE_BRICKS_FAILED=Could not remove Gluster Volume ${glusterVolumeName} Bricks. +GLUSTER_VOLUME_ADD_BRICK=Volume brick(s) added to the volume ${glusterVolumeName}. +GLUSTER_VOLUME_ADD_BRICK_FAILED=Gluster Volume ${glusterVolumeName} add brick failed. +GLUSTER_VOLUME_REBALANCE_START=Gluster Volume ${glusterVolumeName} rebalance started. GLUSTER_VOLUME_REBALANCE_START_FAILED=Could not start Gluster Volume ${glusterVolumeName} rebalance. GLUSTER_VOLUME_REPLACE_BRICK_FAILED=Replace Gluster Volume Brick failed GLUSTER_VOLUME_REPLACE_BRICK_START=Gluster Volume ${glusterVolumeName} Replace Brick started. -GLUSTER_VOLUME_REPLACE_BRICK_START_FAILED=Could not start Gluster Volume ${glusterVolumeName} Replace Brick. +GLUSTER_VOLUME_REPLACE_BRICK_START_FAILED=Could not start Gluster Volume ${glusterVolumeName} Replace Brick. GLUSTER_VOLUME_ADD_BRICK_FAILED=Gluster Volume ${glusterVolumeName} add brick failed. GLUSTER_HOST_ADD_FAILED=Failed to add gluster server ${VdsName} into Cluster ${VdsGroupName}. -GLUSTER_HOST_REMOVE_FAILED=Failed to remove gluster server ${VdsName} from Cluster ${VdsGroupName}. -HA_VM_FAILED=Highly Available VM ${VmName} failed. It will be restarted automatically. -HA_VM_RESTART_FAILED=Restart of the Highly Available VM ${VmName} failed. +GLUSTER_HOST_REMOVE_FAILED=Failed to remove gluster server ${VdsName} from Cluster ${VdsGroupName}. +HA_VM_FAILED=Highly Available VM ${VmName} failed. It will be restarted automatically. +HA_VM_RESTART_FAILED=Restart of the Highly Available VM ${VmName} failed. -- To view, visit http://gerrit.ovirt.org/7220 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie7c83616b773d7471447944e6dd9adcd49d2d5ac Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: ofri masad <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
