LGTM, thanks

On Wed, Jul 23, 2014 at 10:45:00AM +0200, 'Klaus Aehlig' via ganeti-devel wrote:
> Move the release statement for the BGL to the finally block
> enclosing the statement that acquired it. In this way, we are
> sure to always eventually release the BGL. Also replace the
> freeing request by a FreeLocksLevel request, which also cancels
> all pending requests that still might exist.
> 
> Signed-off-by: Klaus Aehlig <[email protected]>
> ---
>  lib/mcpu.py | 29 ++++++++++++-----------------
>  1 file changed, 12 insertions(+), 17 deletions(-)
> 
> diff --git a/lib/mcpu.py b/lib/mcpu.py
> index f08c3c9..db53ed3 100644
> --- a/lib/mcpu.py
> +++ b/lib/mcpu.py
> @@ -633,26 +633,21 @@ class Processor(object):
>          raise errors.ProgrammerError("Opcode '%s' requires BGL, but locks 
> are"
>                                       " disabled" % op.OP_ID)
>  
> +      lu = lu_class(self, op, self.context, self.cfg, self.rpc,
> +                    self._wconfdcontext, self.wconfd)
> +      lu.wconfdlocks = self.wconfd.Client().ListLocks(self._wconfdcontext)
> +      lu.ExpandNames()
> +      assert lu.needed_locks is not None, "needed_locks not set by LU"
> +
>        try:
> -        lu = lu_class(self, op, self.context, self.cfg, self.rpc,
> -                      self._wconfdcontext, self.wconfd)
> -        lu.wconfdlocks = self.wconfd.Client().ListLocks(self._wconfdcontext)
> -        lu.ExpandNames()
> -        assert lu.needed_locks is not None, "needed_locks not set by LU"
> -
> -        try:
> -          result = self._LockAndExecLU(lu, locking.LEVEL_CLUSTER + 1,
> -                                       calc_timeout)
> -        finally:
> -          if self._ec_id:
> -            self.cfg.DropECReservations(self._ec_id)
> +        result = self._LockAndExecLU(lu, locking.LEVEL_CLUSTER + 1,
> +                                     calc_timeout)
>        finally:
> -        # Release BGL if owned
> -        bglname = "%s/%s" % (locking.LEVEL_NAMES[locking.LEVEL_CLUSTER],
> -                             locking.BGL)
> -        self.wconfd.Client().TryUpdateLocks(self._wconfdcontext,
> -                                            [[bglname, "release"]])
> +        if self._ec_id:
> +          self.cfg.DropECReservations(self._ec_id)
>      finally:
> +      self.wconfd.Client().FreeLocksLevel(
> +        self._wconfdcontext, locking.LEVEL_NAMES[locking.LEVEL_CLUSTER])
>        self._cbs = None
>  
>      self._CheckLUResult(op, result)
> -- 
> 2.0.0.526.g5318336
> 

Reply via email to