Mike Kolesnik has uploaded a new change for review. Change subject: engine: Lock add network method ......................................................................
engine: Lock add network method Add network command should be locked on network name to prevent a case when multiple networks with the same name are being added. Change-Id: Ie7b366432cf946eb5ec8ab1ffd36a97837ff226a Bug-Url: https://bugzilla.redhat.com/990100 Signed-off-by: Mike Kolesnik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 7 files changed, 28 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/65/18965/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java index 385c6a3..1ba4841 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/AddNetworkCommand.java @@ -2,7 +2,10 @@ import java.util.Collections; import java.util.List; +import java.util.Map; +import org.ovirt.engine.core.bll.LockIdNameAttribute; +import org.ovirt.engine.core.bll.LockMessagesMatchUtil; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.network.cluster.NetworkHelper; import org.ovirt.engine.core.bll.provider.ProviderValidator; @@ -13,10 +16,13 @@ import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.common.locks.LockingGroup; +import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; +@LockIdNameAttribute public class AddNetworkCommand<T extends AddNetworkStoragePoolParameters> extends NetworkCommon<T> { public AddNetworkCommand(T parameters) { super(parameters); @@ -84,6 +90,20 @@ VdcObjectType.StoragePool, getActionType().getActionGroup())); } + @Override + protected Map<String, Pair<String, String>> getExclusiveLocks() { + if (getNetworkName() == null) { + return null; + } + + Map<String, Pair<String, String>> locks = Collections.singletonMap( + getNetworkName(), + LockMessagesMatchUtil.makeLockingPair(LockingGroup.NETWORK, + VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_IS_USED)); + + return locks; + } + protected static class AddNetworkValidator extends NetworkValidator { public AddNetworkValidator(Network network) { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index e1912a2..17b53ae 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -546,6 +546,7 @@ /** @deprecated as it is too general error message */ @Deprecated ACTION_TYPE_FAILED_OBJECT_LOCKED(ErrorType.CONFLICT), + ACTION_TYPE_FAILED_NETWORK_IS_USED(ErrorType.CONFLICT), ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM(ErrorType.CONFLICT), ACTION_TYPE_FAILED_SNAPSHOT_IS_BEING_TAKEN_FOR_VM(ErrorType.CONFLICT), ACTION_TYPE_FAILED_DISK_IS_USED_FOR_CREATE_VM(ErrorType.CONFLICT), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java index 21aa1b1..9dee2c8 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/locks/LockingGroup.java @@ -11,6 +11,7 @@ DISK, VM_DISK_BOOT, VM_NAME, + NETWORK, STORAGE, STORAGE_CONNECTION, REGISTER_VDS, 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 0645ba1..4851d3d 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -564,6 +564,7 @@ ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT=Cannot ${action} ${type}. Selected data center compatibility version does not support live snapshot. NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when using static IP ACTION_TYPE_FAILED_OBJECT_LOCKED=Cannot ${action} ${type}. Related operation is currently in progress. Please try again later. +ACTION_TYPE_FAILED_NETWORK_IS_USED=Cannot ${action} ${type}. The network is currently in use. Please wait and try again later. ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. This template is currently in use to create VM ${VmName}. ACTION_TYPE_FAILED_SNAPSHOT_IS_BEING_TAKEN_FOR_VM=Cannot ${action} ${type}. Snapshot is currently being created for VM ${VmName}. ACTION_TYPE_FAILED_DISK_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. This disk is currently in use to create VM ${VmName}. 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 5dca8ae..f782f87 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 @@ -1531,6 +1531,9 @@ @DefaultStringValue("Cannot ${action} ${type}. Related operation is currently in progress. Please try again later.") String ACTION_TYPE_FAILED_OBJECT_LOCKED(); + @DefaultStringValue("Cannot ${action} ${type}. The network is currently in use. Please wait and try again later.") + String ACTION_TYPE_FAILED_NETWORK_IS_USED(); + @DefaultStringValue("Cannot ${action} ${type}. This template is currently in use to create VM ${VmName}.") String ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 3672431..5980ddf 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -550,6 +550,7 @@ ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT=Cannot ${action} ${type}. Selected data center compatibility version does not support live snapshot. NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when using static ip ACTION_TYPE_FAILED_OBJECT_LOCKED=Cannot ${action} ${type}. Related operation is currently in progress. Please try again later. +ACTION_TYPE_FAILED_NETWORK_IS_USED=Cannot ${action} ${type}. The network is currently in use. Please wait and try again later. ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. This template is currently in use to create VM ${VmName}. ACTION_TYPE_FAILED_SNAPSHOT_IS_BEING_TAKEN_FOR_VM=Cannot ${action} ${type}. Snapshot is currently being created for VM ${VmName}. ACTION_TYPE_FAILED_DISK_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. This disk is currently in use to create VM ${VmName}. 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 eaf845d..5fa0753 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 @@ -568,6 +568,7 @@ ACTION_TYPE_FAILED_DATA_CENTER_VERSION_DOESNT_SUPPORT_LIVE_SNAPSHOT=Cannot ${action} ${type}. Selected data center compatibility version does not support live snapshot. NETWORK_ADDR_MANDATORY_IN_STATIC_IP=Network address must be specified when using static ip ACTION_TYPE_FAILED_OBJECT_LOCKED=Cannot ${action} ${type}. Related operation is currently in progress. Please try again later. +ACTION_TYPE_FAILED_NETWORK_IS_USED=Cannot ${action} ${type}. The network is currently in use. Please wait and try again later. ACTION_TYPE_FAILED_TEMPLATE_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. This template is currently in use to create VM ${VmName}. ACTION_TYPE_FAILED_SNAPSHOT_IS_BEING_TAKEN_FOR_VM=Cannot ${action} ${type}. Snapshot is currently being created for VM ${VmName}. ACTION_TYPE_FAILED_DISK_IS_USED_FOR_CREATE_VM=Cannot ${action} ${type}. This disk is currently in use to create VM ${VmName}. -- To view, visit http://gerrit.ovirt.org/18965 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie7b366432cf946eb5ec8ab1ffd36a97837ff226a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Mike Kolesnik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
