Liron Aravot has uploaded a new change for review. Change subject: core: Validate maximum number of hosts in DC.(#771699) ......................................................................
core: Validate maximum number of hosts in DC.(#771699) http://bugzilla.redhat.com/show_bug.cgi?id=771699 when a host is added, there should be a check whether the maximum number of hosts attached to DC has been exceeded. If max number of hosts is exceeded, user should be presented with an appropriate message. Change-Id: If375400f3e12e3e0452053dea12ac6e28bc0ff61 Signed-off-by: Liron Aravot <lara...@redhat.com> --- 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/UpdateVdsGroupCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java M backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties 5 files changed, 51 insertions(+), 27 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/8321/1 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 03e3c10..c110804 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 @@ -6,6 +6,10 @@ import org.ovirt.engine.core.common.action.VdsActionParameters; 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; +import org.ovirt.engine.core.common.errors.VdcBllErrors; +import org.ovirt.engine.core.common.errors.VdcFault; import org.ovirt.engine.core.common.locks.LockingGroup; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; @@ -13,8 +17,9 @@ import org.ovirt.engine.core.utils.linq.LinqUtils; @InternalCommandAttribute -@LockIdNameAttribute(isWait=true) +@LockIdNameAttribute(isWait = true) public class AddVdsSpmIdCommand<T extends VdsActionParameters> extends VdsCommand<T> { + private List<vds_spm_id_map> vds_spm_id_mapList; /** * Constructor for command creation when compensation is applied on startup @@ -31,17 +36,29 @@ @Override protected boolean canDoAction() { - return !Guid.Empty.equals(getVds().getstorage_pool_id()) - && DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()) == null; + // check if vds already has vds spm id and storage pool exists + if (Guid.Empty.equals(getVds().getstorage_pool_id())) { + 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)) { + VdcFault fault = new VdcFault(); + fault.setError(VdcBllErrors.ReachedMaxNumberOfHostsInDC); + fault.setMessage(Backend.getInstance() + .getVdsErrorsTranslator() + .TranslateErrorTextSingle(fault.getError().toString())); + getReturnValue().setFault(fault); + return false; + } + return true; } @Override protected void executeCommand() { // according to shaharf the first id is 1 int selectedId = 1; - List<vds_spm_id_map> list = DbFacade.getInstance().getVdsSpmIdMapDao().getAll( - getVds().getstorage_pool_id()); - List<Integer> map = LinqUtils.foreach(list, new Function<vds_spm_id_map, Integer>() { + 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(); 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 028d65d..eaad375 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 @@ -111,6 +111,7 @@ setSucceeded(true); return; } + // save the new cluster id TransactionSupport.executeInNewTransaction(new TransactionMethod<Void>() { @Override @@ -123,6 +124,20 @@ return null; } }); + + if (targetStoragePool != null + && (getSourceCluster().getstorage_pool_id()== null || !targetStoragePool.getId().equals(getSourceCluster().getstorage_pool_id().getValue()))) { + VdcReturnValueBase addVdsSpmIdReturn = + Backend.getInstance().runInternalAction(VdcActionType.AddVdsSpmId, + getParameters(), + new CommandContext(getCompensationContext())); + if (!addVdsSpmIdReturn.getSucceeded()) { + setSucceeded(false); + getReturnValue().setFault(addVdsSpmIdReturn.getFault()); + return; + } + } + if (getSourceCluster().supportsGlusterService() && getClusterUtils().hasServers(getSourceCluster().getId())) { if (!glusterHostRemove(getSourceCluster().getId())) { @@ -140,7 +155,8 @@ // handle spm getParameters().setCompensationEnabled(true); getParameters().setTransactionScopeOption(TransactionScopeOption.RequiresNew); - if (getSourceCluster().getstorage_pool_id() != null) { + if (getSourceCluster().getstorage_pool_id() != null + && (targetStoragePool== null || !getSourceCluster().getstorage_pool_id().getValue().equals(targetStoragePool.getId()))) { VdcReturnValueBase removeVdsSpmIdReturn = Backend.getInstance().runInternalAction(VdcActionType.RemoveVdsSpmId, getParameters(), @@ -152,17 +168,6 @@ } } - if (targetStoragePool != null) { - VdcReturnValueBase addVdsSpmIdReturn = - Backend.getInstance().runInternalAction(VdcActionType.AddVdsSpmId, - getParameters(), - new CommandContext(getCompensationContext())); - if (!addVdsSpmIdReturn.getSucceeded()) { - setSucceeded(false); - getReturnValue().setFault(addVdsSpmIdReturn.getFault()); - return; - } - } setSucceeded(true); } 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 7c2e689..3d53178 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 @@ -60,6 +60,15 @@ && 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; + } + } if (oldGroup.getstorage_pool_id() != null) { VdcReturnValueBase removeVdsSpmIdReturn = getBackend().runInternalAction(VdcActionType.RemoveVdsSpmId, @@ -67,15 +76,6 @@ if (!removeVdsSpmIdReturn.getSucceeded()) { setSucceeded(false); getReturnValue().setFault(removeVdsSpmIdReturn.getFault()); - return; - } - } - if (getVdsGroup().getstorage_pool_id() != null) { - VdcReturnValueBase addVdsSpmIdReturn = - getBackend().runInternalAction(VdcActionType.AddVdsSpmId, parameters); - if (!addVdsSpmIdReturn.getSucceeded()) { - setSucceeded(false); - getReturnValue().setFault(addVdsSpmIdReturn.getFault()); return; } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java index d5a3492..fb4fe2a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java @@ -306,6 +306,7 @@ ImportInfoError(801), ImportUnknownType(802), ExportError(803), + ReachedMaxNumberOfHostsInDC(804), ResourceNamespaceNotEmpty(850), ResourceTimeout(851), ResourceDoesNotExist(852), diff --git a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties index fb309e7..92036ad 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties @@ -237,6 +237,7 @@ CannotRetrieveSpmStatus=Cannot retrieve SPM status, master domain probably unavailable FileStorageDomainStaleNFSHandle=Stale NFS handle on underlying NFS server InvalidJob=Job is invalid +ReachedMaxNumberOfHostsInDC=The maximum number of Hosts allowed in the Data Center has been reached InvalidPhysDev=Invalid physical device PartitionedPhysDev=Partitioned physical device InvalidRecovery=Recovery is invalid -- To view, visit http://gerrit.ovirt.org/8321 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If375400f3e12e3e0452053dea12ac6e28bc0ff61 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