You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2023/10/02 13:58:07 UTC

[cloudstack] branch 4.18 updated: linstor: resize root disk on offerings with different size (#7952)

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

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


The following commit(s) were added to refs/heads/4.18 by this push:
     new 96205a51ef9 linstor: resize root disk on offerings with different size (#7952)
96205a51ef9 is described below

commit 96205a51ef918313ad8b3288758e15184a710b91
Author: Peinthor Rene <re...@linbit.com>
AuthorDate: Mon Oct 2 15:58:00 2023 +0200

    linstor: resize root disk on offerings with different size (#7952)
---
 .../driver/LinstorPrimaryDataStoreDriverImpl.java  | 40 +++++++++++++---------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git 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
index bcbdc2244b1..d2d13eafc48 100644
--- 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
@@ -428,6 +428,19 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
         }
     }
 
+    private void resizeResource(DevelopersApi api, String resourceName, long sizeByte) throws ApiException {
+        VolumeDefinitionModify dfm = new VolumeDefinitionModify();
+        dfm.setSizeKib(sizeByte / 1024);
+
+        ApiCallRcList answers = api.volumeDefinitionModify(resourceName, 0, dfm);
+        if (answers.hasError()) {
+            s_logger.error("Resize error: " + answers.get(0).getMessage());
+            throw new CloudRuntimeException(answers.get(0).getMessage());
+        } else {
+            s_logger.info(String.format("Successfully resized %s to %d kib", resourceName, dfm.getSizeKib()));
+        }
+    }
+
     private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolVO storagePoolVO) {
         // get the cached template on this storage
         VMTemplateStoragePoolVO tmplPoolRef = _vmTemplatePoolDao.findByPoolTemplate(
@@ -452,6 +465,11 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
                 }
 
                 s_logger.info("Clone resource definition " + cloneRes + " to " + rscName + " finished");
+
+                if (volumeInfo.getSize() != null && volumeInfo.getSize() > 0) {
+                    resizeResource(linstorApi, rscName, volumeInfo.getSize());
+                }
+
                 applyAuxProps(linstorApi, rscName, volumeInfo.getName(), volumeInfo.getAttachedVmName());
                 applyQoSSettings(storagePoolVO, linstorApi, rscName, volumeInfo.getMaxIops());
 
@@ -738,26 +756,16 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
         dfm.setSizeKib(resizeParameter.newSize / 1024);
         try
         {
+            resizeResource(api, rscName, resizeParameter.newSize);
+
             applyQoSSettings(pool, api, rscName, resizeParameter.newMaxIops);
             {
                 final VolumeVO volume = _volumeDao.findById(vol.getId());
                 volume.setMinIops(resizeParameter.newMinIops);
                 volume.setMaxIops(resizeParameter.newMaxIops);
+                volume.setSize(resizeParameter.newSize);
                 _volumeDao.update(volume.getId(), volume);
             }
-
-            ApiCallRcList answers = api.volumeDefinitionModify(rscName, 0, dfm);
-            if (answers.hasError())
-            {
-                s_logger.error("Resize error: " + answers.get(0).getMessage());
-                errMsg = answers.get(0).getMessage();
-            } else
-            {
-                s_logger.info(String.format("Successfully resized %s to %d kib", rscName, dfm.getSizeKib()));
-                vol.setSize(resizeParameter.newSize);
-                vol.update();
-            }
-
         } catch (ApiException apiExc)
         {
             s_logger.error(apiExc);
@@ -765,12 +773,10 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
         }
 
         CreateCmdResult result;
-        if (errMsg != null)
-        {
+        if (errMsg != null) {
             result = new CreateCmdResult(null, new Answer(null, false, errMsg));
             result.setResult(errMsg);
-        } else
-        {
+        } else {
             // notify guests
             result = notifyResize(vol, oldSize, resizeParameter);
         }