For Release Notes, see http://neo4j.org/release-notes#neo4j-${project.version} 2.0.0-RC1 --------- Kernel: o BREAKING CHANGE: Reference node has been removed. o BREAKING CHANGE: All classes under the org.neo4j.kernel package space, except those related to the traversal frameworks, are now deprecated and due to be moved into internal packages. This includes well-known classes such as EmbeddedGraphDatabase and HighlyAvailableGraphDatabase, both of which are replaced by GraphDatabaseFactory and HighlyAvailableGraphDatabaseFactory, respectively. o BREAKING CHANGE: Removed deprecated settings from org.neo4j.graphdb.factory.GraphDatabaseSettings. These settings are no longer effective and can be removed without any effect. o BREAKING CHANGE: Removed deprecated org.neo4j.graphdb.index.IndexProvider (and associated org.neo4j.graphdb.index.IndexIterable and org.neo4j.graphdb.index.IndexProviderKernelExtensionFactory). This has been replaced by the kernel extension mechanism. o BREAKING CHANGE: Removed deprecated org.neo4j.graphdb.PropertyContainer#getPropertyValues(). Instead use org.neo4j.graphdb.PropertyContainer#getPropertyKeys() and org.neo4j.graphdb.PropertyContainer#getProperty(String). o BREAKING CHANGE: Removed deprecated methods from org.neo4j.kernel.GraphDatabaseAPI: #getDiagnosticsManager(), #getMessageLog(), #getIdGeneratorFactory(), #getKernelData() and #getPersistenceSource(). These are internal components which Kernel clients should not need to access. The entire org.neo4j.kernel.GraphDatabaseAPI interface is deprecated and will be removed in future. o BREAKING CHANGE: Deprecated constructors of EmbeddedReadOnlyDatabase and EmbeddedGraphDatabase have been removed, in favor of the long-advertised alternative GraphDatabaseFactory. o BREAKING CHANGE: All deprecated methods in GraphDatabaseAPI have been removed in favor of getDependencyResolver(). o The GCResistantCache is now called the HighPerformanceCache. The configuration for enabling it has changed from 'gcr' to 'hpc', although the old setting will remaing functional until the next major release. Cypher: o Add OPTIONAL MATCH to Cypher o Remove question mark symbol from patterns in Cypher o Fixes 1313 o Fixes problem with collection index types o Changes behaviour of LAST/HEAD/TAIL and collection slice - they now all return null for ranges outside a collection o Fixed #1471 - SETting a relationship to a map value fails Shell: o Add '-' as filename for piping stdin directly into the shell, behaves as a file import. Server: o BREAKING CHANGE: Removed deprecated method org.neo4j.server.AbstractNeoServer#stopServerOnly(). To stop the server use org.neo4j.server.AbstractNeoServer#stop(). If you would like to disconnect the database life cycle from server control use org.neo4j.server.WrappingNeoServer. o BREAKING CHANGE: org.neo4j.server.database.Database is now an interface. Direct uses of the class can be replaced by one of its implementations. o Transactional endpoint status codes are now textual rather than numeric. Since the transactional endpoint was introduced in the 2.0.0 series, it is not considered a breaking change. It will, however, require modifying client code that depends on the numeric status codes. Backup: o BREAKING CHANGE: Removed deprecated org.neo4j.backup.check.ConsistencyCheck main class. This is replaced by org.neo4j.consistency.ConsistencyCheckTool. 2.0.0-M06 --------- o Windows desktop GUI added HA: o Constraints can now be created in a running HA cluster Cypher: o Parenthesis around nodes are now mandatory if a label is used on the node 2.0.0-M05 --------- Kernel: o BREAKING CHANGE: GraphDatabaseSettings now only exposes Setting, deprecated settings classes have been removed. o Fixed problems with array properties being updated multiple times in a single transaction o Adds label store as an index o Transaction now implements AutoClosable o Distinguish between data and schema transactions o Unique constraint validation for new data Cypher: o Promote the experimental parser to the default o Added literal maps o Makes RETURN only queries valid o Labels on optional nodes no longer stop the whole MATCH clause from returning results. o Updated NOT precedence o Added collection slice and collection index o Added list comprehension documentation Shell: o Adds support for RETURN only Cypher queries 2.0.0-M04 --------- Kernel: o BREAKING CHANGE: Require Java 7 o BREAKING CHANGE: Transactions are now required for all operations throughout Java Core API, read operations as well as write operations o Define proper equality for indexing of array properties o BREAKING CHANGE: Equality for indexing of number properties compares numbers independent of underlying primitive Java type Cypher: o Fixes #844 - Label predicate do not work on optional nodes that are null o Fixes #897 - Cypher start doesnt allow combining multiple starting points with start node sets o BREAKING CHANGE: Removes "?", "!" syntax for accessing properties. Missing properties are now treated as null o Introduced a new experimental and fast PEG parser o BREAKING CHANGE: Escaped identifiers in the RETURN clause are kept as the user entered them o BREAKING CHANGE: No longer possible to use expressions and params to identify nodes in patterns o BREAKING CHANGE: Use "|" in favor of ":" in FOREACH, EXTRACT and REDUCE to avoid disambiguity with label syntax Server: o Added support for extracting and returning the graph structure from the result of a Cypher query executed via the transactional endpoint 2.0.0-M03 --------- Kernel: o Read-only index results are closed properly Cypher: o Make Cypher execution results closable o Adds Cypher label scan hint o Removes alternative WITH syntax in Cypher o Fixes bug with UNION text output o Added startNode()/endNode() o Fixes #780 - Queries with literal collections fail against schema indexes Server: o Added support for transaction keep-alive 2.0.0-M02 --------- o In server, added REST transaction support o In cypher, added MERGE clause o In cypher, MATCH now supports single-node patterns o In shell, support for listing indexes and their state o Support for labels in the org.neo4j.unsafe.batchinsert APIs. o BREAKING CHANGE: Replaced protected fields from org.neo4j.graphdb.factory.GraphDatabaseFactory with a single org.neo4j.graphdb.factory.GraphDatabaseFactoryState instance to avoid race conditions when creating multiple, lazily instantiated builders o BREAKING CHANGE: org.neo4j.graphdb.index.BatchInserterIndex and org.neo4j.graphdb.index.BatchInserterIndexProvider has been removed in favor of the same interfaces available in org.neo4j.unsafe.batchinsert o BREAKING CHANGE: The BatchInserter and the BatchGraphDatabase are not binary compatible with 1.9 due to some methods now taking a varargs array of labels as last argument. Please recompile any code that depends on the BatchInserter. 2.0.0-M01 --------- o Added support for labels across all APIs: Cypher, Core Java and REST o Added support for the new label-based indexes across all APIs: Cypher, Core Java and REST o Improvements to shell, including import/export of small graphs via cypher statements 1.9.5 (2013-11-11) ------------------ HA: 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 Kernel: o Fixed NPE in PersistenceWindowPool when concurrently loading non-mapped windows o Fixed potential deadlock in PersistenceWindowPool cause by negative mark count o Performance optimizations for best-first selector o Database now waits on a timeout for transactions to finish before actually shutting down, while preventing new transactions from starting up Server: o Shutdown hook is now properly removed on normal shutdown, removing potential thread leak which might prevent orderly exit of the VM process Graph Algorithms: o Fixed potential suboptimal path finding in A* executions for particular graph topologies. Also improved performance and memory consumption of A* Cluster: o Fixed a bug around channel handling which might lead to messages being delayed and leading to false heartbeat failures o It is now possible to specify 0.0.0.0 for ha.cluster_server and properly wait for messages on all interfaces o Removed all usage of getHostName() that might lead to problems on instances with improperly configured DNS o Fixed election bug which might lead to infinite wait on elections o Fixed election bug which might lead to votes being discarded and result in the wrong master being elected o Instances no longer expect heartbeats from themselves so they can't timeout on their own o Instances will now ignore suspicions from ex cluster members o Instances will now ignore suspicions for themselves 1.9.4 (2013-09-19) ------------------ Backup: o 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: o Properly return UNKNOWN from the HA REST API when the instance is neither master or slave. Cluster: o Suspicions on failed instances are now printed only once, no longer spamming messages.log. o Fixed issue where a failing cluster instance might delay messages between the rest of the instances. Lucene index: o 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: 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 Kernel: o Remove hard dependency on Logback o Introduction of logical_log_rotation_threshold to control log rotation. o Autoconfigurator can handle cases where physical memory is less than the configured JVM heap o Fixes index out of bounds errors when iterating over relationships o Fixes race in persistent window pool which might lead to inconsistent data Cypher: o Fixes problems with extra columns showing up in some conditions Server: o Reintroduces, deprecated, the Configurator.getThirdpartyJaxRsClasses. Fixes, among other things, the authentication-extension o Server now properly returns the version when asked through REST Index: o Stop keeping norms in Lucene indexes, saving space and memory Com: o Fix for a race between Slave shutting down a channel and Master reaping it, which led to exceptions on the Master side Cluster: o Fixes issue which might lead to eternal elections o UUID for Available messages is now ignored, allowing for upgrades from 1.9.2 1.9.2 (2013-07-16) ------------------ Cluster: o Fixes bug where a single instance cluster will perpetually try to perform elections Kernel: o When flushing persistent windows, do so only if dirty. This is a performance improvement for certain scenarios. o Fixes bug where loading relationship chains with high ids would cause them to be ignored when iterating over them. Cypher: o Fixes problem where Cypher would see changes while the query was running Server: o The Content-Type is now correctly used to set the text encoding, not Content-Encoding o Fixes concurrency issue with generation of JSON responses o HTTPS scheme is now properly propagated on batch requests 1.9.1 (2013-06-24) ------------------ HA: 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) Kernel: o Fixes bug where creating an Index with an invalid configuration would not properly clean up the configuration for it. o Fixes race condition that occasionally would make Node.getSingleRelationship() mistakenly fail. o Fixes compliance for non-logback logging implementations o Cleanup of transactions that fail commit happens under the same lock as the commit Cypher: o Cypher execution results are now closeable o Allow | to be used as a separator in foreach and extract+reduce Server: o Fixes bug where the last security rule would be the only one respected, if multiple would be present o Support for chained certificates o Enabled streaming support for paged traversals Com: o Client now uses heap buffers, reduces GC requirements and out of memory errors o Master will now not timeout long running write operations, like store copying o Redesigned ResourcePool, now it properly pools and reuses resources, should be more easy going on the garbage collector Packaging: o Improved handling of JAVA_HOME on OSX 1.9 (2013-05-13) ---------------- Cluster: o Coordinator doesn't ask itself for snapshots, solving a bug where starting an arbiter first would make the cluster unresponsive. Enterprise server: o Arbiter instances now log into data/log/arbiter/messages.log Kernel: o Performance improvement on initial loading of relationship types during startup 1.9.RC2 (2013-04-30) -------------------- Backup: o Reverts default backup port to 6362 Cluster: o Upgrades to Netty 3.6.3 o Elections don't start when a quorum is not available, fixing a certain class of race conditions when quorum is lost o 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: o Upgrades to Netty 3.6.3 Kernel: o Fixes race conditions on usage of persistence windows' byte buffers that occasionally led to buffer over/underflows. Server: o Create unique node with properties that have collection values properly casts them to arrays o Data visualization editor now navigates back to the data browser on save and cancel Cypher: o Fixes problem when sending down custom queries to index providers 1.9.RC1 (2013-04-15) -------------------- HA: 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. Backup: o -full and -incremental backup flags are deprecated, type of backup is automatically determined by the contents of the target directory Cluster: o Removes URL discovery mechanism for clustering o Moves from URI as an instance id to integers - they must be specified manually. The new setting is ClusterSettings.server_id o Instances can now be replaced if they have marked as fail if a new instance with the same id joins the cluster o For a cluster to be formed now a majority of instances as configured in initial_hosts must be available o Fixes around cluster formation from instances concurrently starting up o Explicit join denial is now possible if an instance tries to join using a server_id already in use Lucene Index: o Lucene upgraded to 3.6.2 Server: o Introduces new splash screen containing a guide to Neo4j. Several small aesthetic improvements Cypher: o Fixed #578 - problem with profiling queries that use LIMIT o Fixes #550 - problem when using START after WITH o Allows single node patterns in MATCH o Fixes problem for some patterns and all-nodes start points o Fixes #650 - issue when doing multiple aggregation expressions on the same identifier o Added timestamp function Packaging: o 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: o Slave only mode is now available o HA server will now bind by default to all interfaces (0.0.0.0) Backup: o Backup server now binds by default to 127.0.0.1 Cluster: o Election happens for all roles when an instance comes online o Snapshots are no longer received automatically on cluster join o Instances starting concurrently will now discover each other instead of each starting their own cluster o Acceptor store now does not grow unbounded and is garbage collected o Learn requests are made towards and responded from all cluster members o Cluster server will now by default bind to all interfaces (0.0.0.0) Com: o Shutting down Server now takes proper care of executors and works with multiple versions of netty Enterprise Server: o HA info REST endpoints now are called /db/manage/server/ha/{ismaster,isslave}, with getMaster no longer existing. Kernel: o Concurrent modifications to relationship chains now do not lead to RecordNotInUse exceptions or cache poisoning o Proper tx management will now make negative transaction counts impossible o IndexProvider is now deprecated, replaced by KernelExtensionFactory o Store locks are respected from read only instances too o grab_file_lock configuration setting is now deprecated Lucene Index: o LuceneIndexProvider is now replaced by LuceneKernelExtension Server: o Added support for X-Forwarded-Host and X-Forwarded-Proto headers to allow parameterising of links in data for hosting behind proxy servers. JMX: o JMX will now provide info on all configuration values, including the defaults not explicitly set Cypher: o Fixes #450 - Predicates in WHERE are not evaluated correctly for certain patterns o Fixes problem with null comparisons and optional relationships o Made it possible to run the parser concurrently o DISTINCT is now lazy, and keeps the incoming ordering o Added execution plan descriptions to execution results o Fixes #464 - getDeletedRelationships does not work for javacompat.ExecutionResult o Fixes #535 - 'INTERNAL_SORT' columns show when doing RETURN * ORDER BY o Added experimental profiled query support o Fixes #489 - CREATE UNIQUE does not work as expected inside FOREACH 1.9.M04 (2013-01-17) -------------------- HA: o Conflicting server IDs in a cluster will now make the latest joining instance to leave the cluster immediately and become non functional Enterprise Server: o Includes new service endpoint, typically found under /db/manage/server/ha/{isMaster,getMaster}, with HA related info. Backup: o online_backup_port is now depracated in favour of online_backup_server, works with a port range o online backup is now enabled by default if possible o Improved error reporting for backup tool Cluster: o Warning is now printed if an instance that is not part of ha.initial_hosts tries to join the cluster o Snapshots are now prunned when received during cluster joining o Logging cleanup Kernel: o Start entries are now explicitly marked as written, solves a bug that might cause recovery to fail Server: o Increased performance for rest-batch-operations by a factor of 100 Cypher: o Clearer error message for when aggregations are used in ORDER BY and not in RETURN o Fixes #394 - Identifiers inside of FOREACH get the wrong type o Fixes #390 - IN/ANY/NONE/ANY/SINGLE causes RuntimeException for some patterns o Fixes #387 - Some patterns produced "Unexpected traversal state" in Cypher o Upgraded the Scala version to 2.10 o Fixes #355 - Collections in collections are still Scala collections instead of Java collections 1.9.M03 (2012-12-21) -------------------- Server: o Pulled out Gremlin as separate plugin to support different versions Cypher: o Fixes #336 - Patterns that re-use a pattern node can produce non-existing matches o Fixes #369 - The substring-function sometimes fails when no length is specified 1.9.M02 (2012-11-30) -------------------- HA: 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. Cluster: o Moved shared logic, commonly refered to as cluster client into a ClusterClient class. o Reduced amount of threads used by Paxos by using fixed size thread pools o Paxos cluster membership management imporoved by introducing memberIsUnavailable and cleanup of roles Consistency Checker: o Write out log file if inconsistencies are found. o Improved configuration for memory mapping with MOST_FREQUENTLY_USED window pool. o Consistency checker defaults to using the 'most frequently used' implementation when on Windows to avoid memory (un)mapping problems Management: o Adds serverId and current roles to the set of information available for cluster members Kernel: o Made sure that auto-indexing removed graph elements from indexes when they are delete o OrderByTypeExpander keeps ordering of type AND direction o Fixed an issue where a lock on a store was sometimes not released o Old GraphDatabaseSetting classes are now wrappers for Settings instances o Fixes an issue where an incomplete 2PC transaction could cause recovery to not be triggered o 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: o 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. o Traversal Javascript is now security sandboxed. It is possible to turn the sandbox off for the next two releases, for backwards compatibility. Cypher: o The traversal pattern matcher now supports variable length relationship patterns o Fixes #946 - HAS(...) fails with ThisShouldNotHappenException for some patterns o Made Cypher better at keeping a numeric type. Adding two integers now returns an integer, and not a double. o Major refactoring to make certain Cypher is more lazy o When asking for the top x rows by some value, Cypher will now only keep a list the size of x o Fix so identifiers created inside a foreach can be used by other statements in the foreach o Fix for problems when using patterns with multiple unnamed nodes o 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: 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 Backup: o Consistency check extracted into its own module (consistency-check). o BackupTool extended to accept tuning parameters for consistency check. Consistency check: o Initial release (extracted from backup module). o Added new consistency check implementation with better performance thanks to better usage of mapped memory. o Consistency check can now accept tuning parameters to make best use of available resources. o New WindowPool implementation for exclusive use underneath the consistency check. Cluster: o Initial release Kernel: o XaDatasources now implement lifecycle and their registration with XaDatasourceManager triggers TxManager recovery on startup o Neo4j logical log now handles running out of disk space at a critical point gracefully. o Kernel extensions are now factories that create instances which participate in the database's lifecycle o Fixes a race condition around relationship chain loading from multiple threads on the same node Cypher: o Refactored the type system from the bottom up o Predicates can now be returned and used to set properties o Fixes #797: CREATE UNIQUE now makes sure used identifiers have the same properties even if they are re-used without the properties o 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. o Fixed #866: Changed the LRU cache to make it safe to use concurrently, and made the parser single threaded o Added the reduce() functionality o Made addition automatically convert numbers to strings when adding the two together o Added the string functions: str(), replace(), substring(), left(), right(), ltrim(), rtrim(), trim(), lower(), upper() o Added the possibility to use ORDER BY, SKIP and LIMIT together with WITH o Fixes #904: CREATE UNIQUE doesn't work with parameter maps o Fixes #908: Parameters do not survive WITH if it has aggregation o SET can now be used to set properties on nodes and relationships from maps or other graph elements Management: o High Availability beans now expose information relevant to the new way clusters work 1.8.RC1 (2012-09-05) -------------------- HA: o Configurable chunk size via ha.com_chunk_size for communication chunks between server and client. Also reduced default chunk size to 2M from 16M. A chunk size of at most 16M is still possible to configure. o Made read timeout for the "copy store" request twice that of the normal read timout to be more resilient to slow network or bogged down master Kernel: o Removed contention around allocating and moving persistence windows so that a thread won't need to await another thread doing this refresh, instead just continue knowing that the windows will be optimally placed in a very near future. o Removed contention around translating a key (as String) into the ID by using copy-on-write map instead of a concurrent hash map. Used in property key as well as relationship type translation. o Fix for Node/Relationship#getPropertyValues() sometimes returning null values from the iterator. Server: o Upgraded Jackson JAXRS to version 1.9.7 o Keeping the Cypher execution engine between calls makes it possible to re-use execution plans o added User-Agent header tracking to udc to determine rest-driver usage Cypher: o Removed the /../ literal for regular expressions. Now a normal string literal is used instead o Concatenation handles types better o Changed how the graph-matching module is used, to make it safe for concurrent use o Better type error messages o Renamed iterable to collection o Fixed #795: so that WITH keeps parameters also for empty aggregation results o Fixed #772: Creating nodes/relationships goes before SET, so SET can run on already created elements o Added error when using != instead of <> o Fixed #787: Issue when comparing array properties with literal collections o Fixed #751: Better error message for some type errors o Fixed #818: Problem where properties could only have scalar values (they can be arrays as well) o Fixed #834: Gives relevant syntax exception when properties are entered in MATCH 1.8.M07 (2012-08-08) -------------------- HA: 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 Kernel: o Traversal framework backwards compatibility + Cleaned up any breaking changes + Removed Expander#addFilter o Kernel JMX bean instance identifier is now reused and can optionally be set explicitly via forced_kernel_id config setting Server: o Consoles in webadmin can now be disabled. Cypher: o Added escape characters to string literals o Renamed `RELATE` to `CREATE UNIQUE` UDC: o Added edition information (community, advanced, enterprise) o Added a cluster-name hash so that stores originating from the same cluster can be aggregated o Fixed release version and revision o Changed precedence of database configuration over internal udc configuration o Added distribution information (dpkg, rpm, unknown) 1.8.M06 (2012-07-06) -------------------- HA: 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. Kernel: o Deprecated AbstractGraphDatabase.transactionRunning() o Changed synchronization of applying transactions to prevent a deadlock scenario o Original cause can be extracted from a transaction RollbackException Server: o Fixed issue that stopped the server from starting without the UDC-jars. Cypher: o Fixes problem when graph elements are deleted multiple times in the same query o Fixes #625: Values passed through WITH have the wrong type o Fixes #654: Some paths are returned the wrong way 1.8.M05 (2012-06-25) -------------------- HA: o Changed master election process, now writing of latest txid for cluster members happens on demand, removing zookeeper as a bottleneck Kernel: o Configurable amount of logical logs to keep, by for example number of days or size on disk. keep_logical_logs configuration is extended to support values such as: "10 days", "200M size" a.s.o. Regardless of configuration there will always be at least the latest non-empty logical log left. o Reduced synchronization while memory mapping files, leading to increased multithreaded performance Server: o Added support for multi line Cypher queries in webadmin browser Lucene-index: o Removed lucene_writers_cache_size and have lucene_searcher_cache_size decide for both, since it's doesn't make sense to have a writer w/o a searcher and isn't possible to have a searcher w/o its writer. o Loosened contention regarding getting index searchers for querying. Cypher: o CREATE and RELATE can now introduce path identifiers o String literals can now contain escape characters o Fixes #600: Double optional with no matching relationships returns too many rows o Fixes #613: Missing dependencies not reported correctly for queries with RELATE/SET/DELETE o Fixes around optional paths 1.8.M04 (2012-06-07) -------------------- Kernel: o Additions to the traversal framework: + Bidirectional traversals (with BidirectionalTraversalDescription). AllPaths/AllSimplePaths uses this feature and are now faster due to less relationships being traversed. + Multiple start nodes (as well as multiple end nodes for bidirectional traversals). + PathExpander (RelationshipExpander for Paths) which has the full Path passed in instead of just the end node of the path. It can also see and modify a user defined traversal branch state. + Metadata about the traversal, for the time being: number of relationships traversal and number paths returned. + Added Path#reverseNodes() and Path#reverseRelationships which gives all nodes/relationships in a path in reverse order (starting from the end node going back to the start node). More relevant in many scenarios as well as allowing for a more efficient implementation. + Sorting of traversal results, specify with TraversalDescription#sort(Comparable). + Some measure to reduce memory consumption and garbage generation during traversals. Graph-algo: o AllPaths/AllSimplePaths uses the new bidirectional traversal feature in the traversal framework. Less relationships now needs to be traversed to find the requested paths. o Added an implementation of the shortest path algorithm with the bidirectional traversal feature. Cypher: o CREATE now accepts full paths and not only single nodes and relationships o Path patterns can now be used as expressions and as predicates o Fixes bug where RELATE fails to compare array properties o Fixes #573: Arithmetics operations have wrong type o Fixes #567: Parameter maps coming through REST are not parsed correctly o Fixes #563: COUNT(*) does not return 0 for empty result o Fixes #561: RELATE doesn't work as expected with map-parameters 1.8.M03 (2012-05-24) -------------------- Kernel: o Changed array map to CHM in property index manager, better multithreaded performance Shell: o Added BEGIN TRANSACTION/COMMIT/ROLLBACK o Sessions now live on the server side instead of on the client, which means that not just serializable values can be set there. Paves the way for Cypher making use of it. Server: o keep_logical_logs is now respected if set to false - default is still true Cypher: o Added RELATE o Changed the CREATE syntax, so it looks more like RELATE o Fixes #506: delete head(rels) doesn't work o Fixes #508: length function on array properties doesn't work o Fixes #512: start n=node(*) match n-[r?]->() delete n,r not working o Fixes #514: Extract doesn't work with array properties o Fixes #523: String literals not parsed correctly in CREATE statement o Fixes #526: cypher filter in return clause o Fixes #536: SQRT only returns an integer o Fixes #543: Appending elements to collections High Availability: 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.M02 (2012-05-11) -------------------- Kernel: o Optimized short string and short array encoding algorithms o Fixed problem with SpringTransactionManager during HA master switch Shell: o Shell can now be exited with Ctrl-D Server: o Support for streaming results for http batch operations. o Proper encoding of Index URI key/value pairs. o Fixed Swedish character problem in webadmin string properties. o Webadmin chart labels have nice formatting now. Cypher: o Added the possibility to create nodes from an iterable of maps 1.8.M01 (2012-04-26) -------------------- o Byte array properties are handled in a more optimized way, increasing performance by a couple of times at least. o Fix for an issue where update of cache when creating a relationship on a very dense node would take longer and longer time. o Fix for an issue where a recovery would sometimes fail with it reporting that a start record already had been injected. o Added "create" shell app for Cypher queries only doing creations. Server: o Added streaming to REST API. All representation implementations have been adapted to produce their data lazily. o Added HTTP logging. Cypher: o Added the possibility to return all graph elements using RETURN * o Added CREATE, SET, DELETE, FOREACH, WITH o Fixes issue #432, #446 High Availability and Backup: 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-18) ---------------- o Moved BatchInserter to a different package. o Fixed 'Record Not In Use' issue with creating and setting Node properties with the BatchInserter. Cypher: o Added the possibility to use multiple relationship types on patterns o Fixed bug when aggregation is used in ORDER BY and not listed in the RETURN clause Server: o Added scored index results to REST API o Improvements to installation docs for the server o Added auto index management API to REST, fixing #399 o Fixed unicode issues in batch operations API in windows and OS X o Server now disallows creating indexes with empty names. Closes #311 o Attempting to delete a non-existing index now returns 404, closes #349 High Availability and Backup: 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. o Improvements to shell script messages and documentation Management: o Now contains management information for the new Garbage Collection Resistant Cache UDC: o Modified UDC to run one thread per DB, and to shut down background thread on unload. Closes #279 o UDC now sends the machines MAC adress to Neo Technology, to separate between instances behind firewalls o UDC now sends database registration ID to Neo Technology, if one is available o UDC now sends "tags" to Neo Technology, these contain information about the type of deployment, such as language, web-container, app-container, spring, ejb 1.7.M03 (2012-04-11) -------------------- o Removed old OSGi support in favor of the new and better one. o Added possibility to use logback for logging. o Renamed array cache to GC resistant cache (GCR) and moved it to enterprise. o Fixed problem with GCR cache that could cause it to calculate incorrect size. o Fixed problem with closing of messages.log on windows High Availablity and Backup: 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 Added lock free atomic array cache that avoids triggering full GCs. o Added GC monitor that will keep track on how much the JVM blocks application threads. o Fix for an issue where upgrading indices with an unclean shutdown. High Availablity and Backup: o Fixed issue with message log not getting closed properly. 1.7.M01 (2012-03-12) -------------------- o Fixed bug in PropertyStore that during recovery would throw exception if the last record was incomplete. o Fixes to transaction log start position caching which mitigates a performance issue and fixes a caching issue during rotation. o Fixed a couple of issue around copying incomplete transaction to new log during a log rotation. o Fixed a property cache poisoning bug and some stale references leaking. o Fixed a data race issue between threads removing the same property while the node is evicted from cache. o Fixed an issue where a property record in the logical log was missing its owner. o Log messages in messages.log are now printed in UTC time zone so that it's the same across servers. o Fix for an issue where a full rebuild of an id generator (rebuild_idgenerators_fast=false) could result in exception when adding free ids. o Fix for issue which would close an id generator as clean if a startup failed at the wrong time, which would make the id generator diverge from the store it held ids for and possible truncate that store file the next clean shutdown. Indexing: o Added LowerCaseKeywordAnalyzer and a clear test for it which shows how to configure a case-insensitive exact index. Cypher: o Added literal collections and the IN predicate o Added HEAD, TAIL, LAST and FILTER o Added ! so that missing property can evaluate to false o BREAKING CHANGE: To check whether a property exists on a node, use the HAS(...) function o Arithmetic & string concatenation o An identifier can now be assigned all the nodes/rels in the graph - START a=node(*) o Predicates can be specified inside of a pattern relationship description Server: o Fixed a NPE in guarded database for the result of Index#putIfAbsent. o Added SSL support in the server. o SecurityRule implementations can now use simple wildcards to allow whole sub paths of URIs to be covered by the rule. o Added an "order" parameter to index REST queries to control result ordering. Shell: o dbinfo command now able to print simple values as well as arrays and compound values as JSON output. o A shell server which isn't remotely avaiable doesn't touch RMI, neither does a client which connects to a server within the same JVM. This makes for less RMI garbage when forgetting to call shutdown(). o Fixes problem with eval command in that it couldn't execute a single-line command, which made it impossible to do ./shell -c 'eval ...' from outside UDC: o Added MAC address to pings. High Availablity and Backup: 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 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. o Now full and incremental backup fetches and writes to disk the latest transaction if not present, allowing for an HA cluster to bootstrap itself. 1.6 (2012-01-19) ---------------- 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. o Backup rotates messages.log with the timestamp of the backup operation o New HA request type allows for copy of transaction interval from master to slave, to recover from missing logical log files. 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-16) -------------------- o [cypher] BREAKING CHANGE: Changed the syntax for iterable predicated ALL/NONE/ANY/SINGLE to use WHERE instead of a colon o [cypher] BREAKING CHANGE: ExecutionResult is now a read-once, forward only iterator. o [server] DEPRECATION: Cypher execution is now part of the core REST API, the cypher plugin is deprecated. o [com] Now closes connections if either side dies during streaming o [ha] Added entry about HAProxy in manual. o [ha] Fixed an issue where pulling updates would fail if no master had been elected. Now it tries to find a new master instead. o [ha] Exposes information about branched (and stashed) stores through JMX. o [server] Webadmin data browser now supports cypher queries o [server] Updated to gremlin 1.4 o [server] Fixed bug in how auto indexes are represented o [server] Max request execution time can now be limited o [server] Hypermedia URLs returned by the server now set their host based on the HTTP host header o [kernel] Lower memory usage of ImpermanentGraphDatabase. o [kernel] Abstracted stores that stores id/name pairs into AbstractNameStore/AbstractNameRecord and removed lots of duplicated code. o [kernel] Fixed a race condition in the property cache which cuold poison the cache. o [kernel] Fixed an issue where a JVM crash in the wrong place would make the next startup rename the current logical log without incrementing the logVersion, making the next log rename fail. o [kernel] Start records in the logical log aren't written until the transaction starts preparing/committing. This fixes an issue with the logical log not being rotated sometimes. o [kernel] Added AbstractGraphDatabase#tx() which returns a TransactionBuilder possible of configuring the transaction to be "unforced" meaning that logical logs won't be forced when committing. Means better performance for small non-critical transactions. o [kernel] Reduced number of proxy object instantiation and node record loading in general. o [kernel] Added a wrapping graphdb abstraction, which makes instances survive even if the underlying db restarts. o [cypher] Added allShortestPaths o [cypher] Added COALESCE o [cypher] Added column aliasing with AS o [cypher] Fixed problems with optional graph elements 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 (2011-10-18) ---------------- o Added default remote JMX access configuration and security setup options o Added protocol version to com protocol to be able to fail fast and predictably if two different version tries to communicate with each other. 1.5.M02 (2011-10-10) -------------------- o Performance improvements in extraction of logs sent from master to slave in HA. o Some deadlock scenarios in HA fixed. o Performance improvements in coordinator communication in HA. 1.5.M01 (2011-08-31) -------------------- o Fixed some issues regarding monitoring of open channels and what resources they map to and occupy. 1.4.M04 (2011-06-09) -------------------- o First iteration of the Cypher Query Language included, with a section in the manual. o Experimental support for batch operations in REST o The Neo4j Manual now includes some examples, and the section on REST has been extended. 1.4.M01 (2011-04-28) -------------------- o Server logging has been changed, see the Server Configuration chapter in the manual for further information. 1.3 (2011-04-11) ---------------- o Neo4j Community now licensed under GPL o All known Windows problems in Neo4j fixed. o rewritten Webadmin interface with graph visualization support o Short string support in kernel for better o 256 Billion database primitives o support for Gremlin 0.9 and related Tinkerpop projects o Better JMX and monitoring support (Neo4j Advanced) o New backup solution with support 1.3.M05 (2011-03-24) -------------------- o New look and feel of the webadmin o New visual data browser o Updated to Gremlin 0.8 o Added docs for server plugin initialization. 1.3.M04 (2011-03-10) -------------------- o All manpages are included in the manual. o Some fixes to be more Windows friendly. o Added Dijkstra to the list of graph algorithms to be used when finding paths. o Support for advanced index queries through REST. 1.3.M03 (2011-02-24) -------------------- o Numerous updates to the Webadmin tool to make it more usable and to fix some visual bugs. o Removal of the properties service, replaced with a discovery service to allow third-party apps to bind to the server at runtime and discover what services are offered and where. o Changed the configuration file format to make it simpler and less error prone (but it is *not*) backwards compatible with earlier versions. o Separated out the server plugin API for easier development, making only the only development dependency for server a very thin layer and small jar. 1.3.M02 (2011-02-10) -------------------- o Gremlin updated to 0.7 and trimmed down to bare bones dependencies. o Webadmin minor improvements in Console, Data browser and monitoring. o better REST JSON property support in Arrays. o server started in High Availability mode. 1.3.M01 (2011-01-27) -------------------- o Full online backup (no need to copy store files before hand) in HA and general support for requests with unlimited size. o A couple of bugs fixed in lucene index. o More memory efficient handling of transaction streams (extracting and applying). o New 'eval' shell command which lets you execute JavaScript on the database. - Server o Ability to start the server in HA mode. o Excludes the neo4j-index component (not used anyhow) to enable HA mode. - Examples o Added an example of an ordered traversal. 1.2 (2010-12-29) ---------------- - New components: o Neo4j Server, including Web Admin o Neo4j High Availability o Neo4j Graph Database Monitoring and Management tools moved to its own component o Neo4j Index API integrated in the GraphDatabaseService API o Neo4j Usage Data Collection - Other changes: o Additional services (extensions) for the Neo4j kernel are loaded automatically or can be injected in a running instance. o Improved memory footprint and read performance. o A weak reference cache is now available for high load low latency workloads. o The old index API has been deprecated (but still included and have been updated to use Lucene version 3.0.1). o There is a new index API based on Lucene supporting multiple indexes both for nodes and relationships. o Path algos can now be performed using the shell. o All known bugs have been fixed. For more details see the individual milestone releases below. 1.2.M06 (2010-12-21) -------------------- - Kernel o Fixed an issues with PruneEvaluators getting invoked with the start node as argument. PruneEvaluators was never invoked with the start node before the arrival of Evaluator interface. o Added logging of recovery completion. o Added TransactionData#isDeleted(Node) and #isDeleted(Relationship) and also made the collection to hold these a HashSet instead of ArrayList. This allows fast lookups for asking if a node/relationship is deleted in a transaction. o More flexible caching (can instantiate an arbitrary Cache object). - Shell o Fixed a problem where ShellServerExtension assumed the shell was enabled during shutdown, which could result in NPE. - Lucene-index o More flexible caching (can instantiate an arbitrary Cache object). o Merged the fast-writes branch. Basically it makes committing changes to lucene indexes faster and more throughput-friendly for multiple threads. The performance improvement for committing lucene transactions shows best for small transactions, but will improve all modifying operations to lucene indexes. o Fixed bug which could close an IndexSearcher before it was supposed to when there was exactly one item in the result set, two or more threads did this at the same time as there was another thread doing an update... AND the reading threads all called IndexHits#getSingle() on the result. - HA 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. - Server o Bridge OSGi LogService to server Logger. Bundle log messages and stdout pipe through correctly. o Refactoring of functional tests to remove static dependencies. Introduced a server builder to deal with it instead. o Can now add performance-tweaking properties to the database hosted by the server. It uses the same neo4j.properties file as the embedded version, but you need to add a property: org.neo4j.server.db.tuning.properties into the neo4j-server.properties file. o Webadmin: Removed component titles, added save button to data browser, minor change to data browser layout. o Webadmin: Minor UI updates, added error message that shows up when server connection is lost. o Webadmin: Moved charts into tabbed box, minor UI updates. o Fixed an issue with initialization order of things in the server to make sure that RRD is initialized when it is needed. o Webadmin: Added proper tab-like styling to chart tabs and scale selectors. o Fixed bug in RRD memory usage sampler, making rounding happen at end of calculations, instead of in the midst of. o Webadmin: Made 30minutes the default view in charts. o Webadmin: Added kernel version to dashboard, fixed bug in chart drawing (was drawing when the charts are not visible under certain conditions). o Webadmin: Disallow self relationships in UI, and show error message explaining this. o Can now load 3rd party JAX-RS jars from the classpath. o Updated static assembly to properly include both webadmin statics and documentation. Documentation now tested and ships properly down to neo4j-standalone. o Webadmin: Made the current node show up by default when adding new relations in webadmin. o Webadmin: Dashboard shows charts with tabs, and allows switching between charts. o Added a basic readme with instructions for building, running, and functional testing. o Updating the way to create temporary files to solve the functional test problem where lots of files stick around. o re-implemented REST to expose indexing of nodes and relationships (new index API) o single path algo works in RestfulGraphDatabase now o fixed duplicate paths for delete node or relationship from index o Http DELETE requires the proper mediatype to accept o All indexes must be created to use them. o Added the ability extend the REST API with server plugins. o Added back links to the first page in the HTML format. o updating to Gremlin 0.6 o Updated the component site documentation with the new index API. 1.2.M05 (2010-12-02) -------------------- -New components o neo4j-ha, providing high availability -Important changes, server o updated to Jersey 1.4 o integrated index is now supported by the shell o new Evaluator interface improves the traversal API o support for index hit scores in neo4j-lucene-index o index caching support added to BatchInserter 1.2.M04 (2010-11-18) -------------------- o added a server packaging as part of neo4j o added more configuration options to neo4j-lucene-index o generating javadocs for all components automatically to components.neo4j.org/{component-name} o Added ImpermanentGraphDatabase to aid in testing 1.2.M03 (2010-11-04) -------------------- o Monitoring/management over JMX was moved to the new neo4j-management component. o Added ability to get the name and configuration of existing integrated indexes. 1.2.M02 (2010-10-21) -------------------- -New components o Lucene index, an implementation of the integrated index framework using lucene as backend. Planned to replace current index service. -Important changes o Fixed shutdown issue regarding UDC leaving a thread running. o A new index framework integrated into the kernel API. o Getting relationships is faster due to less cache lookups. 1.2.M01 (2010-10-08) -------------------- -New components o Udc -Important changes o Index: - Lucene version upgraded to 3.0.1 o Shell: - Apps discoverable with service locator - Added read-only mode on server - 'host' and 'config' options o Graph-algo: - Find paths of certain length o Kernel: - Lower memory footprint - Higher throughput/concurrency for reads - Common interface for loading kernel extensions (f.ex. shell) 1.1 (2010-07-29) ---------------- -New components o Graph-algo o Online-backup 1.0 (2010-02-16) ---------------- -Initial components o Kernel o Index o Remote-graphdb o Shell