Skip to content

Neo4j 1.9 Enterprise changelog

Jonas Kalderstam edited this page Mar 31, 2017 · 2 revisions

1.9.6 (2014-01-31)

HA:

  • Index delete now propagates properly across all cluster nodes
  • Slaves now retry switching, making possible overcoming temporary failures
  • Remote transaction initialization is now explicitly marked and tracked, solving transaction leakage and reuse problems
  • HA instances no longer require a snapshot on cluster join
  • HA instances now properly switch to PENDING state when losing quorum
  • Fixes save deadlock problem
  • Transactions now happen in the context of a master epoch, to solve issues with transactions wrongly propagating between masters
  • Introduces monitoring for remote calls between cluster instances

Kernel:

  • Fixes issue with batch inserter which could lead to record not in use exception when adding properties
  • Introduces monitoring for reads/writes to the logical log

Server:

  • Fixes issue with transacions leaking when there is an exception while rendering the response

Backup:

  • HA backup instances now are logged as backup instead of "-1"

Cluster:

  • Fixes message reordering issue
  • Fixes a Paxos instance reuse issue
  • Cluster join denial now includes cluster configuration
  • Fixes issues with proper Payload values passed around

1.9.5 (2013-11-11)

HA:

  • Removed all usage of getHostName() that might lead to problems on instances with improperly configured DNS
  • 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
  • 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

Kernel:

  • Fixed NPE in PersistenceWindowPool when concurrently loading non-mapped windows
  • Fixed potential deadlock in PersistenceWindowPool cause by negative mark count
  • Performance optimizations for best-first selector
  • Database now waits on a timeout for transactions to finish before actually shutting down, while preventing new transactions from starting up

Server:

  • Shutdown hook is now properly removed on normal shutdown, removing potential thread leak which might prevent orderly exit of the VM process

Graph Algorithms:

  • Fixed potential suboptimal path finding in A* executions for particular graph topologies. Also improved performance and memory consumption of A*

Cluster:

  • Fixed a bug around channel handling which might lead to messages being delayed and leading to false heartbeat failures
  • It is now possible to specify 0.0.0.0 for ha.cluster_server and properly wait for messages on all interfaces
  • Removed all usage of getHostName() that might lead to problems on instances with improperly configured DNS
  • Fixed election bug which might lead to infinite wait on elections
  • Fixed election bug which might lead to votes being discarded and result in the wrong master being elected
  • Instances no longer expect heartbeats from themselves so they can't timeout on their own
  • Instances will now ignore suspicions from ex cluster members
  • Instances will now ignore suspicions for themselves

1.9.4 (2013-09-19)

Backup:

  • Backup tool and command line utility now exit with status 1 in case the target store has mismatching store ID with the source.

Enterprise Server:

  • Properly return UNKNOWN from the HA REST API when the instance is neither master or slave.

Cluster:

  • Suspicions on failed instances are now printed only once, no longer spamming messages.log.
  • Fixed issue where a failing cluster instance might delay messages between the rest of the instances.

Lucene index:

  • Fixed issue where querying an index for ":" while having removed entities from it in the same transaction might result in exceptions.

1.9.3 (2013-08-30)

Logging in console is now consistent across modules and more informative

HA:

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

Kernel:

  • Remove hard dependency on Logback
  • Introduction of logical_log_rotation_threshold to control log rotation.
  • Autoconfigurator can handle cases where physical memory is less than the configured JVM heap
  • Fixes index out of bounds errors when iterating over relationships
  • Fixes race in persistent window pool which might lead to inconsistent data

Cypher:

  • Fixes problems with extra columns showing up in some conditions

Server:

  • Reintroduces, deprecated, the Configurator.getThirdpartyJaxRsClasses. Fixes, among other things, the authentication-extension
  • Server now properly returns the version when asked through REST

Index:

  • Stop keeping norms in Lucene indexes, saving space and memory

Com:

  • Fix for a race between Slave shutting down a channel and Master reaping it, which led to exceptions on the Master side

Cluster:

  • Fixes issue which might lead to eternal elections
  • UUID for Available messages is now ignored, allowing for upgrades from 1.9.2

