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

weizhouapache pushed a commit to branch 4.23.0-merge-4.22.1.1
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit cd486acc9393986c13497ff3c4504982a14c8fb2
Author: Wei Zhou <[email protected]>
AuthorDate: Wed Aug 19 12:46:06 2026 +0200

    kvm: execute "qemu-img convert" by Script.executeCommandForExitValue
    
    in additional to the change on LibvirtRestoreBackupCommandWrapper.java
    
    ```
        api,server,kvm: improve backup repository mount handling
    
        Improves handling of mount options for backup repository.
    ```
---
 .../kvm/resource/wrapper/LibvirtRestoreBackupCommandWrapper.java  | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreBackupCommandWrapper.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreBackupCommandWrapper.java
index b80f3d54eb4..3839d7f6bdb 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreBackupCommandWrapper.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtRestoreBackupCommandWrapper.java
@@ -56,10 +56,6 @@ import com.cloud.vm.VirtualMachine;
 public class LibvirtRestoreBackupCommandWrapper extends 
CommandWrapper<RestoreBackupCommand, Answer, LibvirtComputingResource> {
     private static final String BACKUP_TEMP_FILE_PREFIX = "csbackup";
     private static final String FILE_PATH_PLACEHOLDER = "%s/%s";
-    // Flattens the backing-file chain into a single self-contained qcow2 
written to the
-    // destination volume path. Used when the source backup is an incremental 
whose qcow2
-    // has a backing reference to its parent (chain set up by nasbackup.sh's 
qemu-img rebase).
-    private static final String QEMU_IMG_FLATTEN_COMMAND = "qemu-img convert 
-O qcow2 %s %s";
     // Detects whether a qcow2 file references a parent in its backing-file 
metadata.
     // Returns 0 (true) when a backing file is present, 1 when not. Uses 
--output=json
     // so the test is robust to qemu-img version differences in human-readable 
output.
@@ -291,8 +287,8 @@ public class LibvirtRestoreBackupCommandWrapper extends 
CommandWrapper<RestoreBa
         // chain via qemu-img convert, which follows the backing-file links and
         // produces a single self-contained qcow2.
         if (hasBackingChain(backupPath)) {
-            int flattenExit = Script.runSimpleBashScriptForExitValue(
-                    String.format(QEMU_IMG_FLATTEN_COMMAND, backupPath, 
volumePath), timeout, false);
+            String[] qemuImgCmd = new String[] { 
Script.getExecutableAbsolutePath("qemu-img"), "convert", "-O", "qcow2", 
backupPath, volumePath };
+            int flattenExit = Script.executeCommandForExitValue(qemuImgCmd);
             return flattenExit == 0;
         }
 

Reply via email to