mirror of
https://github.com/ceph/ceph
synced 2025-01-20 10:01:45 +00:00
mgr/volumes: introduce 'canceled' state in clone op state machine
When fetching the next execution state, -EINTR jumps to 'canceled' state signifying a canceled (interrupted) operation. Also include a helper routine to check if a given state machine is in initial state. Signed-off-by: Venky Shankar <vshankar@redhat.com>
This commit is contained in:
parent
126c4446ac
commit
ac9d697b1c
@ -9,6 +9,7 @@ class OpSm(object):
|
||||
|
||||
FAILED_STATE = 'failed'
|
||||
FINAL_STATE = 'complete'
|
||||
CANCEL_STATE = 'canceled'
|
||||
|
||||
OP_SM_SUBVOLUME = {
|
||||
INIT_STATE_KEY : FINAL_STATE,
|
||||
@ -16,8 +17,8 @@ class OpSm(object):
|
||||
|
||||
OP_SM_CLONE = {
|
||||
INIT_STATE_KEY : 'pending',
|
||||
'pending' : ('in-progress', FAILED_STATE),
|
||||
'in-progress' : (FINAL_STATE, FAILED_STATE),
|
||||
'pending' : ('in-progress', (FAILED_STATE, CANCEL_STATE)),
|
||||
'in-progress' : (FINAL_STATE, (FAILED_STATE, CANCEL_STATE)),
|
||||
} # type: Dict
|
||||
|
||||
STATE_MACHINES_TYPES = {
|
||||
@ -31,7 +32,15 @@ class OpSm(object):
|
||||
|
||||
@staticmethod
|
||||
def is_failed_state(state):
|
||||
return state == OpSm.FAILED_STATE
|
||||
return state == OpSm.FAILED_STATE or state == OpSm.CANCEL_STATE
|
||||
|
||||
@staticmethod
|
||||
def is_init_state(stm_type, state):
|
||||
stm = OpSm.STATE_MACHINES_TYPES.get(stm_type, None)
|
||||
if not stm:
|
||||
raise OpSmException(-errno.ENOENT, "state machine type '{0}' not found".format(stm_type))
|
||||
init_state = stm.get(OpSm.INIT_STATE_KEY, None)
|
||||
return init_state == state
|
||||
|
||||
@staticmethod
|
||||
def get_init_state(stm_type):
|
||||
@ -51,4 +60,9 @@ class OpSm(object):
|
||||
next_state = stm.get(current_state, None)
|
||||
if not next_state:
|
||||
raise OpSmException(-errno.EINVAL, "invalid current state '{0}'".format(current_state))
|
||||
return next_state[0] if ret == 0 else next_state[1]
|
||||
if ret == 0:
|
||||
return next_state[0]
|
||||
elif ret == -errno.EINTR:
|
||||
return next_state[1][1]
|
||||
else:
|
||||
return next_state[1][0]
|
||||
|
Loading…
Reference in New Issue
Block a user