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();