1.9.2 (2013-07-16)

Cluster:

  • Fixes bug where a single instance cluster will perpetually try to perform elections

Kernel:

  • When flushing persistent windows, do so only if dirty. This is a performance improvement for certain scenarios.
  • Fixes bug where loading relationship chains with high ids would cause them to be ignored when iterating over them.

Cypher:

  • Fixes problem where Cypher would see changes while the query was running

Server:

  • The Content-Type is now correctly used to set the text encoding, not Content-Encoding
  • Fixes concurrency issue with generation of JSON responses
  • HTTPS scheme is now properly propagated on batch requests

1.9.1 (2013-06-24)

HA:

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

Kernel:

  • Fixes bug where creating an Index with an invalid configuration would not properly clean up the configuration for it.
  • Fixes race condition that occasionally would make Node.getSingleRelationship() mistakenly fail.
  • Fixes compliance for non-logback logging implementations
  • Cleanup of transactions that fail commit happens under the same lock as the commit

Cypher:

  • Cypher execution results are now closeable
  • Allow | to be used as a separator in foreach and extract+reduce

Server:

  • Fixes bug where the last security rule would be the only one respected, if multiple would be present
  • Support for chained certificates
  • Enabled streaming support for paged traversals

Com:

  • Client now uses heap buffers, reduces GC requirements and out of memory errors
  • Master will now not timeout long running write operations, like store copying
  • Redesigned ResourcePool, now it properly pools and reuses resources, should be more easy going on the garbage collector

Packaging:

  • Improved handling of JAVA_HOME on OSX

1.9 (2013-05-13)

Cluster:

  • Coordinator doesn't ask itself for snapshots, solving a bug where starting an arbiter first would make the cluster unresponsive.

Enterprise server:

  • Arbiter instances now log into data/log/arbiter/messages.log

Kernel:

  • Performance improvement on initial loading of relationship types during startup

1.9.RC2 (2013-04-30)

Backup:

  • Reverts default backup port to 6362

Cluster:

  • Upgrades to Netty 3.6.3
  • Elections don't start when a quorum is not available, fixing a certain class of race conditions when quorum is lost
  • The joining of an instance is now interpreted as a heartbeat, fixing a class of race conditions when an instance joins and immediately dies

Com:

  • Upgrades to Netty 3.6.3

Kernel:

  • Fixes race conditions on usage of persistence windows' byte buffers that occasionally led to buffer over/underflows.

Server:

  • Create unique node with properties that have collection values properly casts them to arrays
  • Data visualization editor now navigates back to the data browser on save and cancel

Cypher:

  • Fixes problem when sending down custom queries to index providers

1.9.RC1 (2013-04-15)

HA:

  • 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.

Backup:

  • -full and -incremental backup flags are deprecated, type of backup is automatically determined by the contents of the target directory

Cluster:

  • Removes URL discovery mechanism for clustering
  • Moves from URI as an instance id to integers - they must be specified manually. The new setting is ClusterSettings.server_id
  • Instances can now be replaced if they have marked as fail if a new instance with the same id joins the cluster
  • For a cluster to be formed now a majority of instances as configured in initial_hosts must be available
  • Fixes around cluster formation from instances concurrently starting up
  • Explicit join denial is now possible if an instance tries to join using a server_id already in use

Lucene Index:

  • Lucene upgraded to 3.6.2

Server:

  • Introduces new splash screen containing a guide to Neo4j. Several small aesthetic improvements

Cypher:

  • Fixed #578 - problem with profiling queries that use LIMIT
  • Fixes #550 - problem when using START after WITH
  • Allows single node patterns in MATCH
  • Fixes problem for some patterns and all-nodes start points
  • Fixes #650 - issue when doing multiple aggregation expressions on the same identifier
  • Added timestamp function

Packaging:

  • plugins/ subdirectory is searched recursively for server plugins

1.9.M05 (2013-03-05)

Now compiles and runs under JDK 7 Introduces arbiter script for cluster client instances

HA:

  • Slave only mode is now available
  • HA server will now bind by default to all interfaces (0.0.0.0)

Backup:

  • Backup server now binds by default to 127.0.0.1

