mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-15 18:12:35 +01:00
Remove state from vm_template table, we should use template_store_ref
state column to represent the state of a template in each zone.
This commit is contained in:
parent
c5083a385f
commit
bb85a564da
@ -764,7 +764,6 @@
|
||||
<bean id="iSCSI" class="org.apache.cloudstack.storage.datastore.type.ISCSI" />
|
||||
<bean id="ISO" class="org.apache.cloudstack.storage.image.format.ISO" />
|
||||
<bean id="templateDataFactoryImpl" class="org.apache.cloudstack.storage.image.TemplateDataFactoryImpl" />
|
||||
<bean id="imageDataManagerImpl" class="org.apache.cloudstack.storage.image.manager.ImageDataManagerImpl" />
|
||||
<bean id="imageStoreHelper" class="org.apache.cloudstack.storage.image.datastore.ImageStoreHelper" />
|
||||
<bean id="imageFormatHelper" class="org.apache.cloudstack.storage.image.format.ImageFormatHelper" />
|
||||
<bean id="templateServiceImpl" class="org.apache.cloudstack.storage.image.TemplateServiceImpl" />
|
||||
|
||||
@ -42,7 +42,7 @@ import com.cloud.utils.fsm.StateObject;
|
||||
|
||||
@Entity
|
||||
@Table(name = "vm_template")
|
||||
public class VMTemplateVO implements VirtualMachineTemplate, StateObject<TemplateState> {
|
||||
public class VMTemplateVO implements VirtualMachineTemplate {
|
||||
@Id
|
||||
@TableGenerator(name = "vm_template_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value",
|
||||
pkColumnValue = "vm_template_seq", allocationSize = 1)
|
||||
@ -133,9 +133,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
@Column(name = "size")
|
||||
private Long size;
|
||||
|
||||
@Column(name = "state")
|
||||
private TemplateState state;
|
||||
|
||||
@Column(name = "update_count", updatable = true)
|
||||
protected long updatedCount;
|
||||
|
||||
@ -157,7 +154,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
|
||||
public VMTemplateVO() {
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.state = TemplateState.Allocated;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -171,7 +167,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
null, requiresHvm, bits, accountId, cksum, displayText, enablePassword, guestOSId, bootable, hyperType,
|
||||
details);
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.state = TemplateState.Allocated;
|
||||
}
|
||||
|
||||
public VMTemplateVO(long id, String name, ImageFormat format, boolean isPublic, boolean featured,
|
||||
@ -182,7 +177,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
displayText, enablePassword, guestOSId, bootable, hyperType, details);
|
||||
this.templateTag = templateTag;
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.state = TemplateState.Allocated;
|
||||
this.enableSshKey = sshKeyEnabled;
|
||||
}
|
||||
|
||||
@ -192,7 +186,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
boolean bootable, HypervisorType hyperType) {
|
||||
VMTemplateVO template = new VMTemplateVO(id, uniqueName, name, format, isPublic, featured, type, url, created,
|
||||
requiresHvm, bits, accountId, cksum, displayText, enablePassword, guestOSId, bootable, hyperType);
|
||||
template.state = TemplateState.Ready;
|
||||
return template;
|
||||
}
|
||||
|
||||
@ -219,7 +212,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
this.bootable = bootable;
|
||||
this.hypervisorType = hyperType;
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.state = TemplateState.Allocated;
|
||||
}
|
||||
|
||||
// Has an extra attribute - isExtractable
|
||||
@ -532,10 +524,6 @@ public class VMTemplateVO implements VirtualMachineTemplate, StateObject<Templat
|
||||
return this.size;
|
||||
}
|
||||
|
||||
public TemplateState getState() {
|
||||
return this.state;
|
||||
}
|
||||
|
||||
public long getUpdatedCount() {
|
||||
return this.updatedCount;
|
||||
}
|
||||
|
||||
@ -30,8 +30,7 @@ import com.cloud.utils.fsm.StateDao;
|
||||
/*
|
||||
* Data Access Object for vm_templates table
|
||||
*/
|
||||
public interface VMTemplateDao extends GenericDao<VMTemplateVO, Long>,
|
||||
StateDao<TemplateState, TemplateEvent, VMTemplateVO> {
|
||||
public interface VMTemplateDao extends GenericDao<VMTemplateVO, Long> {
|
||||
|
||||
public List<VMTemplateVO> listByPublic();
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
private SearchBuilder<VMTemplateVO> PublicIsoSearch;
|
||||
private SearchBuilder<VMTemplateVO> UserIsoSearch;
|
||||
private GenericSearchBuilder<VMTemplateVO, Long> CountTemplatesByAccount;
|
||||
private SearchBuilder<VMTemplateVO> updateStateSearch;
|
||||
// private SearchBuilder<VMTemplateVO> updateStateSearch;
|
||||
|
||||
@Inject
|
||||
ResourceTagDao _tagsDao;
|
||||
@ -369,11 +369,11 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
CountTemplatesByAccount.and("removed", CountTemplatesByAccount.entity().getRemoved(), SearchCriteria.Op.NULL);
|
||||
CountTemplatesByAccount.done();
|
||||
|
||||
updateStateSearch = this.createSearchBuilder();
|
||||
updateStateSearch.and("id", updateStateSearch.entity().getId(), Op.EQ);
|
||||
updateStateSearch.and("state", updateStateSearch.entity().getState(), Op.EQ);
|
||||
updateStateSearch.and("updatedCount", updateStateSearch.entity().getUpdatedCount(), Op.EQ);
|
||||
updateStateSearch.done();
|
||||
// updateStateSearch = this.createSearchBuilder();
|
||||
// updateStateSearch.and("id", updateStateSearch.entity().getId(), Op.EQ);
|
||||
// updateStateSearch.and("state", updateStateSearch.entity().getState(), Op.EQ);
|
||||
// updateStateSearch.and("updatedCount", updateStateSearch.entity().getUpdatedCount(), Op.EQ);
|
||||
// updateStateSearch.done();
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -932,42 +932,5 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
|
||||
* return templateZonePairList; }
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean updateState(TemplateState currentState, TemplateEvent event, TemplateState nextState,
|
||||
VMTemplateVO vo, Object data) {
|
||||
Long oldUpdated = vo.getUpdatedCount();
|
||||
Date oldUpdatedTime = vo.getUpdated();
|
||||
|
||||
SearchCriteria<VMTemplateVO> sc = updateStateSearch.create();
|
||||
sc.setParameters("id", vo.getId());
|
||||
sc.setParameters("state", currentState);
|
||||
sc.setParameters("updatedCount", vo.getUpdatedCount());
|
||||
|
||||
vo.incrUpdatedCount();
|
||||
|
||||
UpdateBuilder builder = getUpdateBuilder(vo);
|
||||
builder.set(vo, "state", nextState);
|
||||
builder.set(vo, "updated", new Date());
|
||||
|
||||
int rows = update((VMTemplateVO) vo, sc);
|
||||
if (rows == 0 && s_logger.isDebugEnabled()) {
|
||||
VMTemplateVO dbVol = findByIdIncludingRemoved(vo.getId());
|
||||
if (dbVol != null) {
|
||||
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
|
||||
str.append(": DB Data={id=").append(dbVol.getId()).append("; state=").append(dbVol.getState())
|
||||
.append("; updatecount=").append(dbVol.getUpdatedCount()).append(";updatedTime=")
|
||||
.append(dbVol.getUpdated());
|
||||
str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState)
|
||||
.append("; event=").append(event).append("; updatecount=").append(vo.getUpdatedCount())
|
||||
.append("; updatedTime=").append(vo.getUpdated());
|
||||
str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState)
|
||||
.append("; event=").append(event).append("; updatecount=").append(oldUpdated)
|
||||
.append("; updatedTime=").append(oldUpdatedTime);
|
||||
} else {
|
||||
s_logger.debug("Unable to update objectIndatastore: id=" + vo.getId()
|
||||
+ ", as there is no such object exists in the database anymore");
|
||||
}
|
||||
}
|
||||
return rows > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,7 +56,6 @@ import org.apache.cloudstack.storage.datastore.DataObjectManager;
|
||||
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
||||
import org.apache.cloudstack.storage.image.manager.ImageDataManager;
|
||||
import org.apache.cloudstack.storage.image.store.TemplateObject;
|
||||
import org.apache.cloudstack.storage.to.TemplateObjectTO;
|
||||
import org.apache.log4j.Logger;
|
||||
@ -121,8 +120,6 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
@Inject
|
||||
EndPointSelector _epSelector;
|
||||
@Inject
|
||||
ImageDataManager imageMgr;
|
||||
@Inject
|
||||
TemplateManager _tmpltMgr;
|
||||
|
||||
class TemplateOpContext<T> extends AsyncRpcConext<T> {
|
||||
@ -324,19 +321,6 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
VMTemplateVO tmlpt = _templateDao.findById(tmplt.getId());
|
||||
tmlpt.setSize(tmpltInfo.getSize());
|
||||
_templateDao.update(tmplt.getId(), tmlpt);
|
||||
// set template to ready state
|
||||
if (tmplt.getState() != TemplateState.Ready) {
|
||||
try {
|
||||
imageMgr.getStateMachine().transitTo(tmplt, TemplateEvent.CreateRequested, null,
|
||||
_templateDao);
|
||||
imageMgr.getStateMachine().transitTo(tmplt, TemplateEvent.OperationSucceeded, null,
|
||||
_templateDao);
|
||||
} catch (NoTransitionException e) {
|
||||
// non fatal though
|
||||
s_logger.debug(
|
||||
"failed to update template " + tmplt.getUniqueName() + " state to Ready", e);
|
||||
}
|
||||
}
|
||||
|
||||
if (tmpltInfo.getSize() > 0 && tmplt.getUrl() != null) {
|
||||
long accountId = tmplt.getAccountId();
|
||||
@ -370,18 +354,7 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
_templateDao.update(tmplt.getId(), tmlpt);
|
||||
associateTemplateToZone(tmplt.getId(), zoneId);
|
||||
|
||||
// set template to ready state
|
||||
if (tmplt.getState() != TemplateState.Ready) {
|
||||
try {
|
||||
imageMgr.getStateMachine().transitTo(tmplt, TemplateEvent.CreateRequested, null,
|
||||
_templateDao);
|
||||
imageMgr.getStateMachine().transitTo(tmplt, TemplateEvent.OperationSucceeded, null,
|
||||
_templateDao);
|
||||
} catch (NoTransitionException e) {
|
||||
// non fatal though
|
||||
s_logger.debug("failed to update template " + tmplt.getUniqueName() + " state to Ready", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
if (tmpltStore != null) {
|
||||
@ -623,16 +596,6 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
long storeId = store.getId();
|
||||
List<VMTemplateVO> rtngTmplts = _templateDao.listAllSystemVMTemplates();
|
||||
for (VMTemplateVO tmplt : rtngTmplts) {
|
||||
// set template ready state
|
||||
if (tmplt.getState() != TemplateState.Ready) {
|
||||
try {
|
||||
imageMgr.getStateMachine().transitTo(tmplt, TemplateEvent.CreateRequested, null, _templateDao);
|
||||
imageMgr.getStateMachine().transitTo(tmplt, TemplateEvent.OperationSucceeded, null, _templateDao);
|
||||
} catch (NoTransitionException e) {
|
||||
// non fatal though
|
||||
s_logger.debug("failed to update system vm template state to Ready", e);
|
||||
}
|
||||
}
|
||||
TemplateDataStoreVO tmpltStore = _vmTemplateStoreDao.findByStoreTemplate(storeId, tmplt.getId());
|
||||
if (tmpltStore == null) {
|
||||
tmpltStore = new TemplateDataStoreVO(storeId, tmplt.getId(), new Date(), 100, Status.DOWNLOADED, null,
|
||||
|
||||
@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.cloudstack.storage.image.manager;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
|
||||
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.utils.fsm.StateMachine2;
|
||||
|
||||
public interface ImageDataManager {
|
||||
StateMachine2<TemplateState, TemplateEvent, VMTemplateVO> getStateMachine();
|
||||
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.cloudstack.storage.image.manager;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.cloud.storage.VMTemplateVO;
|
||||
import com.cloud.utils.fsm.StateMachine2;
|
||||
|
||||
@Component
|
||||
public class ImageDataManagerImpl implements ImageDataManager {
|
||||
private final StateMachine2<TemplateState, TemplateEvent, VMTemplateVO> stateMachine = new StateMachine2<TemplateState, TemplateEvent, VMTemplateVO>();
|
||||
|
||||
public ImageDataManagerImpl() {
|
||||
stateMachine.addTransition(TemplateState.Allocated, TemplateEvent.CreateRequested, TemplateState.Creating);
|
||||
stateMachine.addTransition(TemplateState.Creating, TemplateEvent.CreateRequested, TemplateState.Creating);
|
||||
stateMachine.addTransition(TemplateState.Creating, TemplateEvent.OperationSucceeded, TemplateState.Ready);
|
||||
stateMachine.addTransition(TemplateState.Creating, TemplateEvent.OperationFailed, TemplateState.Allocated);
|
||||
stateMachine.addTransition(TemplateState.Creating, TemplateEvent.DestroyRequested, TemplateState.Destroying);
|
||||
stateMachine.addTransition(TemplateState.Ready, TemplateEvent.DestroyRequested, TemplateState.Destroying);
|
||||
stateMachine.addTransition(TemplateState.Allocated, TemplateEvent.DestroyRequested, TemplateState.Destroying);
|
||||
stateMachine.addTransition(TemplateState.Destroying, TemplateEvent.DestroyRequested, TemplateState.Destroying);
|
||||
stateMachine.addTransition(TemplateState.Destroying, TemplateEvent.OperationFailed, TemplateState.Destroying);
|
||||
stateMachine.addTransition(TemplateState.Destroying, TemplateEvent.OperationSucceeded, TemplateState.Destroyed);
|
||||
// TODO: this should not be needed, but it happened during testing where
|
||||
// multiple success event is sent to callback
|
||||
stateMachine.addTransition(TemplateState.Ready, TemplateEvent.OperationSucceeded, TemplateState.Ready);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StateMachine2<TemplateState, TemplateEvent, VMTemplateVO> getStateMachine() {
|
||||
return stateMachine;
|
||||
}
|
||||
}
|
||||
@ -33,7 +33,6 @@ import org.apache.cloudstack.storage.command.CopyCmdAnswer;
|
||||
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
|
||||
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
|
||||
import org.apache.cloudstack.storage.image.manager.ImageDataManager;
|
||||
import org.apache.cloudstack.storage.to.TemplateObjectTO;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
@ -58,8 +57,6 @@ public class TemplateObject implements TemplateInfo {
|
||||
private VMTemplateVO imageVO;
|
||||
private DataStore dataStore;
|
||||
@Inject
|
||||
ImageDataManager imageMgr;
|
||||
@Inject
|
||||
VMTemplateDao imageDao;
|
||||
@Inject
|
||||
ObjectInDataStoreManager objectInStoreMgr;
|
||||
@ -155,12 +152,12 @@ public class TemplateObject implements TemplateInfo {
|
||||
return this.imageVO.getFormat();
|
||||
}
|
||||
|
||||
public boolean stateTransit(TemplateEvent e) throws NoTransitionException {
|
||||
this.imageVO = imageDao.findById(this.imageVO.getId());
|
||||
boolean result = imageMgr.getStateMachine().transitTo(this.imageVO, e, null, imageDao);
|
||||
this.imageVO = imageDao.findById(this.imageVO.getId());
|
||||
return result;
|
||||
}
|
||||
// public boolean stateTransit(TemplateEvent e) throws NoTransitionException {
|
||||
// this.imageVO = imageDao.findById(this.imageVO.getId());
|
||||
// boolean result = imageMgr.getStateMachine().transitTo(this.imageVO, e, null, imageDao);
|
||||
// this.imageVO = imageDao.findById(this.imageVO.getId());
|
||||
// return result;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void processEvent(Event event) {
|
||||
@ -178,9 +175,9 @@ public class TemplateObject implements TemplateInfo {
|
||||
templEvent = TemplateEvent.OperationFailed;
|
||||
}
|
||||
|
||||
if (templEvent != null && this.getDataStore().getRole() == DataStoreRole.Image) {
|
||||
this.stateTransit(templEvent);
|
||||
}
|
||||
// if (templEvent != null && this.getDataStore().getRole() == DataStoreRole.Image) {
|
||||
// this.stateTransit(templEvent);
|
||||
// }
|
||||
}
|
||||
|
||||
objectInStoreMgr.update(this, event);
|
||||
@ -241,9 +238,9 @@ public class TemplateObject implements TemplateInfo {
|
||||
templEvent = TemplateEvent.OperationFailed;
|
||||
}
|
||||
|
||||
if (templEvent != null && this.getDataStore().getRole() == DataStoreRole.Image) {
|
||||
this.stateTransit(templEvent);
|
||||
}
|
||||
// if (templEvent != null && this.getDataStore().getRole() == DataStoreRole.Image) {
|
||||
// this.stateTransit(templEvent);
|
||||
// }
|
||||
}
|
||||
objectInStoreMgr.update(this, event);
|
||||
} catch (NoTransitionException e) {
|
||||
|
||||
@ -27,6 +27,7 @@ import javax.inject.Inject;
|
||||
import org.apache.cloudstack.api.BaseCmd;
|
||||
import org.apache.cloudstack.api.response.TemplateResponse;
|
||||
import org.apache.cloudstack.api.response.TemplateZoneResponse;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -103,7 +104,7 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im
|
||||
templateResponse.setDisplayText(template.getDisplayText());
|
||||
templateResponse.setPublic(template.isPublicTemplate());
|
||||
templateResponse.setCreated(template.getCreatedOnStore());
|
||||
templateResponse.setReady(template.getState() == TemplateState.Ready);
|
||||
templateResponse.setReady(template.getState() == ObjectInDataStoreStateMachine.State.Ready);
|
||||
templateResponse.setFeatured(template.isFeatured());
|
||||
templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
|
||||
templateResponse.setPasswordEnabled(template.isEnablePassword());
|
||||
@ -293,7 +294,13 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im
|
||||
isoResponse.setPublic(iso.isPublicTemplate());
|
||||
isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
|
||||
isoResponse.setCreated(iso.getCreatedOnStore());
|
||||
isoResponse.setReady(iso.getState() == TemplateState.Ready);
|
||||
if ( iso.getTemplateType() == TemplateType.PERHOST ){
|
||||
// for xs-tools.iso and vmware-tools.iso, we didn't download, but is ready to use.
|
||||
isoResponse.setReady(true);
|
||||
}
|
||||
else{
|
||||
isoResponse.setReady(iso.getState() == ObjectInDataStoreStateMachine.State.Ready);
|
||||
}
|
||||
isoResponse.setBootable(iso.isBootable());
|
||||
isoResponse.setFeatured(iso.isFeatured());
|
||||
isoResponse.setCrossZones(iso.isCrossZones());
|
||||
|
||||
@ -26,17 +26,12 @@ import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
|
||||
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
|
||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.server.ResourceTag.TaggedResourceType;
|
||||
import com.cloud.storage.Storage;
|
||||
import com.cloud.storage.Volume;
|
||||
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
|
||||
@Entity
|
||||
@Table(name="template_view")
|
||||
@ -241,8 +236,8 @@ public class TemplateJoinVO extends BaseViewVO implements ControlledViewEntity {
|
||||
private String tagCustomer;
|
||||
|
||||
@Column(name = "state")
|
||||
@Enumerated(value=EnumType.STRING)
|
||||
private TemplateState state;
|
||||
@Enumerated(EnumType.STRING)
|
||||
ObjectInDataStoreStateMachine.State state;
|
||||
|
||||
public TemplateJoinVO() {
|
||||
}
|
||||
@ -1021,16 +1016,15 @@ public class TemplateJoinVO extends BaseViewVO implements ControlledViewEntity {
|
||||
|
||||
|
||||
|
||||
public TemplateState getState() {
|
||||
public ObjectInDataStoreStateMachine.State getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void setState(TemplateState state) {
|
||||
public void setState(ObjectInDataStoreStateMachine.State state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1830,7 +1830,7 @@ CREATE VIEW `cloud`.`template_view` AS
|
||||
vm_template.display_text,
|
||||
vm_template.enable_password,
|
||||
vm_template.guest_os_id,
|
||||
vm_template.state,
|
||||
-- vm_template.state,
|
||||
guest_os.uuid guest_os_uuid,
|
||||
guest_os.display_name guest_os_name,
|
||||
vm_template.bootable,
|
||||
@ -1860,6 +1860,7 @@ CREATE VIEW `cloud`.`template_view` AS
|
||||
data_center.name data_center_name,
|
||||
launch_permission.account_id lp_account_id,
|
||||
template_store_ref.store_id,
|
||||
template_store_ref.state,
|
||||
template_store_ref.download_state,
|
||||
template_store_ref.download_pct,
|
||||
template_store_ref.error_str,
|
||||
@ -1898,7 +1899,7 @@ CREATE VIEW `cloud`.`template_view` AS
|
||||
left join
|
||||
`cloud`.`data_center` ON template_zone_ref.zone_id = data_center.id
|
||||
left join
|
||||
`cloud`.`image_store` ON image_store.data_center_id = data_center.id OR image_store.scope = 'REGION'
|
||||
`cloud`.`image_store` ON image_store.removed is NULL AND (image_store.data_center_id = data_center.id OR image_store.scope = 'REGION')
|
||||
left join
|
||||
`cloud`.`template_store_ref` ON template_store_ref.template_id = vm_template.id AND template_store_ref.store_id = image_store.id
|
||||
left join
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user