mirror of https://github.com/apache/cloudstack.git
Mark templates stored in current NFS secondary storage as cross-zones
when we invoke prepareSecondaryStorageForMigrationCmd.
This commit is contained in:
parent
6935dd2888
commit
1b07c33481
|
|
@ -36,7 +36,7 @@ public interface TemplateService {
|
|||
}
|
||||
|
||||
public TemplateInfo getTemplate() {
|
||||
return this.template;
|
||||
return template;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -62,5 +62,7 @@ public interface TemplateService {
|
|||
|
||||
void addSystemVMTemplatesToSecondary(DataStore store);
|
||||
|
||||
void associateTemplateToZone(long templateId, Long zoneId);
|
||||
|
||||
void associateCrosszoneTemplatesToZone(long dcId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ import java.util.Set;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataMotionService;
|
||||
|
|
@ -59,9 +62,6 @@ import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
|
|||
import org.apache.cloudstack.storage.image.store.TemplateObject;
|
||||
import org.apache.cloudstack.storage.to.TemplateObjectTO;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.storage.ListTemplateAnswer;
|
||||
import com.cloud.agent.api.storage.ListTemplateCommand;
|
||||
|
|
@ -73,8 +73,8 @@ import com.cloud.dc.dao.DataCenterDao;
|
|||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.storage.DataStoreRole;
|
||||
import com.cloud.storage.StoragePool;
|
||||
import com.cloud.storage.Storage.TemplateType;
|
||||
import com.cloud.storage.StoragePool;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.VMTemplateZoneVO;
|
||||
|
|
@ -466,7 +466,8 @@ public class TemplateServiceImpl implements TemplateService {
|
|||
// persist entry in template_zone_ref table. zoneId can be empty for
|
||||
// region-wide image store, in that case,
|
||||
// we will associate the template to all the zones.
|
||||
private void associateTemplateToZone(long templateId, Long zoneId) {
|
||||
@Override
|
||||
public void associateTemplateToZone(long templateId, Long zoneId) {
|
||||
List<Long> dcs = new ArrayList<Long>();
|
||||
if (zoneId != null) {
|
||||
dcs.add(zoneId);
|
||||
|
|
|
|||
|
|
@ -33,18 +33,22 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
|
|||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
||||
|
||||
import com.cloud.storage.DataStoreRole;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.storage.dao.VMTemplateDao;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.UpdateBuilder;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@Component
|
||||
public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO, Long> implements TemplateDataStoreDao {
|
||||
|
|
@ -61,6 +65,11 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO
|
|||
@Inject
|
||||
private DataStoreManager _storeMgr;
|
||||
|
||||
@Inject
|
||||
private VMTemplateDao _tmpltDao;
|
||||
@Inject
|
||||
private TemplateService _tmplSrv;
|
||||
|
||||
@Override
|
||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||
super.configure(name, params);
|
||||
|
|
@ -368,8 +377,24 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO
|
|||
ts.setRefCnt(tmpl.getRefCnt() + 1); // increase ref_cnt so that this will not be recycled before the content is pushed to region-wide store
|
||||
persist(ts);
|
||||
}
|
||||
|
||||
// mark template as cross-zones and add template_zone association
|
||||
for (TemplateDataStoreVO tmpl : tmpls) {
|
||||
long templateId = tmpl.getTemplateId();
|
||||
VMTemplateVO template = _tmpltDao.findById(templateId);
|
||||
if (template == null) {
|
||||
throw new CloudRuntimeException("No template is found for template id: " + templateId);
|
||||
}
|
||||
// mark the template as cross-zones
|
||||
template.setCrossZones(true);
|
||||
_tmpltDao.update(templateId, template);
|
||||
// add template_zone_ref association for these cross-zone templates
|
||||
_tmplSrv.associateTemplateToZone(templateId, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue