2.2.3
-----
o Transactions executed on slaves will now properly invalidate the master's cache on commit

2.2.2
-----
o Fixes an issue in the high-performance cache, HPC, where the array would be much bigger than intended
  in JVMs with very large heap. This would result in failure to start the database.
o Aborts attempt to join cluster on recognizing foreign store, instead of forever trying and failing.

2.2.1
-----
o Fixes a GC problem where memory could be indefinitely and unnecessarily kept after role switch
o Properly resets the "health" state after a kernel panic has been handled

2.2.0-RC1
---------
o Fixed a bug where a slave would enter an infinite loop trying to switch to SLAVE for a stale master.
o Ensure all responses from remote calls are properly closed

2.1.8
-----
o Fixes an issue where store copying could get a NullPointerException when it was
  cancelled, because it deleted the downloaded files too quickly.
o Fixes an issue where creating a uniqueness constraint could race with a
  violating transaction, and allow both transactions to commit.

2.1.7
-----
o Slaves receiving IllegalEpochException will from now on
  react to it by updating themselves to properly communicate
  with the master

2.1.6
-----
o Fixes issue where if the master lost contact with a majority of slaves
  and subsequently contact was restored, the master instance would not
  resume its role

2.1.4
-----
o Master switches now properly cancel slaves that are transitioning
  to an obsolete master.
o Fixes an issue where an instance would report, through JMX, invalid roles
  for a cluster member
o Transactions that perform no logical changes will now be properly identified as
  read only
o Instances in HA mode will now refuse to start on a store that needs to
  be upgraded
o Instances will now check, as part of the cluster join process, if another
  instance has a store of the same version but upgraded from a store copy
  that had different transaction count, preventing the possibility of
  binary incompatible stores participating in the same cluster
o Starting a HA cluster on an upgraded store will now work as expected, due
  to logs being upgraded as part of the store upgrade process

2.1.3
-----
o Fixes a bug where instances could not join a cluster if their transaction log
  files were not sufficiently recent.
o Fixes a bug where a cluster instance could not participate in leader elections
  after it had resurfaced from a crash.
o Fixes a bug that could lead to constraints suddenly missing their associated
  indexes after a mode switch in HA.
o Fixes a data race bug in the Enterprise (Forseti) LockManager, that could lead
  to transactions mistakenly failing with IllegalStateExceptions.
o Fixes a bug in the Enterprise (Forseti) LockManager where explicit shared
  locks could not be properly upgraded to exclusive locks.

2.1.2
-----
o Fixes issue with Forseti lock manager, which could miss grabbing
  locks under a race condition
o Update puller on master no longer tries to pull updates
  from itself

2.1.0-RC1
---------
o Add support for rolling upgrades from 2.0.1 or greater (2.0 is not supported)
o Fixes a bug where slave_only instances could participate in, and win, leader elections

2.1.0-M02
--------------
o Clarify the error message for when releasing locks claim prior to a master-switch
o Reduce network overhead of locking in HA
o Fix of issue with state bookkeeping for reporting instance role

2.0.4
-----
o Adds the ability for an instance state change to SLAVE can
  be cancelled by appropriate events. This solves problems
  with occasional high state switch times and potentially
  instances failing to join
o Fixes consistency issues with the state reported by
  the HA bean. Now there will be no incompatible roles
  reported in the JMX console for a particular instance

1.9.8
-----
o Slave only instances no longer attempt to become coordinators, even if
  they instantiate the cluster.

2.0.2
-----
o Fixes potential deadlock when concurrently shutting down the database and role switching
o Fixes issue where cluster would become unresponsive if a message would get lost

2.0.1
-----
o HA Backup now properly resolves the master URI, solving a bug where ha:// backups not running
  from the current master would in some cases fail
o Index delete now propagates properly across all cluster nodes
o Slaves now retry switching, making possible overcoming temporary failures
o Remote transaction initialization is now explicitly marked and tracked, solving
  transaction leakage and reuse problems
o HA instances no longer require a snapshot on cluster join
o HA instances now properly switch to PENDING state when losing quorum
o Fixes save deadlock problem
o Transactions now happen in the context of a master epoch, to solve issues
  with transactions wrongly propagating between masters
o Introduces monitoring for remote calls between cluster instances

2.0.0-RC1
---------
o The GCResistantCache is now called the HighPerformanceCache. The configuration for enabling it has changed from
  'gcr' to 'hpc', although the old setting will remain functional until the next major release.

2.0.0.M06
---------
o Constraints can now be created in a running HA cluster

1.9.8
-----
o Slaves will now fall back to a full store copy if the master misses
  logs old enough to serve incremental updates on join

1.9.7
-----
o Fixes potential deadlock when concurrently shutting down the database and role switching
o Fixes issue where cluster would become unresponsive if a message would get lost

1.9.5 (2013-11-11)
------------------
o Removed all usage of getHostName() that might lead to problems on instances with improperly
  configured DNS
