Skip to content

Commit 189be5a

Browse files
Gupta, SuryaGupta, Surya
authored andcommitted
[CSTACKEX-328] Rebase and Resolve Merge conflicts
1 parent d66f74e commit 189be5a

4 files changed

Lines changed: 43 additions & 47 deletions

File tree

‎plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/driver/OntapPrimaryDatastoreDriver.java‎

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,9 @@ private CloudStackVolume cloneCloudStackVolumeFromTemplate(StoragePoolVO storage
448448
}
449449

450450
if (!iscsi && qosPolicy != null) {
451-
attachQosPolicy(storageStrategy, storagePool, details, volumeInfo, qosPolicy);
451+
CloudStackVolume cloudStackVolume = createCloudStackVolumeRequestByProtocol(
452+
storagePool, details, volumeInfo, qosPolicy);
453+
storageStrategy.updateCloudStackVolume(cloudStackVolume);
452454
}
453455
persistQosPolicyDetails(volumeInfo.getId(), qosPolicy);
454456
return cloned;
@@ -1125,24 +1127,6 @@ private void deleteUnusedQosPolicy(StorageStrategy storageStrategy, String polic
11251127
}
11261128
}
11271129

1128-
private void attachQosPolicy(StorageStrategy storageStrategy, StoragePoolVO storagePool,
1129-
Map<String, String> details, VolumeInfo volumeInfo,
1130-
VolumeQosPolicy qosPolicy) {
1131-
CloudStackVolume request = createCloudStackVolumeRequestByProtocol(
1132-
storagePool, details, volumeInfo, qosPolicy);
1133-
if (isIscsi(details)) {
1134-
VolumeDetailVO lunUuid = volumeDetailsDao.findDetail(volumeInfo.getId(), OntapStorageConstants.LUN_DOT_UUID);
1135-
if (lunUuid == null || lunUuid.getValue() == null) {
1136-
throw new CloudRuntimeException("LUN UUID is missing for volume " + volumeInfo.getId());
1137-
}
1138-
if (request.getLun() == null) {
1139-
throw new CloudRuntimeException("Missing LUN on QoS update request for volume " + volumeInfo.getId());
1140-
}
1141-
request.getLun().setUuid(lunUuid.getValue());
1142-
}
1143-
storageStrategy.updateCloudStackVolume(request);
1144-
}
1145-
11461130
@Override
11471131
public ChapInfo getChapInfo(DataObject dataObject) {
11481132
return null;

‎plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedNASStrategy.java‎

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public CloudStackVolume createCloudStackVolume(CloudStackVolume cloudstackVolume
9898
}
9999
if (cloudstackVolume.getFile() != null && cloudstackVolume.getFile().getQosPolicy() != null) {
100100
try {
101-
updateVolumeQosPolicy(cloudstackVolume);
101+
updateCloudStackVolume(cloudstackVolume);
102102
} catch (RuntimeException qosError) {
103103
logger.error("createCloudStackVolume: QoS attach failed; deleting leftover NFS volume file", qosError);
104104
try {
@@ -137,7 +137,22 @@ public CloudStackVolume createTemplateCache(StoragePoolVO storagePool, TemplateI
137137

138138
@Override
139139
public CloudStackVolume updateCloudStackVolume(CloudStackVolume cloudstackVolume) {
140-
return null;
140+
if (cloudstackVolume == null || cloudstackVolume.getVolumeInfo() == null
141+
|| cloudstackVolume.getFlexVolumeUuid() == null || cloudstackVolume.getFile() == null) {
142+
throw new CloudRuntimeException("Invalid NFS volume QoS update request");
143+
}
144+
FileInfo fileInfo = new FileInfo();
145+
fileInfo.setQosPolicy(cloudstackVolume.getFile().getQosPolicy());
146+
String filePath = cloudstackVolume.getVolumeInfo().getUuid();
147+
try {
148+
nasFeignClient.updateFile(getAuthHeader(), cloudstackVolume.getFlexVolumeUuid(), filePath, fileInfo);
149+
} catch (FeignException e) {
150+
throw new CloudRuntimeException("Failed to apply QoS policy to NFS volume file: " + e.getMessage(), e);
151+
}
152+
logger.info("Applied QoS policy [{}] to NFS volume file [{}]",
153+
cloudstackVolume.getFile().getQosPolicy() != null
154+
? cloudstackVolume.getFile().getQosPolicy().getName() : null, filePath);
155+
return cloudstackVolume;
141156
}
142157

143158
@Override
@@ -234,30 +249,11 @@ public void resizeCloudStackVolume(CloudStackVolume cloudstackVolume, long sizeI
234249
throw new CloudRuntimeException(errMsg);
235250
}
236251
if (cloudstackVolume.getFile() != null && cloudstackVolume.getFile().getQosPolicy() != null) {
237-
updateVolumeQosPolicy(cloudstackVolume);
252+
updateCloudStackVolume(cloudstackVolume);
238253
}
239254
logger.info("resizeCloudStackVolume: Resized volume [{}] to {} bytes", volumeInfo.getUuid(), sizeInBytes);
240255
}
241256

242-
private CloudStackVolume updateVolumeQosPolicy(CloudStackVolume cloudstackVolume) {
243-
if (cloudstackVolume == null || cloudstackVolume.getVolumeInfo() == null
244-
|| cloudstackVolume.getFlexVolumeUuid() == null || cloudstackVolume.getFile() == null) {
245-
throw new CloudRuntimeException("Invalid NFS volume QoS update request");
246-
}
247-
FileInfo fileInfo = new FileInfo();
248-
fileInfo.setQosPolicy(cloudstackVolume.getFile().getQosPolicy());
249-
String filePath = cloudstackVolume.getVolumeInfo().getUuid();
250-
try {
251-
nasFeignClient.updateFile(getAuthHeader(), cloudstackVolume.getFlexVolumeUuid(), filePath, fileInfo);
252-
} catch (FeignException e) {
253-
throw new CloudRuntimeException("Failed to apply QoS policy to NFS volume file: " + e.getMessage(), e);
254-
}
255-
logger.info("Applied QoS policy [{}] to NFS volume file [{}]",
256-
cloudstackVolume.getFile().getQosPolicy() != null
257-
? cloudstackVolume.getFile().getQosPolicy().getName() : null, filePath);
258-
return cloudstackVolume;
259-
}
260-
261257
private Answer resizeVolumeOnKVMHost(DataObject volumeInfo, long sizeInBytes) {
262258
VolumeObject volumeObject = (VolumeObject) volumeInfo;
263259
VolumeVO volume = volumeDao.findById(volumeObject.getId());

‎plugins/storage/volume/ontap/src/test/java/org/apache/cloudstack/storage/driver/OntapPrimaryDatastoreDriverTest.java‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,7 +1541,7 @@ void testCreateAsync_VolumeClonedFromTemplateNFS_RootWithIops_AttachesQosToFile(
15411541
when(templatePoolRef.getInstallPath()).thenReturn("template-uuid");
15421542

15431543
CloudStackVolume cloned = new CloudStackVolume();
1544-
VolumeQosPolicy qosPolicy = qosPolicy("qos-nfs-root-uuid", "cs_100_to_200_iops_svm1");
1544+
VolumeQosPolicy qosPolicy = lookedUpQosPolicy("qos-nfs-root-uuid", "cs_100_to_200_iops_svm1");
15451545

15461546
try (MockedStatic<OntapStorageUtils> utilityMock = mockStatic(OntapStorageUtils.class, CALLS_REAL_METHODS)) {
15471547
stubQosCreateMocks(utilityMock, nasStrategy, cloned, qosPolicy);
@@ -1554,9 +1554,14 @@ void testCreateAsync_VolumeClonedFromTemplateNFS_RootWithIops_AttachesQosToFile(
15541554
verify(createCallback).complete(resultCaptor.capture());
15551555
assertTrue(resultCaptor.getValue().isSuccess());
15561556
verify(nasStrategy).createVolumeQosPolicy(eq("cs_100_to_200_iops_svm1"), eq(100L), eq(200L));
1557+
verify(nasStrategy, never()).resizeCloudStackVolume(any(), anyLong());
15571558
verify(nasStrategy).updateCloudStackVolume(argThat(request ->
1558-
request.getFile() != null && request.getFile().getQosPolicy() != null
1559-
&& "qos-nfs-root-uuid".equals(request.getFile().getQosPolicy().getUuid())));
1559+
"1".equals(request.getDatastoreId())
1560+
&& "flex-uuid".equals(request.getFlexVolumeUuid())
1561+
&& request.getVolumeInfo() == volumeInfo
1562+
&& request.getFile() != null
1563+
&& isQosPolicyReference(request.getFile().getQosPolicy(),
1564+
"qos-nfs-root-uuid", "cs_100_to_200_iops_svm1")));
15601565
verify(volumeDetailsDao).addDetail(eq(100L), eq(OntapStorageConstants.QOS_POLICY_UUID),
15611566
eq("qos-nfs-root-uuid"), eq(false));
15621567
}

‎plugins/storage/volume/ontap/src/test/java/org/apache/cloudstack/storage/service/UnifiedNASStrategyTest.java‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,12 +304,13 @@ public void testCreateCloudStackVolume_QosAttachFails_DeletesLeftoverNfsFile() {
304304
}
305305

306306
@Test
307-
public void testUpdateCloudStackVolume_ReturnsNull() {
307+
public void testUpdateCloudStackVolume_AppliesQosPolicy() {
308308
VolumeInfo volumeInfo = mock(VolumeInfo.class);
309309
when(volumeInfo.getUuid()).thenReturn("volume-uuid-123");
310310

311311
VolumeQosPolicy qosPolicy = new VolumeQosPolicy();
312312
qosPolicy.setName("cs_100_to_200_iops_svm1");
313+
qosPolicy.setUuid("qos-uuid");
313314
FileInfo fileInfo = new FileInfo();
314315
fileInfo.setQosPolicy(qosPolicy);
315316

@@ -318,8 +319,18 @@ public void testUpdateCloudStackVolume_ReturnsNull() {
318319
request.setFlexVolumeUuid("flex-uuid");
319320
request.setFile(fileInfo);
320321

321-
assertNull(strategy.updateCloudStackVolume(request));
322-
assertNull(strategy.updateCloudStackVolume(new CloudStackVolume()));
322+
CloudStackVolume result = strategy.updateCloudStackVolume(request);
323+
324+
assertSame(request, result);
325+
verify(nasFeignClient).updateFile(anyString(), eq("flex-uuid"), eq("volume-uuid-123"),
326+
argThat(file -> file.getQosPolicy() != null
327+
&& "cs_100_to_200_iops_svm1".equals(file.getQosPolicy().getName())
328+
&& "qos-uuid".equals(file.getQosPolicy().getUuid())));
329+
}
330+
331+
@Test
332+
public void testUpdateCloudStackVolume_InvalidRequest_ThrowsException() {
333+
assertThrows(CloudRuntimeException.class, () -> strategy.updateCloudStackVolume(new CloudStackVolume()));
323334
verify(nasFeignClient, never()).updateFile(anyString(), anyString(), anyString(), any(FileInfo.class));
324335
}
325336

0 commit comments

Comments
 (0)