From 1d1e1282de32fc74faa891d4b52a8e5b9edd8c61 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 16 Nov 2021 13:09:03 -0700 Subject: [PATCH 1/3] Randomize managed volume copy host * Managed volume copy was always returning first host that could see storage pools * Fix null value in logging for ScaleIOPrimaryDataStoreDriver due to if/else logic error Signed-off-by: Marcus Sorensen --- .../datastore/driver/ScaleIOPrimaryDataStoreDriver.java | 6 ++++-- .../src/main/java/com/cloud/storage/StorageManagerImpl.java | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java index f840bae01683..e099d5cf604e 100644 --- a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java +++ b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java @@ -629,7 +629,8 @@ public void copyAsync(DataObject srcData, DataObject destData, Host destHost, As private Answer copyTemplateToVolume(DataObject srcData, DataObject destData, Host destHost) { // Copy PowerFlex/ScaleIO template to volume - LOGGER.debug("Initiating copy from PowerFlex template volume on host " + destHost != null ? destHost.getId() : ""); + String debugMessage = "Initiating copy from PowerFlex template volume on host "; + LOGGER.debug(destHost != null ? debugMessage + destHost.getId() : debugMessage); int primaryStorageDownloadWait = StorageManager.PRIMARY_STORAGE_DOWNLOAD_WAIT.value(); CopyCommand cmd = new CopyCommand(srcData.getTO(), destData.getTO(), primaryStorageDownloadWait, VirtualMachineManager.ExecuteInSequence.value()); @@ -648,7 +649,8 @@ private Answer copyTemplateToVolume(DataObject srcData, DataObject destData, Hos private Answer copyVolume(DataObject srcData, DataObject destData, Host destHost) { // Copy PowerFlex/ScaleIO volume - LOGGER.debug("Initiating copy from PowerFlex volume on host " + destHost != null ? destHost.getId() : ""); + String debugMessage = "Initiating copy from PowerFlex volume on host "; + LOGGER.debug(destHost != null ? debugMessage + destHost.getId() : debugMessage); String value = configDao.getValue(Config.CopyVolumeWait.key()); int copyVolumeWait = NumbersUtil.parseInt(value, Integer.parseInt(Config.CopyVolumeWait.getDefaultValue())); diff --git a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java index c340da29f406..7e5110ba56cf 100644 --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@ -2136,6 +2136,7 @@ public Host findUpAndEnabledHostWithAccessToStoragePools(List poolIds) { if (hostIds.isEmpty()) { return null; } + Collections.shuffle(hostIds); for (Long hostId : hostIds) { Host host = _hostDao.findById(hostId); From 0a39c33d0138ceaef9cc4ffcea065d9f02672645 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 21 Dec 2021 18:01:06 -0700 Subject: [PATCH 2/3] Use String.format for ScaleIO debug message Signed-off-by: Marcus Sorensen --- .../datastore/driver/ScaleIOPrimaryDataStoreDriver.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java index e099d5cf604e..cbb3f2feb3ac 100644 --- a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java +++ b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java @@ -629,8 +629,7 @@ public void copyAsync(DataObject srcData, DataObject destData, Host destHost, As private Answer copyTemplateToVolume(DataObject srcData, DataObject destData, Host destHost) { // Copy PowerFlex/ScaleIO template to volume - String debugMessage = "Initiating copy from PowerFlex template volume on host "; - LOGGER.debug(destHost != null ? debugMessage + destHost.getId() : debugMessage); + LOGGER.debug(String.format("Initiating copy from PowerFlex template volume on host %s", destHost != null ? destHost.getId() : "")); int primaryStorageDownloadWait = StorageManager.PRIMARY_STORAGE_DOWNLOAD_WAIT.value(); CopyCommand cmd = new CopyCommand(srcData.getTO(), destData.getTO(), primaryStorageDownloadWait, VirtualMachineManager.ExecuteInSequence.value()); @@ -649,8 +648,7 @@ private Answer copyTemplateToVolume(DataObject srcData, DataObject destData, Hos private Answer copyVolume(DataObject srcData, DataObject destData, Host destHost) { // Copy PowerFlex/ScaleIO volume - String debugMessage = "Initiating copy from PowerFlex volume on host "; - LOGGER.debug(destHost != null ? debugMessage + destHost.getId() : debugMessage); + LOGGER.debug(String.format("Initiating copy from PowerFlex template volume on host %s", destHost != null ? destHost.getId() : "")); String value = configDao.getValue(Config.CopyVolumeWait.key()); int copyVolumeWait = NumbersUtil.parseInt(value, Integer.parseInt(Config.CopyVolumeWait.getDefaultValue())); From 919d66f519307a907e806e02ad1c749590555be3 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 22 Dec 2021 10:44:39 -0700 Subject: [PATCH 3/3] Update debug message for ScaleIO copy methods Signed-off-by: Marcus Sorensen --- .../datastore/driver/ScaleIOPrimaryDataStoreDriver.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java index cbb3f2feb3ac..318e82de04dc 100644 --- a/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java +++ b/plugins/storage/volume/scaleio/src/main/java/org/apache/cloudstack/storage/datastore/driver/ScaleIOPrimaryDataStoreDriver.java @@ -629,7 +629,7 @@ public void copyAsync(DataObject srcData, DataObject destData, Host destHost, As private Answer copyTemplateToVolume(DataObject srcData, DataObject destData, Host destHost) { // Copy PowerFlex/ScaleIO template to volume - LOGGER.debug(String.format("Initiating copy from PowerFlex template volume on host %s", destHost != null ? destHost.getId() : "")); + LOGGER.debug(String.format("Initiating copy from PowerFlex template volume on host %s", destHost != null ? destHost.getId() : "")); int primaryStorageDownloadWait = StorageManager.PRIMARY_STORAGE_DOWNLOAD_WAIT.value(); CopyCommand cmd = new CopyCommand(srcData.getTO(), destData.getTO(), primaryStorageDownloadWait, VirtualMachineManager.ExecuteInSequence.value()); @@ -648,7 +648,7 @@ private Answer copyTemplateToVolume(DataObject srcData, DataObject destData, Hos private Answer copyVolume(DataObject srcData, DataObject destData, Host destHost) { // Copy PowerFlex/ScaleIO volume - LOGGER.debug(String.format("Initiating copy from PowerFlex template volume on host %s", destHost != null ? destHost.getId() : "")); + LOGGER.debug(String.format("Initiating copy from PowerFlex template volume on host %s", destHost != null ? destHost.getId() : "")); String value = configDao.getValue(Config.CopyVolumeWait.key()); int copyVolumeWait = NumbersUtil.parseInt(value, Integer.parseInt(Config.CopyVolumeWait.getDefaultValue()));