Alissa Bonas has uploaded a new change for review. Change subject: core: check if same storage connection exists ......................................................................
core: check if same storage connection exists Check in Add/Update storage connection whether the same storage connection already exists. The check was present for file domains only in AddStorageConnection command, and now it is expanded to check for block domains as well, and is also used by the UpdateStorageServerConnection. Also moved the code to a parent command to allow code reuse, and added corresponding unitests. Change-Id: I0cfc642c49ab4fc482c5d1fabc28fad0ae79d2f4 Signed-off-by: Alissa Bonas <abo...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageServerConnectionCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommandTest.java 5 files changed, 153 insertions(+), 41 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/37/16037/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommand.java index 0f557c3..11a6bad 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommand.java @@ -52,7 +52,7 @@ } protected StorageServerConnections getConnectionFromDbById(String connectionId) { - return getDbFacade().getStorageServerConnectionDao().get(connectionId); + return getStorageConnDao().get(connectionId); } protected Pair<Boolean, Integer> connectHostToStorage() { @@ -63,11 +63,6 @@ protected void saveConnection(StorageServerConnections connection) { getDbFacade().getStorageServerConnectionDao().save(connection); - } - - protected boolean isConnWithSameDetailsExists() { - String connection = getConnection().getconnection(); - return getDbFacade().getStorageServerConnectionDao().getAllForStorage(connection).size() != 0; } @Override @@ -94,10 +89,10 @@ } if (checkIsConnectionFieldEmpty(paramConnection)) { - return false; + return false; } - if (isConnWithSameDetailsExists()) { + if (isConnWithSameDetailsExists(getConnection())) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ALREADY_EXISTS); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageServerConnectionCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageServerConnectionCommandBase.java index d2cb6f8..9890e9b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageServerConnectionCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/StorageServerConnectionCommandBase.java @@ -11,6 +11,7 @@ import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.StorageDomainDAO; +import org.ovirt.engine.core.dao.StorageServerConnectionDAO; public abstract class StorageServerConnectionCommandBase<T extends StorageServerConnectionParametersBase> extends StorageHandlingCommandBase<T> { @@ -33,7 +34,30 @@ return getDbFacade().getStorageDomainDao(); } + protected StorageServerConnectionDAO getStorageConnDao() { + return getDbFacade().getStorageServerConnectionDao(); + } + protected List<StorageDomain> getStorageDomainsByConnId(String connectionId) { return getStorageDomainDao().getAllByConnectionId(Guid.createGuidFromString(connectionId)); } + + protected boolean isConnWithSameDetailsExists(StorageServerConnections connection) { + List<StorageServerConnections> connections = null; + if (connection.getstorage_type().isFileDomain()) { + String connectionField = connection.getconnection(); + connections = getStorageConnDao().getAllForStorage(connectionField); + } + else { + connections = getStorageConnDao().getAllForConnection(connection); + } + + if (connections.size() > 1 + || (connections.size() == 1 && !connections.get(0).getid().equalsIgnoreCase(connection.getid()))) { + return true; + } + else { + return false; + } + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java index caf9aa4..363d2d0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java @@ -30,10 +30,8 @@ import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; - import org.ovirt.engine.core.dao.StorageDomainDynamicDAO; import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO; -import org.ovirt.engine.core.dao.StorageServerConnectionDAO; import org.ovirt.engine.core.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; @@ -67,7 +65,7 @@ } if (checkIsConnectionFieldEmpty(newConnectionDetails)) { - return false; + return false; } Guid vdsmId = getParameters().getVdsId(); @@ -88,13 +86,8 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_UNSUPPORTED_CHANGE_STORAGE_TYPE); } - if (!oldConnection.getconnection().equals(newConnectionDetails.getconnection())) { - // Check that there is no other connection with the new suggested path - List<StorageServerConnections> connections = - getStorageConnDao().getAllForStorage(newConnectionDetails.getconnection()); - if (!connections.isEmpty()) { - return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ALREADY_EXISTS); - } + if (isConnWithSameDetailsExists(getConnection())) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ALREADY_EXISTS); } if (domains == null) { @@ -119,7 +112,6 @@ return super.canDoAction(); } - protected String createDomainNamesList(List<StorageDomain> domains) { // Build domain names list to display in the error @@ -243,10 +235,6 @@ return newConnectionParametersForVdsm; } - protected StorageServerConnectionDAO getStorageConnDao() { - return getDbFacade().getStorageServerConnectionDao(); - } - protected StorageDomainDynamicDAO getStorageDomainDynamicDao() { return getDbFacade().getStorageDomainDynamicDao(); } @@ -254,8 +242,6 @@ protected StoragePoolIsoMapDAO getStoragePoolIsoMapDao() { return getDbFacade().getStoragePoolIsoMapDao(); } - - @Override protected Map<String, Pair<String, String>> getExclusiveLocks() { diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommandTest.java index bc9016b..ae1dea8 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddStorageServerConnectionCommandTest.java @@ -82,7 +82,7 @@ parameters.setStorageServerConnection(newPosixConnection); parameters.setVdsId(Guid.Empty); parameters.setStoragePoolId(Guid.Empty); - doReturn(false).when(command).isConnWithSameDetailsExists(); + doReturn(false).when(command).isConnWithSameDetailsExists(newPosixConnection); doReturn(true).when(command).initializeVds(); CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); } @@ -105,7 +105,7 @@ parameters.setVdsId(Guid.Empty); parameters.setStoragePoolId(Guid.Empty); doReturn(true).when(command).initializeVds(); - doReturn(false).when(command).isConnWithSameDetailsExists(); + doReturn(false).when(command).isConnWithSameDetailsExists(newISCSIConnection); CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); } @@ -130,7 +130,7 @@ parameters.setStorageServerConnection(newPosixConnection); parameters.setVdsId(Guid.Empty); doReturn(true).when(command).initializeVds(); - doReturn(true).when(command).isConnWithSameDetailsExists(); + doReturn(true).when(command).isConnWithSameDetailsExists(newPosixConnection); CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ALREADY_EXISTS); } @@ -146,11 +146,12 @@ parameters.setStorageServerConnection(newPosixConnection); parameters.setVdsId(Guid.Empty); doReturn(true).when(command).initializeVds(); - doReturn(false).when(command).isConnWithSameDetailsExists(); + doReturn(false).when(command).isConnWithSameDetailsExists(newPosixConnection); Pair<Boolean, Integer> connectResult = new Pair(true, 0); doReturn(connectResult).when(command).connectHostToStorage(); doReturn(null).when(command).getConnectionFromDbById(newPosixConnection.getid()); doNothing().when(command).saveConnection(newPosixConnection); + command.executeCommand(); CommandAssertUtils.checkSucceeded(command, true); } @@ -166,7 +167,7 @@ parameters.setStorageServerConnection(newPosixConnection); parameters.setVdsId(Guid.Empty); doReturn(true).when(command).initializeVds(); - doReturn(true).when(command).isConnWithSameDetailsExists(); + doReturn(true).when(command).isConnWithSameDetailsExists(newPosixConnection); CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ID_NOT_EMPTY); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommandTest.java index ebe3d8f..0ef566f 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommandTest.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll.storage; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -111,6 +112,16 @@ return connectionDetails; } + private StorageServerConnections createISCSIConnection(String connection, StorageType type, String iqn, String user, String password) { + Guid id = Guid.NewGuid(); + StorageServerConnections connectionDetails = populateBasicConnectionDetails(id, connection, type); + connectionDetails.setiqn(iqn); + connectionDetails.setuser_name(user); + connectionDetails.setpassword(password); + return connectionDetails; + } + + private StorageServerConnections populateBasicConnectionDetails(Guid id, String connection, StorageType type) { StorageServerConnections connectionDetails = new StorageServerConnections(); connectionDetails.setid(id.toString()); @@ -150,11 +161,11 @@ @Test public void updateIScsiConnection() { StorageServerConnections newNFSConnection = createNFSConnection( - "multipass.my.domain.tlv.company.com:/export/allstorage/data2", - StorageType.ISCSI, - NfsVersion.V4, - 300, - 0); + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.ISCSI, + NfsVersion.V4, + 300, + 0); parameters.setStorageServerConnection(newNFSConnection); CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_UNSUPPORTED_ACTION_FOR_STORAGE); @@ -231,6 +242,7 @@ connections.add(conn2); when(storageConnDao.getAllForStorage(newNFSConnection.getconnection())).thenReturn(connections); when(storageConnDao.get(newNFSConnection.getid())).thenReturn(oldNFSConnection); + doReturn(true).when(command).isConnWithSameDetailsExists(newNFSConnection); CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_ALREADY_EXISTS); } @@ -257,6 +269,7 @@ domains.add(domain2); when(storageConnDao.get(newNFSConnection.getid())).thenReturn(oldNFSConnection); doReturn(domains).when(command).getStorageDomainsByConnId(newNFSConnection.getid()); + doReturn(false).when(command).isConnWithSameDetailsExists(newNFSConnection); List<String> messages = CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_BELONGS_TO_SEVERAL_STORAGE_DOMAINS); @@ -279,6 +292,7 @@ parameters.setStorageServerConnection(newNFSConnection); when(storageConnDao.get(newNFSConnection.getid())).thenReturn(oldNFSConnection); doReturn(domains).when(command).getStorageDomainsByConnId(newNFSConnection.getid()); + doReturn(false).when(command).isConnWithSameDetailsExists(newNFSConnection); CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_UNSUPPORTED_ACTION_FOR_STORAGE); } @@ -295,6 +309,7 @@ List<StorageDomain> domains = new ArrayList<StorageDomain>(); when(storageConnDao.get(newNFSConnection.getid())).thenReturn(oldNFSConnection); doReturn(domains).when(command).getStorageDomainsByConnId(newNFSConnection.getid()); + doReturn(false).when(command).isConnWithSameDetailsExists(newNFSConnection); CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_EXIST); } @@ -302,11 +317,11 @@ @Test public void succeedCanDoActionNFS() { StorageServerConnections newNFSConnection = createNFSConnection( - "multipass.my.domain.tlv.company.com:/export/allstorage/data2", - StorageType.NFS, - NfsVersion.V4, - 300, - 0); + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.NFS, + NfsVersion.V4, + 300, + 0); parameters.setStorageServerConnection(newNFSConnection); List<StorageDomain> domains = new ArrayList<StorageDomain>(); StorageDomain domain1 = new StorageDomain(); @@ -314,13 +329,14 @@ domain1.setStatus(StorageDomainStatus.Maintenance); domains.add(domain1); when(storageConnDao.get(newNFSConnection.getid())).thenReturn(oldNFSConnection); + doReturn(false).when(command).isConnWithSameDetailsExists(newNFSConnection); doReturn(domains).when(command).getStorageDomainsByConnId(newNFSConnection.getid()); CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); } @Test public void succeedCanDoActionPosix() { - StorageServerConnections newPosixConnection = createPosixConnection("multipass.my.domain.tlv.company.com:/export/allstorage/data1", StorageType.POSIXFS, "nfs" , "timeo=30"); + StorageServerConnections newPosixConnection = createPosixConnection("multipass.my.domain.tlv.company.com:/export/allstorage/data1", StorageType.POSIXFS, "nfs", "timeo=30"); parameters.setStorageServerConnection(newPosixConnection); List<StorageDomain> domains = new ArrayList<StorageDomain>(); StorageDomain domain1 = new StorageDomain(); @@ -330,6 +346,7 @@ parameters.setStorageServerConnection(newPosixConnection); when(storageConnDao.get(newPosixConnection.getid())).thenReturn(oldPosixConnection); doReturn(domains).when(command).getStorageDomainsByConnId(newPosixConnection.getid()); + doReturn(false).when(command).isConnWithSameDetailsExists(newPosixConnection); CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command); } @@ -407,4 +424,93 @@ verify(storageConnDao, never()).update(newNFSConnection); } + @Test + public void isConnWithSameDetailsExistFileDomains() { + StorageServerConnections newNFSConnection = createNFSConnection( + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.NFS, + NfsVersion.V4, + 300, + 0); + + List<StorageServerConnections> connections = new ArrayList<>(); + StorageServerConnections connection1 = createNFSConnection( + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.NFS, + NfsVersion.V4, + 300, + 0); + connections.add(connection1); + StorageServerConnections connection2 = createNFSConnection( + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.NFS, + NfsVersion.V4, + 600, + 0); + connections.add(connection2); + + when(storageConnDao.getAllForStorage(newNFSConnection.getconnection())).thenReturn(connections); + boolean isExists = command.isConnWithSameDetailsExists(newNFSConnection); + assertTrue(isExists); + } + + @Test + public void isConnWithSameDetailsExistSameConnection() { + StorageServerConnections newNFSConnection = createNFSConnection( + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.NFS, + NfsVersion.V4, + 300, + 0); + + List<StorageServerConnections> connections = new ArrayList<>(); + StorageServerConnections connection1 = newNFSConnection; + connections.add(connection1); + + when(storageConnDao.getAllForStorage(newNFSConnection.getconnection())).thenReturn(connections); + boolean isExists = command.isConnWithSameDetailsExists(newNFSConnection); + assertFalse(isExists); + } + + @Test + public void isConnWithSameDetailsExistNoConnections() { + StorageServerConnections newNFSConnection = createNFSConnection( + "multipass.my.domain.tlv.company.com:/export/allstorage/data2", + StorageType.NFS, + NfsVersion.V4, + 300, + 0); + + List<StorageServerConnections> connections = new ArrayList<>(); + + when(storageConnDao.getAllForStorage(newNFSConnection.getconnection())).thenReturn(connections); + boolean isExists = command.isConnWithSameDetailsExists(newNFSConnection); + assertFalse(isExists); + } + + @Test + public void isConnWithSameDetailsExistBlockDomains() { + StorageServerConnections newISCSIConnection = createISCSIConnection("1.2.3.4", StorageType.ISCSI,"iqn.2013-04.myhat.com:aaa-target1","user1","mypassword123"); + + List<StorageServerConnections> connections = new ArrayList<>(); + StorageServerConnections connection1 = createISCSIConnection("1.2.3.4", StorageType.ISCSI,"iqn.2013-04.myhat.com:aaa-target1","user1","mypassword123"); + connections.add(connection1); + + when(storageConnDao.getAllForConnection(newISCSIConnection)).thenReturn(connections); + boolean isExists = command.isConnWithSameDetailsExists(newISCSIConnection); + assertTrue(isExists); + } + + @Test + public void isConnWithSameDetailsExistCheckSameConn() { + StorageServerConnections newISCSIConnection = createISCSIConnection("1.2.3.4", StorageType.ISCSI,"iqn.2013-04.myhat.com:aaa-target1","user1","mypassword123"); + + List<StorageServerConnections> connections = new ArrayList<>(); + connections.add(newISCSIConnection); + + when(storageConnDao.getAllForConnection(newISCSIConnection)).thenReturn(connections); + boolean isExists = command.isConnWithSameDetailsExists(newISCSIConnection); + assertFalse(isExists); + } + } -- To view, visit http://gerrit.ovirt.org/16037 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0cfc642c49ab4fc482c5d1fabc28fad0ae79d2f4 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alissa Bonas <abo...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches