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(
|
public void createTemplateAsync(
|
||||||
TemplateInfo template, DataStore store, AsyncCompletionCallback<TemplateApiResult> callback) {
|
TemplateInfo template, DataStore store, AsyncCompletionCallback<TemplateApiResult> callback) {
|
||||||
// persist template_store_ref entry
|
// persist template_store_ref entry
|
||||||
DataObject templateOnStore = store.create(template);
|
TemplateObject templateOnStore = (TemplateObject)store.create(template);
|
||||||
// update template_store_ref state
|
// update template_store_ref and template state
|
||||||
templateOnStore.processEvent(ObjectInDataStoreStateMachine.Event.CreateOnlyRequested);
|
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,
|
TemplateOpContext<TemplateApiResult> context = new TemplateOpContext<TemplateApiResult>(callback,
|
||||||
(TemplateObject)templateOnStore, null);
|
(TemplateObject)templateOnStore, null);
|
||||||
@ -482,6 +494,14 @@ 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>();
|
||||||
|
|
||||||
TemplateOpContext<TemplateApiResult> context = new TemplateOpContext<TemplateApiResult>(null, to, future);
|
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.DataStore;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
|
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.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.Event;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
|
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
|
||||||
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
|
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
|
||||||
@ -98,6 +100,14 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
|
|||||||
State.Ready);
|
State.Ready);
|
||||||
stateMachines.addTransition(State.Copying, Event.OperationFailed,
|
stateMachines.addTransition(State.Copying, Event.OperationFailed,
|
||||||
State.Ready);
|
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
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user