diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 0000000..52f9975 --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,614 @@ +Changelog +========= + +2.3.0 (2017-05-31) +------------------ + +Please note, there have been a few dozen merges that failed to update the +changelog here. As such, the log here should not be considered conclusive as +to the changes that are arriving in 2.3.0. + +Changes being made now to ensure more accuracy in the changelog will appear +in all future versions going forward. Read the commit history for a better +understanding of changes merged between 2.2.1 and 2.3.0. + +All future commits must abide by the new CONTRIBUTING.md document describing +how to label commits so they can be automatically used to automatically +generate an accurate changelog. + +*WARNING:* THIS IS THE LAST KAZOO RELEASE THAT SUPPORTS PYTHON 2.6. ALL FUTURE +VERSIONS WILL REQUIRE PYTHON 2.7 AND ABOVE. + +### Features + +- allow having observers and different sized clusters + +### Bug Handling + +- \#372: fully resolve multiple records for hosts in the zookeeper + connection string + +### Documentation + +- Fix the recipe examples, so they actually work by connecting to + ZooKeeper. Without start() they just hang and can't be killed. + +2.2.1 (2015-06-17) +------------------ + +### Bug Handling + +- handle NameError with basestring on py3k. + +### Documentation + +2.2 (2015-06-15) +---------------- + +### Documentation + +### Features + +- Issue \#234: Add support for reconfig cluster membership operation + +### Bug Handling + +- \#315: multiple acquires of a kazoo lock using the lock recipe would + block when using acquire even when non-blocking is specified (only + when the lock was/has been already acquired). +- \#318: At exit register takes `*args` and `**kwargs` not args and + kargs + +### Documentation + +2.1 (2015-05-11) +---------------- + +### Features + +- Start running tests against Zookeeper 3.5.0 alpha and explicitly + configure the admin.serverPort in tests to avoid port conflicts. The + Zookeeper alpha version is not yet officially supported. +- Integrate eventlet *handler* support into kazoo so that along with + [gevent, threading] handlers there can now be a dedicated eventlet + handler for projects that need to (or want to) use eventlet (such as + those working in the openstack community). The + `requirements_eventlet.txt` file lists the optional eventlet + requirement(s) that needs to be satisfied when this new handler is + used. +- Use `six` to nicely handle the cross compatibility of kazoo with + python 2.x and 3.x (reducing/removing the need to have custom + compatibility code that replicates what six already provides). +- Add `state_change_event` to + `kazoo.recipe.partitioner.SetPartitioner` which is set on every + state change. +- Add a NonBlockingLease recipe. The recipe allows e.g. cron jobs + scheduled on multiple machines to ensure that at most N instances + will run a particular job, with lease timeout for graceful handover + in case of node failures. + +### Bug Handling + +- \#291: Kazoo lock recipe was only partially re-entrant in that + multiple calls to acquire would obtain the the lock but the first + call to release would remove the underlying lock. This would leave + the X - 1 other acquire statements unprotected (and no longer + holding there expected lock). To fix this the comment about that + lock recipe being re-entrant has been removed and multiple acquires + will now block when attempted. +- \#78: Kazoo now uses socketpairs instead of pipes making it + compatible with Windows. +- \#144, \#221: Let client.command work with IPv6 addresses. +- \#216: Fixed timeout for ConnectionHandler.\_invoke. +- \#261: Creating a sequential znode under / doesn't work. +- \#274: Add server\_version() retries (by default 4 attempts will be + made) to better handle flakey responses. +- \#271: Fixed handling of KazooState.SUSPENDED in SetPartitioner. +- \#283: Fixed a race condition in SetPartitioner when party changes + during handling of lock acquisition. +- \#303: don't crash on random input as the hosts string. + +### Documentation + +- \#222: Document that committed on the transaction is used to ensure + only one commit and is not an indicator of whether operations in the + transaction returned desired results. + +2.0 (2014-06-19) +---------------- + +### Documentation + +- Extend support to Python 3.4, deprecating Python 3.2. +- Issue \#198: Mention Zake as a sophisticated kazoo mock testing + library. +- Issue \#181: Add documentation on basic logging setup. + +2.0b1 (2014-04-24) +------------------ + +### API Changes + +- Null or None data is no longer treated as "". Pull req \#165, patch + by Raul Gutierrez S. This will affect how you should treat null data + in a znode vs. an empty string. +- Passing acl=[] to create() now works properly instead of an + InvalidACLError as it returned before. Patch by Raul Gutierrez S in + PR \#164. +- Removed the dependency on zope.interface. The classes in the + interfaces module are left for documentation purposes only (issue + \#131). + +### Features + +- Logging levels have been reduced. + - Logging previously at the `logging.DEBUG` level is now logged at + the `kazoo.loggingsupport.BLATHER` level (5). + - Some low-level logging previously at the `logging.INFO` level is + now logged at the `logging.DEBUG` level. +- Issue \#133: Introduce a new environment variable + ZOOKEEPER\_PORT\_OFFSET for the testing support, to run the testing + cluster on a different range. + +### Bug Handling + +- When authenticating via add\_auth() the auth data will be saved to + ensure that the authentication happens on reconnect (as is the case + when feeding auth data via KazooClient's constructor). PR \#172, + patch by Raul Gutierrez S. +- Change gevent import to remove deprecation warning when newer gevent + is used. PR \#191, patch by Hiroaki Kawai. +- Lock recipe was failing to use the client's sleep\_func causing + issues with gevent. Issue \#150. +- Calling a DataWatch or ChildrenWatch instance twice (decorator) now + throws an exception as only a single function can be associated with + a single watcher. Issue \#154. +- Another fix for atexit handling so that when disposing of + connections the atexit handler is removed. PR \#190, patch by Devaev + Maxim. +- Fix atexit handling for kazoo threading handler, PR \#183. Patch by + Brian Wickman. +- Partitioner should handle a suspended connection properly and + restore an allocated state if it was allocated previously. Patch by + Manish Tomar. +- Issue \#167: Closing a client that was never started throws a type + error. Patch by Joshua Harlow. +- Passing dictionaries to KazooClient.\_\_init\_\_() wasn't actually + working properly. Patch by Ryan Uber. +- Issue \#119: Handler timeout takes the max of the random interval or + the read timeout to ensure a negative number isn't used for the read + timeout. +- Fix ordering of exception catches in lock.acquire as it was + capturing a parent exception before the child. Patch by ReneSac. +- Fix issue with client.stop() not always setting the client state to + KeeperState.CLOSED. Patch by Jyrki Pulliainen in PR \#174. +- Issue \#169: Fixed pipes leaking into child processes. + +### Documentation + +- Add section on contributing recipes, add maintainer/status + information for existing recipes. +- Add note about alternate use of DataWatch. + +1.3.1 (2013-09-25) +------------------ + +### Bug Handling + +- \#118, \#125, \#128: Fix unknown variable in KazooClient + command\_retry argument handling. +- \#126: Fix KazooRetry.copy to correctly copy sleep function. +- \#118: Correct session/socket timeout conversion (int vs. float). + +### Documentation + +- \#121: Add a note about kazoo.recipe.queue.LockingQueue requiring a + Zookeeper 3.4+ server. + +1.3 (2013-09-05) +---------------- + +### Features + +- \#115: Limit the backends we use for SLF4J during tests. +- \#112: Add IPv6 support. Patch by Dan Kruchinin. + +1.2.1 (2013-08-01) +------------------ + +### Bug Handling + +- Issue \#108: Circular import fail when importing + kazoo.recipe.watchers directly has now been resolved. Watchers and + partitioner properly import the KazooState from + kazoo.protocol.states rather than kazoo.client. +- Issue \#109: Partials not usable properly as a datawatch call can + now be used. All funcs will be called with 3 args and fall back to 2 + args if there's an argument error. +- Issue \#106, \#107: client.create\_async didn't strip change root + from the returned path. + +1.2 (2013-07-24) +---------------- + +### Features + +- KazooClient can now be stopped more reliably even if its in the + middle of a long retry sleep. This utilizes the new interrupt + feature of KazooRetry which lets the sleep be broken down into + chunks and an interrupt function called to determine if the retry + should fail early. +- Issue \#62, \#92, \#89, \#101, \#102: Allow KazooRetry to have a max + deadline, transition properly when connection fails to LOST, and + setup separate connection retry behavior from client command retry + behavior. Patches by Mike Lundy. +- Issue \#100: Make it easier to see exception context in threading + and connection modules. +- Issue \#85: Increase information density of logs and don't prevent + dynamic reconfiguration of log levels at runtime. +- Data-watchers for the same node are no longer 'stacked'. That is, if + a get and an exists call occur for the same node with the same watch + function, then it will be registered only once. This change results + in Kazoo behaving per Zookeeper client spec regarding repeat watch + use. + +### Bug Handling + +- Issue \#53: Throw a warning upon starting if the chroot path doesn't + exist so that it's more obvious when the chroot should be created + before performing more operations. +- Kazoo previously would let the same function be registered as a + data-watch or child-watch multiple times, and then call it multiple + times upon being triggered. This was non-compliant Zookeeper client + behavior, the same watch can now only be registered once for the + same znode path per Zookeeper client documentation. +- Issue \#105: Avoid rare import lock problems by moving module + imports in client.py to the module scope. +- Issue \#103: Allow prefix-less sequential znodes. +- Issue \#98: Extend testing ZK harness to work with different file + locations on some versions of Debian/Ubuntu. +- Issue \#97: Update some docstrings to reflect current state of + handlers. +- Issue \#62, \#92, \#89, \#101, \#102: Allow KazooRetry to have a max + deadline, transition properly when connection fails to LOST, and + setup separate connection retry behavior from client command retry + behavior. Patches by Mike Lundy. + +### API Changes + +- The kazoo.testing.harness.KazooTestHarness class directly inherits + from unittest.TestCase and you need to ensure to call its + \_\_init\_\_ method. +- DataWatch no longer takes any parameters besides for the optional + function during instantiation. The additional options are now + implicitly True, with the user being left to ignore events as they + choose. See the DataWatch API docs for more information. +- Issue \#99: Better exception raised when the writer fails to close. + A WriterNotClosedException that inherits from KazooException is now + raised when the writer fails to close in time. + +1.1 (2013-06-08) +---------------- + +### Features + +- Issue \#93: Add timeout option to lock/semaphore acquire methods. +- Issue \#79 / \#90: Add ability to pass the WatchedEvent to DataWatch + and ChildWatch functions. +- Respect large client timeout values when closing the connection. +- Add a max\_leases consistency check to the semaphore recipe. +- Issue \#76: Extend testing helpers to allow customization of the + Java classpath by specifying the new ZOOKEEPER\_CLASSPATH + environment variable. +- Issue \#65: Allow non-blocking semaphore acquisition. + +### Bug Handling + +- Issue \#96: Provide Windows compatibility in testing harness. +- Issue \#95: Handle errors deserializing connection response. +- Issue \#94: Clean up stray bytes in connection pipe. +- Issue \#87 / \#88: Allow re-acquiring lock after cancel. +- Issue \#77: Use timeout in initial socket connection. +- Issue \#69: Only ensure path once in lock and semaphore recipes. +- Issue \#68: Closing the connection causes exceptions to be raised by + watchers which assume the connection won't be closed when running + commands. +- Issue \#66: Require ping reply before sending another ping, + otherwise the connection will be considered dead and a + ConnectionDropped will be raised to trigger a reconnect. +- Issue \#63: Watchers weren't reset on lost connection. +- Issue \#58: DataWatcher failed to re-register for changes after + non-existent node was created then deleted. + +### API Changes + +- KazooClient.create\_async now supports the makepath argument. +- KazooClient.ensure\_path now has an async version, + ensure\_path\_async. + +1.0 (2013-03-26) +---------------- + +### Features + +- Added a LockingQueue recipe. The queue first locks an item and + removes it from the queue only after the consume() method is called. + This enables other nodes to retake the item if an error occurs on + the first node. + +### Bug Handling + +- Issue \#50: Avoid problems with sleep function in mixed + gevent/threading setup. +- Issue \#56: Avoid issues with watch callbacks evaluating to false. + +1.0b1 (2013-02-24) +------------------ + +### Features + +- Refactored the internal connection handler to use a single thread. + It now uses a deque and pipe to signal the ZK thread that there's a + new command to send, so that the ZK thread can send it, or retrieve + a response. Processing ZK requests and responses serially in a + single thread eliminates the need for a bunch of the locking, the + peekable queue and two threads working on the same underlying + socket. +- Issue \#48: Added documentation for the retry helper module. +- Issue \#55: Fix os.pipe file descriptor leak and introduce a + KazooClient.close method. The method is particular useful in tests, + where multiple KazooClients are created and closed in the same + process. + +### Bug Handling + +- Issue \#46: Avoid TypeError in GeneratorContextManager on process + shutdown. +- Issue \#43: Let DataWatch return node data if allow\_missing\_node + is used. + +0.9 (2013-01-07) +---------------- + +### API Changes + +- When a retry operation ultimately fails, it now raises a + kazoo.retry.RetryFailedError exception, instead of a general + Exception instance. RetryFailedError also inherits from the base + KazooException. + +### Features + +- Improvements to Debian packaging rules. + +### Bug Handling + +- Issue \#39 / \#41: Handle connection dropped errors during session + writes. Ensure client connection is re-established to a new ZK node + if available. +- Issue \#38: Set CLOEXEC flag on all sockets when available. +- Issue \#37 / \#40: Handle timeout errors during select calls on + sockets. +- Issue \#36: Correctly set ConnectionHandler.writer\_stopped even if + an exception is raised inside the writer, like a retry operation + failing. + +0.8 (2012-10-26) +---------------- + +### API Changes + +- The KazooClient.\_\_init\_\_ took as watcher argument as its second + keyword argument. The argument had no effect anymore since version + 0.5 and was removed. + +### Bug Handling + +- Issue \#35: KazooClient.\_\_init\_\_ didn't pass on + retry\_max\_delay to the retry helper. +- Issue \#34: Be more careful while handling socket connection errors. + +0.7 (2012-10-15) +---------------- + +### Features + +- DataWatch now has a allow\_missing\_node setting that allows a watch + to be set on a node that doesn't exist when the DataWatch is + created. +- Add new Queue recipe, with optional priority support. +- Add new Counter recipe. +- Added debian packaging rules. + +### Bug Handling + +- Issue \#31 fixed: Only catch KazooExceptions in catch-all calls. +- Issue \#15 fixed again: Force sleep delay to be a float to appease + gevent. +- Issue \#29 fixed: DataWatch and ChildrenWatch properly re-register + their watches on server disconnect. + +0.6 (2012-09-27) +---------------- + +### API Changes + +- Node paths are assumed to be Unicode objects. Under Python 2 + pure-ascii strings will also be accepted. Node values are considered + bytes. The byte type is an alias for str under Python 2. +- New KeeperState.CONNECTED\_RO state for Zookeeper servers connected + in read-only mode. +- New NotReadOnlyCallError exception when issuing a write change + against a server thats currently read-only. + +### Features + +- Add support for Python 3.2, 3.3 and PyPy (only for the threading + handler). +- Handles connecting to Zookeeper 3.4+ read-only servers. +- Automatic background scanning for a Read/Write server when connected + to a server in read-only mode. +- Add new Semaphore recipe. +- Add a new retry\_max\_delay argument to the client and by default + limit the retry delay to at most an hour regardless of exponential + backoff settings. +- Add new randomize\_hosts argument to KazooClient, allowing one to + disable host randomization. + +### Bug Handling + +- Fix bug with locks not handling intermediary lock contenders + disappearing. +- Fix bug with set\_data type check failing to catch unicode values. +- Fix bug with gevent 0.13.x backport of peekable queue. +- Fix PatientChildrenWatch to use handler specific sleep function. + +0.5 (2012-09-06) +---------------- + +Skipping a version to reflect the magnitude of the change. Kazoo is now +a pure Python client with no C bindings. This release should run without +a problem on alternate Python implementations such as PyPy and Jython. +Porting to Python 3 in the future should also be much easier. + +### Documentation + +- Docs have been restructured to handle the new classes and locations + of the methods from the pure Python refactor. + +### Bug Handling + +This change may introduce new bugs, however there is no longer the +possibility of a complete Python segfault due to errors in the C library +and/or the C binding. + +- Possible segfaults from the C lib are gone. +- Password mangling due to the C lib is gone. +- The party recipes didn't set their participating flag to False after + leaving. + +### Features + +- New client.command and client.server\_version API, exposing + Zookeeper's four letter commands and giving access to structured + version information. +- Added 'include\_data' option for get\_children to include the node's + Stat object. +- Substantial increase in logging data with debug mode. All + correspondence with the Zookeeper server can now be seen to help in + debugging. + +### API Changes + +- The testing helpers have been moved from testing.\_\_init\_\_ into a + testing.harness module. The official API's of KazooTestCase and + KazooTestHarness can still be directly imported from testing. +- The kazoo.handlers.util module was removed. +- Backwards compatible exception class aliases are provided for now in + kazoo exceptions for the prior C exception names. +- Unicode strings now work fine for node names and are properly + converted to and from unicode objects. +- The data value argument for the create and create\_async methods of + the client was made optional and defaults to an empty byte string. + The data value must be a byte string. Unicode values are no longer + allowed and will raise a TypeError. + +0.3 (2012-08-23) +---------------- + +### API Changes + +- Handler interface now has an rlock\_object for use by recipes. + +### Bug Handling + +- Fixed password bug with updated zc-zookeeper-static release, which + retains null bytes in the password properly. +- Fixed reconnect hammering, so that the reconnection follows retry + jitter and retry backoff's. +- Fixed possible bug with using a threading.Condition in the set + partitioner. Set partitioner uses new rlock\_object handler API to + get an appropriate RLock for gevent. +- Issue \#17 fixed: Wrap timeout exceptions with staticmethod so they + can be used directly as intended. Patch by Bob Van Zant. +- Fixed bug with client reconnection looping indefinitely using an + expired session id. + +0.2 (2012-08-12) +---------------- + +### Documentation + +- Fixed doc references to start\_async using an AsyncResult object, it + uses an Event object. + +### Bug Handling + +- Issue \#16 fixed: gevent zookeeper logging failed to handle a monkey + patched logging setup. Logging is now setup such that a greenlet is + used for logging messages under gevent, and the thread one is used + otherwise. +- Fixed bug similar to \#14 for ChildrenWatch on the session listener. +- Issue \#14 fixed: DataWatch had inconsistent handling of the node it + was watching not existing. DataWatch also properly spawns its + \_get\_data function to avoid blocking session events. +- Issue \#15 fixed: sleep\_func for SequentialGeventHandler was not + set on the class appropriately leading to additional arguments being + passed to gevent.sleep. +- Issue \#9 fixed: Threads/greenlets didn't gracefully shut down. + Handler now has a start/stop that is used by the client when calling + start and stop that shuts down the handler workers. This addresses + errors and warnings that could be emitted upon process shutdown + regarding a clean exit of the workers. +- Issue \#12 fixed: gevent 0.13 doesn't use the same + start\_new\_thread as gevent 1.0 which resulted in a fully + monkey-patched environment halting due to the wrong thread. Updated + to use the older kazoo method of getting the real thread module + object. + +### API Changes + +- The KazooClient handler is now officially exposed as + KazooClient.handler so that the appropriate sync objects can be used + by end-users. +- Refactored ChildrenWatcher used by SetPartitioner into a publicly + exposed PatientChildrenWatch under recipe.watchers. + +### Deprecations + +- connect/connect\_async has been renamed to start/start\_async to + better match the stop to indicate connection handling. The prior + names are aliased for the time being. + +### Recipes + +- Added Barrier and DoubleBarrier implementation. + +0.2b1 (2012-07-27) +------------------ + +### Bug Handling + +- ZOOKEEPER-1318: SystemError is caught and rethrown as the proper + invalid state exception in older zookeeper python bindings where + this issue is still valid. +- ZOOKEEPER-1431: Install the latest zc-zookeeper-static library or + use the packaged ubuntu one for ubuntu 12.04 or later. +- ZOOKEEPER-553: State handling isn't checked via this method, we + track it in a simpler manner with the watcher to ensure we know the + right state. + +### Features + +- Exponential backoff with jitter for retrying commands. +- Gevent 0.13 and 1.0b support. +- Lock, Party, SetPartitioner, and Election recipe implementations. +- Data and Children watching API's. +- State transition handling with listener registering to handle + session state changes (choose to fatal the app on session + expiration, etc.) +- Zookeeper logging stream redirected into Python logging channel + under the name 'Zookeeper'. +- Base client library with handler support for threading and gevent + async environments. + diff --git a/CHANGES.rst b/CHANGES.rst deleted file mode 100644 index 4cb8dca..0000000 --- a/CHANGES.rst +++ /dev/null @@ -1,659 +0,0 @@ -Changelog -========= - -2.X.Y (TBD) ------------ - -Features -******** - -Bug Handling -************ -- #372: fully resolve multiple records for hosts in the zookeeper connection string - -Documentation -************* - -2.2.1 (2015-06-17) ------------------- - -Features -******** -- allow having observers and different sized clusters - -Bug Handling -************ -- handle NameError with basestring on py3k. - -Documentation -************* - -2.2 (2015-06-15) ----------------- - -Documentation -************* - -Features -******** - -- Issue #234: Add support for reconfig cluster membership operation - -Bug Handling -************ - -- #315: multiple acquires of a kazoo lock using the lock recipe would - block when using `acquire` even when non-blocking is specified (only - when the lock was/has been already acquired). -- #318: At exit register takes ``*args`` and ``**kwargs`` not args and kargs - -Documentation -************* - -2.1 (2015-05-11) ----------------- - -Features -******** - -- Start running tests against Zookeeper 3.5.0 alpha and explicitly configure - the `admin.serverPort` in tests to avoid port conflicts. The Zookeeper - alpha version is not yet officially supported. -- Integrate eventlet *handler* support into kazoo so that along with [gevent, - threading] handlers there can now be a dedicated eventlet handler for - projects that need to (or want to) use eventlet (such as those working - in the openstack community). The ``requirements_eventlet.txt`` file lists - the optional eventlet requirement(s) that needs to be satisfied when this - new handler is used. -- Use ``six`` to nicely handle the cross compatibility of kazoo with - python 2.x and 3.x (reducing/removing the need to have custom compatibility - code that replicates what six already provides). -- Add ``state_change_event`` to ``kazoo.recipe.partitioner.SetPartitioner`` - which is set on every state change. -- Add a NonBlockingLease recipe. The recipe allows e.g. cron jobs scheduled - on multiple machines to ensure that at most N instances will run a particular - job, with lease timeout for graceful handover in case of node failures. - - -Bug Handling -************ - -- #291: Kazoo lock recipe was only partially re-entrant in that multiple - calls to `acquire` would obtain the the lock but the first call to `release` - would remove the underlying lock. This would leave the X - 1 other `acquire` - statements unprotected (and no longer holding there expected lock). To fix - this the comment about that lock recipe being re-entrant has been removed - and multiple acquires will now block when attempted. - -- #78: Kazoo now uses socketpairs instead of pipes making it compatible with - Windows. - -- #144, #221: Let `client.command` work with IPv6 addresses. - -- #216: Fixed timeout for ConnectionHandler._invoke. - -- #261: Creating a sequential znode under / doesn't work. - -- #274: Add server_version() retries (by default 4 attempts will be made) to - better handle flakey responses. - -- #271: Fixed handling of KazooState.SUSPENDED in SetPartitioner. - -- #283: Fixed a race condition in SetPartitioner when party changes during - handling of lock acquisition. - -- #303: don't crash on random input as the hosts string. - -Documentation -************* - -- #222: Document that committed on the transaction is used to ensure only one - commit and is not an indicator of whether operations in the transaction - returned desired results. - -2.0 (2014-06-19) ----------------- - -Documentation -************* - -- Extend support to Python 3.4, deprecating Python 3.2. -- Issue #198: Mention Zake as a sophisticated kazoo mock testing library. -- Issue #181: Add documentation on basic logging setup. - - -2.0b1 (2014-04-24) ------------------- - -API Changes -*********** - -- Null or None data is no longer treated as "". Pull req #165, patch by - Raul Gutierrez S. This will affect how you should treat null data in a - znode vs. an empty string. -- Passing acl=[] to create() now works properly instead of an InvalidACLError - as it returned before. Patch by Raul Gutierrez S in PR #164. -- Removed the dependency on zope.interface. The classes in the interfaces - module are left for documentation purposes only (issue #131). - -Features -******** - -- Logging levels have been reduced. - - - Logging previously at the ``logging.DEBUG`` level is now logged at - the ``kazoo.loggingsupport.BLATHER`` level (5). - - - Some low-level logging previously at the ``logging.INFO`` level is - now logged at the ``logging.DEBUG`` level. - -- Issue #133: Introduce a new environment variable `ZOOKEEPER_PORT_OFFSET` - for the testing support, to run the testing cluster on a different range. - -Bug Handling -************ - -- When authenticating via add_auth() the auth data will be saved to ensure that - the authentication happens on reconnect (as is the case when feeding auth - data via KazooClient's constructor). PR #172, patch by Raul Gutierrez S. -- Change gevent import to remove deprecation warning when newer gevent is - used. PR #191, patch by Hiroaki Kawai. -- Lock recipe was failing to use the client's sleep_func causing issues with - gevent. Issue #150. -- Calling a DataWatch or ChildrenWatch instance twice (decorator) now throws - an exception as only a single function can be associated with a single - watcher. Issue #154. -- Another fix for atexit handling so that when disposing of connections the - atexit handler is removed. PR #190, patch by Devaev Maxim. -- Fix atexit handling for kazoo threading handler, PR #183. Patch by - Brian Wickman. -- Partitioner should handle a suspended connection properly and restore - an allocated state if it was allocated previously. Patch by Manish Tomar. -- Issue #167: Closing a client that was never started throws a type error. - Patch by Joshua Harlow. -- Passing dictionaries to KazooClient.__init__() wasn't actually working - properly. Patch by Ryan Uber. -- Issue #119: Handler timeout takes the max of the random interval or - the read timeout to ensure a negative number isn't used for the read - timeout. -- Fix ordering of exception catches in lock.acquire as it was capturing a - parent exception before the child. Patch by ReneSac. -- Fix issue with client.stop() not always setting the client state to - KeeperState.CLOSED. Patch by Jyrki Pulliainen in PR #174. -- Issue #169: Fixed pipes leaking into child processes. - -Documentation -************* - -- Add section on contributing recipes, add maintainer/status information for - existing recipes. -- Add note about alternate use of DataWatch. - -1.3.1 (2013-09-25) ------------------- - -Bug Handling -************ - -- #118, #125, #128: Fix unknown variable in KazooClient `command_retry` - argument handling. - -- #126: Fix `KazooRetry.copy` to correctly copy sleep function. - -- #118: Correct session/socket timeout conversion (int vs. float). - -Documentation -************* - -- #121: Add a note about `kazoo.recipe.queue.LockingQueue` requiring a - Zookeeper 3.4+ server. - - -1.3 (2013-09-05) ----------------- - -Features -******** - -- #115: Limit the backends we use for SLF4J during tests. - -- #112: Add IPv6 support. Patch by Dan Kruchinin. - -1.2.1 (2013-08-01) ------------------- - -Bug Handling -************ - -- Issue #108: Circular import fail when importing kazoo.recipe.watchers - directly has now been resolved. Watchers and partitioner properly import - the KazooState from kazoo.protocol.states rather than kazoo.client. -- Issue #109: Partials not usable properly as a datawatch call can now be - used. All funcs will be called with 3 args and fall back to 2 args if - there's an argument error. -- Issue #106, #107: `client.create_async` didn't strip change root from the - returned path. - -1.2 (2013-07-24) ----------------- - -Features -******** - -- KazooClient can now be stopped more reliably even if its in the middle - of a long retry sleep. This utilizes the new interrupt feature of - KazooRetry which lets the sleep be broken down into chunks and an - interrupt function called to determine if the retry should fail early. - -- Issue #62, #92, #89, #101, #102: Allow KazooRetry to have a - max deadline, transition properly when connection fails to LOST, and - setup separate connection retry behavior from client command retry - behavior. Patches by Mike Lundy. - -- Issue #100: Make it easier to see exception context in threading and - connection modules. - -- Issue #85: Increase information density of logs and don't prevent - dynamic reconfiguration of log levels at runtime. - -- Data-watchers for the same node are no longer 'stacked'. That is, if - a get and an exists call occur for the same node with the same watch - function, then it will be registered only once. This change results in - Kazoo behaving per Zookeeper client spec regarding repeat watch use. - -Bug Handling -************ - -- Issue #53: Throw a warning upon starting if the chroot path doesn't exist - so that it's more obvious when the chroot should be created before - performing more operations. - -- Kazoo previously would let the same function be registered as a data-watch - or child-watch multiple times, and then call it multiple times upon being - triggered. This was non-compliant Zookeeper client behavior, the same - watch can now only be registered once for the same znode path per Zookeeper - client documentation. - -- Issue #105: Avoid rare import lock problems by moving module imports in - client.py to the module scope. - -- Issue #103: Allow prefix-less sequential znodes. - -- Issue #98: Extend testing ZK harness to work with different file locations - on some versions of Debian/Ubuntu. - -- Issue #97: Update some docstrings to reflect current state of handlers. - -- Issue #62, #92, #89, #101, #102: Allow KazooRetry to have a - max deadline, transition properly when connection fails to LOST, and - setup separate connection retry behavior from client command retry - behavior. Patches by Mike Lundy. - -API Changes -*********** - -- The `kazoo.testing.harness.KazooTestHarness` class directly inherits from - `unittest.TestCase` and you need to ensure to call its `__init__` method. - -- DataWatch no longer takes any parameters besides for the optional function - during instantiation. The additional options are now implicitly True, with - the user being left to ignore events as they choose. See the DataWatch - API docs for more information. - -- Issue #99: Better exception raised when the writer fails to close. A - WriterNotClosedException that inherits from KazooException is now raised - when the writer fails to close in time. - -1.1 (2013-06-08) ----------------- - -Features -******** - -- Issue #93: Add timeout option to lock/semaphore acquire methods. - -- Issue #79 / #90: Add ability to pass the WatchedEvent to DataWatch and - ChildWatch functions. - -- Respect large client timeout values when closing the connection. - -- Add a `max_leases` consistency check to the semaphore recipe. - -- Issue #76: Extend testing helpers to allow customization of the Java - classpath by specifying the new `ZOOKEEPER_CLASSPATH` environment variable. - -- Issue #65: Allow non-blocking semaphore acquisition. - -Bug Handling -************ - -- Issue #96: Provide Windows compatibility in testing harness. - -- Issue #95: Handle errors deserializing connection response. - -- Issue #94: Clean up stray bytes in connection pipe. - -- Issue #87 / #88: Allow re-acquiring lock after cancel. - -- Issue #77: Use timeout in initial socket connection. - -- Issue #69: Only ensure path once in lock and semaphore recipes. - -- Issue #68: Closing the connection causes exceptions to be raised by watchers - which assume the connection won't be closed when running commands. - -- Issue #66: Require ping reply before sending another ping, otherwise the - connection will be considered dead and a ConnectionDropped will be raised - to trigger a reconnect. - -- Issue #63: Watchers weren't reset on lost connection. - -- Issue #58: DataWatcher failed to re-register for changes after non-existent - node was created then deleted. - -API Changes -*********** - -- KazooClient.create_async now supports the makepath argument. - -- KazooClient.ensure_path now has an async version, ensure_path_async. - -1.0 (2013-03-26) ----------------- - -Features -******** - -- Added a LockingQueue recipe. The queue first locks an item and removes it - from the queue only after the consume() method is called. This enables other - nodes to retake the item if an error occurs on the first node. - -Bug Handling -************ - -- Issue #50: Avoid problems with sleep function in mixed gevent/threading - setup. - -- Issue #56: Avoid issues with watch callbacks evaluating to false. - -1.0b1 (2013-02-24) ------------------- - -Features -******** - -- Refactored the internal connection handler to use a single thread. It now - uses a deque and pipe to signal the ZK thread that there's a new command to - send, so that the ZK thread can send it, or retrieve a response. - Processing ZK requests and responses serially in a single thread eliminates - the need for a bunch of the locking, the peekable queue and two threads - working on the same underlying socket. - -- Issue #48: Added documentation for the `retry` helper module. - -- Issue #55: Fix `os.pipe` file descriptor leak and introduce a - `KazooClient.close` method. The method is particular useful in tests, where - multiple KazooClients are created and closed in the same process. - -Bug Handling -************ - -- Issue #46: Avoid TypeError in GeneratorContextManager on process shutdown. - -- Issue #43: Let DataWatch return node data if allow_missing_node is used. - -0.9 (2013-01-07) ----------------- - -API Changes -*********** - -- When a retry operation ultimately fails, it now raises a - `kazoo.retry.RetryFailedError` exception, instead of a general `Exception` - instance. `RetryFailedError` also inherits from the base `KazooException`. - -Features -******** - -- Improvements to Debian packaging rules. - -Bug Handling -************ - -- Issue #39 / #41: Handle connection dropped errors during session writes. - Ensure client connection is re-established to a new ZK node if available. - -- Issue #38: Set `CLOEXEC` flag on all sockets when available. - -- Issue #37 / #40: Handle timeout errors during `select` calls on sockets. - -- Issue #36: Correctly set `ConnectionHandler.writer_stopped` even if an - exception is raised inside the writer, like a retry operation failing. - -0.8 (2012-10-26) ----------------- - -API Changes -*********** - -- The `KazooClient.__init__` took as `watcher` argument as its second keyword - argument. The argument had no effect anymore since version 0.5 and was - removed. - -Bug Handling -************ - -- Issue #35: `KazooClient.__init__` didn't pass on `retry_max_delay` to the - retry helper. - -- Issue #34: Be more careful while handling socket connection errors. - -0.7 (2012-10-15) ----------------- - -Features -******** - -- DataWatch now has a `allow_missing_node` setting that allows a watch to be - set on a node that doesn't exist when the DataWatch is created. -- Add new Queue recipe, with optional priority support. -- Add new Counter recipe. -- Added debian packaging rules. - -Bug Handling -************ - -- Issue #31 fixed: Only catch KazooExceptions in catch-all calls. -- Issue #15 fixed again: Force sleep delay to be a float to appease gevent. -- Issue #29 fixed: DataWatch and ChildrenWatch properly re-register their - watches on server disconnect. - -0.6 (2012-09-27) ----------------- - -API Changes -*********** - -- Node paths are assumed to be Unicode objects. Under Python 2 pure-ascii - strings will also be accepted. Node values are considered bytes. The byte - type is an alias for `str` under Python 2. -- New KeeperState.CONNECTED_RO state for Zookeeper servers connected in - read-only mode. -- New NotReadOnlyCallError exception when issuing a write change against a - server thats currently read-only. - -Features -******** - -- Add support for Python 3.2, 3.3 and PyPy (only for the threading handler). -- Handles connecting to Zookeeper 3.4+ read-only servers. -- Automatic background scanning for a Read/Write server when connected to a - server in read-only mode. -- Add new Semaphore recipe. -- Add a new `retry_max_delay` argument to the client and by default limit the - retry delay to at most an hour regardless of exponential backoff settings. -- Add new `randomize_hosts` argument to `KazooClient`, allowing one to disable - host randomization. - -Bug Handling -************ - -- Fix bug with locks not handling intermediary lock contenders disappearing. -- Fix bug with set_data type check failing to catch unicode values. -- Fix bug with gevent 0.13.x backport of peekable queue. -- Fix PatientChildrenWatch to use handler specific sleep function. - -0.5 (2012-09-06) ----------------- - -Skipping a version to reflect the magnitude of the change. Kazoo is now a pure -Python client with no C bindings. This release should run without a problem -on alternate Python implementations such as PyPy and Jython. Porting to Python -3 in the future should also be much easier. - -Documentation -************* - -- Docs have been restructured to handle the new classes and locations of the - methods from the pure Python refactor. - -Bug Handling -************ - -This change may introduce new bugs, however there is no longer the possibility -of a complete Python segfault due to errors in the C library and/or the C -binding. - -- Possible segfaults from the C lib are gone. -- Password mangling due to the C lib is gone. -- The party recipes didn't set their participating flag to False after - leaving. - -Features -******** - -- New `client.command` and `client.server_version` API, exposing Zookeeper's - four letter commands and giving access to structured version information. -- Added 'include_data' option for get_children to include the node's Stat - object. -- Substantial increase in logging data with debug mode. All correspondence with - the Zookeeper server can now be seen to help in debugging. - -API Changes -*********** - -- The testing helpers have been moved from `testing.__init__` into a - `testing.harness` module. The official API's of `KazooTestCase` and - `KazooTestHarness` can still be directly imported from `testing`. -- The kazoo.handlers.util module was removed. -- Backwards compatible exception class aliases are provided for now in kazoo - exceptions for the prior C exception names. -- Unicode strings now work fine for node names and are properly converted to - and from unicode objects. -- The data value argument for the create and create_async methods of the - client was made optional and defaults to an empty byte string. The data - value must be a byte string. Unicode values are no longer allowed and - will raise a TypeError. - - -0.3 (2012-08-23) ----------------- - -API Changes -*********** - -- Handler interface now has an rlock_object for use by recipes. - -Bug Handling -************ - -- Fixed password bug with updated zc-zookeeper-static release, which retains - null bytes in the password properly. -- Fixed reconnect hammering, so that the reconnection follows retry jitter and - retry backoff's. -- Fixed possible bug with using a threading.Condition in the set partitioner. - Set partitioner uses new rlock_object handler API to get an appropriate RLock - for gevent. -- Issue #17 fixed: Wrap timeout exceptions with staticmethod so they can be - used directly as intended. Patch by Bob Van Zant. -- Fixed bug with client reconnection looping indefinitely using an expired - session id. - -0.2 (2012-08-12) ----------------- - -Documentation -************* - -- Fixed doc references to start_async using an AsyncResult object, it uses - an Event object. - -Bug Handling -************ - -- Issue #16 fixed: gevent zookeeper logging failed to handle a monkey patched - logging setup. Logging is now setup such that a greenlet is used for logging - messages under gevent, and the thread one is used otherwise. -- Fixed bug similar to #14 for ChildrenWatch on the session listener. -- Issue #14 fixed: DataWatch had inconsistent handling of the node it was - watching not existing. DataWatch also properly spawns its _get_data function - to avoid blocking session events. -- Issue #15 fixed: sleep_func for SequentialGeventHandler was not set on the - class appropriately leading to additional arguments being passed to - gevent.sleep. -- Issue #9 fixed: Threads/greenlets didn't gracefully shut down. Handler now - has a start/stop that is used by the client when calling start and stop that - shuts down the handler workers. This addresses errors and warnings that could - be emitted upon process shutdown regarding a clean exit of the workers. -- Issue #12 fixed: gevent 0.13 doesn't use the same start_new_thread as gevent - 1.0 which resulted in a fully monkey-patched environment halting due to the - wrong thread. Updated to use the older kazoo method of getting the real thread - module object. - -API Changes -*********** - -- The KazooClient handler is now officially exposed as KazooClient.handler - so that the appropriate sync objects can be used by end-users. -- Refactored ChildrenWatcher used by SetPartitioner into a publicly exposed - PatientChildrenWatch under recipe.watchers. - -Deprecations -************ - -- connect/connect_async has been renamed to start/start_async to better match - the stop to indicate connection handling. The prior names are aliased for - the time being. - -Recipes -******* - -- Added Barrier and DoubleBarrier implementation. - -0.2b1 (2012-07-27) ------------------- - -Bug Handling -************ - -- ZOOKEEPER-1318: SystemError is caught and rethrown as the proper invalid - state exception in older zookeeper python bindings where this issue is still - valid. -- ZOOKEEPER-1431: Install the latest zc-zookeeper-static library or use the - packaged ubuntu one for ubuntu 12.04 or later. -- ZOOKEEPER-553: State handling isn't checked via this method, we track it in - a simpler manner with the watcher to ensure we know the right state. - -Features -******** - -- Exponential backoff with jitter for retrying commands. -- Gevent 0.13 and 1.0b support. -- Lock, Party, SetPartitioner, and Election recipe implementations. -- Data and Children watching API's. -- State transition handling with listener registering to handle session state - changes (choose to fatal the app on session expiration, etc.) -- Zookeeper logging stream redirected into Python logging channel under the - name 'Zookeeper'. -- Base client library with handler support for threading and gevent async - environments. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..133e03a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,166 @@ +# Contribution Guidelines + +We gladly accept outside contributions. We use our +[Github issue tracker](https://github.com/python-zk/kazoo/issues) +for both discussions and talking about new features or bugs. You can +also fork the project and sent us a pull request. If you have a more +general topic to discuss, the +[user@zookeeper.apache.org](https://zookeeper.apache.org/lists.html) +mailing list is a good place to do so. You can sometimes find us on +IRC in the +[#zookeeper channel on freenode](https://zookeeper.apache.org/irc.html). + +[See the README](/README.rst) for contact information. + +## Development + +If you want to work on the code and sent us a +[pull request](https://help.github.com/articles/using-pull-requests), +first fork the repository on github to your own account. Then clone +your new repository and run the build scripts: + +``` + git clone git@github.com:/kazoo.git + cd kazoo + make +``` + +You need to have some supported version of Python installed and have +it available as `python` in your shell. To run Zookeeper you also +need a Java runtime (JRE or JDK) version 6 or 7. To run tests, you +need to have the tox, Python testing tool, to be installed in your shell. + +You can run all the tests by calling: + +``` + make test +``` + +Or to run individual tests: + +``` + export ZOOKEEPER_PATH=//bin/zookeeper/ + bin/nosetests -s -d kazoo.tests.test_client:TestClient.test_create +``` + +The nose test runner allows you to filter by test module, class or +individual test method. + +If you made changes to the documentation, you can build it locally: + +``` + make html +``` + +And then open `./docs/_build/html/index.html` in a web browser to +verify the correct rendering. + + +## Bug Reports + +You can file issues here on GitHub. Please try to include as much information as +you can and under what conditions you saw the issue. + +## Adding Recipes + +New recipes are welcome, however they should include the status/maintainer +RST information so its clear who is maintaining the recipe. This does mean +that if you submit a recipe for inclusion with Kazoo, you should be ready +to support/maintain it, and address bugs that may be found. + +Ideally a recipe should have at least two maintainers. + +## Sending Pull Requests + +Patches should be submitted as pull requests (PR). + +Before submitting a PR: +- Your code must run and pass all the automated tests before you submit your PR + for review. "Work in progress" pull requests are allowed to be submitted, but + should be clearly labeled as such and should not be merged until all tests + pass and the code has been reviewed. +- Your patch should include new tests that cover your changes. It is your and + your reviewer's responsibility to ensure your patch includes adequate tests. + +When submitting a PR: +- You agree to license your code under the project's open source license + ([APL 2.0](/LICENSE)). +- Base your branch off the current `master`. +- Add both your code and new tests if relevant. +- Sign your git commit. +- Run the test suite to make sure your code passes linting and tests. +- Ensure your changes do not reduce code coverage of the test suite. +- Please do not include merge commits in pull requests; include only commits + with the new relevant code. + + +## Code Review + +This project is production Mozilla code and subject to our [engineering practices and quality standards](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Committing_Rules_and_Responsibilities). Every patch must be peer reviewed. + +## Git Commit Guidelines + +We loosely follow the [Angular commit guidelines](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#type) +of `(scope): ` where `type` must be one of: + +* **feat**: A new feature +* **fix**: A bug fix +* **docs**: Documentation only changes +* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing + semi-colons, etc) +* **refactor**: A code change that neither fixes a bug or adds a feature +* **perf**: A code change that improves performance +* **test**: Adding missing tests +* **chore**: Changes to the build process or auxiliary tools and libraries such as documentation + generation + +Scope may be left off if none of these components are applicable: + +* **core**: Core client/connection handling +* **recipe**: Changes/Fixes/Additions to recipes + +### Subject + +The subject contains succinct description of the change: + +* use the imperative, present tense: "change" not "changed" nor "changes" +* don't capitalize first letter +* no dot (.) at the end + +### Body + +In order to maintain a reference to the context of the commit, add +`closes #` if it closes a related issue or `issue #` +if it's a partial fix. + +You can also write a detailed description of the commit: Just as in the +**subject**, use the imperative, present tense: "change" not "changed" nor +"changes" It should include the motivation for the change and contrast this with +previous behavior. + +### Footer + +The footer should contain any information about **Breaking Changes** and is also +the place to reference GitHub issues that this commit **Closes**. + +### Example + +A properly formatted commit message should look like: + +``` +feat(core): add tasty cookies to the client handler + +Properly formatted commit messages provide understandable history and +documentation. This patch will provide a delicious cookie when all tests have +passed and the commit message is properly formatted. + +BREAKING CHANGE: This patch requires developer to lower expectations about + what "delicious" and "cookie" may mean. Some sadness may result. + +Closes #3.14, #9.75 +``` + +# Legal + +Currently we don't have any legal contributor agreement, so code +ownership stays with the original authors. diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst deleted file mode 100644 index bb7cf38..0000000 --- a/CONTRIBUTING.rst +++ /dev/null @@ -1,81 +0,0 @@ -================= -How to contribute -================= - -We gladly accept outside contributions. We use our -`Github issue tracker `_ -for both discussions and talking about new features or bugs. You can -also fork the project and sent us a pull request. If you have a more -general topic to discuss, the -`user@zookeeper.apache.org `_ -mailing list is a good place to do so. You can sometimes find us on -IRC in the -`#zookeeper channel on freenode `_. - - -Development -=========== - -If you want to work on the code and sent us a -`pull request `_, -first fork the repository on github to your own account. Then clone -your new repository and run the build scripts:: - - git clone git@github.com:/kazoo.git - cd kazoo - make - -You need to have some supported version of Python installed and have -it available as ``python`` in your shell. To run Zookeeper you also -need a Java runtime (JRE or JDK) version 6 or 7. To run tests, you -need to have the tox, Python testing tool, to be installed in your shell. - -You can run all the tests by calling:: - - make test - -Or to run individual tests:: - - export ZOOKEEPER_PATH=//bin/zookeeper/ - bin/nosetests -s -d kazoo.tests.test_client:TestClient.test_create - -The nose test runner allows you to filter by test module, class or -individual test method. - -If you made changes to the documentation, you can build it locally:: - - make html - -And then open ``./docs/_build/html/index.html`` in a web browser to -verify the correct rendering. - - -Submitting changes -================== - -We appreciate getting changes sent as pull requests via github. We have -travis-ci set up, which will run all tests on all supported version -combinations for submitted pull requests, which makes it easy to see -if new code breaks tests on some weird version combination. - -If you introduce new functionality, please also add documentation and -a short entry in the top-level ``CHANGES.rst`` file. - - -Adding Recipes -============== - -New recipes are welcome, however they should include the status/maintainer -RST information so its clear who is maintaining the recipe. This does mean -that if you submit a recipe for inclusion with Kazoo, you should be ready -to support/maintain it, and address bugs that may be found. - -Ideally a recipe should have at least two maintainers. - -Legal -===== - -Currently we don't have any legal contributor agreement, so code -ownership stays with the original authors. The project is licensed -under the -`Apache License Version 2 `_. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b6dd29f --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +Kazoo +===== + +![Travis Build](https://travis-ci.org/python-zk/kazoo.svg?branch=master) + +![Latest Version](https://img.shields.io/pypi/v/kazoo.svg) + +![Downloads](https://img.shields.io/pypi/dm/kazoo.svg) + +`kazoo` implements a higher level API to [Apache +Zookeeper](http://zookeeper.apache.org/) for Python clients. + +See [the full docs](http://kazoo.rtfd.org/) for more information. + +License +------- + +`kazoo` is offered under the Apache License 2.0. + +Authors +------- + +`kazoo` started under the [Nimbus +Project](http://www.nimbusproject.org/) and through collaboration with +the open-source community has been merged with code from +[Mozilla](http://www.mozilla.org/) and the [Zope +Corporation](http://zope.com/). It has since gathered an active +community of over fifty contributors. diff --git a/README.rst b/README.rst deleted file mode 100644 index dc90961..0000000 --- a/README.rst +++ /dev/null @@ -1,39 +0,0 @@ -===== -Kazoo -===== - -.. image:: https://travis-ci.org/python-zk/kazoo.svg?branch=master - :target: https://travis-ci.org/python-zk/kazoo - :alt: Travis Build - -.. image:: https://img.shields.io/pypi/v/kazoo.svg - :target: https://pypi.python.org/pypi/kazoo/ - :alt: Latest Version - -.. image:: https://img.shields.io/pypi/dm/kazoo.svg - :target: https://pypi.python.org/pypi/kazoo/ - :alt: Downloads - -``kazoo`` implements a higher level API to `Apache Zookeeper`_ for Python -clients. - -See `the full docs`_ for more information. - -License -======= - -``kazoo`` is offered under the Apache License 2.0. - -Authors -======= - -``kazoo`` started under the `Nimbus Project`_ and through collaboration with -the open-source community has been merged with code from `Mozilla`_ and the -`Zope Corporation`_. It has since gathered an active community of over fifty -contributors. - -.. _Apache Zookeeper: http://zookeeper.apache.org/ -.. _the full docs: http://kazoo.rtfd.org/ -.. _Nimbus Project: http://www.nimbusproject.org/ -.. _Zope Corporation: http://zope.com/ -.. _Mozilla: http://www.mozilla.org/ diff --git a/kazoo/version.py b/kazoo/version.py index 36a511e..8219039 100644 --- a/kazoo/version.py +++ b/kazoo/version.py @@ -1 +1 @@ -__version__ = '2.2.1' +__version__ = '2.3.0' diff --git a/setup.py b/setup.py index 109c43a..1af6113 100644 --- a/setup.py +++ b/setup.py @@ -6,9 +6,9 @@ import re from setuptools import setup, find_packages here = os.path.abspath(os.path.dirname(__file__)) -with open(os.path.join(here, 'README.rst')) as f: +with open(os.path.join(here, 'README.md')) as f: README = f.read() -with open(os.path.join(here, 'CHANGES.rst')) as f: +with open(os.path.join(here, 'CHANGES.md')) as f: CHANGES = f.read() version = '' with open(os.path.join(here, 'kazoo', 'version.py')) as f: