Alissa Bonas has uploaded a new change for review.

Change subject: restapi: del storage conn if domain creation fails
......................................................................

restapi: del storage conn if domain creation fails

Delete storage connection if storage domain creation fails
in order not to leave leftovers in db from a failed operation.
Note - the connection will be deleted only if it was created as part
of the domain creation call. If it was created in the past and just
reused with its connection id in the domain creation call, then
it will not be deleted.

Change-Id: I1e354cb10e2438fae02b1dff41b2945b016d1e1b
Bug-Url: https://bugzilla.redhat.com/991470
Signed-off-by: Alissa Bonas <[email protected]>
---
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
2 files changed, 29 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/17658/1

diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
index 155c3d0..b78d8cc 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
@@ -76,7 +76,10 @@
     }
 
     private Response addDomain(VdcActionType action, StorageDomain model, 
StorageDomainStatic entity, Guid hostId, StorageServerConnections connection) {
+        Response response = null;
+        boolean isConnNew = false;
         if (connection.getstorage_type().isFileDomain() && 
StringUtils.isEmpty(connection.getid())) {
+                isConnNew = true;
                 connection.setid(addStorageServerConnection(connection, 
hostId));
         }
         entity.setStorage(connection.getid());
@@ -96,7 +99,16 @@
             validateParameters(model, 2, "name");
         }
 
-        return performCreate(action, getAddParams(entity, hostId), 
ID_RESOLVER);
+        try {
+            response = performCreate(action, getAddParams(entity, hostId), 
ID_RESOLVER);
+        } catch (WebFaultException e) {
+            // cleanup of created connection
+            if (isConnNew) {
+                removeStorageServerConnection(connection, hostId);
+            }
+            throw e;
+        }
+        return response;
     }
 
 
@@ -105,9 +117,9 @@
 
         return performCreate(VdcActionType.AddSANStorageDomain,
                                getSanAddParams(entity,
-                                               hostId,
-                                               getLunIds(model.getStorage(), 
storageType, hostId),
-                                               overrideLuns),
+                                       hostId,
+                                       getLunIds(model.getStorage(), 
storageType, hostId),
+                                       overrideLuns),
                                ID_RESOLVER);
     }
 
@@ -168,7 +180,6 @@
         validateEnums(StorageDomain.class, storageDomain);
         Guid hostId = getHostId(storageDomain);
         StorageServerConnections cnx = null;
-
         if (!storageConnectionFromUser.isSetId()) {
              validateParameters(storageDomain, "storage.type");
              cnx = mapToCnx(storageDomain);
@@ -361,6 +372,12 @@
                              String.class);
     }
 
+    private String removeStorageServerConnection(StorageServerConnections cnx, 
Guid hostId) {
+        return performAction(VdcActionType.RemoveStorageServerConnection,
+                             new StorageServerConnectionParametersBase(cnx, 
hostId),
+                             String.class);
+    }
+
     private StorageServerConnections getStorageServerConnection(String id) {
         return getEntity(StorageServerConnections.class,
                          VdcQueryType.GetStorageServerConnectionById,
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
index 8d50cb6..a995f8b 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
@@ -558,6 +558,13 @@
                                            GUIDS[0].toString(),
                                            false));
 
+        setUpActionExpectations(VdcActionType.RemoveStorageServerConnection,
+                                   StorageServerConnectionParametersBase.class,
+                                   new String[] { },
+                                   new Object[] { },
+                                   true,
+                                   true, null, false);
+
         setUpGetEntityExpectations(VdcQueryType.GetExistingStorageDomainList,
                                    
GetExistingStorageDomainListParameters.class,
                                    new String[] { "VdsId", "StorageType", 
"StorageDomainType", "Path" },


-- 
To view, visit http://gerrit.ovirt.org/17658
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1e354cb10e2438fae02b1dff41b2945b016d1e1b
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alissa Bonas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to