Skip to content

Commit b5c1a21

Browse files
committed
Fix Cross zone templates registration for Edge Zones
1 parent e93ae1a commit b5c1a21

File tree

7 files changed

+44
-33
lines changed

7 files changed

+44
-33
lines changed

engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ public interface VMTemplateDao extends GenericDao<VMTemplateVO, Long>, StateDao<
6262

6363
public List<VMTemplateVO> listAllActive();
6464

65+
List<VMTemplateVO> listAllCrossZoneTemplates();
66+
6567
public List<VMTemplateVO> listByState(VirtualMachineTemplate.State... states);
6668

6769
public List<VMTemplateVO> listByHypervisorType(List<HypervisorType> hyperTypes);

engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
418418
AllFieldsSearch.and("notDestroyed", AllFieldsSearch.entity().getState(), SearchCriteria.Op.NEQ);
419419
AllFieldsSearch.and("updatedCount", AllFieldsSearch.entity().getUpdatedCount(), SearchCriteria.Op.EQ);
420420
AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), SearchCriteria.Op.EQ);
421+
AllFieldsSearch.and("crossZone", AllFieldsSearch.entity().isCrossZones(), SearchCriteria.Op.EQ);
421422
AllFieldsSearch.done();
422423

423424
ParentTemplateIdSearch = createSearchBuilder();
@@ -571,6 +572,13 @@ public List<VMTemplateVO> listAllActive() {
571572
return listBy(sc);
572573
}
573574

575+
@Override
576+
public List<VMTemplateVO> listAllCrossZoneTemplates() {
577+
SearchCriteria<VMTemplateVO> sc = AllFieldsSearch.create();
578+
sc.setParameters("crossZone", true);
579+
return listBy(sc);
580+
}
581+
574582
@Override
575583
public List<VMTemplateVO> listByState(VirtualMachineTemplate.State... states) {
576584
SearchCriteria<VMTemplateVO> sc = ActiveTmpltSearch.create();

engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateServiceImpl.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -884,14 +884,12 @@ public void associateTemplateToZone(long templateId, Long zoneId) {
884884
public void associateCrosszoneTemplatesToZone(long dcId) {
885885
VMTemplateZoneVO tmpltZone;
886886

887-
List<VMTemplateVO> allTemplates = _templateDao.listAll();
888-
for (VMTemplateVO vt : allTemplates) {
889-
if (vt.isCrossZones()) {
890-
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
891-
if (tmpltZone == null) {
892-
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
893-
_vmTemplateZoneDao.persist(vmTemplateZone);
894-
}
887+
List<VMTemplateVO> crossZoneTemplates = _templateDao.listAllCrossZoneTemplates();
888+
for (VMTemplateVO vt : crossZoneTemplates) {
889+
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
890+
if (tmpltZone == null) {
891+
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
892+
_vmTemplateZoneDao.persist(vmTemplateZone);
895893
}
896894
}
897895
}

plugins/hypervisors/simulator/src/main/java/com/cloud/resource/SimulatorDiscoverer.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,12 @@ public void postDiscovery(List<HostVO> hosts, long msId) {
202202
private void associateTemplatesToZone(long hostId, long dcId) {
203203
VMTemplateZoneVO tmpltZone;
204204

205-
List<VMTemplateVO> allTemplates = _vmTemplateDao.listAll();
206-
for (VMTemplateVO vt : allTemplates) {
207-
if (vt.isCrossZones()) {
208-
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
209-
if (tmpltZone == null) {
210-
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
211-
_vmTemplateZoneDao.persist(vmTemplateZone);
212-
}
205+
List<VMTemplateVO> crossZoneTemplates = _vmTemplateDao.listAllCrossZoneTemplates();
206+
for (VMTemplateVO vt : crossZoneTemplates) {
207+
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
208+
if (tmpltZone == null) {
209+
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
210+
_vmTemplateZoneDao.persist(vmTemplateZone);
213211
}
214212
}
215213
}

server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
import org.apache.cloudstack.context.CallContext;
9999
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
100100
import org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
101+
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
101102
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
102103
import org.apache.cloudstack.framework.config.ConfigDepot;
103104
import org.apache.cloudstack.framework.config.ConfigKey;
@@ -454,6 +455,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
454455
@Inject
455456
StorageManager _storageManager;
456457
@Inject
458+
TemplateService _templateService;
459+
@Inject
457460
ImageStoreDao _imageStoreDao;
458461
@Inject
459462
ImageStoreDetailsDao _imageStoreDetailsDao;
@@ -3157,6 +3160,12 @@ public DataCenterVO doInTransaction(final TransactionStatus status) {
31573160
// Create default system networks
31583161
createDefaultSystemNetworks(zone.getId());
31593162

3163+
// Associate cross zone templates with the Edge Zones here because they don't have SSVMs
3164+
// For Core zones, this happens when the SSVM starts up.
3165+
if (isEdge) {
3166+
_templateService.associateCrosszoneTemplatesToZone(zone.getId());
3167+
}
3168+
31603169
return zone;
31613170
}
31623171
});

server/src/main/java/com/cloud/storage/StorageManagerImpl.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4232,7 +4232,6 @@ private void duplicateCacheStoreRecordsToRegionStore(long storeId) {
42324232
private void associateCrosszoneTemplatesToZone(Long zoneId) {
42334233
VMTemplateZoneVO tmpltZone;
42344234

4235-
List<VMTemplateVO> allTemplates = _vmTemplateDao.listAll();
42364235
List<Long> dcIds = new ArrayList<>();
42374236
if (zoneId != null) {
42384237
dcIds.add(zoneId);
@@ -4245,14 +4244,13 @@ private void associateCrosszoneTemplatesToZone(Long zoneId) {
42454244
}
42464245
}
42474246

4248-
for (VMTemplateVO vt : allTemplates) {
4249-
if (vt.isCrossZones()) {
4250-
for (Long dcId : dcIds) {
4251-
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
4252-
if (tmpltZone == null) {
4253-
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
4254-
_vmTemplateZoneDao.persist(vmTemplateZone);
4255-
}
4247+
List<VMTemplateVO> crossZoneTemplates = _vmTemplateDao.listAllCrossZoneTemplates();
4248+
for (VMTemplateVO vt : crossZoneTemplates) {
4249+
for (Long dcId : dcIds) {
4250+
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
4251+
if (tmpltZone == null) {
4252+
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
4253+
_vmTemplateZoneDao.persist(vmTemplateZone);
42564254
}
42574255
}
42584256
}

services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,14 +294,12 @@ public void postDiscovery(List<HostVO> hosts, long msId) {
294294
private void associateTemplatesToZone(long hostId, long dcId) {
295295
VMTemplateZoneVO tmpltZone;
296296

297-
List<VMTemplateVO> allTemplates = _vmTemplateDao.listAll();
298-
for (VMTemplateVO vt : allTemplates) {
299-
if (vt.isCrossZones()) {
300-
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
301-
if (tmpltZone == null) {
302-
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
303-
_vmTemplateZoneDao.persist(vmTemplateZone);
304-
}
297+
List<VMTemplateVO> crossZoneTemplates = _vmTemplateDao.listAllCrossZoneTemplates();
298+
for (VMTemplateVO vt : crossZoneTemplates) {
299+
tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
300+
if (tmpltZone == null) {
301+
VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
302+
_vmTemplateZoneDao.persist(vmTemplateZone);
305303
}
306304
}
307305
}

0 commit comments

Comments
 (0)