This is an automated email from the ASF dual-hosted git repository.

harikrishna pushed a commit to branch CheckVolumeAPI
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 4fed6b4fbd8854eb62664a103728a3f6ab8fe540
Author: Harikrishna Patnala <[email protected]>
AuthorDate: Wed Jan 10 16:50:58 2024 +0530

    add repair volume while granting access
---
 .../cloudstack/storage/volume/VolumeServiceImpl.java |  7 +++++++
 .../LibvirtCheckVolumeAndRepairCommandWrapper.java   | 20 ++++++++------------
 .../org/apache/cloudstack/utils/qemu/QemuImg.java    |  2 +-
 3 files changed, 16 insertions(+), 13 deletions(-)

diff --git 
a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
 
b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index bf5ebed87de..e7c9a7c7a42 100644
--- 
a/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ 
b/engine/storage/volume/src/main/java/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -252,6 +252,13 @@ public class VolumeServiceImpl implements VolumeService {
             return 
((PrimaryDataStoreDriver)dataStoreDriver).grantAccess(dataObject, host, 
dataStore);
         }
 
+        if (HypervisorType.KVM.equals(host.getHypervisorType()) && 
DataObjectType.VOLUME.equals(dataObject.getType())) {
+            CheckAndRepairVolumePayload payload = new 
CheckAndRepairVolumePayload(true);
+            VolumeInfo volumeInfo = volFactory.getVolume(dataObject.getId());
+            volumeInfo.addPayload(payload);
+            checkAndRepairVolume(volumeInfo);
+        }
+
         return false;
     }
 
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVolumeAndRepairCommandWrapper.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVolumeAndRepairCommandWrapper.java
index b70ce21f378..47c00248f6d 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVolumeAndRepairCommandWrapper.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCheckVolumeAndRepairCommandWrapper.java
@@ -27,7 +27,6 @@ import 
com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
 import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk;
 import com.cloud.hypervisor.kvm.storage.KVMStoragePool;
 import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager;
-import com.cloud.storage.Storage;
 import com.cloud.resource.CommandWrapper;
 import com.cloud.resource.ResourceWrapper;
 import com.cloud.utils.exception.CloudRuntimeException;
@@ -60,20 +59,17 @@ public class LibvirtCheckVolumeAndRepairCommandWrapper 
extends CommandWrapper<Ch
         final KVMStoragePoolManager storagePoolMgr = 
serverResource.getStoragePoolMgr();
         KVMStoragePool pool = storagePoolMgr.getStoragePool(spool.getType(), 
spool.getUuid());
 
-        if (spool.getType().equals(Storage.StoragePoolType.PowerFlex)) {
-            pool.connectPhysicalDisk(volumeId, null);
-        }
-
         final KVMPhysicalDisk vol = pool.getPhysicalDisk(volumeId);
         QemuObject.EncryptFormat encryptFormat = 
QemuObject.EncryptFormat.enumValue(command.getEncryptFormat());
+        byte[] passphrase = command.getPassphrase();
         try {
-            String checkVolumeResult = checkVolumeAndRepair(vol, false, 
encryptFormat, command.getPassphrase(), serverResource);
-            s_logger.info(String.format("Check Volume result is %s", 
checkVolumeResult));
+            String checkVolumeResult = checkVolumeAndRepair(vol, false, 
encryptFormat, passphrase, serverResource);
+            s_logger.info(String.format("Check Volume result for the volume %s 
is %s", vol.getName(), checkVolumeResult));
             CheckVolumeAndRepairAnswer answer = new 
CheckVolumeAndRepairAnswer(command, true, checkVolumeResult);
             answer.setVolumeCheckExecutionResult(checkVolumeResult);
 
             if (repair) {
-                String repairVolumeResult = checkVolumeAndRepair(vol, true, 
encryptFormat, command.getPassphrase(), serverResource);
+                String repairVolumeResult = checkVolumeAndRepair(vol, true, 
encryptFormat, passphrase, serverResource);
                 String finalResult = (checkVolumeResult != null ? 
checkVolumeResult.concat(",") : "") + repairVolumeResult;
                 s_logger.info(String.format("Repair Volume result for the 
volume %s is %s", vol.getName(), repairVolumeResult));
 
@@ -84,6 +80,10 @@ public class LibvirtCheckVolumeAndRepairCommandWrapper 
extends CommandWrapper<Ch
             return answer;
         } catch (Exception e) {
             return new CheckVolumeAndRepairAnswer(command, false, 
e.toString());
+        } finally {
+            if (passphrase != null) {
+                Arrays.fill(passphrase, (byte) 0);
+            }
         }
     }
 
@@ -107,10 +107,6 @@ public class LibvirtCheckVolumeAndRepairCommandWrapper 
extends CommandWrapper<Ch
             throw new CloudRuntimeException("Failed to run qemu-img for check 
volume", ex);
         } catch (IOException ex) {
             throw new CloudRuntimeException("Failed to create keyfile for 
encrypted volume for check volume operation", ex);
-        } finally {
-            if (passphrase != null) {
-                Arrays.fill(passphrase, (byte) 0);
-            }
         }
     }
 }
diff --git 
a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java
 
b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java
index 4a888056d63..aff23c85a6d 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java
@@ -842,7 +842,7 @@ public class QemuImg {
 
         if (repair) {
             s.add("-r");
-            s.add("leaks");
+            s.add("all");
         }
 
         OutputInterpreter.AllLinesParser parser = new 
OutputInterpreter.AllLinesParser();

Reply via email to