From b266c757d244c97b7e407b4e23b8d2de5c9d6e30 Mon Sep 17 00:00:00 2001 From: Rakesh Date: Thu, 29 Oct 2020 08:53:33 +0100 Subject: [PATCH 1/2] Unable to create snapshot from vm snapshot (#4432) Co-authored-by: Rakesh Venkatesh --- .../java/com/cloud/storage/snapshot/SnapshotManagerImpl.java | 2 +- .../java/com/cloud/storage/snapshot/SnapshotManagerTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 2392dfa9ca0..5402b0f5255 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -464,7 +464,7 @@ public class SnapshotManagerImpl extends MutualExclusiveIdsManagerBase implement } SnapshotInfo snapshotInfo = this.snapshotFactory.getSnapshot(snapshotId, store); snapshotInfo = (SnapshotInfo)store.create(snapshotInfo); - SnapshotDataStoreVO snapshotOnPrimaryStore = this._snapshotStoreDao.findBySnapshot(snapshot.getId(), store.getRole()); + SnapshotDataStoreVO snapshotOnPrimaryStore = this._snapshotStoreDao.findByStoreSnapshot(store.getRole(), store.getId(), snapshot.getId()); snapshotOnPrimaryStore.setState(ObjectInDataStoreStateMachine.State.Ready); snapshotOnPrimaryStore.setInstallPath(vmSnapshot.getName()); _snapshotStoreDao.update(snapshotOnPrimaryStore.getId(), snapshotOnPrimaryStore); diff --git a/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java b/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java index 2eeb617622c..c9bb44af696 100755 --- a/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java +++ b/server/src/test/java/com/cloud/storage/snapshot/SnapshotManagerTest.java @@ -316,7 +316,7 @@ public class SnapshotManagerTest { when(snapshotStoreDao.findParent(any(DataStoreRole.class), nullable(Long.class), nullable(Long.class))).thenReturn(null); when(snapshotFactory.getSnapshot(nullable(Long.class), nullable(DataStore.class))).thenReturn(snapshotInfoMock); when(storeMock.create(snapshotInfoMock)).thenReturn(snapshotInfoMock); - when(snapshotStoreDao.findBySnapshot(nullable(Long.class), nullable(DataStoreRole.class))).thenReturn(snapshotStoreMock); + when(snapshotStoreDao.findByStoreSnapshot(nullable(DataStoreRole.class), nullable(Long.class), nullable(Long.class))).thenReturn(snapshotStoreMock); when(snapshotStoreDao.update(nullable(Long.class), nullable(SnapshotDataStoreVO.class))).thenReturn(true); when(_snapshotDao.update(nullable(Long.class), nullable(SnapshotVO.class))).thenReturn(true); when(vmMock.getAccountId()).thenReturn(2L); @@ -333,7 +333,7 @@ public class SnapshotManagerTest { when(vmMock.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); when(_vmSnapshotDao.findById(nullable(Long.class))).thenReturn(vmSnapshotMock); when(snapshotStoreDao.findParent(any(DataStoreRole.class), nullable(Long.class), nullable(Long.class))).thenReturn(snapshotStoreMock); - when(snapshotStoreDao.findBySnapshot(nullable(Long.class), nullable(DataStoreRole.class))).thenReturn(snapshotStoreMock); + when(snapshotStoreDao.findByStoreSnapshot(nullable(DataStoreRole.class), nullable(Long.class), nullable(Long.class))).thenReturn(snapshotStoreMock); when(snapshotStoreMock.getInstallPath()).thenReturn("VM_SNAPSHOT_NAME"); when(vmSnapshotMock.getName()).thenReturn("VM_SNAPSHOT_NAME"); Snapshot snapshot = _snapshotMgr.backupSnapshotFromVmSnapshot(TEST_SNAPSHOT_ID, TEST_VM_ID, TEST_VOLUME_ID, TEST_VM_SNAPSHOT_ID); From 8b994113ff11fc08e2418f694796c68576de5975 Mon Sep 17 00:00:00 2001 From: Rakesh Date: Thu, 29 Oct 2020 09:43:05 +0100 Subject: [PATCH 2/2] Failed to update host password if username/password is not saved in db (#4359) --- .../cloud/server/ManagementServerImpl.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 926aca94f7e..1b1debb756d 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -3929,6 +3929,11 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe // get all the hosts in this cluster final List hosts = _resourceMgr.listAllHostsInCluster(command.getClusterId()); + String userNameWithoutSpaces = StringUtils.deleteWhitespace(command.getUsername()); + if (StringUtils.isBlank(userNameWithoutSpaces)) { + throw new InvalidParameterValueException("Username should be non empty string"); + } + Transaction.execute(new TransactionCallbackNoReturn() { @Override public void doInTransactionWithoutResult(final TransactionStatus status) { @@ -3938,7 +3943,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } // update password for this host final DetailVO nv = _detailsDao.findDetail(h.getId(), ApiConstants.USERNAME); - if (nv.getValue().equals(command.getUsername())) { + if (nv == null) { + final DetailVO nvu = new DetailVO(h.getId(), ApiConstants.USERNAME, userNameWithoutSpaces); + _detailsDao.persist(nvu); + final DetailVO nvp = new DetailVO(h.getId(), ApiConstants.PASSWORD, DBEncryptionUtil.encrypt(command.getPassword())); + _detailsDao.persist(nvp); + } else if (nv.getValue().equals(userNameWithoutSpaces)) { final DetailVO nvp = _detailsDao.findDetail(h.getId(), ApiConstants.PASSWORD); nvp.setValue(DBEncryptionUtil.encrypt(command.getPassword())); _detailsDao.persist(nvp); @@ -3986,6 +3996,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe if (!supportedHypervisors.contains(host.getHypervisorType())) { throw new InvalidParameterValueException("This operation is not supported for this hypervisor type"); } + + String userNameWithoutSpaces = StringUtils.deleteWhitespace(cmd.getUsername()); + if (StringUtils.isBlank(userNameWithoutSpaces)) { + throw new InvalidParameterValueException("Username should be non empty string"); + } + Transaction.execute(new TransactionCallbackNoReturn() { @Override public void doInTransactionWithoutResult(final TransactionStatus status) { @@ -3994,7 +4010,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } // update password for this host final DetailVO nv = _detailsDao.findDetail(host.getId(), ApiConstants.USERNAME); - if (nv.getValue().equals(cmd.getUsername())) { + if (nv == null) { + final DetailVO nvu = new DetailVO(host.getId(), ApiConstants.USERNAME, userNameWithoutSpaces); + _detailsDao.persist(nvu); + final DetailVO nvp = new DetailVO(host.getId(), ApiConstants.PASSWORD, DBEncryptionUtil.encrypt(cmd.getPassword())); + _detailsDao.persist(nvp); + } else if (nv.getValue().equals(userNameWithoutSpaces)) { final DetailVO nvp = _detailsDao.findDetail(host.getId(), ApiConstants.PASSWORD); nvp.setValue(DBEncryptionUtil.encrypt(cmd.getPassword())); _detailsDao.persist(nvp);