o The master instance will now always send out masterIsAvailable messages in response to
  masterIsElected, ensuring that instances in PENDING state will transition eventually to
  SLAVE
o Master instance now properly blocks transactions from starting after shutdown has started and
  waits on a timeout for running transactions to finish and be pushed to slaves before stopping
  completely.

1.9.3
-----
o Fix for wrong snapshot processing on cluster join, leading to failure to switch to Slave
o Fix in SlaveIdGenerator which could lead to records being marked as not in use
o Important cluster events are now properly included in the console

1.9.1 (2013-06-24)
------------------
o Access guard is now raised during recovery
o Properly throttle push notifications from the master, preventing an exhaustion of resources
  and accompanying failures to pull from slaves
o Slaves will now not participate in elections if not eligible (e.g. when copying the store)

1.9.RC1 (2013-04-15)
--------------------
o Introduction of pseudo quorum writes. If half or more of the instances are unreachable, the instance will stop
  accepting write requests and all transactions will timeout.

1.9.M05 (2013-03-05)
--------------------
o Slave only mode is now available
o HA server will now bind by default to all interfaces (0.0.0.0)

1.9.M04 (2013-01-17)
--------------------
o Conflicting server IDs in a cluster will now make the latest joining instance to leave the cluster immediately and
  become non functional

1.9.M02 (2012-11-30)
--------------------
o Lifecycle improvements, with proper removal of listeners on shutdown
o Cluster snapshot synchronization used for HA cluster membership
o Implements JMX changes
o IdGenerators instantiated properly in ModeSwitcher
o ZooKeeper compatibility layer introduced, allows for rolling upgrades from 1.8
o Ability to join a cluster even if there's an existing and empty database with a mismatching store ID.
  If the existing database isn't empty an error will be logged and database unable to start.

1.9.M01 (2012-10-23)
--------------------
o Massive changes to stop using ZooKeeper as a coordination service and instead move to a custom Paxos implementation.
 + Removed all ZooKeeper related functionality
 + Added support classes for event processing from the cluster component
 + All kernel parts with master/slave implementations are instantiated and managed separately and their switching
   happens based on cluster events
 + HA management beans expose the new information properly
 + Updates to documentation

1.8.M07 (2012-08-08)
--------------------
o Fixed bug where transactions committed through slaves in a mixed version cluster would fail
o Master recovery in clusters with only one instance master capable will now always work as expected

1.8.M06 (2012-07-06)
--------------------
o Added transaction push factor that can be configured with amount of slaves to push transactions to. The master will
  optimistically push each transaction before tx.finish completes to reduce risk of branched data.
o Added the ability for rolling upgrades from versions 1.5.3 onwards.
o Changed the way master election notification and data gathering works, leading to massively reduced writing of data to
  the zookeeper service and a subsequent performance increase.

1.8.M03 (2012-05-24)
--------------------
o Fixed possible but benign NPE when pulling updates
o Really old instances when attempting to join but the tx is not in the master's log will now copy the store

1.8.M01 (2012-04-26)
--------------------
o Fix for a rare race condition in initialization code of zoo keeper client which could make
  a database unable to join its cluster sometimes.

1.7 (2012-04-19)
----------------
o Changed so branched data directories end up in a sub-directory.
o Changed so informative log messages are not logged as errors.
o Fixed issue with relationship types not being created via master if performed on a slave.

1.7.M03 (2012-04-11)
--------------------
o Fixed problem with "Transaction already active" getting logged because of lock timeout.
o Added GCR cache.
o GCR cache arrays are now reused between restarts HA restarts.

1.7.M02 (2012-03-26)
--------------------
o Fixed issue with message log not getting closed properly.

1.7.M01 (2012-03-12)
--------------------
o Optimization where if a transaction is attempted to be killed, but isn't successful due to it being active (for example awaiting a lock)
  such a transaction is killed as soon as it's possible instead of awaiting the scheduled "tx finisher".
o Added config option for ha.max_concurrent_transactions_on_master. There was already
  an equivalent for clients, so those two go hand in hand.
o Failure to rotate logical log is treated as a kernel panic event (just as expected in this case).
o While copying a store from the master the broker is shut down to cancel out any noisy events from it during copy.
o Makes use of the start record checksum on transactions to detect branching of data. Yields more accurate checks.
o Refactored newMaster() slightly and added a retry loop to avoid getting stuck at shutdown state.
o Added Broker#restart and implemented in ZooKeeperBroker to handle ZK session expirations.
o Made ZK session timeout configurable.
o Removed a retry/wait which held a monitor on HighlyAvailableGraphDatabase which could delay a master switch by 'read timeout' seconds.
o Restructuring to use DI, configuration interfaces, less setters/getters, removed unecessary lifecycle classes,
  added proper life cycle support for services and lots and lots of other cleanups. This also removes the need for wrapping
  an entire HA graphdb in a wrapper to have the entities survive an internal restart.