Cluster:

  • Election happens for all roles when an instance comes online
  • Snapshots are no longer received automatically on cluster join
  • Instances starting concurrently will now discover each other instead of each starting their own cluster
  • Acceptor store now does not grow unbounded and is garbage collected
  • Learn requests are made towards and responded from all cluster members
  • Cluster server will now by default bind to all interfaces (0.0.0.0)

Com:

  • Shutting down Server now takes proper care of executors and works with multiple versions of netty

Enterprise Server:

  • HA info REST endpoints now are called /db/manage/server/ha/{ismaster,isslave}, with getMaster no longer existing.

Kernel:

  • Concurrent modifications to relationship chains now do not lead to RecordNotInUse exceptions or cache poisoning
  • Proper tx management will now make negative transaction counts impossible
  • IndexProvider is now deprecated, replaced by KernelExtensionFactory
  • Store locks are respected from read only instances too
  • grab_file_lock configuration setting is now deprecated

Lucene Index:

  • LuceneIndexProvider is now replaced by LuceneKernelExtension

Server:

  • Added support for X-Forwarded-Host and X-Forwarded-Proto headers to allow parameterising of links in data for hosting behind proxy servers.

JMX:

  • JMX will now provide info on all configuration values, including the defaults not explicitly set

Cypher:

  • Fixes #450 - Predicates in WHERE are not evaluated correctly for certain patterns
  • Fixes problem with null comparisons and optional relationships
  • Made it possible to run the parser concurrently
  • DISTINCT is now lazy, and keeps the incoming ordering
  • Added execution plan descriptions to execution results
  • Fixes #464 - getDeletedRelationships does not work for javacompat.ExecutionResult
  • Fixes #535 - 'INTERNAL_SORT' columns show when doing RETURN * ORDER BY
  • Added experimental profiled query support
  • Fixes #489 - CREATE UNIQUE does not work as expected inside FOREACH

1.9.M04 (2013-01-17)

HA:

  • Conflicting server IDs in a cluster will now make the latest joining instance to leave the cluster immediately and become non functional

Enterprise Server:

  • Includes new service endpoint, typically found under /db/manage/server/ha/{isMaster,getMaster}, with HA related info.

Backup:

  • online_backup_port is now depracated in favour of online_backup_server, works with a port range
  • online backup is now enabled by default if possible
  • Improved error reporting for backup tool

Cluster:

  • Warning is now printed if an instance that is not part of ha.initial_hosts tries to join the cluster
  • Snapshots are now prunned when received during cluster joining
  • Logging cleanup

Kernel:

  • Start entries are now explicitly marked as written, solves a bug that might cause recovery to fail

Server:

  • Increased performance for rest-batch-operations by a factor of 100

Cypher:

  • Clearer error message for when aggregations are used in ORDER BY and not in RETURN
  • Fixes #394 - Identifiers inside of FOREACH get the wrong type
  • Fixes #390 - IN/ANY/NONE/ANY/SINGLE causes RuntimeException for some patterns
  • Fixes #387 - Some patterns produced "Unexpected traversal state" in Cypher
  • Upgraded the Scala version to 2.10
  • Fixes #355 - Collections in collections are still Scala collections instead of Java collections

1.9.M03 (2012-12-21)

Server:

  • Pulled out Gremlin as separate plugin to support different versions

Cypher:

  • Fixes #336 - Patterns that re-use a pattern node can produce non-existing matches
  • Fixes #369 - The substring-function sometimes fails when no length is specified

1.9.M02 (2012-11-30)

HA:

  • Lifecycle improvements, with proper removal of listeners on shutdown
  • Cluster snapshot synchronization used for HA cluster membership
  • Implements JMX changes
  • IdGenerators instantiated properly in ModeSwitcher
  • ZooKeeper compatibility layer introduced, allows for rolling upgrades from 1.8
  • 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.

Cluster:

  • Moved shared logic, commonly refered to as cluster client into a ClusterClient class.
  • Reduced amount of threads used by Paxos by using fixed size thread pools
  • Paxos cluster membership management imporoved by introducing memberIsUnavailable and cleanup of roles

