Libor Spevak has uploaded a new change for review. Change subject: webadmin: Show migrating VM on destination host ......................................................................
webadmin: Show migrating VM on destination host Show a migrating VM both on the source host (status Migrating From) as well as on the destination host (Migrating To). Change-Id: Iae8228e4a6e9e7e91b8224f0ef2764c5e4e25cfa Bug-Url: https://bugzilla.redhat.com/881593 Signed-off-by: Libor Spevak <[email protected]> --- M backend/manager/dbscripts/vms_sp.sql A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQueryTest.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmsRunningOnOrMigratingToVdsParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java 10 files changed, 176 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/12878/1 diff --git a/backend/manager/dbscripts/vms_sp.sql b/backend/manager/dbscripts/vms_sp.sql index 0d7773c..6a22360 100644 --- a/backend/manager/dbscripts/vms_sp.sql +++ b/backend/manager/dbscripts/vms_sp.sql @@ -826,6 +826,22 @@ +Create or replace FUNCTION GetVmsRunningOnOrMigratingToVds(v_vds_id UUID) RETURNS SETOF vms + AS $procedure$ +BEGIN + -- use migrating_to_vds column when the VM in status Migrating From + RETURN QUERY SELECT DISTINCT * FROM VMS V + WHERE V.RUN_ON_VDS=V_VDS_ID OR (V.STATUS = 5 AND V.MIGRATING_TO_VDS=V_VDS_ID) + ORDER BY V.VM_NAME + LIMIT 100; +END; $procedure$ +LANGUAGE plpgsql; + + + + + + Create or replace FUNCTION GetVmsDynamicRunningOnVds(v_vds_id UUID) RETURNS SETOF vm_dynamic AS $procedure$ BEGIN diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQuery.java new file mode 100644 index 0000000..6bf1b5e --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQuery.java @@ -0,0 +1,16 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.GetVmsRunningOnOrMigratingToVdsParameters; + +public class GetVmsRunningOnOrMigratingToVdsQuery <P extends GetVmsRunningOnOrMigratingToVdsParameters> extends QueriesCommandBase<P> { + public GetVmsRunningOnOrMigratingToVdsQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue( + getDbFacade().getVmDao().getAllRunningOnOrMigratingToVds(getParameters().getId())); + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQueryTest.java new file mode 100644 index 0000000..8c6f244 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsRunningOnOrMigratingToVdsQueryTest.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.core.bll; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Collections; +import java.util.List; + +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.queries.GetVmsRunningOnOrMigratingToVdsParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VmDAO; + +/** + * A test case for {@link GetVmsRunningOnOrMigratingToVdsQuery}. This test mocks away all the DAOs, and just tests the + * flow of the query itself. + */ +public class GetVmsRunningOnOrMigratingToVdsQueryTest + extends AbstractQueryTest<GetVmsRunningOnOrMigratingToVdsParameters, + GetVmsRunningOnOrMigratingToVdsQuery<GetVmsRunningOnOrMigratingToVdsParameters>> { + + @Test + public void testQueryExecution() { + Guid vmGuid = Guid.NewGuid(); + + VM vm = new VM(); + vm.setId(vmGuid); + + List<VM> expected = Collections.singletonList(vm); + VmDAO vmDAOMock = mock(VmDAO.class); + when(vmDAOMock.getAllRunningOnOrMigratingToVds(vmGuid)).thenReturn(expected); + when(getDbFacadeMockInstance().getVmDao()).thenReturn(vmDAOMock); + // Set up the query parameters + when(getQueryParameters().getId()).thenReturn(vmGuid); + + getQuery().executeQueryCommand(); + + @SuppressWarnings("unchecked") + List<VM> actual = (List<VM>) getQuery().getQueryReturnValue().getReturnValue(); + assertEquals("Wrong number of VMs", 1, actual.size()); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmsRunningOnOrMigratingToVdsParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmsRunningOnOrMigratingToVdsParameters.java new file mode 100644 index 0000000..ed2f117 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmsRunningOnOrMigratingToVdsParameters.java @@ -0,0 +1,26 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.compat.Guid; + +public class GetVmsRunningOnOrMigratingToVdsParameters extends VdcQueryParametersBase { + + private static final long serialVersionUID = 5129010056629518621L; + + private Guid id; + + public GetVmsRunningOnOrMigratingToVdsParameters() { + } + + public GetVmsRunningOnOrMigratingToVdsParameters(Guid id) { + this.id = id; + } + + public Guid getId() { + return id; + } + + public void setId(Guid id) { + this.id = id; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 5b879fd..b399e4f 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -9,6 +9,7 @@ GetAllVms(VdcQueryAuthType.User), GetVmsRunningOnVDS, GetVmsRunningOnVDSCount, + GetVmsRunningOnOrMigratingToVds, GetTopSizeVmsFromStorageDomain, GetVmCustomProperties(VdcQueryAuthType.User), GetVmConfigurationBySnapshot(VdcQueryAuthType.User), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java index e7318e0..422fcb7 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java @@ -108,6 +108,15 @@ List<VM> getAllRunningForVds(Guid vds); /** + * Gets the list of virtual machines running on or migrating to the specified VDS instance. + * + * @param vds + * the VDS id + * @return the list of VMs + */ + List<VM> getAllRunningOnOrMigratingToVds(Guid vds); + + /** * Returns the list of virtual machines running on the specified VDS instance. * * @param vds diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java index ba29bcc..0bc799e 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java @@ -123,6 +123,14 @@ } @Override + public List<VM> getAllRunningOnOrMigratingToVds(Guid id) { + return getCallsHandler().executeReadList("GetVmsRunningOnOrMigratingToVds", + VMRowMapper.instance, + getCustomMapSqlParameterSource() + .addValue("vds_id", id)); + } + + @Override public Map<Guid, VM> getAllRunningByVds(Guid id) { HashMap<Guid, VM> map = new HashMap<Guid, VM>(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index 0ad85c2..f503525 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -84,6 +84,7 @@ import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.GetVmTemplatesByStoragePoolIdParameters; import org.ovirt.engine.core.common.queries.GetVmTemplatesDisksParameters; +import org.ovirt.engine.core.common.queries.GetVmsRunningOnOrMigratingToVdsParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.InterfaceAndIdQueryParameters; import org.ovirt.engine.core.common.queries.IsVmPoolWithSameNameExistsParameters; @@ -1920,6 +1921,21 @@ Frontend.RunQuery(VdcQueryType.GetAllVmSnapshotsByVmId, new GetAllVmSnapshotsByVmIdParameters(id), aQuery); } + public static void GetVmsRunningOnOrMigratingToVds(AsyncQuery aQuery, Guid id) { + aQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + ArrayList<VM> vms = (ArrayList<VM>) source; + return vms; + } + }; + + Frontend.RunQuery(VdcQueryType.GetVmsRunningOnOrMigratingToVds, + new GetVmsRunningOnOrMigratingToVdsParameters(id), + aQuery); + } + public static void GetVmDiskList(AsyncQuery aQuery, Guid id) { aQuery.converterCallback = new IAsyncConverter() { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java index 57038af..4dd5f43 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java @@ -1,13 +1,17 @@ package org.ovirt.engine.ui.uicommonweb.models.hosts; +import java.util.ArrayList; + import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.vms.VmListModel; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; -@SuppressWarnings("unused") public class HostVmListModel extends VmListModel { - @Override public VDS getEntity() { @@ -20,19 +24,43 @@ } @Override + protected void AsyncSearch() + { + Search(); + } + + @Override + protected void SyncSearch() + { + Search(); + } + + @Override protected void OnEntityChanged() { super.OnEntityChanged(); - getSearchCommand().Execute(); + Search(); } @Override public void Search() { + // Override standard search query mechanism. + // Dduring the migration, the host should be visible on source host (Migrating From), and also + // on destination host (Migrating To) if (getEntity() != null) { - setSearchString("Vms: host.name=" + getEntity().getName()); //$NON-NLS-1$ - super.Search(); + AsyncDataProvider.GetVmsRunningOnOrMigratingToVds(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void OnSuccess(Object target, Object returnValue) { + @SuppressWarnings("unchecked") + ArrayList<VM> list = (ArrayList<VM>) returnValue; + HostVmListModel model = (HostVmListModel) target; + model.setItems(list); + } + }), getEntity().getId()); + } else { + setItems(new ArrayList<VM>()); } } @@ -43,7 +71,7 @@ if (e.PropertyName.equals("vds_name")) //$NON-NLS-1$ { - getSearchCommand().Execute(); + Search(); } } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java index a57d966..9b5e729 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java @@ -99,6 +99,12 @@ TextColumnWithTooltip<VM> statusColumn = new EnumColumn<VM, VMStatus>() { @Override protected VMStatus getRawValue(VM object) { + // check, if the current host is a target for the migration, then override status + final VDS vds = getDetailModel().getEntity(); + if (object.getStatus().equals(VMStatus.MigratingFrom) && vds.getId().equals(object.getmigrating_to_vds())) { + return VMStatus.MigratingTo; + } + return object.getStatus(); } }; -- To view, visit http://gerrit.ovirt.org/12878 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iae8228e4a6e9e7e91b8224f0ef2764c5e4e25cfa Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Libor Spevak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
