Statistics
| Branch: | Tag: | Revision:

root / lib / locking.py @ 3e77a36c

History | View | Annotate | Download (61.1 kB)

# Date Author Comment
b8028dcf 12/19/2012 06:29 pm Michael Hanselmann

Replace frozenset with compat.UniqueFrozenset

This is not a trivial s/frozenset/compat.UniqueFrozenset/, but rather
only replaces “frozenset” where appropriate. Most of the places are
“static” information that doesn't change after the module has been
loaded....

07db7ed2 12/03/2012 03:56 pm Michael Hanselmann

Add opportunistic locking to GanetiLockManager

Just forwarding the parameter, nothing more.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

a95c53ea 12/03/2012 03:56 pm Michael Hanselmann

locking: Implement opportunistic locking in LockSet

This patch adds a new parameter to “LockSet.acquire” named
“opportunistic”. When enabled the lockset will try to acquire as many
locks as possible, but it won't wait for them (with the exception of the
lockset-internal lock in case the whole set is acquired). This is...

48aaca91 11/29/2012 12:46 pm Michael Hanselmann

locking: Change locking order, move NAL after instances

Some opcodes, for example LUInstanceFailover and LUInstanceMigrate,
can't know whether they need to acquire all nodes until they have a lock
on the instance. In turn they would have to acquire the node allocation...

8c811986 11/26/2012 01:26 pm Michael Hanselmann

locking: Method to check if LockSet is fully acquired

A new method is added to check whether the LockSet-internal lock is
held. This is the case after LockSet.acquire was called with
locking.ALL_SET.

Unit tests are updated, including one where the list of names must be...

8716b1db 11/23/2012 06:19 pm Michael Hanselmann

Add new lock level for node allocations

The new lock is similar to the BGL in the sense that it has its own
level and there is only one. It is called “node allocation lock”.
Logical units will use it to synchronize with instance creations, which
in turn will start using opportunistic locks on nodes....

621b43ed 11/21/2012 08:37 am Michael Hanselmann

locking.LockSet: Replace boolean parameter with constants

Upcoming changes will add opportunistic locking to “locking.LockSet”.
Doing so will require additional code in “LockSet.__acquire_inner”, at
which point the existing “want_all” parameter does not always apply....

a13d34a6 11/21/2012 03:44 am Michael Hanselmann

locking: Use frozenset instead of utils.UniqueSequence

In this case “frozenset” is good enough as the result's order doesn't
matter--it is the input to “sorted” (“utils.UniqueSequence” preserves
the order). “frozenset” is ca. 25% faster for this use-case....

6c0a75db 11/20/2012 07:50 pm Dimitris Aragiorgis

Basic IP pool management logic

Implement LUs for corresponding opcodes: * LUNetworkAdd:
- Check for IP validity
- Reserves all necessary IPs
- Create new Network config object * LUNetworkRemove:
- Checks if connected to any nodegroup
- Remove a Network config object...

dc6296ff 11/19/2012 09:34 pm Michael Hanselmann

locking: Simplify condition

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

03c5291c 11/19/2012 03:10 pm Michael Hanselmann

locking: Don't schedule pending acq. for short timeout

Scheduling a pending acquisition is relatively expensive and lot of code
is involved. Unless there is already one, a new pipe needs to be opened.
Data structures need to be updated as well, only to be undone shortly...

e02ee261 11/13/2012 11:33 am Helga Velroyen

Documentation for the NODE_RES level

Signed-off-by: Helga Velroyen <>
Reviewed-by: Guido Trotter <>

5ae4945a 08/23/2012 02:41 pm Iustin Pop

Bump pep8 version to 1.2

Debian Wheezy will ship with this version, and it has many improved checks compared to 0.6, so let's:

- bump version in the docs
- silence some new checks that are wrong due to our indent=2 instead of 4
- fix lots of errors in the code where the indentation was wrong by 1...

5ad68a23 04/13/2012 04:19 pm Michael Hanselmann

Merge branch 'devel-2.5'

  • devel-2.5: (29 commits)
    gnt-* {add,list,remove}-tags: Unify options
    Bump version for 2.5.0 final release
    configure.ac: Fix “too many arguments” error
    Fix extra whitespace
    Further fixes concerning drbd port release
    Fix a bug concerning TCP port release...
c6a2c16e 03/30/2012 03:01 pm Michael Hanselmann

locking: Remove unused OldStyleQueryLocks

No longer used after commit 090377807.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

