Register template, delete template and create instance from registered

template are working on NFS.
This commit is contained in:
Min Chen 2013-05-08 10:29:09 -07:00
parent ac7be218d5
commit f8edb55497
4 changed files with 21 additions and 29 deletions

View File

@ -156,11 +156,9 @@ public class TemplateServiceImpl implements TemplateService {
// persist template_store_ref entry
TemplateObject templateOnStore = (TemplateObject)store.create(template);
// update template_store_ref and template state
try {
try{
templateOnStore.processEvent(ObjectInDataStoreStateMachine.Event.CreateOnlyRequested);
templateOnStore.stateTransit(TemplateEvent.CreateRequested);
} catch (NoTransitionException e) {
s_logger.debug("Failed to transit state", e);
} catch (Exception e) {
TemplateApiResult result = new TemplateApiResult(templateOnStore);
result.setResult(e.toString());
result.setSucess(false);
@ -463,12 +461,7 @@ public class TemplateServiceImpl implements TemplateService {
TemplateApiResult result = new TemplateApiResult(template);
CreateCmdResult callbackResult = callback.getResult();
if (callbackResult.isFailed()) {
try {
template.processEvent(ObjectInDataStoreStateMachine.Event.OperationFailed);
template.stateTransit(TemplateEvent.OperationFailed);
} catch (NoTransitionException e) {
s_logger.debug("Failed to update template state", e);
}
template.processEvent(ObjectInDataStoreStateMachine.Event.OperationFailed);
result.setResult(callbackResult.getResult());
parentCallback.complete(result);
return null;
@ -476,9 +469,7 @@ public class TemplateServiceImpl implements TemplateService {
try {
template.processEvent(ObjectInDataStoreStateMachine.Event.OperationSuccessed);
template.stateTransit(TemplateEvent.OperationSucceeded);
} catch (NoTransitionException e) {
s_logger.debug("Failed to transit state", e);
} catch (Exception e) {
result.setResult(e.toString());
parentCallback.complete(result);
return null;
@ -494,13 +485,6 @@ public class TemplateServiceImpl implements TemplateService {
TemplateObject to = (TemplateObject) template;
// update template_store_ref status
to.processEvent(ObjectInDataStoreStateMachine.Event.DestroyRequested);
try {
to.stateTransit(TemplateEvent.DestroyRequested);
} catch (NoTransitionException e) {
s_logger.debug("Failed to transit state", e);
//TODO: not fatal right now, still continue
}
AsyncCallFuture<TemplateApiResult> future = new AsyncCallFuture<TemplateApiResult>();
@ -514,7 +498,6 @@ public class TemplateServiceImpl implements TemplateService {
public Void deleteTemplateCallback(AsyncCallbackDispatcher<TemplateServiceImpl, CommandResult> callback, TemplateOpContext<TemplateApiResult> context) {
CommandResult result = callback.getResult();
TemplateObject vo = context.getTemplate();
// we can only update state in template_store_ref table
if (result.isSuccess()) {
vo.processEvent(Event.OperationSuccessed);
} else {

View File

@ -27,9 +27,9 @@ import com.cloud.utils.fsm.StateMachine2;
@Component
public class ImageDataManagerImpl implements ImageDataManager {
private final StateMachine2<TemplateState, TemplateEvent, VMTemplateVO>
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);
@ -41,8 +41,10 @@ public class ImageDataManagerImpl implements ImageDataManager {
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;

View File

@ -178,17 +178,19 @@ public class TemplateObject implements TemplateInfo {
TemplateEvent templEvent = null;
if (event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) {
templEvent = TemplateEvent.CreateRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.DestroyRequested){
templEvent = TemplateEvent.DestroyRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) {
templEvent = TemplateEvent.OperationSucceeded;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) {
templEvent = TemplateEvent.OperationFailed;
}
if (templEvent != null) {
this.stateTransit(templEvent);
}
}
ojbectInStoreMgr.update(this, event);
} catch (NoTransitionException e) {
s_logger.debug("failed to update state", e);
@ -225,16 +227,18 @@ public class TemplateObject implements TemplateInfo {
templateVO.setFormat(newTemplate.getFormat());
this.imageDao.update(templateVO.getId(), templateVO);
}
TemplateEvent templEvent = null;
if (event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) {
templEvent = TemplateEvent.CreateRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) {
} else if (event == ObjectInDataStoreStateMachine.Event.DestroyRequested){
templEvent = TemplateEvent.DestroyRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) {
templEvent = TemplateEvent.OperationSucceeded;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) {
templEvent = TemplateEvent.OperationFailed;
}
if (templEvent != null) {
this.stateTransit(templEvent);
}

View File

@ -108,6 +108,9 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
State.Destroyed);
stateMachines.addTransition(State.Destroying, Event.OperationFailed,
State.Destroying);
//TODO: further investigate why an extra event is sent when it is alreay Ready
stateMachines.addTransition(State.Ready, Event.OperationSuccessed,
State.Ready);
}
@Override