Skip to content

Commit ebcf66a

Browse files
committed
linstor: use added KVMPhysicalDisk info for Aux properties
1 parent a3e320d commit ebcf66a

3 files changed

Lines changed: 38 additions & 26 deletions

File tree

plugins/storage/volume/linstor/src/main/java/com/cloud/hypervisor/kvm/storage/LinstorStorageAdaptor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,15 @@ public KVMPhysicalDisk copyPhysicalDisk(KVMPhysicalDisk disk, String name, KVMSt
495495
final KVMPhysicalDisk dstDisk = destPools.createPhysicalDisk(
496496
name, QemuImg.PhysicalDiskFormat.RAW, provisioningType, disk.getVirtualSize(), null);
497497

498+
final DevelopersApi api = getLinstorAPI(destPools);
499+
final String rscName = LinstorUtil.RSC_PREFIX + name;
500+
try {
501+
LinstorUtil.applyAuxProps(api, rscName, disk.getDispName(), disk.getVmName());
502+
} catch (ApiException apiExc) {
503+
s_logger.error(String.format("Error setting aux properties for %s", rscName));
504+
logLinstorAnswers(apiExc.getApiCallRcList());
505+
}
506+
498507
s_logger.debug(String.format("Linstor.copyPhysicalDisk: dstPath: %s", dstDisk.getPath()));
499508
final QemuImgFile destFile = new QemuImgFile(dstDisk.getPath());
500509
destFile.setFormat(dstDisk.getFormat());

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

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.linbit.linstor.api.model.ResourceDefinitionCloneRequest;
2727
import com.linbit.linstor.api.model.ResourceDefinitionCloneStarted;
2828
import com.linbit.linstor.api.model.ResourceDefinitionCreate;
29-
import com.linbit.linstor.api.model.ResourceDefinitionModify;
3029
import com.linbit.linstor.api.model.ResourceGroupSpawn;
3130
import com.linbit.linstor.api.model.ResourceMakeAvailable;
3231
import com.linbit.linstor.api.model.Snapshot;
@@ -62,8 +61,8 @@
6261
import com.cloud.storage.DataStoreRole;
6362
import com.cloud.storage.ResizeVolumePayload;
6463
import com.cloud.storage.SnapshotVO;
65-
import com.cloud.storage.Storage.StoragePoolType;
6664
import com.cloud.storage.Storage;
65+
import com.cloud.storage.Storage.StoragePoolType;
6766
import com.cloud.storage.StorageManager;
6867
import com.cloud.storage.StoragePool;
6968
import com.cloud.storage.VMTemplateStoragePoolVO;
@@ -389,27 +388,6 @@ private void applyQoSSettings(StoragePoolVO storagePool, DevelopersApi api, Stri
389388
}
390389
}
391390

392-
private void applyAuxProps(DevelopersApi api, String rscName, String dispName, String vmName)
393-
throws ApiException
394-
{
395-
ResourceDefinitionModify rdm = new ResourceDefinitionModify();
396-
Properties props = new Properties();
397-
if (dispName != null)
398-
{
399-
props.put("Aux/cs-name", dispName);
400-
}
401-
if (vmName != null)
402-
{
403-
props.put("Aux/cs-vm-name", vmName);
404-
}
405-
if (!props.isEmpty())
406-
{
407-
rdm.setOverrideProps(props);
408-
ApiCallRcList answers = api.resourceDefinitionModify(rscName, rdm);
409-
checkLinstorAnswersThrow(answers);
410-
}
411-
}
412-
413391
private String getRscGrp(StoragePoolVO storagePoolVO) {
414392
return storagePoolVO.getUserInfo() != null && !storagePoolVO.getUserInfo().isEmpty() ?
415393
storagePoolVO.getUserInfo() : "DfltRscGrp";
@@ -427,7 +405,8 @@ private String createResourceBase(
427405
ApiCallRcList answers = api.resourceGroupSpawn(rscGrp, rscGrpSpawn);
428406
checkLinstorAnswersThrow(answers);
429407

430-
applyAuxProps(api, rscName, volName, vmName);
408+
answers = LinstorUtil.applyAuxProps(api, rscName, volName, vmName);
409+
checkLinstorAnswersThrow(answers);
431410

432411
return LinstorUtil.getDevicePath(api, rscName);
433412
} catch (ApiException apiEx)
@@ -499,7 +478,7 @@ private String cloneResource(long csCloneId, VolumeInfo volumeInfo, StoragePoolV
499478
resizeResource(linstorApi, rscName, volumeInfo.getSize());
500479
}
501480

502-
applyAuxProps(linstorApi, rscName, volumeInfo.getName(), volumeInfo.getAttachedVmName());
481+
LinstorUtil.applyAuxProps(linstorApi, rscName, volumeInfo.getName(), volumeInfo.getAttachedVmName());
503482
applyQoSSettings(storagePoolVO, linstorApi, rscName, volumeInfo.getMaxIops());
504483

505484
return LinstorUtil.getDevicePath(linstorApi, rscName);
@@ -551,7 +530,7 @@ private String createResourceFromSnapshot(long csSnapshotId, String rscName, Sto
551530
answers = linstorApi.resourceSnapshotRestore(cloneRes, snapName, snapshotRestore);
552531
checkLinstorAnswersThrow(answers);
553532

554-
applyAuxProps(linstorApi, rscName, volumeVO.getName(), null);
533+
LinstorUtil.applyAuxProps(linstorApi, rscName, volumeVO.getName(), null);
555534
applyQoSSettings(storagePoolVO, linstorApi, rscName, volumeVO.getMaxIops());
556535

557536
return LinstorUtil.getDevicePath(linstorApi, rscName);

plugins/storage/volume/linstor/src/main/java/org/apache/cloudstack/storage/datastore/util/LinstorUtil.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
import com.linbit.linstor.api.model.ApiCallRc;
2323
import com.linbit.linstor.api.model.ApiCallRcList;
2424
import com.linbit.linstor.api.model.Node;
25+
import com.linbit.linstor.api.model.Properties;
2526
import com.linbit.linstor.api.model.ProviderKind;
2627
import com.linbit.linstor.api.model.Resource;
28+
import com.linbit.linstor.api.model.ResourceDefinitionModify;
2729
import com.linbit.linstor.api.model.ResourceGroup;
2830
import com.linbit.linstor.api.model.ResourceWithVolumes;
2931
import com.linbit.linstor.api.model.StoragePool;
@@ -236,4 +238,26 @@ public static String getDevicePath(DevelopersApi api, String rscName) throws Api
236238
s_logger.error(errMsg);
237239
throw new CloudRuntimeException("Linstor: " + errMsg);
238240
}
241+
242+
public static ApiCallRcList applyAuxProps(DevelopersApi api, String rscName, String dispName, String vmName)
243+
throws ApiException
244+
{
245+
ResourceDefinitionModify rdm = new ResourceDefinitionModify();
246+
Properties props = new Properties();
247+
if (dispName != null)
248+
{
249+
props.put("Aux/cs-name", dispName);
250+
}
251+
if (vmName != null)
252+
{
253+
props.put("Aux/cs-vm-name", vmName);
254+
}
255+
ApiCallRcList answers = new ApiCallRcList();
256+
if (!props.isEmpty())
257+
{
258+
rdm.setOverrideProps(props);
259+
answers = api.resourceDefinitionModify(rscName, rdm);
260+
}
261+
return answers;
262+
}
239263
}

0 commit comments

Comments
 (0)