70567db0 03/22/2012 03:03 pm Michael Hanselmann

locking: Notify only once on release

Don't notify for every released lock in shared mode. The last one is
enough.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Bernardo Dal Seno <>

8d7d8b57 03/22/2012 03:03 pm Michael Hanselmann

locking: Handle spurious notifications on lock acquire

This was already a TODO since the implementation of lock priorities in
September 2010. Under certain conditions a waiting acquire can be
notified at a time when it can't actually get the lock. In this case it...

26082b7e 03/22/2012 02:50 pm Michael Hanselmann

locking: Fix lock deletion with timeout

While working on another SharedLock fix I realized timeouts on lock
deletion don't work very well if the timeout actually expires. This
patch fixes the issue and adds a new unittest.

Signed-off-by: Michael Hanselmann <>...

3ccb3a64 02/21/2012 05:23 pm Michael Hanselmann

Replace single- with double-quotes

In at least two cases "%s" is replaced with str(), too.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

aa66c183 12/22/2011 07:16 pm Michael Hanselmann

Merge branch 'devel-2.5'

  • devel-2.5:
    jqueue: Factorize checking job processor's result
    jqueue unittest: Rename simple fake-job class
    jqueue: Fix epylint errors introduced in 37d76f1e4
    jqueue: Fix deadlock between job queue and dependency manager...
20699809 12/19/2011 05:37 pm Michael Hanselmann

locking: Add “__repr__” to SharedLock and PipeCondition

These help when debugging.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Andrea Spadaccini <>

c6a622cf 11/30/2011 12:16 pm Michael Hanselmann

locking: Allow checking if lock is owned in certain mode

With this patch the “LockSet” and “GanetiLockManager” classes have a new
function to check if a single or a group of locks (at a certain level)
have been acquired in a specific mode. This will be used for additional...

ee2b99e3 11/15/2011 03:50 pm Michael Hanselmann

locking: Make some aliased methods public

Some methods, such as “_is_owned” and “list_owned”, have been aliased to
make them public for a while now. This patch makes the actual
implementation public.

SharedLock's “is_owned” needs to be aliased to “_is_owned” to remain...

5d7a899e 11/02/2011 02:54 pm Michael Hanselmann

locking: Make level names consistent, add check

- Change all lock level names to their singular form
- Add assertion checking consistency between level names and lockset
name

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

4e070776 11/02/2011 02:54 pm Michael Hanselmann

Add new lock level for node resource modifications

This is in preparation for implementing a new resource model.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

b459a848 08/30/2011 11:24 am Andrea Spadaccini

DeprecationWarning fixes for pylint

In version 0.21, pylint unified all the disable-* (and enable-*)
directives to disable (resp. enable). This leads to a lot of
DeprecationWarning being emitted even if one uses the recommended
version of pylint (0.21.1, as stated in devnotes.rst)....

a4338da2 08/03/2011 05:41 pm Iustin Pop

Fix lint errors

It turns out that the only use of the operator module was for
itemgetter, so patch eb62069e should have removed that import too.

Signed-off-by: Iustin Pop <>
Reviewed-by: René Nussbaumer <>

eb62069e 08/03/2011 01:37 pm Iustin Pop

Add two more compat functions

operator.itemgetter(0) → fst
operator.itemgetter(1) → snd

snd is not used yet, but it makes sense to add both.

Signed-off-by: Iustin Pop <>
Reviewed-by: Guido Trotter <>

44b4eddc 07/21/2011 02:55 pm Michael Hanselmann

Make lock monitor more versatile

With this change it'll be possible to register other lock information
providers. One usecase for this are job dependencies, which can be shown
in the output of “gnt-debug locks”, too.

The lock monitor is changed to accept more than one return value from...

4c03b2b5 07/21/2011 02:55 pm Michael Hanselmann

locking.GLM: Allow adding locks to monitor

This will be used for exporting job dependencies through
the lock monitor.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

fdfe88b1 07/15/2011 08:12 pm Michael Hanselmann

Make SharedLock._is_owned public

This will be useful for assertions. GanetiLockManager._is_owned is
exported, too.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

3dbe3ddf 05/13/2011 03:57 pm Michael Hanselmann

SharedLock: Implement downgrade from exclusive to shared mode

If a job needs to modify a resource and then wait for a result, it must
acquire the resource lock in exclusive mode. In some cases it would be
possible to only have a shared lock for waiting. Until now it was not...

c307ee34 05/09/2011 06:34 pm Michael Hanselmann

Show locksets in lock monitor

When all locks contained in a set are acquired, the lockset's internal
lock is acquired with the same mode. With this patch the internal lock
will show up on the lock monitor, named e.g. “instances/[lockset]”.

Signed-off-by: Michael Hanselmann <>...

83f2d5f6 05/09/2011 06:33 pm Michael Hanselmann

locking: Make parameter to condition's wait() positional

It is always used in the locking code. Unittests are updated.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

113359fe 05/09/2011 06:33 pm Michael Hanselmann

SharedLock: Avoid acquires from sneaking in while notifying

In some rare cases new shared acquires could sneak in through the
condition cached in “__pending_shared” while the code was still
notifying acquires. This was only working because such a condition...

07cba1bc 04/29/2011 03:41 pm Michael Hanselmann

locking: Export “list_owned” from lock manager

This is analog to “is_owned” and will be used for assertions.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

e4e35357 03/16/2011 07:37 pm Michael Hanselmann

locking: Fix race condition in lock monitor

In some rare cases it can happen that a lock is re-created very soon
after deletion, while the old instance hasn't been destructed yet. In
such a case the code would detect a duplicate name and raise an
exception....

24d16f76 01/06/2011 12:08 pm Michael Hanselmann

Convert “gnt-debug locks” to query2

Locks can now be queried using “Query(what="lock", …)” over LUXI.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

819ca990 12/06/2010 02:59 pm Guido Trotter

locking: add nodegroup lock level

This also changes masterd to initialize the ganeti's manager with the
current list of nodegroup uuids, and updates unittests

Signed-off-by: Guido Trotter <>
Reviewed-by: Michael Hanselmann <>

3c8a73a4 12/02/2010 05:58 pm Michael Hanselmann

Merge branch 'devel-2.3'

  • devel-2.3:
    locking: Clarify message for removed locks
    Bump version for 2.3.1~rc1 release
    impexpd: Disable OpenSSL compression in socat if possible
    Bump version for 2.3.0

Conflicts:
NEWS: Trivial

Signed-off-by: Michael Hanselmann <>...

e1137eb6 12/01/2010 09:45 pm Michael Hanselmann

locking: Clarify message for removed locks

Just being told that a lock doesn't exist can be confusing. One case
were this happens is when a job (e.g. instance modify) waits for a job
removing the instance (e.g. export with remove).

Signed-off-by: Michael Hanselmann <>...

557838c1 11/16/2010 05:19 pm René Nussbaumer

Move locking.RunningTimeout to utils

As we need this functionality in other places than just locking it makes
sense to move it to utils rather than keeping it in locking

Signed-off-by: René Nussbaumer <>
Reviewed-by: Michael Hanselmann <>

f9116d58 10/28/2010 05:06 pm Guido Trotter

GanetiLockManager, remove default values

The nodes and instances parameters to the constructor are mandatory
anyway, as a value of None will fail when creating the LockSet. Rather
than fixing this adding code lines, since we never used the default
value, let's remove them and require that the parameters are passed....

b30d95b6 09/24/2010 06:18 pm Michael Hanselmann

locking: Implement priority in Ganeti lock manager

Signed-off-by: Michael Hanselmann <>
Reviewed-by: René Nussbaumer <>

7100c2fa 09/24/2010 06:18 pm Michael Hanselmann

locking: Don't set default priority as keyword default

This allows users of these classes to simply pass None if they want to use the
default value (the actual default is an internal constant), instead of
dynamically constructing the keyword arguments.

Signed-off-by: Michael Hanselmann <>...

a68fe106 09/10/2010 03:11 pm Michael Hanselmann

Merge branch 'devel-2.2'

  • devel-2.2:
    Fix pylint warning in http/__init__.py
    Allow SSL ciphers to be overridden in HTTP server
    jqueue: Resume jobs from “waitlock” status
    jqueue: Move queue inspection into separate function
    jqueue: Don't update file in MarkUnfinishedOps...
05ad571c 09/10/2010 02:22 pm Michael Hanselmann

locking.SharedLock: Update class docstring

This was already outdated when the initial version of SharedLock was added
in commit 162c1c1f1 (February 2008).

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

887c7aa6 09/07/2010 04:56 pm Michael Hanselmann

locking: Implement priorities in SharedLock and LockSet

For proper support of job priorities, jobs' locks need to respect
priorities. Otherwise it could happen that a job with a lower priority
could get a lock before a job with a higher priority (depending on...

c31825f7 08/27/2010 03:03 pm Michael Hanselmann

Show list of pending acquires in “gnt-debug locks”

This is accomplished by keeping a list of waiting threads instead
of just their number inside the lock-internal condition. A few
other tweaks to the output format are also made.

Signed-off-by: Michael Hanselmann <>...

19b9ba9a 08/24/2010 05:57 pm Michael Hanselmann

Add simple lock monitor

This patch adds an initial implementation of a lock monitor, accessible
for the user through “gnt-debug locks”. It currently shows all resource
locks: BGL, nodes and instances. Config and job queue locks could be
shown too, but wouldn't be of much help. The current owner(s) and mode...

4fb780d1 08/23/2010 05:57 pm Michael Hanselmann

locking.LockSet: Use function to get member lock name

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

7f93570a 07/16/2010 04:56 pm Iustin Pop

Implement lock names for debugging purposes

This patch adds lock names to SharedLocks and LockSets, that can be used
later for displaying the actual locks being held/used in places where we
only have the lock, and not the entire context of the locking operation....

dbb11e8b 06/28/2010 02:04 pm Guido Trotter

ssynchronized: act on a class member

The ssynchronized decorator takes the lock to act on in input.
With this change we allow a string to be passed, and if so we assume the
function it protects is a class method, and we act on the member of the
class itself named as the string we got....

cdf158a8 06/11/2010 12:23 pm Guido Trotter

Remove locking._CountingCondition

This class is unused and untested. We must have forgot it around.

Signed-off-by: Guido Trotter <>
Reviewed-by: Michael Hanselmann <>

7f890059 06/10/2010 05:45 pm Guido Trotter

_BaseCondition: allow saving/restoring state

Signed-off-by: Guido Trotter <>
Reviewed-by: Michael Hanselmann <>

1a4e32d0 06/10/2010 05:45 pm Guido Trotter

SharedLock _acquire_restore and _release_save

If a shared lock is used inside a condition, we need to make sure that
it's reacquired in the same way as it was originally, after the wait.

Signed-off-by: Guido Trotter <>
Reviewed-by: Michael Hanselmann <>

cea881e5 04/21/2010 08:48 pm Michael Hanselmann

Add separate module for backported language functionality

utils.py, where they were before, is already huge.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

ef7b75b2 02/15/2010 07:03 pm Michael Hanselmann

Merge remote branch 'origin/stable-2.1' into devel-2.1

  • origin/stable-2.1:
    Fix bug introduced in commit 413b747
    Fix locking bug causing high CPU usage
    Fix confd procotol design description
    Implement instance rename QA tests
    Fix "gnt-instance rename" functionality...
b44b0141 02/10/2010 03:54 pm Michael Hanselmann

Fix bug introduced in commit 413b747

While commit 413b747 fixed the issue of poll(2) returning too
soon, it didn't work when the poll(2) call should've been
blocking. This is now fixed and verified.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

413b7472 02/10/2010 02:49 pm Michael Hanselmann

Fix locking bug causing high CPU usage

Iustin Pop noticed unusually high CPU usage with 2.1's master
daemon, even with very simple opcodes like OP_TEST_DELAY. As
it turns out, we inadvertently passed seconds as milliseconds
to a call to poll(2). Due to the way the loop around the call...

ec44d893 01/27/2010 12:19 pm Guido Trotter

locking: add/fix @type information

This patch missing @type information for all public methods, modifies
one to conform to the rest, and removes some information from @param
when it's been expressed in @type.

Signed-off-by: Guido Trotter <>...

154b9580 01/27/2010 11:17 am Balazs Lecz

Fix slots definitions

According to http://docs.python.org/reference/datamodel.html#slots

  • The action of a slots declaration is limited to the class where it
    is defined. As a result, subclasses will have a dict unless they
    also define slots (which must only contain names of any...
71e1863e 01/13/2010 03:02 pm Michael Hanselmann

locking: Fix race condition in LockSet

This patch fixes a race condition when acquiring all locks in
a LockSet instance. The list of lock names needs to be sorted
to guarantee a consistent locking order, but the names were not
sorted when acquiring all locks in the set....

9b154270 01/13/2010 03:02 pm Michael Hanselmann

locking: Append to list outside error handling block

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

56452af7 01/13/2010 03:02 pm Michael Hanselmann

locking: Don't fail in error handling if lock isn't owned

In case an exception was thrown while acquiring the lock, not necessarily all
owned locks are also really acquired. Before this change, an exception could be
masked by another exception thrown here. There is no good clean-up strategy...

7260cfbe 01/04/2010 11:15 am Iustin Pop

Add targeted pylint disables

This patch should have only:

- pylint disables
- docstring changes
- whitespace changes

Signed-off-by: Iustin Pop <>
Reviewed-by: Olivier Tharan <>

d984846d 12/28/2009 02:05 pm Iustin Pop

Merge branch 'devel-2.0' into devel-2.1

  • devel-2.0:
    Fix indentation in hv_kvm
    Implement BuildHooksEnv for NoHooksLU
    Clarifiy some more wide pylint disables
    Fix two bugs in seldom-used codepaths
    Update pylintrc
    Add targetted pylint disables
    Partial cherry-pick of 6c881c5 from the 2.1 branch...
fe267188 12/28/2009 12:43 pm Iustin Pop

Add targetted pylint disables

This patch adds targeted pylint disables, where it makes sense (either
due to limitations in pylint or due to historical usage), and also a few
blanket ones in rapi where all the names are… “different”.

Signed-off-by: Iustin Pop <>...

c70d2d9b 12/28/2009 12:43 pm Iustin Pop

Clarifiy some more wide pylint disables

This removes/updates some module-wide pylint disables.

Signed-off-by: Iustin Pop <>
Reviewed-by: Olivier Tharan <>

1f864b60 11/25/2009 04:30 pm Iustin Pop

Remove quotes from CommaJoin and convert to it

This patch removes the quotes from CommaJoin and converts most of the
callers (that I could find) to it. Since CommaJoin does str(i) for i in
param, we can remove these, thus simplifying slightly a few calls....

f4e673fb 10/15/2009 05:47 pm Michael Hanselmann

locking: Convert pipe condition to new timeout class

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

7e8841bd 10/15/2009 05:47 pm Michael Hanselmann

locking.LockSet: Move timeout calculation to separate class

This class can also be used by mcpu.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

b6b87034 10/15/2009 05:47 pm Michael Hanselmann

locking, mcpu: Ensure timeout is always >= 0.0

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

e4335b5b 10/13/2009 08:08 pm Michael Hanselmann

locking.LockSet: Improve assertions

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

76e2f08a 10/13/2009 08:08 pm Michael Hanselmann

locking: Factorize LockSet.acquire

By moving the main code of LockSet.acquire to its own function
we reduce the code complexity a bit and clarify the exception
handling.

This also fixes a case where a lock acquire timeout wasn't
handled correctly, leading to obscure error messages....

69b99987 10/12/2009 01:48 pm Michael Hanselmann

Code and docstring style fixes

Found using pylint and epydoc.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

5aab242c 10/12/2009 01:46 pm Michael Hanselmann

locking.LockSet: Implement acquire timeouts

The timeout passed to LockSet.acquire() is measured over all lock acquires. If
LockSet.acquire fails to acquire all requested locks within the specified
amount of time, all locks are released again and the acquire fails....

008b92fa 10/02/2009 03:04 pm Michael Hanselmann

More locking tests race conditions fixes

There were more race conditions. By adding a notify function to
SharedLock.acquire we can prevent them.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

34cb5617 10/01/2009 07:47 pm Guido Trotter

SingleActionPipeCondition =~ s/Action/Notify/

With this patch we simplify usage on the SingleActionCondition (which
wasn't a condition at all) by making it a real condition. This way we
can just wait() on it, or notifyAll() as we would on a normal one. The...

2419060d 10/01/2009 07:45 pm Guido Trotter

Abstract "base" condition code in a separate class

Each condition has an underlying lock, the acquire and release methods,
and a few helper methods to check that it's called in the proper way.

Abstract them to a separate class so we can have more than one without...

a66bd91b 10/01/2009 07:35 pm Michael Hanselmann

locking.SharedLock: Fix bug in delete function

SharedLock.__acquire_unlocked uses keyword parameters. Just passing
the timeout would set the “shared” parameter.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

5e0a6daf 10/01/2009 07:17 pm Michael Hanselmann

Rename LockSet.acquire parameter “blocking” to “timeout”

Also remove the “blocking” parameter from LockSet.remove and
GanetiLockManager.remove. There's no point in implementing timeouts on removal
unless we need them.

Signed-off-by: Michael Hanselmann <>...

c6997f21 09/30/2009 06:35 pm Michael Hanselmann

Change SharedLock to new pipe(2)-based condition

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

48dabc6a 09/30/2009 06:34 pm Michael Hanselmann

Add _PipeCondition class

_PipeCondition is a condition implemented using pipe(2) and poll(2).
It allows the implementation of timeouts without using a busy-wait loop
with time.sleep.

Unlike Python's built-in threading.Condition class and to save file
descriptors and an internal queue, it can only be used to notify...

d76167a5 09/30/2009 06:34 pm Michael Hanselmann

Add _SingleActionPipeCondition class

This class will be used as a basic block for pipe(2)-based
conditions. Upon initialization it creates a pipe and can be
notified once (hence the “single action” in the name). A
callable helper class is used to wait for notifications....

84e344d4 09/30/2009 06:33 pm Michael Hanselmann

SharedLock: implement timeouts

This patch greatly simplifies the SharedLock code and implements
timeouts for the acquire() and delete() functions. A wrapper around
Python's threading.Condition class must be used to ensure thread
safety when check whether there are any waiters left....

9216a9f7 09/14/2009 02:21 pm Michael Hanselmann

locking: Acquire SharedLock in shared mode in separate function

This is for some more symetry with
SharedLock.__exclusive_acquire.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

ea205dbc 09/14/2009 02:16 pm Michael Hanselmann

locking: Add level name dict

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Olivier Tharan <>

470ce2ee 09/11/2009 06:29 pm Michael Hanselmann

locking: Don't swallow exceptions

This is an indentation bug.

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Guido Trotter <>

5bbd3f7f 07/07/2009 03:51 pm Michael Hanselmann

Fix some typos

Signed-off-by: Michael Hanselmann <>
Reviewed-by: Iustin Pop <>

2a21bc88 01/29/2009 05:08 pm Iustin Pop

locking.LockSet: don't modify input arguments

Currently LockSet.acquire() sorts in place it's input argument if it's a
list. This is not good, since callers might depend on a specific
ordering of the input data, and this is a 'hidden' modification.

We fix it by simply using a sorted copy, instead of sorting in place....

f12eadb3 01/29/2009 05:08 pm Iustin Pop

Re-wrap some lines to keep them under 80 chars

This non-code change rewraps some lines in locking.py to keep them under
80 chars.

Reviewed-by: ultrotter

c41eea6e 12/11/2008 07:13 pm Iustin Pop

Fix epydoc format warnings

This patch should fix all outstanding epydoc parsing errors; as such, we
switch epydoc into verbose mode so that any new errors will be visible.

Reviewed-by: imsnah

d2aff862 09/11/2008 12:44 pm Guido Trotter

LockSet: forbid add() on a partially owned set

This patch bans add() on a half-acquired set. This behavior was
previously possible, but created a deadlock if someone tried to acquire
the set-lock in the meantime, and thus is now forbidden. The
testAddRemove unit test is fixed for this new behavior, and includes a...

ab62526c 09/11/2008 12:43 pm Guido Trotter

Fix typo in a locking.py comment

Reviewed-by: imsnah

d4f4b3e7 09/11/2008 12:43 pm Guido Trotter

Add GanetiLockManager.is_owned function

This is a public version of the private function we already had.
We don't just change the previous version because it had lots of users
in the library itself and in the testing code.

Reviewed-by: imsnah

d4803c24 09/11/2008 12:43 pm Guido Trotter

Fix LockSet._names() to work with the set-lock

If the set-lock is acquired, currently, the _names function will fail on
a double acquire of a non-recursive lock. This patch fixes the behavior,
and some lines of code added to the testAcquireSetLock test check that...

e310b019 09/05/2008 02:00 pm Guido Trotter

Add locking.ALL_SET constant and use it

Rather than specifying None in needed_locks every time, with a nice
comment saying to read what we mean rather than what we write, and that
None actually means All, in our magic world, we'll hide this secret
under the ALL_SET constant in the locking module, which has value, you...

34ca3914 08/18/2008 03:50 pm Guido Trotter

LockSet: allow lists with duplicate values

If a list with a duplicate value is passed to a lockset what the code
now does is to try to acquire the lock twice, generating a
double-acquire exception in the SharedLock code. This is definitely an
issue. In order to solve it we can either forbit double values in a list...

04e1bfaf 07/23/2008 05:23 pm Guido Trotter

Invert nodes/instances locking order

An implementation mistake from the original design caused nodes to be
locked before instances, rather than after. This patch inverts the level
numbering, changing also the relevant unittests and the recursive
locking function starting point....