Change bed303e9b4 introduced the ability
to set timeout without blocking, but this caused a few problems.
- The acquire method has now different arguments according to
a backend driver being used
- The change broke the existing usage with blocking=<number>
This addresses these two problems.
Change-Id: I8cefa2f4a940082d17cde43d132a818940422176
The issue with current one is we try to use blocking as timeout
provider.
That make the timeout setting in mysql bound with blocking.
And the lock can't served with scenario that when we don't need timeout
blocking but still timeout required.
Change-Id: I36c80f882a91cd1c63d5a3bc2d1d8cb50f6637c6
mysql should support customize timeout when acquire lock.
Curently we only put 0, which will lead to in crush cases,
lock might releases after mysql socket timeout, which is long hrs.
Change-Id: I01aaff4af34b89fe82d985276ba356ce85a910de
In this version a Connection is no longer a context manager. Fix
it by simply getting a Cursor out of it (locks don't seem to
interact with transactions, at least according to MariaDB docs).
Change-Id: I5ea06ebd2b976465ff82f10a74e140f30e9e803f
A test was failing due to L67 in tooz/drivers/mysql.py using `is`
instead of `==`.
Change-Id: I2baa101499f170ece99ccff368103b58f31ca79a
Closes-Bug: 1875749
If you're not intimately familiar with RFC 1808 it can be a bit tricky to
write tooz connection strings. In addition, some drivers do not document the
options that they recognize in a connection string. This can force a user to
read the driver code in order to figure out how to configure tooz to use said
driver, which should not be the case.
This change more explicitly documents the format of the connection string,
including which parts of an RFC 1808 URI it recognizes, and the options that
can be passed. It also clarifies which parts of the connection string are
optional (possibly because they have defaults) and which must always be
included.
Note that not every possible configuration is documented. For example, the
postgres driver supports multiple methods of configuring the connection host
and port. For consistency, I only documented the one that matches the other
drivers. This should be sufficient to allow a user to write a working
connection string.
This change also wires the etcd3 and etcd3gw drivers into the doc index since
they were missing before.
Change-Id: I66e54433115f27fb54badc2173f8f6044c49aacb
The connection is supposedly closed when blocking is False and the lock is not
acquired. Or when an exception happens in the locking code.
But if blocking is e.g. 5 seconds, then RetryError is raised but without
closing any connection at the end. This fixes that.
Change-Id: I7b40e466fe5fc01ee3f8c012f765aafca9ce716a
each lock creates it's own connection and only gets released when
garbage collection kicks in because of limitations
change logic so if we don't have lock, we don't have connection.
Change-Id: Ibf6eaf3ff3031424917e9fdb6920bf2fc1808b7c
Currently each driver in tooz only support exclusive lock, it is
inefficient in some scenarios which only need shared lock.
This patch adds shared lock in file driver.
Change-Id: I55a528977e74b27da736f421d2eee28c7aae8aa3
Implements: blueprint support-shared-lock
Co-Authored-By: Julien Danjou <julien@danjou.info>
Any coordinator that implements (and they all should) group membership
needs a member_id field and copy it to self. Just do that by default for
all driver at __init__ time.
Change-Id: I66d82815afd4c6e9354212e5ab3fba17931c1bbc
This adds a method implement the common pattern of joining a group and
creating it if it does not exist.
Change-Id: Ie46e7c1d07599a20bd8c24e28e5936b9f47a8bf4
If connection fails to be established, the acquired attribute does not
exist and then you see warning such has:
Exception AttributeError: "'MySQLLock' object has no attribute 'acquired'" in
<bound method MySQLLock.__del__ of <tooz.drivers.mysql.MySQLLock object at 0x7f79479056d0>>
Change-Id: Id61775483c91ba4127d9dd8cb56d6629a51d7081
Some of the returns were missing, so to ensure that the
interface is consistent ensure that we always return true
or false as needed, and add tests to ensure this keeps on
being maintained.
Change-Id: I877111c3a1d1d300881625c5900d4a825c5f1684
When a port number is not set explicitly in the connect URL to MySQL,
use MySQL default port number 3306
Change-Id: I3a7b50e7b8da00872960051b726e4b08ad9eacd6
Instead of having each driver index the last value of
each option, when all current drivers do not actually care
about any of the other indexes we can just use and provide
a option collapsing function that we by default apply to
all the existing drivers options (to avoid needing to index
by -1).
This avoids a confusion point for new folks, and one that
does not currently really provide any value (no driver in
tree besides one option in the redis driver uses/consumes
or understands multiple options in the first place).
Change-Id: Ia2898d84fd0e54871b829f4a95786a33accc20b8
Ensure that on python versions that can retain
the exceptions associated chain/causes that we make
an attempt to retain them, on versions of python
that do not have this at least attempt to retain the
chain (but we will not get the nice stack formatting
that comes along with that).
Change-Id: I7b46854c3969463009c39be28a3131d2d3179c82
This change adds a test to ensure that lock acquired from different
threads/processes work as expected. And fixes drivers when they won't.
With file driver, when two threads acquire the lock, when the first one
releases it, the second get a 'ValueError: I/O operation on closed file'
because the first have closed the file after releasing the lock.
Now, the file is open when the lock object is created and we let the GC
to close it when we don't need it anymore
With mysql, postgres, kazoo driver, multiple acquire inside the same
backend session, doesn't work like a exclusive lock, so we track the
status locally when we get the lock inside a process.
Change-Id: Ic990a79c9baebe534409c1a433e21f4a2f9a7d6a
Used 'parsed_url.hostname' instead of 'parsed_url.netloc' to get hostname.
Changed setup-mysql-env.sh script to start 'mysqld' with networking.
Closes-Bug: 1426351
Change-Id: Ifcf68b10ef5f93864d33d3a1719b9be321db6e5c
Multiple calls to get_coord(name) should returns a different lock object
This is not true for all drivers. This change fixes that.
Change-Id: Ie14f0f252cc54317867efb3b0490b90078fff32b
Start to add/build a developer oriented doc that
can be further refined to explain to developers how
to use the different tooz drivers (and what the varying
drivers capabilities are).
Change-Id: I49f6bf5b397d6bc5426c074f6196c764c8938d23