Skip to content

Commit e5bfeab

Browse files
committed
Refactor secondary storage replica limit handling to use zone-specific values
1 parent 0708236 commit e5bfeab

3 files changed

Lines changed: 13 additions & 12 deletions

File tree

server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,11 @@ protected void createTemplateWithinZones(TemplateProfile profile, VMTemplateVO t
292292

293293
if (imageStore == null) {
294294
List<DataStore> imageStores = getImageStoresThrowsExceptionIfNotFound(zoneId, profile);
295-
standardImageStoreAllocation(imageStores, template);
295+
standardImageStoreAllocation(imageStores, template, zoneId);
296296
} else {
297297
int replicaLimit = isPrivateTemplate(template)
298-
? TemplateManager.PrivateTemplateSecStorageCopy.value()
299-
: TemplateManager.PublicTemplateSecStorageCopy.value();
298+
? TemplateManager.PrivateTemplateSecStorageCopy.valueIn(zoneId)
299+
: TemplateManager.PublicTemplateSecStorageCopy.valueIn(zoneId);
300300
validateSecondaryStorageAndCreateTemplate(List.of(imageStore), template, new HashMap<>(), replicaLimit);
301301
}
302302
}
@@ -310,10 +310,10 @@ protected List<DataStore> getImageStoresThrowsExceptionIfNotFound(long zoneId, T
310310
return imageStores;
311311
}
312312

313-
protected void standardImageStoreAllocation(List<DataStore> imageStores, VMTemplateVO template) {
313+
protected void standardImageStoreAllocation(List<DataStore> imageStores, VMTemplateVO template, long zoneId) {
314314
int replicaLimit = isPrivateTemplate(template)
315-
? TemplateManager.PrivateTemplateSecStorageCopy.value()
316-
: TemplateManager.PublicTemplateSecStorageCopy.value();
315+
? TemplateManager.PrivateTemplateSecStorageCopy.valueIn(zoneId)
316+
: TemplateManager.PublicTemplateSecStorageCopy.valueIn(zoneId);
317317
Collections.shuffle(imageStores);
318318
validateSecondaryStorageAndCreateTemplate(imageStores, template, new HashMap<>(), replicaLimit);
319319
}

server/src/main/java/com/cloud/template/TemplateAdapterBase.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,14 @@ protected boolean isZoneAndImageStoreAvailable(DataStore imageStore, Long zoneId
204204
* {@link TemplateProfile#getZoneIdList()}.
205205
*/
206206
protected void postUploadAllocation(List<DataStore> imageStores, VMTemplateVO template, List<TemplateOrVolumePostUploadCommand> payloads) {
207-
int replicaLimit = isPrivateTemplate(template)
208-
? TemplateManager.PrivateTemplateSecStorageCopy.value()
209-
: TemplateManager.PublicTemplateSecStorageCopy.value();
207+
boolean isPrivate = isPrivateTemplate(template);
210208
Map<Long, Integer> zoneCopyCount = new HashMap<>();
211209
Collections.shuffle(imageStores);
212210
for (DataStore imageStore : imageStores) {
213211
Long zoneId_is = imageStore.getScope().getScopeId();
212+
int replicaLimit = zoneId_is == null ? 0 : (isPrivate
213+
? TemplateManager.PrivateTemplateSecStorageCopy.valueIn(zoneId_is)
214+
: TemplateManager.PublicTemplateSecStorageCopy.valueIn(zoneId_is));
214215

215216
if (!isZoneAndImageStoreAvailable(imageStore, zoneId_is, zoneCopyCount, replicaLimit)) {
216217
continue;

server/src/test/java/com/cloud/template/HypervisorTemplateAdapterTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ public void createTemplateWithinZonesTestZoneIdsNotNullShouldNotCallListAllZones
337337
Mockito.when(templateProfileMock.getZoneIdList()).thenReturn(zoneIds);
338338
Mockito.doReturn(null).when(_adapter).getImageStoresThrowsExceptionIfNotFound(Mockito.any(Long.class), Mockito.any(TemplateProfile.class));
339339
Mockito.doReturn(null).when(_templateMgr).verifyHeuristicRulesForZone(Mockito.any(VMTemplateVO.class), Mockito.anyLong());
340-
Mockito.doNothing().when(_adapter).standardImageStoreAllocation(Mockito.isNull(), Mockito.any(VMTemplateVO.class));
340+
Mockito.doNothing().when(_adapter).standardImageStoreAllocation(Mockito.isNull(), Mockito.any(VMTemplateVO.class), Mockito.anyLong());
341341

342342
_adapter.createTemplateWithinZones(templateProfileMock, vmTemplateVOMock);
343343

@@ -353,11 +353,11 @@ public void createTemplateWithinZonesTestZoneDoesNotHaveActiveHeuristicRulesShou
353353
Mockito.when(templateProfileMock.getZoneIdList()).thenReturn(zoneIds);
354354
Mockito.doReturn(null).when(_adapter).getImageStoresThrowsExceptionIfNotFound(Mockito.any(Long.class), Mockito.any(TemplateProfile.class));
355355
Mockito.doReturn(null).when(_templateMgr).verifyHeuristicRulesForZone(Mockito.any(VMTemplateVO.class), Mockito.anyLong());
356-
Mockito.doNothing().when(_adapter).standardImageStoreAllocation(Mockito.isNull(), Mockito.any(VMTemplateVO.class));
356+
Mockito.doNothing().when(_adapter).standardImageStoreAllocation(Mockito.isNull(), Mockito.any(VMTemplateVO.class), Mockito.anyLong());
357357

358358
_adapter.createTemplateWithinZones(templateProfileMock, vmTemplateVOMock);
359359

360-
Mockito.verify(_adapter, Mockito.times(1)).standardImageStoreAllocation(Mockito.isNull(), Mockito.any(VMTemplateVO.class));
360+
Mockito.verify(_adapter, Mockito.times(1)).standardImageStoreAllocation(Mockito.isNull(), Mockito.any(VMTemplateVO.class), Mockito.anyLong());
361361
}
362362

363363
@Test

0 commit comments

Comments
 (0)