Consistency Checker:

  • Write out log file if inconsistencies are found.
  • Improved configuration for memory mapping with MOST_FREQUENTLY_USED window pool.
  • Consistency checker defaults to using the 'most frequently used' implementation when on Windows to avoid memory (un)mapping problems

Management:

  • Adds serverId and current roles to the set of information available for cluster members

Kernel:

  • Made sure that auto-indexing removed graph elements from indexes when they are delete
  • OrderByTypeExpander keeps ordering of type AND direction
  • Fixed an issue where a lock on a store was sometimes not released
  • Old GraphDatabaseSetting classes are now wrappers for Settings instances
  • Fixes an issue where an incomplete 2PC transaction could cause recovery to not be triggered
  • Optimizations for read performance
    • Cache refers to relationship types as ints instead of Strings.
    • Binary search on sorted arrays for finding properties and relationship types in the cache.
    • Less objects instantiated during getting and iterating relationships.
    • Reduced number of map lookups significantly for a getProperty call, especially outside transaction or in transactions without any changes. (previously 8 lookups whereof 2 synchronized, now down to as low as 2)
    • Uses ThreadLocal as mapper from thread to transaction
    • Refactored LockReleaser into TransactionState, associated with each transaction instead

Server:

  • Server now allows - under some specific circumstances - setting empty arrays as properties. Specifically, it is allowed if there is a pre-existing array property on the entity from which the server can infer the type of array to store.
  • Traversal Javascript is now security sandboxed. It is possible to turn the sandbox off for the next two releases, for backwards compatibility.

Cypher:

  • The traversal pattern matcher now supports variable length relationship patterns
  • Fixes #946 - HAS(...) fails with ThisShouldNotHappenException for some patterns
  • Made Cypher better at keeping a numeric type. Adding two integers now returns an integer, and not a double.
  • Major refactoring to make certain Cypher is more lazy
  • When asking for the top x rows by some value, Cypher will now only keep a list the size of x
  • Fix so identifiers created inside a foreach can be used by other statements in the foreach
  • Fix for problems when using patterns with multiple unnamed nodes
  • Fixes problems when doing ORDER BY ... LIMIT x. When x is larger than the input set, sorting was never done.

1.9.M01 (2012-10-23)

Introduces consistency check and cluster components.

HA:

  • 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

Backup:

  • Consistency check extracted into its own module (consistency-check).
  • BackupTool extended to accept tuning parameters for consistency check.

Consistency check:

  • Initial release (extracted from backup module).
  • Added new consistency check implementation with better performance thanks to better usage of mapped memory.
  • Consistency check can now accept tuning parameters to make best use of available resources.
  • New WindowPool implementation for exclusive use underneath the consistency check.

Cluster:

  • Initial release

Kernel:

  • XaDatasources now implement lifecycle and their registration with XaDatasourceManager triggers TxManager recovery on startup
  • Neo4j logical log now handles running out of disk space at a critical point gracefully.
  • Kernel extensions are now factories that create instances which participate in the database's lifecycle
  • Fixes a race condition around relationship chain loading from multiple threads on the same node

Cypher:

  • Refactored the type system from the bottom up
  • Predicates can now be returned and used to set properties
  • Fixes #797: CREATE UNIQUE now makes sure used identifiers have the same properties even if they are re-used without the properties
  • Added the traversal matcher, which uses the new traversal framework abilities to do pattern matching. It should provide for nice performance benefits for a lot of queries.
  • Fixed #866: Changed the LRU cache to make it safe to use concurrently, and made the parser single threaded
  • Added the reduce() functionality
  • Made addition automatically convert numbers to strings when adding the two together
  • Added the string functions: str(), replace(), substring(), left(), right(), ltrim(), rtrim(), trim(), lower(), upper()
  • Added the possibility to use ORDER BY, SKIP and LIMIT together with WITH
  • Fixes #904: CREATE UNIQUE doesn't work with parameter maps
  • Fixes #908: Parameters do not survive WITH if it has aggregation
  • SET can now be used to set properties on nodes and relationships from maps or other graph elements

Management:

  • High Availability beans now expose information relevant to the new way clusters work