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

View File

@ -41,6 +41,8 @@ public class ImageDataManagerImpl implements ImageDataManager {
stateMachine.addTransition(TemplateState.Destroying, 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.OperationFailed, TemplateState.Destroying);
stateMachine.addTransition(TemplateState.Destroying, TemplateEvent.OperationSucceeded, TemplateState.Destroyed); 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 @Override

View File

@ -178,6 +178,8 @@ public class TemplateObject implements TemplateInfo {
TemplateEvent templEvent = null; TemplateEvent templEvent = null;
if (event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) { if (event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) {
templEvent = TemplateEvent.CreateRequested; templEvent = TemplateEvent.CreateRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.DestroyRequested){
templEvent = TemplateEvent.DestroyRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) { } else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) {
templEvent = TemplateEvent.OperationSucceeded; templEvent = TemplateEvent.OperationSucceeded;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) { } else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) {
@ -229,6 +231,8 @@ public class TemplateObject implements TemplateInfo {
TemplateEvent templEvent = null; TemplateEvent templEvent = null;
if (event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) { if (event == ObjectInDataStoreStateMachine.Event.CreateOnlyRequested) {
templEvent = TemplateEvent.CreateRequested; templEvent = TemplateEvent.CreateRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.DestroyRequested){
templEvent = TemplateEvent.DestroyRequested;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) { } else if (event == ObjectInDataStoreStateMachine.Event.OperationSuccessed) {
templEvent = TemplateEvent.OperationSucceeded; templEvent = TemplateEvent.OperationSucceeded;
} else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) { } else if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) {

View File

@ -108,6 +108,9 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
State.Destroyed); State.Destroyed);
stateMachines.addTransition(State.Destroying, Event.OperationFailed, stateMachines.addTransition(State.Destroying, Event.OperationFailed,
State.Destroying); 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 @Override