mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Add state transition for destroy scenario.
This commit is contained in:
parent
70f866156f
commit
8984e430ce
@ -154,9 +154,21 @@ public class TemplateServiceImpl implements TemplateService {
|
||||
public void createTemplateAsync(
|
||||
TemplateInfo template, DataStore store, AsyncCompletionCallback<TemplateApiResult> callback) {
|
||||
// persist template_store_ref entry
|
||||
DataObject templateOnStore = store.create(template);
|
||||
// update template_store_ref state
|
||||
templateOnStore.processEvent(ObjectInDataStoreStateMachine.Event.CreateOnlyRequested);
|
||||
TemplateObject templateOnStore = (TemplateObject)store.create(template);
|
||||
// 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);
|
||||
TemplateApiResult result = new TemplateApiResult(templateOnStore);
|
||||
result.setResult(e.toString());
|
||||
result.setSucess(false);
|
||||
if ( callback != null ){
|
||||
callback.complete(result);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
TemplateOpContext<TemplateApiResult> context = new TemplateOpContext<TemplateApiResult>(callback,
|
||||
(TemplateObject)templateOnStore, null);
|
||||
@ -482,6 +494,14 @@ 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>();
|
||||
|
||||
TemplateOpContext<TemplateApiResult> context = new TemplateOpContext<TemplateApiResult>(null, to, future);
|
||||
|
||||
@ -24,6 +24,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
|
||||
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;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateEvent;
|
||||
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
|
||||
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.SnapshotDataFactory;
|
||||
@ -98,6 +100,14 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
|
||||
State.Ready);
|
||||
stateMachines.addTransition(State.Copying, Event.OperationFailed,
|
||||
State.Ready);
|
||||
stateMachines.addTransition(State.Ready, Event.DestroyRequested,
|
||||
State.Destroying);
|
||||
stateMachines.addTransition(State.Destroying, Event.DestroyRequested,
|
||||
State.Destroying);
|
||||
stateMachines.addTransition(State.Destroying, Event.OperationSuccessed,
|
||||
State.Destroyed);
|
||||
stateMachines.addTransition(State.Destroying, Event.OperationFailed,
|
||||
State.Destroying);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user