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

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

commit e9ff2707bbd58de8788da2397cfdd8e8a0ab44ff
Merge: 0d1bc7dfd0c 87e7c57d08c
Author: Vishesh <vishes...@gmail.com>
AuthorDate: Tue May 7 12:44:51 2024 +0530

    Merge branch '4.19'

 .../driver/LinstorPrimaryDataStoreDriverImpl.java  | 54 ++++++++++++++++++++++
 test/integration/smoke/test_restore_vm.py          | 14 ++++--
 2 files changed, 64 insertions(+), 4 deletions(-)

diff --cc 
plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java
index 016ab0e993f,9612781ee4c..6ed8db66582
--- 
a/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java
+++ 
b/plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java
@@@ -102,12 -102,12 +102,13 @@@ import org.apache.cloudstack.storage.da
  import 
org.apache.cloudstack.storage.datastore.util.LinstorConfigurationManager;
  import org.apache.cloudstack.storage.datastore.util.LinstorUtil;
  import org.apache.cloudstack.storage.to.SnapshotObjectTO;
+ import org.apache.cloudstack.storage.to.VolumeObjectTO;
  import org.apache.cloudstack.storage.volume.VolumeObject;
 -import org.apache.log4j.Logger;
 +import org.apache.logging.log4j.Logger;
 +import org.apache.logging.log4j.LogManager;
  
  public class LinstorPrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDriver {
 -    private static final Logger s_logger = 
Logger.getLogger(LinstorPrimaryDataStoreDriverImpl.class);
 +    protected Logger logger = LogManager.getLogger(getClass());
      @Inject private PrimaryDataStoreDao _storagePoolDao;
      @Inject private VolumeDao _volumeDao;
      @Inject private VolumeDetailsDao _volumeDetailsDao;
@@@ -965,6 -982,43 +982,43 @@@
          return answer;
      }
  
+     private Answer copyVolume(DataObject srcData, DataObject dstData) {
+         VolumeInfo srcVolInfo = (VolumeInfo) srcData;
+         final StoragePoolVO pool = 
_storagePoolDao.findById(srcVolInfo.getDataStore().getId());
+         final DevelopersApi api = 
LinstorUtil.getLinstorAPI(pool.getHostAddress());
+         final String rscName = LinstorUtil.RSC_PREFIX + srcVolInfo.getUuid();
+ 
+         VolumeObjectTO to = (VolumeObjectTO) srcVolInfo.getTO();
+         // patch source format
+         // Linstor volumes are stored as RAW, but we can't set the correct 
format as RAW (we use QCOW2)
+         // otherwise create template from snapshot won't work, because this 
operation
+         // uses the format of the base volume and we backup snapshots as QCOW2
+         // 
https://github.com/apache/cloudstack/pull/8802#issuecomment-2024019927
+         to.setFormat(Storage.ImageFormat.RAW);
+         int nMaxExecutionSeconds = NumbersUtil.parseInt(
+                 _configDao.getValue(Config.CopyVolumeWait.key()), 10800);
+         CopyCommand cmd = new CopyCommand(
+                 to,
+                 dstData.getTO(),
+                 nMaxExecutionSeconds,
+                 VirtualMachineManager.ExecuteInSequence.value());
+         Answer answer;
+ 
+         try {
+             Optional<RemoteHostEndPoint> optEP = getLinstorEP(api, rscName);
+             if (optEP.isPresent()) {
+                 answer = optEP.get().sendMessage(cmd);
+             }
+             else {
+                 answer = new Answer(cmd, false, "Unable to get matching 
Linstor endpoint.");
+             }
+         } catch (ApiException exc) {
 -            s_logger.error("copy volume failed: ", exc);
++            logger.error("copy volume failed: ", exc);
+             throw new CloudRuntimeException(exc.getBestMessage());
+         }
+         return answer;
+     }
+ 
      /**
       * Create a temporary resource from the snapshot to backup, so we can 
copy the data on a diskless agent
       * @param api Linstor Developer api object

Reply via email to