linstor: resize root disk on offerings with different size (#7952)

This commit is contained in:
Peinthor Rene 2023-10-02 15:58:00 +02:00 committed by GitHub
parent 9a8cd13951
commit 96205a51ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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) { private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolVO storagePoolVO) {
// get the cached template on this storage // get the cached template on this storage
VMTemplateStoragePoolVO tmplPoolRef = _vmTemplatePoolDao.findByPoolTemplate( VMTemplateStoragePoolVO tmplPoolRef = _vmTemplatePoolDao.findByPoolTemplate(
@ -452,6 +465,11 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
} }
s_logger.info("Clone resource definition " + cloneRes + " to " + rscName + " finished"); 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()); applyAuxProps(linstorApi, rscName, volumeInfo.getName(), volumeInfo.getAttachedVmName());
applyQoSSettings(storagePoolVO, linstorApi, rscName, volumeInfo.getMaxIops()); applyQoSSettings(storagePoolVO, linstorApi, rscName, volumeInfo.getMaxIops());
@ -738,26 +756,16 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
dfm.setSizeKib(resizeParameter.newSize / 1024); dfm.setSizeKib(resizeParameter.newSize / 1024);
try try
{ {
resizeResource(api, rscName, resizeParameter.newSize);
applyQoSSettings(pool, api, rscName, resizeParameter.newMaxIops); applyQoSSettings(pool, api, rscName, resizeParameter.newMaxIops);
{ {
final VolumeVO volume = _volumeDao.findById(vol.getId()); final VolumeVO volume = _volumeDao.findById(vol.getId());
volume.setMinIops(resizeParameter.newMinIops); volume.setMinIops(resizeParameter.newMinIops);
volume.setMaxIops(resizeParameter.newMaxIops); volume.setMaxIops(resizeParameter.newMaxIops);
volume.setSize(resizeParameter.newSize);
_volumeDao.update(volume.getId(), volume); _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) } catch (ApiException apiExc)
{ {
s_logger.error(apiExc); s_logger.error(apiExc);
@ -765,12 +773,10 @@ public class LinstorPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
} }
CreateCmdResult result; CreateCmdResult result;
if (errMsg != null) if (errMsg != null) {
{
result = new CreateCmdResult(null, new Answer(null, false, errMsg)); result = new CreateCmdResult(null, new Answer(null, false, errMsg));
result.setResult(errMsg); result.setResult(errMsg);
} else } else {
{
// notify guests // notify guests
result = notifyResize(vol, oldSize, resizeParameter); result = notifyResize(vol, oldSize, resizeParameter);
} }