1.6 (2012-01-20)
---------------
o New HA request type allows for copy of transaction interval from master to slave, to recover from missing logical log files.
o It is no longer required to run an update puller to trigger a master election when the master goes down abruptly.
o Multiple retries on store copy operations during startup, so that long copies that get interrupted have a chance to complete.

1.6.M03 (2012-01-12)
--------------------
o Corrected ZK Expired event handling. Now, instead of restarting the zookeeper client, the whole broker is restarted and newMaster is called.
  This leads to proper reconnect to the ZK quorum and parsing of the possibly updated cluster state.
o Added support for having one ZK cluster managing many HA clusters (controlled by ha.cluster_name config).
o Fixed issues with update puller being shutdown incorrectly and sometimes having references to stale objects.
o Added support for creating unique entities via Index#putIfAbsent.

1.6.M02 (2011-12-15)
--------------------
o Introduced ability to wait a while in some key points regarding master election to reduce the noise of possible exceptions
  during master switch.
o Uses the graphdb wrapper to make Index/Node/Relationship references able to survive master switches.
o Fixed bugs where master switch events would sometimes not react accordingly.
o "Old transactions" checker uses the lock read timeout as threshold.
o Fix for null returned from AbstractZooKeeperManager#getMaster(), instead returns a master which always fails with ComException.

1.6.M01 (2011-11-24)
--------------------
o Added entry about HAProxy in manual.
o Fixed an issue where pulling updates would fail if no master had been elected. Now it tries to find a new master instead.
o Exposes information about branched (and stashed) stores through JMX.

1.5.M02 (2011-10-10)
--------------------
o Uses new (faster, non-synchronized) way of extracting transactions when streaming transactions from master to slave.
o Neostore logical logs are included when doing a full store copy from master.
o Fixed a bug with old free ids not being invalidated correctly after master switch.
o Channels aren't tied to a transaction, this to prevent some deadlock scenarios where all channels were tied up and a transaction was to be committed.
o Fixed some possible deadlock scenarios involving at least XaResourceManager and XaLogicalLog.
o Listens to "tx manager not ok" events and does internal restart for those.
o How to handle cases of branched data is configurable: keep all, keep last, keep none.
o Rotates logs before internal restart (slave->master or master->slave) to reduce potential recovery (i.e. switch) times.
o Does some additional repairing of neostore fail after a full store copy from master so that log version is synced.

1.4.M03 (2011-05-26)
--------------------
o Fixed bug that did not rollback tx associated with dead channels.
o Modified master election algo to be more robust against zookeeper hiccups.
o Fixed a synchronization bug in ZooClient that could cause waits on wrong monitor.

1.4.M02 (2011-05-12)
--------------------
o At startup, the Config.USE_MEMORY_MAPPED_LOG parameter is set to 'true' since HA member will benefit performance wise from memory mapping since they
  continuously scan the log.

1.3.M05 (2011-03-24)
--------------------
o Now possible to copy full store on Windows.
o Fixed a bug that caused no new master to be elected when communication problem occured to master.
o Cluster now respond faster to problems when a new master has to be elected.

1.3.M04 (2011-03-10)
--------------------
o Tests disabled if run on windows due to limitations in OS/filesystem.

1.3.M03 (2011-02-24)
--------------------
o ZooClient now knows about backup port to simplify taking backups from a running HA cluster.

1.3.M02 (2011-02-10)
------------------------
o Broke up dependency on neo4j-shell.
o Resolved issue with additional logical logs not being applied correctly after a master copy.
o Resolved issue with multiple threads trying to startup/copy store from master at the same time.
o Fixed potential problem with new master notification.
o Extracted the server/client communication parts from HA into a separate component, neo4j-com
o Some configuration changes related to the new online backup tool.

0.6-1.3.M01 (2011-01-27)
------------------------

o Support for sending requests of unlimited size between master and slave.
o Reduced memory usage of communication between master and slave.
o Database store files can be copied from master on the fly over the wire when a new slave starts for the first time to avoid having to do a copy before-hand.
o Much better traceability in multi-jvm tests.
o Fix for an issue with the HA management bean which could prevent it from loading.

0.5-1.2 (2010-12-29)
--------------------

o HighAvailability management bean loaded properly.

0.5-1.2.M06 (2010-12-21)
------------------------

o When a new master is chosen, slaves throws away the id allocations they got from the previous master. This fixes a problem where occupied ids where reused.
o Enabled (and fixed problem with) thread on master which checks for dead slave connections and rolls back those transactions, so that their locks are released.
  This fixes a problem where an HA cluster would seem to freeze up and become unresponsive to write requests.
o Adding Log4j and Netty license information.
o Also closes the executor containing the connections.
o Changed dependency scopes.
o Shuts down databases after verifying them.

0.5-1.2.M05 (2010-12-02)
------------------------

o initial release
