Liron Aravot has uploaded a new change for review. Change subject: core: change vdsSpmId related command to support numerous vdss ......................................................................
core: change vdsSpmId related command to support numerous vdss related to bug https://bugzilla.redhat.com/show_bug.cgi?id=771699 currently the different vdsSpmId commands support execution on one vds at a time, which degrades performance. This patch change those commands to support execution on numerous hosts at a time. Change-Id: I7531b9edb763d32b96c58104385349d587de3416 Signed-off-by: Liron Aravot <lara...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java 6 files changed, 73 insertions(+), 55 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/8277/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java index 8251f2a..468089a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java @@ -21,6 +21,7 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.action.VdsActionParameters; +import org.ovirt.engine.core.common.action.VdsSpmIdParameters; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; @@ -105,7 +106,7 @@ // set vds spm id if (getVdsGroup().getstorage_pool_id() != null) { - VdsActionParameters tempVar = new VdsActionParameters(getVdsIdRef().getValue()); + VdsSpmIdParameters tempVar = new VdsSpmIdParameters(Collections.singletonList(getParameters().getVdsStaticData()), getVdsGroup().getstorage_pool_id().getValue()); tempVar.setSessionId(getParameters().getSessionId()); tempVar.setCompensationEnabled(true); CompensationContext compensationContext = getCompensationContext(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java index 0c36238..187ad98 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java @@ -4,7 +4,9 @@ import java.util.List; import java.util.Map; +import org.ovirt.engine.core.common.action.VdsSpmIdParameters; import org.ovirt.engine.core.common.action.VdsActionParameters; +import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.businessentities.vds_spm_id_map; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; @@ -18,7 +20,7 @@ @InternalCommandAttribute @LockIdNameAttribute(isWait = true) -public class AddVdsSpmIdCommand<T extends VdsActionParameters> extends VdsCommand<T> { +public class AddVdsSpmIdCommand<T extends VdsSpmIdParameters> extends VdsCommand<T> { private List<vds_spm_id_map> vds_spm_id_mapList; /** @@ -37,13 +39,13 @@ @Override protected boolean canDoAction() { // check if vds already has vds spm id and storage pool exists - if (Guid.Empty.equals(getVds().getstorage_pool_id()) + if (Guid.Empty.equals(getStoragePoolId()) || DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()) != null) { return false; } vds_spm_id_mapList = DbFacade.getInstance().getVdsSpmIdMapDao().getAll( getVds().getstorage_pool_id()); - if (vds_spm_id_mapList.size() >= Config.<Integer> GetValue(ConfigValues.MaxNumberOfHostsInStoragePool)) { + if (vds_spm_id_mapList.size() + getParameters().getVdss().size() >= Config.<Integer> GetValue(ConfigValues.MaxNumberOfHostsInStoragePool)) { VdcFault fault = new VdcFault(); fault.setError(VdcBllErrors.ReachedMaxNumberOfHostsInDC); fault.setMessage(Backend.getInstance() @@ -57,34 +59,36 @@ @Override protected void executeCommand() { - // according to shaharf the first id is 1 - int selectedId = 1; - List<Integer> map = LinqUtils.foreach(vds_spm_id_mapList, new Function<vds_spm_id_map, Integer>() { - @Override - public Integer eval(vds_spm_id_map vds_spm_id_map) { - return vds_spm_id_map.getvds_spm_id(); + //TODO : this logic should be optimized. + for (VdsStatic vds : getParameters().getVdss()) { + // according to shaharf the first id is 1 + int selectedId = 1; + List<Integer> map = LinqUtils.foreach(vds_spm_id_mapList, new Function<vds_spm_id_map, Integer>() { + @Override + public Integer eval(vds_spm_id_map vds_spm_id_map) { + return vds_spm_id_map.getvds_spm_id(); + } + }); + Collections.sort(map); + for (int id : map) { + if (selectedId == id) { + selectedId++; + } else { + break; + } } - }); - Collections.sort(map); - for (int id : map) { - if (selectedId == id) { - selectedId++; - } else { - break; + vds_spm_id_map newMap = new vds_spm_id_map(getVds().getstorage_pool_id(), getVdsId(), selectedId); + DbFacade.getInstance().getVdsSpmIdMapDao().save(newMap); + if (getParameters().isCompensationEnabled()) { + getCompensationContext().snapshotNewEntity(newMap); + getCompensationContext().stateChanged(); } } - vds_spm_id_map newMap = new vds_spm_id_map(getVds().getstorage_pool_id(), getVdsId(), selectedId); - DbFacade.getInstance().getVdsSpmIdMapDao().save(newMap); - if (getParameters().isCompensationEnabled()) { - getCompensationContext().snapshotNewEntity(newMap); - getCompensationContext().stateChanged(); - } - setSucceeded(true); } @Override protected Map<String, String> getExclusiveLocks() { - return Collections.singletonMap(getVds().getstorage_pool_id().toString(), LockingGroup.REGISTER_VDS.name()); + return Collections.singletonMap(getParameters().getStoragePoolId().toString(), LockingGroup.REGISTER_VDS.name()); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java index 81d7c54..7591b1a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java @@ -13,6 +13,7 @@ import org.ovirt.engine.core.common.action.ChangeVDSClusterParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.action.VdsSpmIdParameters; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; @@ -112,10 +113,13 @@ return; } + VdsSpmIdParameters vdsSpmIdParameters = new VdsSpmIdParameters(); + vdsSpmIdParameters.setVdss(Collections.singletonList(getVds().getStaticData())); if (targetStoragePool != null) { + vdsSpmIdParameters.setStoragePoolId(targetStoragePool.getId()); VdcReturnValueBase addVdsSpmIdReturn = Backend.getInstance().runInternalAction(VdcActionType.AddVdsSpmId, - getParameters(), + vdsSpmIdParameters, new CommandContext(getCompensationContext())); if (!addVdsSpmIdReturn.getSucceeded()) { setSucceeded(false); @@ -154,6 +158,7 @@ getParameters().setCompensationEnabled(true); getParameters().setTransactionScopeOption(TransactionScopeOption.RequiresNew); if (getSourceCluster().getstorage_pool_id() != null) { + vdsSpmIdParameters.setStoragePoolId(getSourceCluster().getstorage_pool_id().getValue()); VdcReturnValueBase removeVdsSpmIdReturn = Backend.getInstance().runInternalAction(VdcActionType.RemoveVdsSpmId, getParameters(), diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java index d40096c..e718b4f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java @@ -1,11 +1,12 @@ package org.ovirt.engine.core.bll; -import org.ovirt.engine.core.common.action.VdsActionParameters; +import org.ovirt.engine.core.common.action.VdsSpmIdParameters; +import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; @InternalCommandAttribute -public class RemoveVdsSpmIdCommand<T extends VdsActionParameters> extends AddVdsSpmIdCommand<T> { +public class RemoveVdsSpmIdCommand<T extends VdsSpmIdParameters> extends AddVdsSpmIdCommand<T> { /** * Constructor for command creation when compensation is applied on startup @@ -22,20 +23,24 @@ @Override protected void executeCommand() { - if (getParameters().isCompensationEnabled()) { - getCompensationContext().snapshotEntity(DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId())); - } + for (VdsStatic vdsStatic : getParameters().getVdss()) { + Guid vdsId = vdsStatic.getId(); + if (getParameters().isCompensationEnabled()) { + getCompensationContext().snapshotEntity(DbFacade.getInstance().getVdsSpmIdMapDao().get(vdsId)); + } - DbFacade.getInstance().getVdsSpmIdMapDao().remove(getVdsId()); - if (getParameters().isCompensationEnabled()) { - getCompensationContext().stateChanged(); + DbFacade.getInstance().getVdsSpmIdMapDao().remove(vdsId); + if (getParameters().isCompensationEnabled()) { + getCompensationContext().stateChanged(); + } } setSucceeded(true); } @Override protected boolean canDoAction() { - // check that there is spm id for this vds - return DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()) != null; + // check that there is spm id for atlease one of the vdss + return !getParameters().getVdss().isEmpty() + && DbFacade.getInstance().getVdsSpmIdMapDao().get(getParameters().getVdss().get(0).getId()) != null; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java index 3d53178..6e6d44b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java @@ -7,6 +7,7 @@ import org.ovirt.engine.core.bll.storage.StorageHandlingCommandBase; import org.ovirt.engine.core.bll.utils.VersionSupport; import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.VdsSpmIdParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.action.VdsActionParameters; @@ -58,26 +59,27 @@ && !oldGroup.getstorage_pool_id().equals(getVdsGroup().getstorage_pool_id()) || oldGroup.getstorage_pool_id() == null && getVdsGroup().getstorage_pool_id() != null) { - for (VdsStatic vds : getVdsStaticDAO().getAllForVdsGroup(oldGroup.getId())) { - VdsActionParameters parameters = new VdsActionParameters(vds.getId()); - if (getVdsGroup().getstorage_pool_id() != null) { - VdcReturnValueBase addVdsSpmIdReturn = - getBackend().runInternalAction(VdcActionType.AddVdsSpmId, parameters); - if (!addVdsSpmIdReturn.getSucceeded()) { - setSucceeded(false); - getReturnValue().setFault(addVdsSpmIdReturn.getFault()); - return; - } + List<VdsStatic> vdsList = getVdsStaticDAO().getAllForVdsGroup(oldGroup.getId()); + VdsSpmIdParameters parameters = new VdsSpmIdParameters(vdsList, getVdsGroup().getstorage_pool_id().getValue()); + if (getVdsGroup().getstorage_pool_id() != null) { + VdcReturnValueBase addVdsSpmIdReturn = + getBackend().runInternalAction(VdcActionType.AddVdsSpmId, parameters); + if (!addVdsSpmIdReturn.getSucceeded()) { + setSucceeded(false); + getReturnValue().setFault(addVdsSpmIdReturn.getFault()); + return; } - if (oldGroup.getstorage_pool_id() != null) { - VdcReturnValueBase removeVdsSpmIdReturn = - getBackend().runInternalAction(VdcActionType.RemoveVdsSpmId, - parameters); - if (!removeVdsSpmIdReturn.getSucceeded()) { - setSucceeded(false); - getReturnValue().setFault(removeVdsSpmIdReturn.getFault()); - return; - } + } + + if (oldGroup.getstorage_pool_id() != null) { + parameters.setStoragePoolId(oldGroup.getstorage_pool_id().getValue()); + VdcReturnValueBase removeVdsSpmIdReturn = + getBackend().runInternalAction(VdcActionType.RemoveVdsSpmId, + parameters); + if (!removeVdsSpmIdReturn.getSucceeded()) { + setSucceeded(false); + getReturnValue().setFault(removeVdsSpmIdReturn.getFault()); + return; } } } 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 2aec786..97f5109 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 @@ -71,6 +71,7 @@ HandleVdsCpuFlagsOrClusterChanged(114), InitVdsOnUp(115), SetNonOperationalVds(117), + AddMultipleVdsSpmId(119), AddVdsSpmId(119), RemoveVdsSpmId(120), // Fencing (including RestartVds above) -- To view, visit http://gerrit.ovirt.org/8277 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7531b9edb763d32b96c58104385349d587de3416 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches