Hiredis is a minimalistic C client library for the Redis database.
It is minimalistic because it just adds minimal support for the
protocol, but at the same time it uses an high level printf-alike
API in order to make it much higher level than otherwise suggested
by its minimal code base and the lack of explicit bindings for
every Redis command.
Apart from supporting sending commands and receiving replies, it
comes with a reply parser that is decoupled from the I/O layer. It
is a stream parser designed for easy reusability, which can for
instance be used in higher level language bindings for efficient
reply parsing.
Hiredis only supports the binary-safe Redis protocol, so you can
use it with any Redis version >= 1.2.0.
The library comes with multiple APIs. There is the synchronous API,
the asynchronous API and the reply parsing API.
Replace interpreter path in installed file.
Released 2.4.15 2014-03-24
Changes since 2.4.14:
Lib/
* Added missing modules ldap.controls.openldap and
ldap.controls.pwdpolicy to setup.py
* Added missing imports to ldap.controls.pwdpolicy
* Fixed ldap.controls.pwdpolicy.decodeControlValue() to decode
string of digits
* Support for X-SUBST in schema element class LDAPSyntax
* Support for X-ORDERED and X-ORIGIN in schema element class AttributeType
* ldapurl: New scope 'subordinates' defined in
draft-sermersheim-ldap-subordinate-scope
Modules/
* New constant ldap.SCOPE_SUBORDINATE derived from ldap.h for
draft-sermersheim-ldap-subordinate-scope
* Fixed constant ldap.sasl.CB_GETREALM (thanks to Martin Pfeifer)
Functionality Added or Changed
Incompatible Change: The AES_ENCRYPT() and AES_DECRYPT() functions now permit control of the block encryption mode and take an optional initialization vector argument:
The new block_encryption_mode system variable controls the mode for block-based encryption algorithms. Its default value is aes-128-ecb, which signifies encryption using a key length of 128 bits and ECB mode.
An optional init_vector argument provides an initialization vector for encryption modes that require it:
AES_ENCRYPT(str,key_str[,init_vector])
AES_DECRYPT(crypt_str,key_str[,init_vector])
A random string of bytes to use for the initialization vector can be produced by calling the new RANDOM_BYTES() function.
For more information, see Encryption and Compression Functions.
These changes make statements that use AES_ENCRYPT() or AES_DECRYPT() unsafe for statement-based replication and they cannot be stored in the query cache. Queries that use RANDOM_BYTES() are unsafe for statement-based replication and cannot be stored in the query cache.
Incompatible Change: The ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE SQL modes now are deprecated and setting the sql_mode value to include any of them generates a warning. In MySQL 5.7, these modes do nothing. Instead, their effects are included in the effects of strict SQL mode (STRICT_ALL_TABLES or STRICT_TRANS_TABLES). The motivation for the change in MySQL 5.7 is to reduce the number of SQL modes with an effect dependent on strict mode and make them part of strict mode itself.
To make advance preparation for an upgrade to MySQL 5.7, see SQL Mode Changes in MySQL 5.7. That discussion provides guidelines to assess whether your applications will be affected by the SQL mode changes in MySQL 5.7.
InnoDB: MySQL now supports rebuilding regular and partitioned InnoDB tables using online DDL (ALGORITHM=INPLACE) for the following operations:
OPTIMIZE TABLE
ALTER TABLE ... FORCE
ALTER TABLE ... ENGINE=INNODB (when run on an InnoDB table)
Online DDL support reduces table rebuild time and permits concurrent DML, which helps reduce user application downtime. For additional information, see Overview of Online DDL.
On Solaris, mysql_config --libs now includes -R/path/to/library so that libraries can be found at runtime.
mysql_install_db provides a more informative diagnostic message when required Perl modules are missing.
The IGNORE clause for ALTER TABLE is now deprecated and will be removed in a future version of MySQL. ALTER IGNORE TABLE causes problems for replication, prevents online ALTER TABLE for unique index creation, and causes problems with foreign keys (rows removed in the parent table).
Bugs Fixed
Functionality Added or Changed
On Solaris, mysql_config --libs now includes -R/path/to/library so that libraries can be found at runtime.
Bugs Fixed
InnoDB: A regression introduced by Bug 14329288 would result in a performance degradation when a compressed table does not fit into memory.
InnoDB: The maximum value for innodb_thread_sleep_delay is now 1000000 microseconds. The previous maximum value (4294967295 microseconds on 32-bit and 18446744073709551615 microseconds on 64-bit) was unnecessarily large. Because the maximum value of innodb_thread_sleep_delay is limited by the value set for innodb_adaptive_max_sleep_delay (when set to a non-zero value), the maximum value for innodb_thread_sleep_delay is now the same as the maximum value for innodb_adaptive_max_sleep_delay.
InnoDB: In debug builds, creating a unique index on a binary column, with input data containing duplicate keys, would cause an assertion.
InnoDB: InnoDB would fail to start when innodb_data_file_path specified the data file size in kilobytes by appending K to the size value.
InnoDB: An insert buffer merge would cause an assertion error due to incorrectly handled ownership information for externally stored BLOBs.
InnoDB: Assertion failure in thread thread_num in file ibuf0ibuf.cc line 4080
InnoDB: Failing assertion: rec_get_deleted_flag(rec, page_is_comp(page))
InnoDB: Decreasing the auto_increment_increment value would have no affect on the next auto-increment value.
Replication: The server did not handle correctly the insertion of a row larger than 4 GB when using row-based replication.
Replication: When using row-based replication, an additional auto-increment column on the slave version of a table was not updated correctly; a zero was inserted instead.
Replication: Statements involving the Performance Schema tables should not be written to the binary log, because the content of these tables is applicable only to a given MySQL Server instance, and may differ greatly between different servers in a replication topology. The database administrator should be able to configure (INSERT, UPDATE, or DELETE) or flush (TRUNCATE TABLE) performance schema tables on a single server without affecting others. However, when replicating from a MySQL 5.5 master to a MySQL 5.5 or later slave, warnings about unsafe statements updating Performance Schema tables were elevated to errors. For MySQL 5.6 and later slaves, this prevented the simultaneous use of performance_schema and GTIDs (see Replication with Global Transaction Identifiers, in the MySQL 5.6 Manual).
This fix causes all updates on tables in the performance_schema database to be filtered on the master and not replicated, regardless of the type of logging that is in effect. Prior to this fix, statements using were handled by being marked as unsafe for replication, which caused warnings during execution; the statements were nonetheless written to the binary log, regardless of the logging format in effect.
Existing replication behavior for tables in the INFORMATION_SCHEMA database is not changed by this fix.
For more information, see MySQL Performance Schema.
Compilation failed if MySQL was configured with CFLAGS set to include a -Werror option with an argument.
A shared libmysqld embedded server library was not built on Linux.
While printing the server version, the mysql client did not check for buffer overflow in a string variable.
Contraction information in a collation could be mishandled, resulting in incorrect decisions about whether a character is part of a contraction, and miscalculation of contraction weights.
DROP TRIGGER succeeded even with the read_only system variable enabled.
Updating the Performance Schema setup_instruments table on a replication master caused a slave to exit.
Due to a race condition, it was possible for two threads to end up with the same query ID for different queries.
When run by root, mysqld --help --verbose exited with a nonzero error code after displaying the help message.
MySQL client programs from a Community Edition distribution could not connect using SSL to a MySQL server from an Enterprise Edition. This was due to a difference in certificate handling by yaSSL and OpenSSL (used for Community and Enterprise, respectively). OpenSSL expected a blank certificate to be sent when not all of the --ssl-ca, --ssl-cert, and --ssl-key options were specified, and yaSSL did not do so. To resolve this, yaSSL has been modified to send a blank certificate when an option is missing.
A deadlock error occurring during subquery execution could cause an assertion to be raised.
The Performance Schema stage/sql/Waiting to get readlock instrument is no longer used and has been removed.
For system variables that take a string value, SET statements permitted an unquoted value, but values that contained dots were parsed incorrectly and only part of the value was assigned. For example, SET GLOBAL slow_query_log_file = my_slow.log assigned the value my_slow. Now such values must be quoted or an error occurs.
On Windows, mysql_install_db.pl could be run only from within the bin directory under the installation directory.
The data corruption issue in PostgreSQL 9.3 affects binary replication standbys, servers being recovered from point-in-time-recovery backup, and standalone servers which recover from a system crash. The bug causes unrecoverable index corruption during recovery due to incorrect replay of row locking operations. This can then cause query results to be inconsistent depending on whether or not an index is used, and eventually lead to primary key violations and similar issues. For this reason, users are encouraged to replace each of their standby databases with a new base backup after applying the update.
Other PostgreSQL 9.3-only fixes in this update include:
Make sure that statistics files for dropped databases get deleted
Allow materialized views to be referenced in UPDATE and DELETE queries
Add read-only data_checksum parameter
Prevent erroneous operator push-down in postgres_fdw
This release resolves some other issues in all versions of PostgreSQL, including:
Fix timing consistency issue with NOTIFY
Allow regular expression execution to be cancelled
Improve performance of index checks for newly added rows
Prevent premature walsender disconnection
Prevent memory errors on newer Windows versions
Update timezone files
- Fixed target test failures on Windows.
- Added support for Postgres-XC to the PostgreSQL engine. Sqitch registry
tables are distributed by replication to all data nodes.
- Added support to MariaDB 5.3 and higher to the MySQL engine, thanks to
Ed Silva.
Updating this leaf package during the freeze.
Moneta provides a standard interface for interacting with various kinds of
key/value stores. Moneta supports the well-known NoSQL and document based
stores.
=== 4.8.0 (2014-03-01)
* Add SQL::AliasedExpression#alias alias for #aliaz (jeremyevans)
* Handle SQL::Identifier, SQL::QualifiedIdentifier, and SQL::AliasedExpression objects as first argument to Dataset#graph (jeremyevans)
* Respect qualification and aliases in symbols passed as first argument to Dataset#graph (dividedmind) (#769)
* Recognize new constraint violation error messages in SQLite 3.8.2+ (itswindtw) (#766)
* Use limit strategy to correctly handle limited associations in the dataset_associations plugin (jeremyevans)
* Handle issues in dataset_associations plugin when dataset uses unqualified identifiers for associations requiring joins (jeremyevans)
* Handle fractional seconds in input timestamps in the odbc/mssql adapter (Ross Attrill, jeremyevans)
* Return fractional seconds in timestamps in the odbc adapter (jeremyevans)
* Support :plain and :phrase options to Dataset#full_text_search on PostgreSQL (jeremyevans)
* Use limit strategy to correctly handle filtering by limited associations (jeremyevans)
* Simplify queries used for filtering by associations with conditions (jeremyevans)
* Use an eager limit strategy by default for *_one associations with orders (jeremyevans)
* Support :limit_strategy eager_graph option, for specifying strategy used for limited associations in that eager graph (jeremyevans)
* Add eager_graph_with_options to model datasets, for specifying options specific to the eager_graph call (jeremyevans)
* Handle offsets on *_many associations when eager graphing when there are no associated results (jeremyevans)
* Make Database#register_array_type work without existing scalar conversion proc in the pg_array extension (jeremyevans)
* Handle presence validations on foreign keys in associated objects when creating new associated objects in the nested_attributes plugin (jeremyevans)
* Respect offsets when eager graphing *_one associations (jeremyevans)
* Add association_join to model datasets, for setting up joins based on associations (jeremyevans)
* Add one_through_many association to many_through_many plugin, for only returning a single record (jeremyevans)
* Add :graph_order association option, useful when :order needs to contain qualified identifiers (jeremyevans)
* Add one_through_one association, similar to many_to_many but only returning a single record (jeremyevans)
=== 4.7.0 (2014-02-01)
* Don't swallow underlying exception if there is an exception closing the cursor on PostgreSQL (jeremyevans) (#761)
* Recognize primary key unique constraint violations on MSSQL and SQLAnywhere (jeremyevans)
* Recognize composite unique constraint violations on SQLite (timcraft) (#758)
* Make #* method without arguments on SQL::Function return a Function with * prepended to the arguments (jeremyevans)
* Add #function to SQL::Identifier and SQL::QualifiedIdentifier, allowing for easy use of schema qualified functions or functions names that need quoting (jeremyevans)
* Add SQL::Function#distinct for easier creation of aggregate functions using DISTINCT (jeremyevans)
* Add SQL::Function#over for easier creation of window functions (jeremyevans)
* Don't clear validation instance_hooks until after a successful save (jeremyevans)
* Support :raise_on_save_failure option for one_to_many, pg_array_to_many, and many_to_pg_array associations (jeremyevans)
* Make SQLTime#to_s return a string in HH:MM:SS format, since it shouldn't include date information (jeremyevans)
* Support the Database#tables :schema option in the jdbc adapter (robbiegill, jeremyevans) (#755)
* Automatically rollback transactions in killed threads in ruby 2.0+ (chanks) (#752)
* Add update_or_create plugin, for updating an object if it exists, or creating such an object if it does not (jeremyevans)
* Make auto_validations uniqueness validations work correctly for STI subclasses (jeremyevans)
* Support :dataset option to validates_unique vaildation (jeremyevans)
=== 4.6.0 (2014-01-02)
* Add Database#call_mssql_sproc on MSSQL for calling stored procedures and handling output parameters (jrgns, jeremyevans) (#748)
* Handle RuntimeErrors raised by oci8 in the oracle adapter (jeremyevans)
* Support OFFSET/FETCH on Microsoft SQL Server 2012 (jeremyevans)
* Support :server option for Database#{commit,rollback}_prepared_transaction on PostgreSQL, MySQL, and H2 (jeremyevans) (#743)
* Do not attempt to eager load and raise an exception when doing Model.eager(...).naked.all (jeremyevans)
* Recognize a couple additional disconnect errors in the jdbc/postgresql adapter (jeremyevans) (#742)
pkgsrc change: Add GEM_EXTSDIR support.
== v0.17.1 [2013-12-18] Michael Granger <ged@FaerieMUD.org>
Bugfixes:
- Fix compatibility with signal handlers defined in Ruby. This reverts
cancelation of queries running on top of the blocking libpq API (like
Connection#exec) in case of signals. As an alternative the #async_exec
can be used, which is reverted to use the non-blocking API, again.
- Wrap PQcancel to be called without GVL. It internally waits for
the canceling connection.
Documentation fixes:
- Fix documentation for PG::Connection::conndefaults.
Work around a C-preprocessor macro conflict that breaks the build for some configurations with Microsoft Visual Studio.
When computing the cost of the skip-scan optimization, take into account the fact that multiple seeks are required.
PGUSER, PGGROUP, and PGHOME are all in mk/defaults/mk.conf. They are
also set (?=) in each server Makefile. Worse, PGHOME is set to
varying values. However, the versions in defaults prevail.
Therefore, remove the extra/confusing settings, leaving this as a
user-settable variable with a default. pkg_info -B before and after
shows no related changes, so no PKGREVISION++.
Pointed out by Richard Palo, and ok adam@.
There's a related issue lurking, which is that PGHOME ends up being
/usr/pkg/pgsql, which is not under VARBASE, but I'm letting that be
because a change would be disruptive.
Code optimization and refactoring for improved performance.
Add the ".clone" and ".save" commands to the command-line shell.
Update the banner on the command-line shell to alert novice users when they are using an ephemeral in-memory database.
Fix editline support in the command-line shell.
Add support for coverage testing of VDBE programs using the SQLITE_TESTCTRL_VDBE_COVERAGE verb of sqlite3_test_control().
Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
Change the datatype of SrcList.nSrc from type u8 to type int to work around an issue in the C compiler on AIX.
Get extension loading working on Cygwin.
Bug fix: Fix the char() SQL function so that it returns an empty string rather than an "out of memory" error when called with zero arguments.
Bug fix: DISTINCT now recognizes that a zeroblob and a blob of all 0x00 bytes are the same thing. Ticket [fccbde530a]
Bug fix: Compute the correct answer for queries that contain an IS NOT NULL term in the WHERE clause and also contain an OR term in the WHERE clause and are compiled with SQLITE_ENABLE_STAT4. Ticket [4c86b126f2]
Bug fix: Make sure "rowid" columns are correctly resolved in joins between normal tables and WITHOUT ROWID tables. Ticket [c34d0557f7]
Bug fix: Make sure the same temporary registers are not used in concurrent co-routines used to implement compound SELECT statements containing ORDER BY clauses, as such use can lead to incorrect answers. Ticket [8c63ff0eca]
Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out. Ticket [65bdeb9739]
Bug fix: Repair a name-resolution error that can occur in sub-select statements contained within a TRIGGER. Ticket [4ef7e3cfca]
Bug fix: Fix column default values expressions of the form "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing the column to a floating point value approximately equal to +9223372036854775808.0.
--[ Redis 2.8.7 ] Release date: 5 Mar 2014
# UPGRADE URGENCY: LOW for Redis, LOW for Sentinel. However this release adds
new features so users may want to upgrade in order to
exploit the new functionalities.
* [FIX] Sometimes the absolute config file path was obtained in a wrong way.
This happened when there was a "dir" directive inside the config file
and at the same time the configuration file was given as a relative
path to redis-server or redis-sentinel executables.
* [FIX] redis-cli: Automatically enter --slave mode when SYNC or PSYNC are
called during an interactive session.
* [FIX] Sentinel "IDONTKNOW" error removed as it does not made sense with the
new Sentinel design. This error was actually a fix for a design error
in the first implementation of Sentinel.
* [FIX] Sentinel: added a missing exit() call to abort after config file
checks at startup. This error was introduced with an improvement in
a previous 2.8 release.
* [FIX] BITCOUNT: fixed unaligned access causing issues in sparc and other
archs not capable of dealing with unaligned accesses. This also makes
the code faster in archs where unaligned accesses are allowed.
* [FIX] Sentinel: better nodes fail over start time desynchronization to avoid
split-brain during the voting process needed to get authorization to
fail over. This means the system is less likely to need to retry
and will fail over faster. No changes in behavior / correctness.
* [FIX] Force INFO used_memory_peak to match peak memory. This generated some
confusion among users even if it was not an actual bug.
* [NEW] Sentinel unit tests and framework. More tests needed and units must
be improved in order to have less false positives, but it is a start
and features a debugging console that is useful to fix tests or to
inspect bugs causing tests failures.
* [NEW] New Sentinel events: +/-monitor and +set used to monitor when an
instance to monitor is added or removed, or when a configuration
is modified via SENTINEL SET.
* [NEW] Redis-cli updated to use SCAN instead of random sampling via
RANDOMKEY in order to implement --bigkeys feature. Moreover the
implementation now supports pipelining and reports more information
at the end of the scan. Much faster, much better. A special thank
you to Michael Grunder for this improvement.
* [NEW] redis-cli now supports a new --intrinsic-latency mode that is able
to meter the latency of a system due to kernel / hypervisor.
How to use it is explained at http://redis.io/topics/latency.
* [NEW] New command BITPOS: find first bit set or clear in a bitmap.
* [NEW] CONFIG REWRITE calls are now logged.
--[ Redis 2.8.6 ] Release date: 13 Feb 2014
# UPGRADE URGENCY: HIGH for Redis, LOW for Sentinel. Redis users using Lua
scripts with EVALSHA and attached slaves and/or AOF
persistence should consider upgrading ASAP.
* [FIX] Fixed an critical EVALSHA script cache bug: scripts executed may not
propagate to AOF / Slaves correctly under certain conditions.
See issue #1549 at Github for more information.
* [FIX] Fixed multiple bugs resulting into closing the link with master or slave
during replication without good reasons. This will result in useless
resynchronizations, or infinite loops where the replication link can't
be established.
* [FIX] Don't count the time needed to populate the buffers of clients waiting
in MONITOR mode when populating the Slow Log entries.
* [NEW] AOF write errors (like no space on device) no longer abort Redis if the
fsync policy is none or every second. The database enters a read-only
mode where every write is refused with an error. Normal operations are
restored as soon as Redis is able to append again data to the AOF file.
* [NEW] Sentinel now accepts SHUTDOWN command.
--[ Redis 2.8.5 ] Release date: 4 Feb 2014
# UPGRADE URGENCY: HIGH for Redis, LOW for Sentinel. Redis users using Lua
scripts with expires, and Redis users relying on the
ability of Redis to block writes on RDB saving errors
should plan to upgrade ASAP.
* [FIX] Fixed a replication bug caused by Lua scripts + expired keys: keys could
expire in the middle of scripts causing non-deterministic behavior.
* [FIX] MISCONFIG error if condition fixed, the server was no longer able
to stop writes on RDB misconfiguration after this error was introduced.
* [FIX] REDIS_AOF_REWRITE_MIN_SIZE is now 64mb like example redis.conf default.
* [FIX] Perform fflush() before fsync() in rio.c (bug without actual effects).
* [FIX] Don't log MONITOR clients as disconnecting slaves.
* [FIX] SENTINEL MASTER arity check fixed. Crashed the Sentinel instance when
the command was given without arguments.
* [NEW] Allow CONFIG and SHUTDOWN while in stale-slave state.
* [NEW] Support for configurable TCP listen(2) backlog size.
* [NEW] redis-cli supports SCAN via the --scan and --pattern options.
* [NEW] SENTINEL SET master quorum via runtime API implemented.
--[ Redis 2.8.4 ] Release date: 13 Jan 2014
# UPGRADE URGENCY: MODERATE for Redis and Sentinel.
* [FIX] Makefile compatibility with non common make variants improved.
* [FIX] SDIFF crash in very unlikely to trigger state fixed.
* [FIX] Config rewriting fixed: don't wipe options unknown to the rewrite
process.
* [FIX] Set TCP port to 0 works again to disable TCP networking.
* [FIX] Fixed replication with old Redis instances as masters by not
sending REPLCONF ACK to them.
* [FIX] Fix keyspace notifications rewrite and CONFIG GET output.
* [FIX] Fix RESTORE TTL handling in 32 bit systems (32 bit overflow).
* [NEW] Sentinel now has a run time configuration API.
* [NEW] Log when we lost connection with master or slave.
* [NEW] When instance is turned from slave to master now inherits the
old master replication offset when possible. This improves the
Sentinel failover procedure.
The following bugs have been fixed since the release of version 4.1.7:
- bug #4279 CTRL + up or down moves two fields (part one)
- bug #4294 output as text radio clickable for "OpenDocument Text" export
- bug #4297 DROP DATABASE tick box in export no longer works
- bug #4291 Unable to export comments in OpenDocument text format
- bug #4299 Deletion even when the user says "No" to the confirmation message
- bug #4303 "New" link in navi panel is shown even if no privileges
- bug #4302 Some params are being omitted from microhistory
- bug #4298 Missing validation on Import CSV: "Columns enclosed with" and
"Columns escaped with"
- bug #4040 Fatal error while resetting settings
- bug #4305 JS error when editing procedure from nav panel
- bug #4308 Edit routine form submitting when pressing enter
- bug #4307 Nav: "Columns" won't expand with specific schema
- bug #4276 Login loop on session expiry
- bug #4249 Incorrect number of result rows for SQL with subqueries
- bug #4275 Broken Link to php extension manual
- bug #4053 List of procedures is not displayed after executing with Enter
- bug #4081 Setup page content shifted to the right edge of its tabs
- bug #4284 Reordering a column erases comments for other columns
- bug #4286 Open "Browse" in a new tab
- bug #4287 Printview - Always one column too much
- bug #4288 Expand database (+ icon) after timeout doesn't do anything
- bug #4285 Fixed CSS for setup
- Fixed altering table to DOUBLE/FLOAT field
- bug #4292 Success message and failure message being shown together
- bug #4293 opening new tab (using selflink) for import.php based actions
results in error and logout
Based on PR pkg/48639 by rudolf.
SkyTools is a package of tools in use in Skype for replication and failover.
It also includes a generic queuing mechanism called PgQ and a utility
library for Python scripts, as well as a script for setting up and managing
WAL based standby servers.
PgQ is a queuing system written in PL/pgSQL, Python and C code. It is based
on snapshot-based event handling ideas from Slony-I, and is written for
general usage. PgQ provides an efficient, transactional, queueing system
with multi-node support (including work sharing and splitting, failover and
switchover, for queues and for consumers). PgQ is split into 3 layers:
Producers, Ticker and Consumers.
Londiste is a replication tool written in Python, using PgQ as event
transport.
Walmgr is a script that will setup WAL archiving, does the initial backup,
and runtime WAL archive and restore. It can also be used for
up-to-last-second partial file copying, so that less than the whole file is
lost in case of loss of the master database server.
Lib/
* Added ldap.controls.openldap.SearchNoOpControl
* New method ldap.async.AsyncSearchHandler.afterFirstResult()
for doing something right after successfully receiving but before
processing first result
* Better log data written when invoking ldap.LDAPLock.acquire() and
ldap.LDAPLock.release()
* LDAPObject and friends now pass `desc' to ldap.LDAPLock() which
results in better logging
* ldapobject.ReconnectLDAPObject now uses internal class-wide
lock for serializing reconnects
* Method signature of ReconnectLDAPObject.reconnect() changed to be able
to call it with separate retry_max and retry_delay values
Modules/
* Added support for retrieving negotiated TLS version/cipher
with LDAPObject.get_option() with the help of upcoming OpenLDAP libs