Skip to content

Commit 96205a5

Browse files
authored
linstor: resize root disk on offerings with different size (#7952)
1 parent 9a8cd13 commit 96205a5

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/driver/LinstorPrimaryDataStoreDriverImpl.java

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,19 @@ private String createResource(VolumeInfo vol, StoragePoolVO storagePoolVO)
428428
}
429429
}
430430

431+
private void resizeResource(DevelopersApi api, String resourceName, long sizeByte) throws ApiException {
432+
VolumeDefinitionModify dfm = new VolumeDefinitionModify();
433+
dfm.setSizeKib(sizeByte / 1024);
434+
435+
ApiCallRcList answers = api.volumeDefinitionModify(resourceName, 0, dfm);
436+
if (answers.hasError()) {
437+
s_logger.error("Resize error: " + answers.get(0).getMessage());
438+
throw new CloudRuntimeException(answers.get(0).getMessage());
439+
} else {
440+
s_logger.info(String.format("Successfully resized %s to %d kib", resourceName, dfm.getSizeKib()));
441+
}
442+
}
443+
431444
private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolVO storagePoolVO) {
432445
// get the cached template on this storage
433446
VMTemplateStoragePoolVO tmplPoolRef = _vmTemplatePoolDao.findByPoolTemplate(
@@ -452,6 +465,11 @@ private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolV
452465
}
453466

454467
s_logger.info("Clone resource definition " + cloneRes + " to " + rscName + " finished");
468+
469+
if (volumeInfo.getSize() != null && volumeInfo.getSize() > 0) {
470+
resizeResource(linstorApi, rscName, volumeInfo.getSize());
471+
}
472+
455473
applyAuxProps(linstorApi, rscName, volumeInfo.getName(), volumeInfo.getAttachedVmName());
456474
applyQoSSettings(storagePoolVO, linstorApi, rscName, volumeInfo.getMaxIops());
457475

@@ -738,39 +756,27 @@ public void resize(DataObject data, AsyncCompletionCallback<CreateCmdResult> cal
738756
dfm.setSizeKib(resizeParameter.newSize / 1024);
739757
try
740758
{
759+
resizeResource(api, rscName, resizeParameter.newSize);
760+
741761
applyQoSSettings(pool, api, rscName, resizeParameter.newMaxIops);
742762
{
743763
final VolumeVO volume = _volumeDao.findById(vol.getId());
744764
volume.setMinIops(resizeParameter.newMinIops);
745765
volume.setMaxIops(resizeParameter.newMaxIops);
766+
volume.setSize(resizeParameter.newSize);
746767
_volumeDao.update(volume.getId(), volume);
747768
}
748-
749-
ApiCallRcList answers = api.volumeDefinitionModify(rscName, 0, dfm);
750-
if (answers.hasError())
751-
{
752-
s_logger.error("Resize error: " + answers.get(0).getMessage());
753-
errMsg = answers.get(0).getMessage();
754-
} else
755-
{
756-
s_logger.info(String.format("Successfully resized %s to %d kib", rscName, dfm.getSizeKib()));
757-
vol.setSize(resizeParameter.newSize);
758-
vol.update();
759-
}
760-
761769
} catch (ApiException apiExc)
762770
{
763771
s_logger.error(apiExc);
764772
errMsg = apiExc.getBestMessage();
765773
}
766774

767775
CreateCmdResult result;
768-
if (errMsg != null)
769-
{
776+
if (errMsg != null) {
770777
result = new CreateCmdResult(null, new Answer(null, false, errMsg));
771778
result.setResult(errMsg);
772-
} else
773-
{
779+
} else {
774780
// notify guests
775781
result = notifyResize(vol, oldSize, resizeParameter);
776782
}

0 commit comments

Comments
 (0)