- Reopen client if an ZK::Exceptions::InterruptedSession occurs (#50, mauricio)
- Insert the "root_znode" path before "master_redis_node_manager_lock" and expose via accessor (#52, jzaleski)
- Bumped required dependency on ZK gem. ZK 1.7.4 fixes a critical bug with locking (see https://github.com/slyphon/zk/issues/54)
- Fix an issue where a failover would not occur if we couldn't check the role of a downed master
** NOTE: This version of redis_failover requires that you upgrade your clients and Node Managers at the same time.
- redis_failover now supports distributed monitoring among the Node Managers! Previously, the Node Managers were only used as a means of redundancy in case a particular node manager crashed. Starting with version 1.0 of redis_failover, the Node Managers will all periodically report their health report/snapshots. The primary Node Manager will utilize a configurable "node strategy" to determine if a particular node is available or unavailable.
- redis_failover now supports a configurable "failover strategy" that's consulted when performing a failover. Currently, a single strategy is provided that takes into account the average latency of the last health check to the redis server.
- Improved handling of underlying ZK client connection in RedisFailover::NodeManager
- Add support for passing in an existing ZK client instance to RedisFailover::Cient.new
- Reduce unnecessary writes to ZK
- Add support for Redis#client's location method. Fixes a compatibility issue with redis_failover and Sidekiq.
- Stop repeated attempts to acquire exclusive lock in Node Manager (#36)
- Stubbed Client#client to return itself, fixes a fork reconnect bug with Resque (dbalatero)
- Handle the node discovery error condition where the znode points to a master that is now a slave.
- Introduce a safer master node discovery process for the Node Manager (#34)
- Improved shutdown process for Node Manager
- Preserve original master by reading from existing znode state.
- Prevent Timeout::Error from bringing down the process (#32) (@eric)
- Add lock assert for Node Manager.
- Improved exception handling in NodeWatcher.
- Improve nested exception handling.
- Fix manual failover support when znode does not exist first.
- Various fixes to work better with 1.8.7.
- Make Node Manager's lock path vary with its main znode. (Bira)
- Node Manager's znode for holding current list of redis nodes is no longer ephemeral. This is unnecessary since the current master should only be changed by redis_failover.
- Introduce :master_only option for RedisFailover::Client (disabled by default). This option configures the client to direct all read/write operations to the master.
- Introduce :safe_mode option (enabled by default). This option configures the client to purge its redis clients when a ZK session expires or when the client hasn't recently heard from the node manager.
- Introduce RedisFailover::Client#on_node_change callback notification for when the currently known list of master/slave redis nodes changes.
- Added #current_master and #current_slaves to RedisFailover::Client. This is useful for programmatically doing things based on the current master/slaves.
- redis_node_manager should start if no redis servers are available (#29)
- Better handling of ZK session expirations in Node Manager.
- Handle errors raised by redis 3.x client (tsilen)
- Use a stack for handling nested blocks in RedisFailover::Client (inspired by connection_pool gem)
- Fix an issue with #multi and Redis 3.x.
- Support TTL operation (#24)
- No longer buffer output (kyohsuke)
- Update redis/zk gem versions to latest (rudionrails)
- Lock-down gemspec to version 1.1.x of redis-namespace to play nicely with redis 2.2.x.
- Fix RedisFailover::Client#manual_failover regression (oleriesenberg)
- Lock-down gemspec to redis 2.2.x in light of upcoming redis 3.x release. Once sufficient testing has been done with the 3.x release, I will relax the constraint in the gemspec.
- Add environment-scoped configuration file support (oleriesenberg)
- Added a way to gracefully shutdown/reconnect a RedisFailover::Client. (#13)
- Upgraded to latest ZK version that supports forking.
- Handle case where the same RedisFailover::Client is referenced by a #multi block (#14)
- Fix method signature for RedisFailover::Client#respond_to_missing? (#12)
- Added YARD documentation.
- Improve ZooKeeper client connection management.
- Upgrade to latest ZK gem stable release.
- Added manual failover support (can be initiated via RedisFailover::Client#manual_failover)
- Misc. cleanup
- When new master promotion occurs, make existing slaves point to new candidate before promoting new master.
- Add support for specifying command-line options in a config.yml file for Node Manager.
- Upgrade to 0.9 version of ZK client and cleanup ZK connection error handling.
- Add support for running multiple Node Manager processes for added redundancy (#4)
- Add support for specifying a redis database in RedisFailover::Client (#5)
- Improved Node Manager command-line option parsing
- No longer use problematic ZK#reopen.
- Handle more ZK exceptions as candidates for reconnecting the client on error.
- Add safety check to actively purge redis clients if a RedisFailover::Client hasn't heard from the Node Manager in a certain time window.
- Always try to create path before setting current state in Node Manager.
- More explicit rescuing of exceptions.
- More logging around exceptions
- Handle re-watching on client session expirations / disconnections
- Use an ephemeral node for the list of redis servers
- redis_failover is now built on top of ZooKeeper! This means redis_failover enjoys all of the reliability, redundancy, and data consistency offered by ZooKeeper. The old fragile HTTP-based approach has been removed and will no longer be supported in favor of ZooKeeper. This does mean that in order to use redis_failover, you must have ZooKeeper installed and running. Please see the README for steps on how to do this if you don't already have ZooKeeper running in your production environment.
- No longer force newly available slaves to master if already slaves of that master
- Honor a node's slave-serve-stale-data configuration option; do not mark a sync-with-master-in-progress slave as available if its slave-serve-stale-data is disabled
- Change reachable/unreachable wording to available/unavailable
- Added node reconciliation, i.e. if a node comes back up, make sure that the node manager and the node agree on current role
- More efficient use of redis client connections
- Raise proper error for unsupported operations (i.e., those that don't make sense for a failover client)
- Properly handle any hanging node operations in the failover server
- Integrated travis-ci
- Added background monitor to client for proactively detecting changes to current set of redis nodes
- Added retry support for contacting failover server from client
- Client now verifies proper master/slave role before attempting operation
- General edge case cleanup for NodeManager
- Fix option parser require
- First release