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

@ -158,9 +158,7 @@ public class TemplateServiceImpl implements TemplateService {
// update template_store_ref and template state
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);
}
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

@ -41,6 +41,8 @@ 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

View File

@ -178,6 +178,8 @@ 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) {
@ -229,6 +231,8 @@ 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) {

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