On 07/13/2012 02:53 PM, Lee Yarwood wrote:
Hello all,
I'm looking into the use case around an aborted task within vdsmd.
AFAICT both engine and vdsClient are unable to deal with an aborted task
at present.
Within engine we call HSMStopTaskVDSCommand, this inturn calls stopTask
supplying _only_ the task_guid. vdsClient also calls stopTask with only
the task_guid argument.
Why does this matter? Well the only was you can kill an aborted task is
by passing the force=True argument to the stop method of the task object
itself. Without this the _incref method will throw a TaskAborted
exception and we will be unable to stop the task.
Could anyone give me some background on why this is the case before I
start looking into exposing the force option up the stack to engine and
vdsClient.
Relevant code snippets from task.py below.
Thanks in advance,
Lee
vdsm/storage/task.py
1198 def stop(self, force=False):
1199 self.log.debug("stopping in state %s (force %s)",
self.state, force)
1200 self._incref(force)
1201 try:
1202 if self.state.isDone():
1203 self.log.debug("Task already stopped (%s),
ignoring", self.state)
1204 return
1205 elif self.state.isRecovering() and not force and
(self.cleanPolicy == TaskCleanType.auto):
1206 self.log.debug("Task (%s) in recovery and force is
false, ignoring", self.state)
1207 return
1208
1209 self._aborting = True
1210 self._forceAbort = force
1211 finally:
1212 self._decref(force)
959 def _incref(self, force=False):
960 self.lock.acquire()
961 try:
962 if self.aborting() and (self._forceAbort or not force):
963 raise se.TaskAborted(unicode(self))
964
965 self.ref += 1
966 ref = self.ref
967 return ref
968 finally:
969 self.lock.release()
Bump, any thoughts? Apologies if this is a little ovirt-engine centric
for the list.
Lee
--
Lee Yarwood
Software Maintenance Engineer
Red Hat UK Ltd
200 Fowler Avenue IQ Farnborough, Farnborough, Hants GU14 7JP
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham (USA), Brendan Lane (Ireland), Matt
Parson(USA), Charlie Peters (USA)
GPG fingerprint : A5D1 9385 88CB 7E5F BE64 6618 BCA6 6E33 F672 2D76