X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/debac808e70d8808535ccaeec870377218e5cb6a..cff5fa7f25e60a9c08fd68306b4c11d81880901e:/lib/mcpu.py?ds=sidebyside diff --git a/lib/mcpu.py b/lib/mcpu.py index f8434dc..933d596 100644 --- a/lib/mcpu.py +++ b/lib/mcpu.py @@ -50,7 +50,6 @@ def _CalculateLockAttemptTimeouts(): """Calculate timeouts for lock attempts. """ - running_sum = 0 result = [1.0] # Wait for a total of at least 150s before doing a blocking acquire @@ -137,7 +136,7 @@ class _LockAttemptTimeoutStrategy(object): return timeout -class OpExecCbBase: +class OpExecCbBase: # pylint: disable-msg=W0232 """Base class for OpCode execution callbacks. """ @@ -222,11 +221,17 @@ class Processor(object): opcodes.OpTestAllocator: cmdlib.LUTestAllocator, } - def __init__(self, context): + def __init__(self, context, ec_id): """Constructor for Processor + @type context: GanetiContext + @param context: global Ganeti context + @type ec_id: string + @param ec_id: execution context identifier + """ self.context = context + self._ec_id = ec_id self._cbs = None self.rpc = rpc.RpcRunner(context.cfg) self.hmclass = HooksMaster @@ -270,7 +275,7 @@ class Processor(object): elif isinstance(names, basestring): parts.append(names) else: - parts.append(",".join(names)) + parts.append(",".join(sorted(names))) if shared: parts.append("shared") @@ -445,8 +450,13 @@ class Processor(object): lu.ExpandNames() assert lu.needed_locks is not None, "needed_locks not set by LU" - return self._LockAndExecLU(lu, locking.LEVEL_INSTANCE, - timeout_strategy.CalcRemainingTimeout) + try: + return self._LockAndExecLU(lu, locking.LEVEL_INSTANCE, + timeout_strategy.CalcRemainingTimeout) + finally: + if self._ec_id: + self.context.cfg.DropECReservations(self._ec_id) + finally: self.context.glm.release(locking.LEVEL_CLUSTER) @@ -501,6 +511,11 @@ class Processor(object): logging.info(message) self._Feedback(" - INFO: %s" % message) + def GetECId(self): + if not self._ec_id: + errors.ProgrammerError("Tried to use execution context id when not set") + return self._ec_id + class HooksMaster(object): """Hooks master.