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

Reply via email to