Sahina Bose has uploaded a new change for review. Change subject: gluster: Bll command to refresh gluster hooks in engine ......................................................................
gluster: Bll command to refresh gluster hooks in engine Used to manually trigger a sync of gluster hooks in engine with values stored in database Change-Id: I4713ca800432aee302f913d0c8aa06a35a5b2db2 Signed-off-by: Sahina Bose <sab...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookSyncJob.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommand.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterClusterParameters.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java M frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 14 files changed, 250 insertions(+), 23 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/15312/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookSyncJob.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookSyncJob.java index 1ccc854..aded6d2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookSyncJob.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterHookSyncJob.java @@ -17,6 +17,8 @@ import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookStatus; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerHook; +import org.ovirt.engine.core.common.errors.VdcBLLException; +import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.common.gluster.GlusterFeatureSupported; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; @@ -44,32 +46,47 @@ List<VDSGroup> clusters = getClusterDao().getAll(); for (VDSGroup cluster : clusters) { - if (!supportsGlusterHookFeature(cluster)) - { - continue; - } + refreshHooksInCluster(cluster, false); + } + } - log.debugFormat("Syncing hooks for cluster {0}", cluster.getname()); - List<VDS> upServers = getClusterUtils().getAllUpServers(cluster.getId()); + /** + * + * @param cluster - the VDSGroup for which the gluster hook data is refreshed + * @param throwError - set to true if this method should throw exception. + */ + public void refreshHooksInCluster(VDSGroup cluster, boolean throwError) { + if (!supportsGlusterHookFeature(cluster)) + { + return; + } - if (upServers == null || upServers.isEmpty()) { - continue; - } + log.debugFormat("Syncing hooks for cluster {0}", cluster.getname()); + List<VDS> upServers = getClusterUtils().getAllUpServers(cluster.getId()); - List<Callable<Pair<VDS, VDSReturnValue>>> taskList = new ArrayList<Callable<Pair<VDS, VDSReturnValue>>>(); - for (final VDS upServer : upServers) { - taskList.add(new Callable<Pair<VDS, VDSReturnValue>>() { - @Override - public Pair<VDS, VDSReturnValue> call() throws Exception { - VDSReturnValue returnValue =runVdsCommand(VDSCommandType.GlusterHooksList, - new VdsIdVDSCommandParametersBase(upServer.getId())); - return new Pair<VDS, VDSReturnValue>(upServer, returnValue); - } - }); - } - List<Pair<VDS, VDSReturnValue>> pairResults = ThreadPoolUtil.invokeAll(taskList); + if (upServers == null || upServers.isEmpty()) { + return; + } + List<Callable<Pair<VDS, VDSReturnValue>>> taskList = new ArrayList<Callable<Pair<VDS, VDSReturnValue>>>(); + for (final VDS upServer : upServers) { + taskList.add(new Callable<Pair<VDS, VDSReturnValue>>() { + @Override + public Pair<VDS, VDSReturnValue> call() throws Exception { + VDSReturnValue returnValue =runVdsCommand(VDSCommandType.GlusterHooksList, + new VdsIdVDSCommandParametersBase(upServer.getId())); + return new Pair<VDS, VDSReturnValue>(upServer, returnValue); + } + }); + } + List<Pair<VDS, VDSReturnValue>> pairResults = ThreadPoolUtil.invokeAll(taskList); + try { addOrUpdateHooks(cluster.getId(), pairResults); + } catch (VdcBLLException e) { + if (throwError) { + //propogate error to calling application. + throw e; + } } } @@ -203,6 +220,7 @@ } } catch (Exception e) { log.error("Exception in sync", e); + throw new VdcBLLException(VdcBllErrors.GlusterHookListException, e.getLocalizedMessage()); } } @@ -294,7 +312,7 @@ }); } - private void updateHookServerMap(Map<Guid, Set<VDS>> existingHookServersMap, + private void updateHookServerMap(Map<Guid, Set<VDS>> existingHookServersMap, Guid hookId, VDS server) { Set<VDS> hookServers = existingHookServersMap.get(hookId); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommand.java new file mode 100644 index 0000000..4c7e9b5 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommand.java @@ -0,0 +1,66 @@ +package org.ovirt.engine.core.bll.gluster; + +import org.ovirt.engine.core.bll.LockIdNameAttribute; +import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.gluster.GlusterClusterParameters; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.errors.VdcBLLException; +import org.ovirt.engine.core.dal.VdcBllMessages; + +/** + * BLL command to refresh gluster hooks in a cluster + */ +@NonTransactiveCommandAttribute +@LockIdNameAttribute(isWait = true) +public class RefreshGlusterHooksCommand<T extends GlusterClusterParameters> extends GlusterCommandBase<T> { + + public RefreshGlusterHooksCommand(T params) { + super(params); + setVdsGroupId(params.getClusterId()); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REFRESH); + addCanDoActionMessage(VdcBllMessages.VAR__TYPE__GLUSTER_HOOK); + } + + @Override + protected boolean canDoAction() { + if (getParameters().getClusterId() == null) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_IS_NOT_VALID); + return false; + } + + if(!super.canDoAction()) { + return false; + } + + return true; + } + + protected GlusterHookSyncJob getSyncJobInstance() { + return GlusterHookSyncJob.getInstance(); + } + + @Override + protected void executeCommand() { + VDSGroup cluster = getVdsGroupDAO().get(getParameters().getClusterId()); + try { + getSyncJobInstance().refreshHooksInCluster(cluster, true); + setSucceeded(true); + } catch (VdcBLLException e) { + setSucceeded(false); + } + } + + @Override + public AuditLogType getAuditLogTypeValue() { + if (getSucceeded()) { + return AuditLogType.GLUSTER_HOOK_REFRESH; + } else { + return errorType == null ? AuditLogType.GLUSTER_HOOK_REFRESH_FAILED : errorType; + } + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommandTest.java new file mode 100644 index 0000000..b1a4825 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/RefreshGlusterHooksCommandTest.java @@ -0,0 +1,96 @@ +package org.ovirt.engine.core.bll.gluster; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.gluster.GlusterClusterParameters; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.errors.VdcBLLException; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.dao.VdsGroupDAO; + + +@RunWith(MockitoJUnitRunner.class) +public class RefreshGlusterHooksCommandTest { + private static final Guid CLUSTER_ID = Guid.NewGuid(); + /** + * The command under test. + */ + + RefreshGlusterHooksCommand<GlusterClusterParameters> cmd; + + @Mock + private VdsGroupDAO vdsGroupDao; + + @Mock + private GlusterHookSyncJob hookSyncJob; + + public void setupMocks() { + when(vdsGroupDao.get(CLUSTER_ID)).thenReturn(getVdsGroup()); + doReturn(vdsGroupDao).when(cmd).getVdsGroupDAO(); + when(cmd.getSyncJobInstance()).thenReturn(hookSyncJob); + } + + private VDSGroup getVdsGroup() { + VDSGroup cluster = new VDSGroup(); + cluster.setId(CLUSTER_ID); + cluster.setname("TestCluster"); + return cluster; + } + + protected VDS getServer() { + VDS server = new VDS(); + server.setId(Guid.NewGuid()); + server.setVdsName("VDS1"); + server.setStatus(VDSStatus.Up); + server.setVdsGroupId(CLUSTER_ID); + return server; + } + + @Test + public void executeCommand() { + cmd = spy(new RefreshGlusterHooksCommand<GlusterClusterParameters>(new GlusterClusterParameters(CLUSTER_ID))); + setupMocks(); + doNothing().when(hookSyncJob).refreshHooksInCluster(getVdsGroup(),true); + cmd.executeCommand(); + assertEquals(cmd.getAuditLogTypeValue(), AuditLogType.GLUSTER_HOOK_REFRESH); + } + + @Test + public void executeCommandWhenFailed() { + cmd = spy(new RefreshGlusterHooksCommand<GlusterClusterParameters>(new GlusterClusterParameters(CLUSTER_ID))); + setupMocks(); + doThrow(new VdcBLLException()).when(hookSyncJob).refreshHooksInCluster(getVdsGroup(), true); + cmd.executeCommand(); + assertEquals(cmd.getAuditLogTypeValue(), AuditLogType.GLUSTER_HOOK_REFRESH_FAILED); + } + + @Test + public void canDoActionSucceeds() { + cmd = spy(new RefreshGlusterHooksCommand<GlusterClusterParameters>(new GlusterClusterParameters(CLUSTER_ID))); + doReturn(getServer()).when(cmd).getUpServer(); + assertTrue(cmd.canDoAction()); + } + + @Test + public void canDoActionFailsOnNullCluster() { + cmd = spy(new RefreshGlusterHooksCommand<GlusterClusterParameters>(new GlusterClusterParameters(null))); + assertFalse(cmd.canDoAction()); + assertTrue(cmd.getReturnValue().getCanDoActionMessages().contains(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_IS_NOT_VALID.toString())); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index f703017..9b42aa8 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -262,6 +262,8 @@ GLUSTER_HOOK_ADD_FAILED(4062), GLUSTER_HOOK_REMOVED(4063), GLUSTER_HOOK_REMOVE_FAILED(4064), + GLUSTER_HOOK_REFRESH(4065), + GLUSTER_HOOK_REFRESH_FAILED(4066), USER_VDS_RESTART(41), USER_FAILED_VDS_RESTART(107), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index f7c2990..1d32b61 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -238,6 +238,7 @@ UpdateGlusterHook(1416,ActionGroup.MANIPULATE_GLUSTER_HOOK, QuotaDependency.NONE), AddGlusterHook(1417,ActionGroup.MANIPULATE_GLUSTER_HOOK,QuotaDependency.NONE), RemoveGlusterHook(1418,ActionGroup.MANIPULATE_GLUSTER_HOOK,QuotaDependency.NONE), + RefreshGlusterHook(1419, ActionGroup.MANIPULATE_GLUSTER_HOOK, QuotaDependency.NONE), // External events AddExternalEvent(1500, ActionGroup.INJECT_EXTERNAL_EVENTS, QuotaDependency.NONE), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterClusterParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterClusterParameters.java new file mode 100644 index 0000000..33ae721 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/gluster/GlusterClusterParameters.java @@ -0,0 +1,26 @@ +package org.ovirt.engine.core.common.action.gluster; + +import javax.validation.constraints.NotNull; + +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.compat.Guid; + +public class GlusterClusterParameters extends VdcActionParametersBase { + + private static final long serialVersionUID = 2260339638936514331L; + + @NotNull(message = "VALIDATION.GLUSTER.VOLUME.CLUSTER_ID.NOT_NULL") + private final Guid clusterId; + + public GlusterClusterParameters(Guid clusterId) { + super(); + this.clusterId = clusterId; + } + + public Guid getClusterId() { + return clusterId; + } + + + +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java index 79a8de5..405d171 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java @@ -75,6 +75,7 @@ VAR__ACTION__STOP_PROFILE, VAR__ACTION__ENABLE, VAR__ACTION__DISABLE, + VAR__ACTION__REFRESH, // Host statuses replacements VAR__HOST_STATUS__UP, diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java index 285b023..cadcd7f 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java @@ -133,6 +133,8 @@ severities.put(AuditLogType.GLUSTER_HOOK_ADD_FAILED, AuditLogSeverity.ERROR); severities.put(AuditLogType.GLUSTER_HOOK_REMOVED, AuditLogSeverity.NORMAL); severities.put(AuditLogType.GLUSTER_HOOK_REMOVE_FAILED, AuditLogSeverity.ERROR); + severities.put(AuditLogType.GLUSTER_HOOK_REFRESH, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.GLUSTER_HOOK_REFRESH_FAILED, AuditLogSeverity.ERROR); } private static void initDefaultSeverities() { diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index fb910b8..5a59813 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -279,6 +279,7 @@ VAR__ACTION__STOP_PROFILE=$action stop profiling VAR__ACTION__ENABLE=$action enable VAR__ACTION__DISABLE=$action disable +VAR__ACTION__REFRESH=$action refresh VAR__HOST_STATUS__UP=$hostStatus Up VAR__HOST_STATUS__UP_MAINTENANCE_OR_NON_OPERATIONAL=$hostStatus Up, Maintenance or Non operational 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 e2e2513..d5cf2c4 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -622,3 +622,5 @@ GLUSTER_HOOK_ADD_FAILED=Failed to add Gluster Hook ${GlusterHookName} on conflicting servers. ${FailureMessage} GLUSTER_HOOK_REMOVED=Gluster Hook ${GlusterHookName} removed from all servers in cluster ${VdsGroupName}. GLUSTER_HOOK_REMOVE_FAILED=Failed to remove Gluster Hook ${GlusterHookName} from cluster ${VdsGroupName}. ${FailureMessage} +GLUSTER_HOOK_REFRESH=Refreshed gluster hooks in Cluster ${VdsGroupName}. +GLUSTER_HOOK_REFRESH_FAILED=Failed to refresh gluster hooks in Cluster ${VdsGroupName}. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index a5337dd..4a81168 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -760,6 +760,9 @@ @DefaultStringValue("$action assign") String VAR__ACTION__ASSIGN(); + @DefaultStringValue("$action refresh") + String VAR__ACTION__REFRESH(); + @DefaultStringValue("$hostStatus Up") String VAR__HOST_STATUS__UP(); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java index 1249115..532c4e1 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/LocalizedEnums.java @@ -286,6 +286,10 @@ String AuditLogType___GLUSTER_HOOK_REMOVE_FAILED(); + String AuditLogType___GLUSTER_HOOK_REFRESH(); + + String AuditLogType___GLUSTER_HOOK_REFRESH_FAILED(); + String VdcActionType___ActivateVds(); String VdcActionType___RecoveryStoragePool(); @@ -599,6 +603,8 @@ String VdcActionType___RemoveGlusterHook(); + String VdcActionType___RefreshGlusterHook(); + String VdcActionType___ConnectStorageToVds(); String VdcObjectType___AdElements(); diff --git a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties index 858eaf1..74e15f4 100644 --- a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties +++ b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/LocalizedEnums.properties @@ -139,7 +139,8 @@ AuditLogType___GLUSTER_HOOK_ADD_FAILED=Failed to add Gluster Hook on conflicting servers AuditLogType___GLUSTER_HOOK_REMOVED=Removed GLuster Hook AuditLogType___GLUSTER_HOOK_REMOVE_FAILED=Failed to remove Gluster Hook from cluster - +AuditLogType___GLUSTER_HOOK_REFRESH=Gluster Hooks refreshed +AuditLogType___GLUSTER_HOOK_REFRESH_FAILED=Failed to refresh Gluster Hooks VdcActionType___ActivateVds=Activate Host VdcActionType___RecoveryStoragePool=Reinitialize Data Center @@ -271,6 +272,7 @@ VdcActionType___UpdateGlusterHook=Update Gluster Hook VdcActionType___AddGlusterHook=Add Gluster Hook VdcActionType___RemoveGlusterHook=Remove Gluster Hook +VdcActionType___RefreshGlusterHook=Refresh Gluster Hook VdcActionType___ActivateStorageDomain=Activate Storage Domain VdcActionType___FenceVdsManualy=Fence Host Manually VdcActionType___AddEmptyStoragePool=New Data Center diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 28a13ec..c2f7a9a 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -279,6 +279,7 @@ VAR__ACTION__START_PROFILE=$action start profiling VAR__ACTION__STOP_PROFILE=$action stop profiling VAR__ACTION__ASSIGN=$action assign +VAR__ACTION__REFRESH=$action refresh VAR__HOST_STATUS__UP=$hostStatus Up VAR__HOST_STATUS__UP_MAINTENANCE_OR_NON_OPERATIONAL=$hostStatus Up, Maintenance or Non operational -- To view, visit http://gerrit.ovirt.org/15312 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4713ca800432aee302f913d0c8aa06a35a5b2db2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sahina Bose <sab...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches