- Feb 10, 2010
-
-
Michael Hanselmann authored
While commit 413b7472 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 <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
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 works it didn't break competely, but caused higher CPU usage by the poll(2) call returning too early. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- Jan 27, 2010
-
-
Guido Trotter authored
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 <ultrotter@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Balazs Lecz authored
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 /additional/ slots). * If a class defines a slot also defined in a base class, the instance variable defined by the base class slot is inaccessible (except by retrieving its descriptor directly from the base class). This renders the meaning of the program undefined. In the future, a check may be added to prevent this. Signed-off-by:
Balazs Lecz <leczb@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Iustin Pop <iustin@google.com> Signed-off-by:
Iustin Pop <iustin@google.com>
-
- Jan 13, 2010
-
-
Michael Hanselmann authored
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. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
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 when acquiring a lock fails with an exception in either case. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- Jan 04, 2010
-
-
Iustin Pop authored
This patch should have only: - pylint disables - docstring changes - whitespace changes Signed-off-by:
Iustin Pop <iustin@google.com> Reviewed-by:
Olivier Tharan <olive@google.com>
-
- Dec 28, 2009
-
-
Iustin Pop authored
This removes/updates some module-wide pylint disables. Signed-off-by:
Iustin Pop <iustin@google.com> Reviewed-by:
Olivier Tharan <olive@google.com>
-
Iustin Pop authored
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 <iustin@google.com> Reviewed-by:
Olivier Tharan <olive@google.com>
-
- Nov 25, 2009
-
-
Iustin Pop authored
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. Signed-off-by:
Iustin Pop <iustin@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
- Oct 15, 2009
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
This class can also be used by mcpu. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- Oct 13, 2009
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
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. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- Oct 12, 2009
-
-
Michael Hanselmann authored
Found using pylint and epydoc. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
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. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- Oct 02, 2009
-
-
Michael Hanselmann authored
There were more race conditions. By adding a notify function to SharedLock.acquire we can prevent them. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- Oct 01, 2009
-
-
Guido Trotter authored
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 only catch is that notifyAll can be called only once, and wait can only be called before notifyAll has, but luckily our PipeCondition, now quite simplified, takes care of this, by providing a new SingleActionCondition each time the previous one has been notified. No Start/StopUsing function are needed anymore, and thus the condition is a lot more robust, and there's no way file descriptors can be left open, as they are closed in a finally block, in the same function where they were opened, by the last thread exiting the class. Signed-off-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
Guido Trotter authored
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 duplicating this code. Signed-off-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
Michael Hanselmann authored
SharedLock.__acquire_unlocked uses keyword parameters. Just passing the timeout would set the “shared” parameter. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
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 <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- Sep 30, 2009
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
_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 all waiters. Ganeti's use case for this condition class doesn't require the ability to notify only one waiter. Signed-off-by:
Guido Trotter <ultrotter@google.com> Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
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. Signed-off-by:
Guido Trotter <ultrotter@google.com> Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
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. Signed-off-by:
Guido Trotter <ultrotter@google.com> Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- Sep 14, 2009
-
-
Michael Hanselmann authored
This is for some more symetry with SharedLock.__exclusive_acquire. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Olivier Tharan <olive@google.com>
-
- Sep 11, 2009
-
-
Michael Hanselmann authored
This is an indentation bug. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- Jul 07, 2009
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- Jan 29, 2009
-
-
Iustin Pop authored
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. Reviewed-by: ultrotter
-
Iustin Pop authored
This non-code change rewraps some lines in locking.py to keep them under 80 chars. Reviewed-by: ultrotter
-
- Dec 11, 2008
-
-
Iustin Pop authored
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
-
- Sep 11, 2008
-
-
Guido Trotter authored
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 few more lines of testing and a new testConcurrentSetLockAdd function tests its behavior in the concurrent case. Reviewed-by: imsnah
-
Guido Trotter authored
Reviewed-by: imsnah
-
Guido Trotter authored
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
-
Guido Trotter authored
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 this and other functioins behave properly. Reviewed-by: imsnah
-
- Sep 05, 2008
-
-
Guido Trotter authored
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 guessed it, None. After that we'll substitute all usage in cmdlib. Some comments and examples have been fixed as well. Reviewed-by: iustinp
-
- Aug 18, 2008
-
-
Guido Trotter authored
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 or just delete the duplicates. In this patch we go for the latter solution, removing any duplicate values when creating the acquire_list. Reviewed-by: imsnah
-