Skip to content

Neo4j 5 changelog

Neo Technology Build Agent edited this page Aug 22, 2024 · 96 revisions

5.23.0

Kernel

  • Fixes an issue in block format importer where some relationships wouldn't be imported if there were lots of relationships for some nodes.

  • Fixes a block format indexing issue where relationship indexes could miss some updates, specifically for multiple relationship creations/updates/deletions for the same node in the same transaction.

  • Fixes an issue where index usage statistics wouldn't be updated for point (bounding box) queries.

  • Increase timeout on consistency checking of dense node stores and id generators

  • Fixes an issue for block format where trying to create an index on a lot of (1000+) labels/relationship types/properties would result in database panic.

  • Expand the allowed index settings for vector-2.0 vector index provider. Newly created vector indexes can explicitly enable or disable quantization of the vectors within the index using vector.quantization.enable, new indexes will have quantization enabled by default. Previously created vector indexes will continue to work as if quantization is disabled.

    In addition, the ability to control the advanced customisation of HNSW hyperparameters vector.hnsw.m and vector.hnsw.ef_construction. Please consult the documentation for their meaning and their defaults. Previously vector.dimensions and vector.similarity_function were required to be set; however, with vector-2.0 indexes, this requirement has been relaxed. vector.similarity_function will default to 'COSINE' if not specified, and the existence of vector.dimensions will ensure additional checks. This allows the OPTIONS map in Cypher to become optional, though it is recommended to specify the dimensionality and the similarity function.

  • Fixes a block format recovery issue that could cause DataTreeNotEmptyException to be thrown during recovery.

  • Publish last commit batch only after log sync. To prevent publication of index and position that will potentially point to not visible data

  • Prevent interrupted background sampling of a large index on shutdown triggering a blocking resampling on start up. The bug was introduced in 5.15.

Cypher

  • Deprecates naked CALL subqueries and the Importing WITH clause. CALL subqueries must now be scoped e.g CALL (a, b) { ... }.
  • Added a scope clause for importing variables into CALL subqueries e.g CALL (a, b) { ... }. This replaces the Importing WITH.
  • Added the GQL conformant TIME ZONE keyword to Type Predicate Expressions as an alias to the TIMEZONE keyword.
  • Introducing Bolt 5.6 with GqlStatusObject
  • Fix an issue where the planner would look to use the text index to search for strings that are not yet initialized.
  • Introducing checks to make sure that Authentication plugins and Auth plugins (combined authentication and authorization plugins) are forbidden from returning null or blank principals.
  • Fixing a bug whereby multiple simultaneous successful external authorizations were not possible for a given user
  • Fixes an [issue] (https://github.com/neo4j/neo4j/issues/13467) with showing cartesian product warnings when a valid query has the predicates in a different order.
  • Introduce GqlStatusObject API on the server side

Clustering

  • Limited allocation procedures are now available for cluster management

Misc

  • Correct the values field of the response so that it contains separate arrays for each record.
  • Fix issue with Unmanaged Extensions not being able to bind to org.neo4j.logging.Log

5.22.0

Kernel

  • Fixes an issue (which was first introduced in 5.19) where record IDs for any internal store in the near vicinity of 4294967295 could be invalidly marked as deleted when growing the ID space beyond that particular ID.
  • The default store format for new databases in Enterprise Edition is now Block format. Block format supersedes all previous formats and we highly recommend its adoption. The configuration setting db.format can be used to override this change and specify a different default store format.

Cypher

  • Introduce --idle-timeout argument to Cypher Shell. When set it will exit the application after the specified amount of idle time in interactive mode.
  • Backup metadata scripts and SHOW PRIVILEGES AS COMMANDS will now correctly escape special characters in procedure, function and settings globs.
  • Fix issue that could result in error class org.neo4j.cypher.internal.physicalplanning.ast.NullCheckReferenceProperty cannot be cast to class org.neo4j.cypher.internal.expressions.ASTCachedProperty for some queries.
  • Fixes an [issue] (https://github.com/neo4j/neo4j/issues/13466, https://github.com/neo4j/neo4j/issues/13473) with planning complex boolean expressions
  • Fixed issue that could produce errors like: Neo.DatabaseError.General.UnknownError key not found: VariableSlotKey(b) for queries with ...RETURN b AS renamedB, count(b) or similar.
  • fix bug when resolving quoted aliases with dots in query router
  • Improvements to validation and parsing of database names containing '.' characters. Fixed some incorrect behavior with CREATE DATABASE and improved error reporting in other cases.

Clustering

  • Register internal lighthouse metrics that will be collected by default

Docker

  • set default locale of C.UTF-8

5.21.2

Kernel

  • Fixes an issue (which was first introduced in 5.19) where record IDs for any internal store in the near vicinity of 4294967295 could be invalidly marked as deleted when growing the ID space beyond that particular ID.

Cypher

  • Fix issue that could result in error class org.neo4j.cypher.internal.physicalplanning.ast.NullCheckReferenceProperty cannot be cast to class org.neo4j.cypher.internal.expressions.ASTCachedProperty for some queries.

5.21.1

Cypher

  • Fixed issue that could produce errors like: Neo.DatabaseError.General.UnknownError key not found: VariableSlotKey(b) for queries with ...RETURN b AS renamedB, count(b) or similar.

5.21.0

Kernel

  • The DUMP/LOAD/BACKUP/RESTORE/AGGREGATE/CHECK/IMPORT commands and Cypher's LOAD CSV can now use Google Storage URIs where appropriate, ex. neo4j-admin database backup --to-path gs://some-bucket/some/directory/ neo4j , neo4j-admin database restore --from-path gs://some-bucket/some/directory/ neo4j , neo4j-admin import --nodes gs://my-bucket/data/large.csv -- newdb and LOAD CSV FROM 'gs://some-bucket/some/path/to/data.csv' AS line RETURN count(line)
  • Greatly improved scalability of the block format importer, allowing for good performance even for large data sets.
  • Support CALL {...} IN CONCURRENT TRANSACTIONS with interpreted runtime.
  • Bug fix for page cache metric page_cache.usage_ratio, now accurate when transactions are open
  • Fix error when executing SHOW CONSTRAINTS in a transaction where a constraint has been created. Constraint IDs are not allocated until commit; rather than returning an error, we now render the ID as null.
  • Update log message to error level when index recovery cleanup fails

Cypher

  • Add new logical operator, SubtractionNodeByLabelsScan, for patterns such as MATCH (:A1&A2..&!B1&!B2...)....
  • Fixes a bug where it's no longer possible to drop/replace session database
  • Fixes a bug where username is always logged with value null.
  • Allowing Foreach to interpret scalar values as list similar to Unwind.
  • Property-based access control
  • Correct error messages displayed when starting a DBMS when unable to determine the admin user.
  • GQL conformance: Introduces upper() and lower() functions, which are aliases for the toUpper() and toLower() functions.
  • checking OIDC token expiry at the start of tx even when OIDC only configured for AuthN, not AuthZ. Treating OIDC token expiry as AuthN error.
  • Use ANTLR based parser by default for parsing Cypher queries, can be disabled by configuration setting internal.cypher.parser.antlr_enabled=false.
  • Add 'Bearer' token authentication support to the HTTP server.
  • Add new column deprecatedBy to SHOW PROCEDURES and SHOW FUNCTIONS to tell if the procedure/function has a replacement when it has been deprecated.
  • Addresses the performance regression introduced in 5.19 affecting eagerness analysis logic in the Cypher query planner. In some cases, a previously benign write query would either hang or lead to an out-of-memory error during planning.

Browser

  • Fix bug where csv strings were triple quoted
  • Ensure credentials are not left in form after disconnect
  • Avoid running SHOW ALIASES to show only non-composite aliases in database dropdown
  • Fix csv export of 100k+ rows
  • Fix formatting of large duration values

Security

  • Add ‘Bearer’ token authentication support to the HTTP server.
  • Netty-tcnative drivers are provided in /lib adding support for OpenSSL 3 network encryption. This allows customers to configure their database for FIPS 140 compliance.

5.20.0

Kernel

  • Allow S3 objects to be accessed from alternative backends via the system properties (aws.endpointUrls3, aws.endpointUrlS3 or aws.endpointUrl) or environments variables (AWS_ENDPOINT_URL_S3 or AWS_ENDPOINT_URL)
  • Use the correct setting name in the error message when the db.memory.transaction.max limit is exceeded.
  • neo4j-admin database load can now load full Neo4j backups created by Enterprise Edition
  • Fix a few circumstances where vector similarity scores were provided slightly outside of their documented range due to aggregated floating point uncertainty in large dimensional vectors.
  • Fixes a performance issue with recovering many property key, label and relationship type token creations

Cypher

  • Backup metadata scripts and SHOW PRIVILEGES AS COMMANDS will now correctly escape special characters in node, relationship, property and usernames.
  • Add option to specify access mode in Cypher shell by command line argument --access-mode read/write or command :access-mode read/write.
  • It is now possible to reference elements from within a QPP that are not directly adjacent to the QPP.
  • Improve back-pressure in parallel runtime to prevent certain query plans, e.g. with existential subqueries, from eagerly accumulating too many intermediate results on servers with high CPU counts.
  • Extends the existing trim(), ltrim() and rtrim() functions to optionally allow the specification of which characters to trim, as well as the addition of a btrim() function which trims both ends of a string.

Clustering

  • Return false in "available" http endpoint, if database is in "Story copying" state

Docker

  • Updated ubi8 deprecation warning and removed option for suppressing the warning

Misc

  • Add server.http.transaction_idle_timeout as a replacement for the removed dbms.rest.transaction.idle_timeout
  • Add Anonymous Usage Data Reporting

5.19.0

Kernel

  • GenAI plugin: add support for Vertex AI taskType and title embedding parameters

  • GenAI plugin: add support for Vertex AI vector encoding models textembedding-gecko@002, textembedding-gecko@003, and textembedding-gecko-multilingual@001.

  • Perform an additional lease check in clustered environments to ensure the replicated token state is up-to-date before checking for the existence of a token in the database. This fixes a problem, only present in version 5.18, where a token could try to be created a second time directly after a leader switch but fail to be applied because it is non-unique which would cause a database panic.

  • Fixed transaction logs metrics that weren't incremented in cluster settings

  • Add a new version of CDC's Change Identifier to allow their validation based on transaction commit timestamps

    This is to allow the change identifiers to be validated against the current transaction log for the provided transaction ID.

    This is for the case when a backup/restore has occurred but the restore is to a point in time before an active CDC subscriber. Their current change ID would have a transaction ID ahead of the restored DB but subsequent transaction would have a commit timestamps that is before the new changes.

    This change allows this situation to be discovered and an error reported back to the user

  • Update LOAD CSV functionality on Enterprise databases to allow cloud storage URIs to be specified as the source of the data, ex.

    LOAD CSV FROM 's3://some-bucket/some/path/to/data.csv' AS line RETURN count(line)

    Currently, the behaviour can be disabled by setting dbms.security.allow_csv_import_from_file_urls to false. In a future PR, an additional setting will be added that is specific to disabling cloud storage access. PLEASE NOTE that dbms.security.allow_csv_import_from_file_urls defaults to true normally but it IS set to false in Aura

  • Fixes a rare issue where some internal record IDs could be reused twice in a clustered setting for ID allocations of multiple consecutive IDs and frequent leader switches.

  • When running neo4j-admin database dump --to-stdout neo4j any logging output is now directed to standard err rather than standard out (which will contain the actual database dump)

  • The database DUMP and LOAD commands can now accept cloud storage URIs on Enterprise databases. For example neo4j-admin database dump --to-path s3://some-bucket/some/directory/ neo4j and neo4j-admin database load --from-path s3://some-bucket/some/directory/ neo4j

  • Update neo4j-admin database import command on Enterprise databases to allow cloud storage URIs to be specified as the source of the data, ex. neo4j-admin import --nodes s3://my-bucket/data/large.csv -- newdb

Cypher

  • Bug fixes and security updates on IMMUTABLE privileges
  • New information about planned Eager operators was added to the plan descriptions produced by EXPLAIN and PROFILE in the 'Detail' column. A new improved eagerness analysis algorithm reduces the number of Eager operators and improves explainability.
  • Add the optional keyword DISTINCT after UNION as the explicit form of a UNION with duplicate removal.
  • Adds || as a synonym of + for LIST and STRING concatenation.
  • Fix bug in pipelined runtime where a fused pipeline following a CALL IN TRANSACTION subquery without RETURN could have incorrect generated code for reading from input rows, which could lead to an IndexOutOfBoundsException.
  • In line with OpenID Connect Core 1.0 updates to errata set 2, remove checks on the azp claim in OIDC tokens when there are multiple values in the aud claim.
  • Add FINISH clause, which can be optionally used to define a query that returns no result.
  • Update Apache Shiro to 2.0.0
  • Change error type to ClientError when using an explicit transaction for CALL {} IN TRANSACTIONS

Clustering

  • Validate allowed and denied database values, rejecting ones that are not valid database names.
  • The database BACKUP, RESTORE, AGGREGATE and CHECK commands can now accept cloud storage URIs on Enterprise databases. For example neo4j-admin database backup --to-path s3://some-bucket/some/directory/ neo4j and neo4j-admin database restore --from-path s3://some-bucket/some/directory/ neo4j

Docker

  • set permissions on /var/lib/neo4j/bin to 755

5.18.1

Clustering

  • Memory leak fixed when using the Kubernetes resolver

5.18.0

Kernel

  • Introduce and default to a new vector search index provider, vector-2.0. It supports up to 4096 dimensional vectors, integral element vectors, an improved cosine similarity implementation, and relationship vector indexes.
  • Added support for the OpenAI text-embedding-3-large and text-embedding-3-small models, as well as the dimensions parameter, to the GenAI plugin.
  • Added support for using Azure OpenAI as the embedding provider in the GenAI plugin
  • Added pairwise vector similarity functions vector.similarity.euclidean and vector.similarity.cosine.

Cypher

  • Extends the Simple CASE expression, allowing comma separated WHEN operands as well as extended comparison operators.

  • INSERT can now be used as a synonym of CREATE when creating graph elements

  • Adds support to execute CALL IN TRANSACTIONS on composite databases. For example:

    LOAD CSV FROM '%s' AS line
                            CALL {
                                USE %s
                                WITH line
                                CREATE (n:Number {value:toInteger(line[0])})
                                RETURN n
                            } IN TRANSACTIONS OF 1 ROW
                            RETURN n.value
    

Clustering

  • Fixes an issue where a cursor could be kept open pointing to an old raft log file which could block pruning from properly deleting log history.

Docker

  • added docker default configuration for recovery address to match similar overrides for raft and discovery addresses

5.17.0

Kernel

  • Move the CDC procedures [cdc.earliest, cdc.current and cdc.current] into the database namespace [db.cdc.earliest, db.cdc.current and db.cdc.current]
  • In FULL mode, when updating a node that was also part of either a new or deleted relationship change, the BEFORE state for that entity did not contain all the node’s properties - only the logical key properties.

Cypher

  • CREATE INDEX ... IF NOT EXISTS ..., CREATE CONSTRAINT ... IF NOT EXISTS ..., DROP INDEX ... IF EXISTS, and DROP CONSTRAINT ... IF EXISTS now return a notification if the index/constraint attempted to be created already exists or attempted to be dropped doesn't exist, that is if the command does nothing.
  • Add additional logging at WARN for tokens missing iat, exp and with bad or missing sub and aud. Also make the missing public key error log at WARN instead of DEBUG.
  • Improve caching when obfuscating literals in the query log.
  • WGS84 invalid coordinate error for large spatial distances, see neo4j/neo4j#13384.
  • Fix issue with EXPLAIN and nested temporal types leading to a failed to pretty print RuntimeConstant error.
  • Add argument --notifications to Cypher Shell to enable notifications in interactive mode.
  • Fix a bug where in some circumstances when OpenID Connect discovery was configured, values from the discovery endpoint could displace values from neo4j.conf which should take precedence.
  • Fix a bug where a query using & conjunction like e.g. CREATE (:A&B) would create a node without the labels.
  • Adds a normailze predicate expression, IS [NOT] NORMALIZED , which is used to check if a string is normalized according to the given normal form, defaulting to NFC. Normalization makes it possible to determine if two Unicode strings are equivalent to each other.
  • Add string normalize function.
  • Allow Cypher Shell users to control the statement history by argument --history <path>|in-memory or environmental variable NEO4J_CYPHER_SHELL_HISTORY.

Docker

  • Add RHEL 9 based images and deprecate RHEL8 ones

Misc

  • Add HTTP/2 support for HTTP server

5.16.0

Kernel

  • Constraint indexes waiting for their owning constraint to be created will no longer come online upon a restart.
  • Fixes a bug in neo4j-admin server report where the command would only collect information for the default database, and transaction logs could be missed.
  • Fix incorrect check point flushed bytes metric type in CheckPointingMetrics

Cypher

  • Wrap internal parser errors in SyntaxException and improve EOF error message.

    This way, the errors will have the Neo4j status Neo.ClientError.Statement.SyntaxError instead of Neo.Database.General.UnknownError, meaning they will stop polluting the debug log.

  • Allow for parameters for the index/constraint name in CREATE INDEX, DROP INDEX, CREATE CONSTRAINT and DROP CONSTRAINT commands, for example CREATE INDEX $name FOR (n:Label) ON (n.property).

  • Expand the LOAD privilege to support CIDR ranges, e.g. GRANT LOAD ON CIDR "127.0.0.1/32" TO role.

  • Solve https://github.com/neo4j/neo4j/issues/13113 by allowing convertible types in reduce. E.g. RETURN reduce(a=[1], b in [["a"]] | a+b) will return [1, "a"] instead of failing with a type error.

Clustering

  • Enable core members to perform a snapshot download without a leader present.

Browser

  • Add setting to specify read transactions on cypher queries
  • Ensure right protocol is used for http reachablity check
  • Fix element-id showing incorrectly in table
  • Respect visible field in SSO provider configuration
  • Only show non-composite aliases in database dropdown
  • Update outdated documentation links

5.15.0

Kernel

  • neo4j-admin database import normalization behavior for array types have been reverted to 5.13, which means that byte[], short[], int[] and float[] properties will not be normalized into the corresponding Cypher types: long[], long[], long[], and double[] respectively.

  • Prevent background sampling of large indexes from blocking shutdown

  • Updating AWS SDK to V2.20.162 (from v1.12.563). The default credentials chain resolution has been updated in this version (the environment variables have changed to AWS_ACCESS_KEY -> AWS_ACCESS_KEY_ID, AWS_SECRET_KEY -> AWS_SECRET_ACCESS_KEY and

    AWS_CREDENTIAL_PROFILES_FILE -> AWS_SHARED_CREDENTIALS_FILE and the system property aws.secretKey -> aws.secretAccessKey) Please see https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/migration-client-credentials.html for more details.

     

Cypher

  • Throws a type mismatch error in semantic checking instead of at runtime when Map Projections are done on types that are not: MAP, NODE or RELATIONSHIP, fixing the issue: https://github.com/neo4j/neo4j/issues/12997
  • Add CREATE VECTOR INDEX ... command for node vector indexes. As the vector dimensions and similarity function is mandatory, they need to be specified as part of the indexConfig in the OPTIONS map.
  • Fixes issue https://github.com/neo4j/neo4j/issues/13077 where some valid property names were not allowed when using dot access e.g n._1
  • Make the @Sensitive procedure/function parameter annotation part of the public API.
  • Deprecation of some characters in identifiers, of which support will be removed in future versions. For the full list of characters see the Cypher Docs on Deprecations.
  • Add support for filtering out vector indexes in SHOW INDEXES using keywords (similarly to the other index types): SHOW VECTOR INDEXES. This is equivalent to SHOW INDEXES WHERE type = 'VECTOR'.
  • Fix a null-handling error in toInteger. See neo4j/neo4j#13327 and neo4j/neo4j#13337
  • Fix bug in type checking where the resulting type of a list concatenation could vary depending on which list was to the left and right, respectively, as reported in https://github.com/neo4j/neo4j/issues/13093
  • Update Apache Shiro to 1.13.0

Clustering

  • Fix issue in store copy which could cause inconsistencies in the store. The problem was that the highest transaction in a store file was not represented correctly, either by not being sent or by using the last checkpointed transaction. Therefore, enough transaction are not present to perform recovery correctly. The fix makes sure the highest committed transaction is always sent.

    This PR also enables transactions larger than 2GB on secondaries.

  • Allow aborting the retrieval of lock handle

  • Introduce forward recovery in backup. This may improve the speed of restoring or aggregating artefact chains.

  • WAIT will now include servers that are offline or have not published their ports

  • Add DEALLOCATED server state.

  • Fix bug introduced in #18359 which would cause restarts during startup of primaries to fail.

5.14.0

Kernel

  • neo4j-admin database backup now accepts multiple database name patterns.
  • Fixes a consistency checker performance issue for databases with many times more relationships than nodes in combination with relationship indexes
  • neo4j-admin database import now can normalize byte[], short[], int[], and float[] properties into the corresponding Cypher types; long[], long[], long[], and double[] respectively.
  • Fixes an issue where neo4j-admin database check would report the valid combination of a type constraint and an existence constraint on the same schema as an inconsistency.
  • Fixes an issue where neo4j-admin database import full could run on an online database. This could result in not seeing the imported data until after a restart.
  • Fix issue where index capabilities were not properly replicated on followers in a cluster, resulting in TEXT and VECTOR indexes rejecting valid queries.

Cypher

  • Users using only native authorization will no longer retain the PUBLIC role when they are suspended.
  • Adds a new function nullIf() which returns null if the two given parameters are equivalent, otherwise returns the value of the first parameter.
  • Extends Cypher Type syntax to allow for an exclamation mark as shorthand for NOT NULL e.g INTEGER!
  • Introduces the keyword NODETACH to be optionally used in a delete statement e.g MATCH (b) NODETACH DELETE n

Clustering

  • Fix an issue where Raft could deadlock when trying to deallocate a member at the same time as other members are downloading snapshots.
  • Verify the expiration time of all loaded SSL certificates at load time and refuse to use them if they have already expired.

Docker

  • replaced gosu with su-exec for better security traceability

Misc

  • Upgrade jetty to 10.0.17 for CVE-2023-36478. Please note: this CVE only impacts HTTP/2 and since the server does not support HTTP/2, it is not affected.

5.13.0

Kernel

  • Upgraded Netty version 4.1.97.Final -> 4.1.100.Final

  • Fix an issue in back pressure handling that might cause a CDC subscriber to fail when multiple subscribers are scanning the logs with larger gaps.

  • Lifting the vector search index feature out of beta alongside the creation and query procedures, db.index.vector.createNodeIndex and db.index.vector.queryNodes respectively.

    The validated and space-optimized vector setting procedure(s) will remain in beta; however, we are deprecating db.create.setVectorProperty in favor of db.create.setNodeVectorProperty, both improving naming consistency and extendability. The new procedure no longer returns the node which enhances the user experience of the procedure in more complex queries.

  • Upgraded commons-compress to 1.24.0 to mitigate CVE-2023-42503

  • Fix issue where index type query metrics for FULLTEXT and LOOKUP would always report zero.

  • Fixed issue where vector index queries would throw an exception if there were changes in the transaction state, instead of ignoring transaction state as intended.

  • Fixes an issue where terminating the creation of a Constraint, would not also terminate the creation of the backing Index.

  • Size restricted default transaction logs retention policy in the default config

Cypher

  • Improved planning of pattern predicates that previously weren't using Argument.
  • Change Data Capture (CDC) feature, which is based on transaction logs, is now available as a public beta in Aura and Neo4j Enterprise subscription. CDC can be enabled on individual databases in FULL or DIFF mode using Cypher's CREATE or ALTER database commands.
  • Introduces char_length() and character_length() functions which returns the number of Unicode characters in a STRING. It is an alias of the size()` function.
  • Enable parallel runtime.
  • Solve a bug where Cypher queries containing related equalities in different scopes, e.g. WHERE any(x IN [1, 2, 3] WHERE a.prop = toInteger(x)) AND a.prop = b.prop would fail with Variable ... not defined. Disable the transitiveEqualities rewriter if the WHERE clause contains multiple scopes.
  • Procedure and Function signatures have been changed to be inline with the syntax for Cypher Types. Procedures with no return values are no longer appended with :: VOID and function return values are no longer surrounded by parenthesis. Procedure signatures will now follow the pattern: "procedureName(param1 :: TYPE, param2 :: TYPE, .., paramN :: TYPE) :: (returnParam1 :: TYPE, returnParam2, .., returnParamN :: TYPE)" or "procedureName(param1 :: TYPE, param2 :: TYPE, .., paramN :: TYPE)" and function signatures: "functionName(param1 :: TYPE, param2 :: TYPE, .., paramN :: TYPE) :: TYPE", see the Cypher Manual for more information. This alters the output of the signatures column in SHOW PROCEDURES and SHOW FUNCTIONS.
  • Introduce LOAD ALL DATA privilege to control access to LOAD CSV from RBAC. Permission to LOAD all data will be automatically granted to the PUBLIC role to maintain compatibility. If administrators desire to control LOADS they should revoke this privilege and grant privileges to roles as required.
  • Introduces a new valueType() function which returns a string representation of the most precise value type that the given expression evaluates to.
  • Free memory of unused variables during Cypher query execution.
  • Resolve a rare bug where aggregation functions would be planned incorrectly, resulting in an error during runtime. This would happen for very specific and rare underlying statistics.

Browser

  • Fix plan view for DbHits over 32 bit integer max
  • Handle more database states
  • Expand completion detail by default
  • Ensure sso access token is always refreshed on expiry

Docker

  • Bugfix where neo4j.conf without a trailing new line would get NEO4J_PLUGINS settings wrongly appended causing startup failure.
  • The streams plugin was erroneously listed as being a supported plugin in 5.x versions. This has been removed from 5.x docker source (the plugin integration remains in 4.4 and earlier images).

Misc

  • Upgraded jetty to 10.0.16 to mitigate CVE-2023-40167, CVE-2023-36479, CVE-2023-41900, and GHSA-58qw-p7qm-5rvh.
  • Adds the functionality to use a graph which contains the given element id, e.g. USE graph.byElementId("4:c0a65d96-4993-4b0c-b036-e7ebd9174905:0"). Is it only possible to use this functionality on a composite database, where one of the constituent contains the element.

5.12.0

Kernel

  • Vector index creation missed a check to limit the dimensionality to an upper supported limit of 2048.
  • Fixed an issue with vector index creation during a rolling upgrade from a pre-5.11 database in a cluster, where all members have yet to roll onto the new version. Now vector indexes cannot be created until dbms.upgrade() has been called, indicating all members have been upgraded; which is the intended procedure for newer features during a rolling upgrade.
  • Fixed some issues around vector validation for the vector index. Some extreme component vectors were incorrectly flagged as valid; however, would return a score of 0, thus not affecting most queries. Otherwise valid cosine query vectors with a final component of ±0 would incorrectly be flagged as invalid.
  • Fixes an issue that logged vector index as being unknown, preventing recreation commands from being included in neo4j-admin database copy logs, and incorrect escaping for some cases of the recreation command with SHOW INDEXES
  • Improve argument validation in vector index procedures for better error messages
  • Fix issue where vector index based procedures were not being displayed with SHOW PROCEDURES
  • Replace db.logs.query.annotation_data_as_json_enabled with db.logs.query.annotation_data_format to allow for more formats
  • Fix wildcards(*) for command-line tools on Windows
  • Fix Cypher type normalization during CSV import so that char is converted to String.

Cypher

  • Adds function db.nameFromElementId, which resolves the database name for a given element id.
  • Track memory of de-referenced nodes and relationships in ProduceResult. This fix will avoid some OutOfMemoryErrors in queries that returns lots of nodes or relationships. For example in queries like MATCH (n) RETURN collect(n). When returning entities, all their properties and labels will be populated in ProduceResult operator which can cause lots of memory allocations. Before this change we would not track this memory towards the transaction limits.
  • Fixes https://github.com/neo4j/neo4j/issues/13204 where a query wrongly errored for variables within a CALL subquery that shadow outside variables.

Clustering

  • "Remove transaction size limit in Raft. Before this change, large transactions could be written to the raft log but not read. This could lead to unexpected behaviours, for example a leader could stop sending entries to its followers."
  • Database state STORE_COPYING will be reported earlier as soon as the decision is made that a store copy is necessary.

Misc

  • Fixes a bug that changed default certificate hostname verification on HTTP API to be more strict.

5.11.0

Kernel

  • Add beta support for Vector Indexes on nodes with an approximate k-nearest neighbour query, supporting Euclidean and cosine similarity functions.

    Provides the procedures db.index.vector.createNodeIndex and db.index.vector.queryNodes for creation and querying respectively. The db.create.setVectorProperty is provided in addition, to set a vector property on a given node in a more space-efficient representation than if using Cypher's SET.

  • Introduce rudimentary index metrics: <prefix>.index.<indexType>.(queried|populated).

  • Reduce noise level from ArchiveProgressPrinter

  • Change behaviour of 'ALTER CURRENT USER SET PASSWORD' to auto commit even when executed inside an explicit transaction.

Cypher

  • Expand property type constraints with support for union types, e.g ZONED TIME | LOCAL TIME, INTEGER | LIST<INTEGER NOT NULL>.
  • Add :sysinfo command to Cypher Shell.
  • Extends Type Predicate Expressions to allow for multiple types to be checked at once (closed dynamic unions). E.g. IS :: INTEGER | FLOAT
  • Fixes two bugs around durations with fractional components. Negation was not properly propagated to the components, so that "-P0.5Y" was presented as 6 months rather than -6 months. Fractional minutes > 60 was not properly converted into hours, so that 1 h 72.5 min was presented as 1h 12 min 30s instead of 2h 12 min 30s.
  • Fixes https://github.com/neo4j/neo4j/issues/13102 where a variable inside a subquery becomes undefined if after a WITH
  • Update Apache Shiro to 1.12.0
  • fixes github issue https://github.com/neo4j/neo4j/issues/13215. Graph.names should only return the graphs the user has access to.
  • Fixes neo4j/neo4j#13155, neo4j/neo4j#13189 and neo4j/neo4j#13191 where shadowing variables in SKIP and LIMIT caused unexpected errors.
  • Fix bug in fused piplined runtime ProjectEndpoints operator that could lead to incorrect results.

Clustering

  • SHOW DATABASE now reports databases starting and stopping with values starting and stopping in column actualStatus.

Browser

  • SSO papercuts (more logs & make downloading them easier)
  • Fix bug where :auto hint would not show
  • fix bug where metadata was incorrectly formated

Misc

  • Migrate to Jetty 10
  • Add status code to TransactionFailureException. Prior to this PR TransactionFailure exception did not have any status code, which meant that they eventually was treated as DatabaseErrors. Also, in this PR the constructors for creating TransactionFailureException without giving a status code are deprecated.

5.10.0

Kernel

  • Adds additional types to org.neo4j.graphdb.schema.PropertyType in the Core API
  • Checkpoint flushed_bytes metric to show accumulated number of bytes written by checkpoint

Cypher

  • Expand property type constraints with support for list types, e.g LIST<STRING NOT NULL>, LIST<INTEGER NOT NULL>. The inner type of the list type cannot be nullable.
  • Introduces <SCALAR TYPE> NOT NULL variants to the Type Predicate Expression, e.g BOOLEAN NOT NULL, as well as non-property value types, and simple lists, e.g. MAP, NODE, RELATIONSHIP, PATH, LIST<SCALAR TYPE>, ANY, PROPERTY VALUE.
  • The SHOW ALIAS command will now only show the names of the databases targetted by an alias if that database is visible to the user.
  • Fixes neo4j/neo4j#13194 where toBooleanOrNull with an inner function of null would fail.
  • The server.memory.query_cache.shared_cache_num_entries and server.memory.query_cache.per_db_cache_num_entries settings can now be dynamically changed without restarting
  • split(s, [a1, a2,...]) should return null if any delimiter (a_i) is null. See neo4j/neo4j#13196
  • Fixes $13163 by making deprecation checks more type safe
  • Deprecate property references across patterns in CREATE, e.g. CREATE (a {p:1}), ({p:a.p})
  • Fixed a bug where predicates with uppercase NODES() and RELATIONSHIPS() functions would be planned as a Filter after VarExpand/ShortestPath instead of being applied directly during path search.

Clustering

  • Added a config setting and a procedure to allow free servers to be auto-enabled.
  • Panicked Servers now attempt to rid themselves of all raft leaderships

Docker

  • updated debian base image to bookworm-slim
  • Added new docker image based on redhat/ubi8-minimal

Misc

  • New metrics counters for server-side routing decisions: dbms.routing.query.count.*

5.9.0

Kernel

  • Collapse nested JSON objects in the query logger when db.logs.query.annotation_data_as_json_enabled setting is true.

  • Introduces property type constraints to restrict the type of node and/or relationship properties. Can be created with commands like:

    CREATE CONSTRAINT nodePropertyStringType FOR (n:Label) REQUIRE n.prop IS :: STRING or CREATE CONSTRAINT relPropertyBooleanType FOR ()-[r:REL_TYPE]-() REQUIRE r.prop IS :: BOOLEAN

  • Restore stateless ConfiguredQueryLogger

  • Period-based transaction log pruning strategy with max size restriction

  • Adds additional types to org.neo4j.graphdb.schema.ConstraintType in the Core API

  • Reduced overheads when running on operation systems with 64K memory page sizes.

  • Fixes an issue where the CSV importer wouldn't enforce the value of --bad-tolerance

  • Fixed an issue with neo4j-admin database check where provided paths with the '.report' extension were incorrectly interpreted as a directory.

Cypher

  • Introduces type predicate expressions to verify the type of a variable, literal, property or other Cypher expression, using syntax like n.prop IS :: STRING
  • Add new column isDeprecated to SHOW PROCEDURES, SHOW FUNCTIONS, and SHOW SETTINGS to tell if the procedure/function/setting is deprecated.
  • Grant, deny and revoke roles and privileges will now generate notifications when the commands have no effect.
  • Provide a method for a client application (Neo4j Ops Manager) to request a list of supported privileges which can be granted.
  • Extended the language pattern-matching capabilities with the introduction of quantified path patterns. Subpaths containing an arbitrary number of nodes and relationships can now be repeatedly matched against the data.
  • Improve error handling and reporting when executing administration commands. This change may result in administration commands returning different, but more accurate status codes.
  • Fixes bug where updates would not always get applied before a LIMIT 0 or a WHERE false.

Clustering

  • Fixed bug where a server that was a designated seeder for a database couldn't be reallocated for that database.
  • DBMS upgrades will now happen automatically, once all servers are on matching versions. You no longer need to call dbms.upgrade().

Browser

  • Gracefully handle when some databases are unavailable
  • Faster bootup & better connection handling
  • improve sysinfo frame consistency
  • Debug connectivity touch ups
  • prevent briefly storing credentials before reading setting

Docker

  • Added neo4j-admin report functionality to 5.x and 4.4 images.

5.8.0

Kernel

  • Add setting db.logs.query.annotation_data_as_json_enabled to configure the output format of annotation data in the query log to be JSON instead of a Cypher map.
  • Improved configuration file validation output on startup
  • Defaults --strict option in import to false due to it causing too large a performance hit in some scenarios
  • Configuration file character encoding can be overridden by the NEO4J_CONFIG_FILE_CHARSET environment variable
  • Fix an issue with using certain configuration settings, query options, built-in functions or procedures, containing the letter "i", when running with a Turkish locale.

Cypher

  • Changed the notification description for deprecated procedure return fields and deprecated functions and procedures without replacement to no longer include 'is no longer supported' as that was misleading.

  • Fix a bug in pipelined runtime that can cause bitIndex < 0: -1 errors in plans with OrderedUnion.

  • Fix A bug has occurred in the morsel runtime: The target morsel cannot hold the data to copy error. See Github issue: neo4j/neo4j#13148.

  • Fix overflow when using count store. See Github issue: neo4j/neo4j#13170.

  • Fix issue where an error, arraycopy: length -1 is negative occurred, Github issue: neo4j/neo4j#13141

  • Fix a bug with LIMIT that could lead to error: UnknownError:Failed to evaluate expression.

    See Github issue: neo4j/neo4j#13172 and neo4j/neo4j#13173.

  • Fix unexpected TypeError when using the toStringOrNull function, for example in CREATE (n) RETURN reverse(toStringOrNull(n)).

  • Fix bug in fused pipelined runtime that could lead to lost updates if a property was cached. For example when running queries like MATCH (n) WITH n.prop AS oldValue SET n.prop = n.prop + 1 WITH n.prop AS newValue RETURN * concurrently. Note, Cypher will not always prevent lost updates, see documentation for more details.

  • Handle large precision values in round, gh-issue

  • Fixes https://github.com/neo4j/neo4j/issues/13106 and https://github.com/neo4j/neo4j/issues/13109 by changing the way Cypher checks for variable shadowing inside subqueries

  • Backup metadata scripts created using neo4j-admin database backup will now include the cluster topology of the database to be backed up.

  • Fail LOAD CSV <url> queries if the URL led to a redirect that we can't follow (protocol changes or Location header is missing).

  • Using map projections, e.g, RETURN n{.p1, p2: 2}, on composite databases could lead to wrong results.

  • allow new unicode characters as whitespace

Clustering

  • DBMS upgrade procedures will check all servers are on matching versions before allowing an upgrade.
  • Panic DBMS when local system graph components are behind those installed in the system db

Packaging

  • Fixed java dependencies to use java-17 metapackage provided by both openjdk and oracle java.
  • fixed bug where Neo4j will automatically start on installation in debian.

Docker

  • Fixed 5.x bug where requesting apoc plugin actually installs apoc-core. Also added apoc-core as optional plugin.

Misc

  • Fix neo4j.dbms.bolt.connections_idle metric.

5.7.0

Kernel

  • Introducing a new Status for transaction timeout.

  • Upgraded Jettison version to 1.5.4 to fix CVE-2023-1436

  • Introduces two new constraint types: relationship property uniqueness and relationship key. They can be created with

    CREATE CONSTRAINT FOR ()-[r:TYPE]-() REQUIRE r.prop IS UNIQUE and CREATE CONSTRAINT FOR ()-[r:TYPE]-() REQUIRE r.prop IS REL KEY, respectively.

  • Fixes an issue where a temporary read-only setting for a database could become permanent for some Lucene indexes

  • 'neo4j-admin report' now correctly captures kubernetes style configs

  • Fix a bug where some data would be lost from index during a full online backup. The data would still be present in the store, but index would be inconsistent. Affected index types are FULLTEXT or TEXT and the data would only be lost on the backup client, the server would still have the correct data.

  • Fixes an issue where recovery would temporarily hold onto more memory than necessary, making it more likely for recovery to run out of heap on recovering very large transactions.

Cypher

  • Fix broken query cancellation (ctrl+c) in Cypher Shell.
  • Plan predicates containing sub-queries independently
  • fix bug when reusing variable names in merge clauses with multiple relationships
  • Add new option server.memory.query_cache.sharing_enabled to toggle the use of a shared cache between databases, replacing the individual caches. When using the shared cache, databases may compete for cache space, but may not observe each others entries. Size of the shared cache is configured with server.memory.query_cache.shared_cache_num_entries.
  • Adapt :param and :params in Cypher Shell to Cypher map based syntax, for example :param {a: 1, b: 1+1}. The existing arrow syntax is also still supported.
  • Add WAIT to ALTER DATABASE administration command.
  • Deprecate the Cypher query option connectComponentsPlanner.
  • Introduce error and status output for CALL IN TRANSACTIONS
  • Queries using composite indexes and duplicated search terms, such as a.p1 IN [1, 1, 1] AND a.p2 = 3, could result in incorrect results.
  • Fix virtual entities creation from procedure in the composite database
  • We now log a warning if a security provider is listed in dbms.security.authentication_providers or dbms.security.authorization_providers but is not available for use.
  • Status code Neo.ClientNotification.Statement.SuboptimalIndexForWildcardQuery has been deprecated for removal.
  • Fixes bug with error message "Unexpected error: out of bounds for object " when having ORDER BY with a literal in certain cases.
  • seeking for an empty array would lead to an empty result even if a match existed in the index.

Clustering

  • Fix bug where rafted system databases were unable to pass seed validation when the instances had initial_mode_constraints.

Security

  • Fixed a bug where dropping a remote alias would not clean up access privileges on it correctly, resulting in any user with a role having that privilege failing to authorize.

Browser

  • Add codes to frame notifications
  • Add :debug-connectivity frame to help debugging bolt connections
  • fix bug where plan view downloads got very low resolution
  • Align text table display of nodes with cypher shell

5.6.0

Kernel

  • Fix an issue with migrate-configuration admin command where plugin settings were incorrectly handled
  • Fixes an issue where the importer could interpret a non-existent node ID from the relationships data as one of the imported nodes. A flag --strict has been added to the import command to control this added strict validation of the node IDs and is enabled by default. Running import with strict check enabled may have a negative performance impact during relationship import.
  • Fix neo4j-admin database info --from-path path validation on paths external to standard config, which incorrectly failed on otherwise valid paths to databases.
  • Fix issue with console appenders in server-logs.xml

Cypher

  • seeking for an empty array would lead to an empty result even if a match existed in the index.
  • Introduce COLLECT Subqueries, This collects the results of the subquery into a list.
  • Add a command to list configuration settings, SHOW SETTINGS.
  • Fix bug for MERGE queries in pipelined runtime.
  • Solve bug where unnecessary sort was planned for some queries beginning with an OPTIONAL MATCH.

Clustering

  • Deprecate dbms.cluster.secondaryReplicationToggle (use dbms.cluster.secondaryReplicationDisable)
  • Splitting out discovery modules
  • [1wUXB3gt] Revert setting name back to dbms.max_databases from server.max_databases

Docker

  • JVM additional configuration set by environment variable will now stop overriding default jvm configurations.

  • Invalid NEO4J_PLUGINS values now produces a helpful error message.

    For example: NEO4J_PLUGINS='["gds"]' will now return:

    "gds" is not a known Neo4j plugin. Options are:
    apoc
    apoc-core
    bloom
    graph-algorithms
    graph-data-science
    graphql
    n10s
    streams
    

Misc

  • Add ability to run CALL {} IN TRANSACTIONS to HTTP Cypher Transactional API using the single request endpoint (e.g db/neo4j/tx/commit)
  • Fix possible deadlock in transaction termination
  • HTTP Transactional Cypher API bookmark support

5.5.0

Kernel

  • Fix reporting of JVM memory metrics
  • neo4j-admin database copy can be used to compact/clean-up a database in-place by setting target to be the same as the source.
  • Add command for performing configuration validation without starting server: neo4j-admin server validate-config
  • Recovery logging and dependencies adaptation
  • Fixes an issue with property key names in importer CSV header couldn't be parsed if they contained : characters. Now this works if the header entry also specifies a property type, e.g. my-key:with-colons:string

Cypher

  • Plan count store lookup for relationship endpoints
  • It is possible now to ALTER DATABASE where the topology is changed with number of primaries increasing chnage from 1 to n.
  • Deprecation of the usage of differently ordered variables in UNION Clauses
  • Fix bug in MERGE ()-[:R]-()
  • Fix a bug where group to role mappings defined for OpenID connect in dbms.security.oidc.<provider>.authorization.group_to_role_mapping were not matched correctly with claims containing capital letters.
  • It is now permitted to repeat a relationship variable in a pattern. This will not return any results, though, as a relationship is not permitted to be traversed more than once. We therefore issue a warning instead.
  • Neo4j will now retry calls to the OpenID Connect discovery endpoint if they do not succeed initially. This applies on initial database startup and if the configuration is updated with dbms.setConfigValue
  • Upgraded Apache Shiro from 1.10.1 to 1.11.0. This version includes fixes for CVE-2023-22602
  • Fix bug in scoping with self referencing variables in a CREATE clause used in conjunction with list comprehension.
  • Fixed a bug where an OPTIONAL MATCH with shortestPath, followed by DISTINCT, would fail during planning.
  • Fix a bug where SKIP and LIMIT was ignored for simple COUNT(...) aggregation queries that was solved with a CountFromCountStore plan.
  • Adds eagerness when returning a full entity node if a node or relationships property or label has been updated.

Clustering

  • Prevent system database bootstrapping with too few Raft members when there are discovery restarts between publishing the Raft member id and observing successful publication.
  • Bug fix where a server went back and forth between pipeline and catchup mode even if there was no load.

Packaging

  • Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.

    • This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system database.
    • Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/

Docker

  • Docker now allows users to accept an evaluation license if they do not have a commercial license.

Misc

  • Fixes an issue where we throw an error if a notification does not have an input position. This happens when queries that produce certain notifications are re-routed to another cluster member with server-side routing. Fixes github issue https://github.com/neo4j/neo4j/issues/13025.
  • Fix issue where server-side routed transactions might not be retried when encountering transient errors

5.4.0

Kernel

  • Ability to specify what license is agreed to during install and startup
  • Completion scripts for neo4j and neo4j-admin cli for Unix. Automatic installation for deb and rpm
  • Fixing security issues
  • Fixes an issue in import where some date value types didn't handle empty values from the CSV files
  • Fixing a couple of small issues with TX log rotation
  • Fixes a performance issue creating Lucene indexes where workers ended up waiting unnecessarily on other threads for merging internal Lucene segment files.

Cypher

  • Generates warnings when the user issues a query with a relationship type expression that can never be fulfilled.
  • Fixes problems where Cypher queries with DELETE inside CALL would not return correct results. The fix was to insert a missing Eager operator.
  • for show databases entries with undetermined roles null is returned rather than unknown.
  • Fix a bug where frequently executed queries never were re-planned. This could happen if the time between executions of a query was always less than cypher.min_replan_interval, and cache space was generous enough.
  • Introduce new operator, IntersectionNodeByLabelsScan, for more efficiently handle queries like MATCH (n:A&B&C)
  • The JWT claim specified in dbms.security.oidc.<provider>.claims.groups may now also contain a single group returned as a string as well as a list of groups as was previously required.
  • fix bug for list literals with in expressions
  • Fix bug in privilege evaluation for the ALTER DATABASE command, where it was possible to bypass denied SET DATABASE ACCESS privilege by leveraging ALTER DATABASE privilege instead.

Clustering

  • Deprecate server.groups for initial.server.tags (#18629)

Packaging

  • Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.

    • This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system
    • Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/

Browser

  • Update driver
  • Fix bug where email was not supported as a username in :server user list
  • Fix performance issue with browser background metadata for rbac users
  • Handle connections to composite databases
  • Fix indent formatting in nested objects
  • Fix relationship stylings not getting applied
  • show alias name in database selector
  • Clear metadata on switching database
  • Add neo4j trial banners
  • Allow setting parameters on composite databases
  • Bugfix: role cluster role incorrectly reported as leader
  • Ensure lost connection doesn't break browser
  • Bugfix - :auto didn't handle newlines
  • Update driver to 5.3.0

5.3.0

Kernel

  • Multiple :ID columns can be specified in importer CSV header to form composite IDs referable from the relationship CSV data.
  • Fixes a bug where neo4j-admin database import incremental would both miss enforcing uniqueness of node key constraints and leave them in an inconsistent state after the import. Also fixes that indexes could have nodes/relationships that violated property existence constraints in them after the import even though these nodes/relationship never made it into the actually imported data.

Cypher

  • SHOW DATABASES now show correct role (primary/secondary) for stopped databases
  • Adding password length requirement for creating and alter user. Default 8 characters but can be modified by using configuration setting dbms.security.auth_minimum_password_length
  • A new implementation of the shortest path algorithm.
  • Introduced eagerness for overlap between writing a property and property function reads.
  • Since 4.4 we were not able to plan value hash joins when the properties are wrapped in a function call. This has been fixed now.
  • Extending subquery support in Exists and Count Expressions to allow full non-updating subqueries.
  • We now validate that URIs used for communicating with OpenId Connect identity providers use the HTTPS scheme. This is required by the specification, but will break for any customers connecting to their identity providers over HTTP which is no longer supported.
  • Previously, the planner did not assume an expression like n.prop =~ ... to filter the results more than just the bare existence of n.prop. This was changed, such that the planner would prefer to apply these predicates earlier during the query evaluation.
  • Fix error Exception closing multiple resources that could happen for plans using Expand(Into), see Github issue: neo4j/neo4j#12968
  • Fixed a bug where an updating query might get stuck in an infinite loop during planning.
  • SHOW DATABASES returns databases from servers even if the server is offline.

Clustering

  • Fixed leak of drivers and connection pools when server side routing
  • Quarantine user databases if recovery fails at startup. A quarantined state will indicate that something is wrong with the store and that manual intervention is required.
  • Routing procedure returns all servers which host the given database (secondaries too) as routers

Browser

  • Fix sysinfo depending on setting missing in 5.0
  • Improve messaging around startup of newly created database
  • fix northwind data not loading properly due to https redirect
  • support connecting to cluster members missing default database

Docker

  • Docker image will warn if password length is less than 8 characters before attempting to start Neo4j database. If the password is too short the container will fail to start.

Misc

  • Fix issue where a high frequency of ALTER ALIAS would create a large number of threads
  • Fix issue where temporal functions failed to run directly on composite databases

5.2.0

Kernel

  • Changing the default value of 'dbms.memory.transaction.total.max' to …
  • Fix edge case where active transactions metrics were inconsistently decremented on closing a transaction, which lead to <prefix>.database.transaction.active_read to potentially appear negative.
  • Fixes possible crashes when using very small page cache sizes
  • Adds additional types to org.neo4j.graphdb.schema.ConstraintType in the Core API
  • Removing internal feature of custom lock manager selection, controlled by internal.dbms.lock_manager
  • Bump commons-text 1.9 -> 1.10.0 so as to address CVE-2022-42889

Cypher

  • The use of the same relationship variable for multiple variable length relationships, e.g. MATCH ()-[r*]->(), ()-[r*]->() is deprecated and will be removed in a future version
  • Upgraded Apache Shiro from 1.9.1 to 1.10.0
  • Added DRYRUN option for server commands
  • Fixes a bug in pipelined execution graph construction, that could cause some queries with UNION inside an updating subquery to fail with the message Could not find downstream argumentStateBuffer with id ArgumentStateMapId(x).
  • Fix bug in Expand(Into) where we could fail to find existing relationships if the same node is expanded multiple times.
  • Fix a bug where pressing ctrl+c in Cypher Shell would leave you in an infinite loop of IOException: Input/Output error errors.

Clustering

  • Fix bug where store copy failed to retry against certain remotes due to issues with address locking logic.
  • Bug fix where a member in a two member raft group couldn't be drained since it was wrongly considered unsafe.
  • Bug fix where the wrong artefact was chosen for databases with the same name but different database ids.
  • Create a 'synonym' for each of the metric cluster.core. cluster.read_replica. with the correct naming cluster.raft. and cluster.store_copy.

Packaging

  • Include a packaging information file under neo4j home

Misc

  • New function graph.propertiesByName() for retrieving properties of constituent graphs on composite databases.
  • Fix bug with map projection in Fabric, where the value of the map projection is returned outside a subquery. Fixes github issue https://github.com/neo4j/neo4j/issues/12939

5.1.0

Kernel

  • Range seek indexed searches will not match NaN, consistent with non indexed range searches
  • Improved performance for Text indexes using new default provider text-2.0.
  • Ability to specify an analyzer in full-text queries.
  • Fixes a bug that caused XML logging files not to be included in neo4j-admin server report.
  • CSV header for incremental import tool can now specify the value type for IDs in its group using the option id-type, e.g: id:ID(MyGroup){label:MyLabel, id-type: int}

Cypher

  • Various security fixes

    This PR is structured to be read either commit by commit, or by looking at the overall diff.

    The source code change is a one-liner. The rest of the PR is adding tests which explore the current behaviour, and make sure this one-liner correctly protects from Path traversal vulnerabilities.

    Please read below if you want to explore the PR commit by commit.

    • 52ca2b078ca2bff9b889e59602841ec09c2e507f Adds about ~1000 tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.

    • 88b492b544e375c1923c7dd86c33dcba3a699bb7 Adds a few tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.

    • 225d316e8ffca3d5c4ffa98127fe0463af539974 One-liner source code change, and fixes the incorrect tests results.

  • Fix issue where performance regressed for queries with "impossible predicates"

  • Update the list of valid timezones to include Europe/Kyiv, as per IANA 2020b.

  • Fix bug where a user could change the database topology with incorrect privileges.

  • Fix bug in pipelined runtime where some queries using AssertingMultiNodeIndexSeekOperator would fail incorrectly with Merge did not find a matching node.... For example in queries like UNWIND [0,1] AS id MERGE (n:A:B {id: id}), if there is a uniqueness constraint on the id property for both A and B labels.

  • Fix bug in pipelined runtime where AssertingMultiNodeIndexSeekOperator failed to perform locking index seeks. This could lead to failures when running concurrent transactions in queries like MERGE (n:A:B {id: x}) when we have a uniqueness constraint on id for both labels A and B.

  • Fixed bug where DROP DATABASE ... IF EXISTS and ALTER DATABASE ... IF EXISTS ... could give DatabaseNotFoundException when there exists a remote database alias with the name.

  • Fixed bug for having * and order by id in same RETURN clause

  • Allow setting/modifying TOPOLOGY without specifying PRIMARY (keeping the default / previous value)

  • Fix a bug where SHOW DATABASES may not include all servers for a database if the servers have the same value for server.bolt.advertised_address

  • Fix a bug with memory tracking in CALL IN TRANSACTION that could lead to an exception with the message "Expected non-negative long value ...".

  • Fix bug where columns could be swapped for UNION queries.

  • Fix a bug in pipelined runtime that can cause incorrect row ordering in queries that leverage order and contain an aggregation.

Clustering

  • Default database is created and allocated to initial members during dbms creation in a best effort way
  • Add server-side routing support for read queries.
  • Fix deadlock in RaftDrainingService area

Browser

  • Fix sysinfo depending on setting missing in 5.0
  • Improve messaging around startup of newly created database
  • fix northwind data not loading properly due to https redirect
  • support connecting to cluster members missing default database

Misc

5.0.0

Kernel

  • FULLTEXT indexes can include lists of strings.

  • Disable io limiters only on global shutdown

  • Introduces a faster variant of consistency check for relationship indexes.

  • Remove neo4j based profilers.

  • Change dbms.tx_state.memory_allocation to use ON_HEAP tx state by default

  • Removes the deprecated --check-label-scan-store, --check-relationship-type-scan-store and --check-property-owners options from consistency checker.

  • Pull Node::delete and Relationship::delete up into Entity

  • Remove deprecated procedure: db.indexDetails. Replaced by SHOW INDEXES YIELD *.

  • Remove deprecated procedure: db.schemaStatements. Replaced by SHOW INDEXES YIELD * and SHOW CONSTRAINTS YIELD *

  • Removal of some deprecated code

  • Remove redefinition of MaxInlineLevel

  • Remove deprecated procedure: db.createIndex. Replaced by CREATE INDEX command.

  • Remove deprecated procedure: db.createUniquePropertyConstraint. Replaced by CREATE CONSTRAINT ... IS UNIQUE command

  • Remove deprecated procedure: db.createNodeKey. Replaced by CREATE CONSTRAINT ... IS NODE KEY command

  • Fix bolt connections to respect dynamic setting of dbms.transaction.timeout

  • Fixes a bug in index transaction state where nodes/relationships created/changed in the same transaction could sometimes be returned several times for queries using composite indexes.

  • Fix false-positive "Potential direct memory leak"

  • Do not select legacy graph.db as the default if present

  • neo4j-admin import does not accept any existing database (even empty ones). Supply --force to remove any files prior to import

  • CSV Import: add support for array data types point[], date[], time[], datetime[], localtime[], localdatetime[], duration[]

  • Fixes an issue where under very specific circumstances an upgraded database could get into a state where it had a chance to assign non-unique transaction IDs to committing transactions

  • Fixes an importer issue where looking up an ID where there were multiple equal in different groups may result in ArrayIndexOutOfBoundsException.

  • Remove support for US/Pacific-New timezone. Existing values that use unsupported timezone will be interpreted as US/Pacific.

  • DatabaseTransactionEventListeners calls afterCommit/Rollback on all

  • Update Log4j to 2.15.0 to address CVE-2021-44228

  • Update Log4j to 2.16.0 CVE-2021-45046

  • Breaking change: Stop shading log4j and update the public logging API

  • Close kernel transaction on periodic transaction context commit

  • Fixes an issue in importer where large node IDs from CSV source that were additionally stored as node property may sometimes end up with the wrong value.

  • Fix an issue where ExpandInto can call get degrees on a dense node when DENY privileges are present. This causes a large amount of unnecessary permissions checks to occur.

    • Points are now incomparable, i.e. x < point and x > point evaluates to NULL for all x. For range seek queries please use point.withingBBox instead

      • Fix so that we get consistent results for range queries on durations regardless if there is an index or not.
      • Fix inconsistent behaviour: duration < duration and point < point evaluates to NULL instead of FALSE
  • Add isAvailable() to GraphDatabaseService

  • Restrict Node::getRelationships return types such that its resource can be released

  • Extend ResourceIterable such that it can release its resource

  • Remove obsolete NeoStoreCommand

  • Adds "element ID" accessors to the neo4j embedded java API:

    • Node#getElementId() and Relationship#getElementId()
    • Transaction#getNodeByElementId(String) and Transaction#getRelationshipByElementId(String) Element IDs are references to entities that, in addition to the internal entity ID, contains information about which database it belongs to.
  • Update relationship index schema syntax in logs and exception messages to align with cypher syntax i.e -[:REL {prop1, prop2}]- becomes ()-[:REL {prop1, prop2}]-()

  • Reduces memory overhead of temporarily buffered deleted internal record IDs

  • Ensure resources closed when using ResourceIterables and ResourceIterators

  • Remove lucene+native-3.0 index provider. It is replaced by TEXT, RANGE and POINT indexes.

  • Fixes an issue cleaning up registered metrics after a failure to start a database, preventing it from being start after that point within the same dbms session.

  • Remove legacy dbms.directories.tx_log setting

  • Remove dbms.index.default_schema_provider setting and associated SchemaIndex enum. Index provider can be selected through the OPTIONS clause for CREATE INDEX/CONSTRAINT

  • Fixes a bug in neo4j-admin report command where using the heap classifier would make the command fail with Error: Failed to write heapdump.hprof

  • CREATE DATABASE accepts storeFormat in OPTIONS clause. The option controls the store format of a newly created database, if using the command to connect a loaded database the option will have no effect.

  • Remove support for the USING PERIODIC COMMIT query hint. The recommended replacement is CALL {...} IN TRANSACTIONS

  • Removed the following deprecated procedures (replaced by SHOW TRANSACTIONS and TERMINATE TRANSACTIONS):

    • dbms.listTransactions()
    • dbms.killTransaction(<tx-id>)
    • dbms.killTransactions(<tx-ids>)
    • dbms.listQueries()
    • dbms.killQuery(<query-id>)
    • dbms.killQueries(<query-ids>)
  • Much faster rebuild of relationship group degrees store

  • Update PublicApi so that PathExpander returns ResourceIterable

  • neo4j-admin import respects dbms.logs.debug.format setting

  • Update classification of Terminated and LockAcquisitionTimeout status codes

  • Always attempt to create database constraints in system graph during upgrade.

  • Escape character in config path parsing are now ignored. E.g setting dbms.directories.data=\test dir\, the \t is no longer interpreted as a tab character. Mostly relevant for paths on Windows

  • Advertised address settings will no longer inherit port from its corresponding listen address setting when unspecified. Instead default value for each affected setting will be used.

  • The old parameter dbms.config.strict_validation, which was false by default, has been replaced by server.config.strict_validation.enabled, which is true by default

  • Removes dbms.allow_upgrade and dbms.record_format settings. Changes to the store that used to be triggered by setting dbms.allow_upgrade=true are now classified as either store upgrades or store migrations. Store upgrades (small, constant time changes) are done automatically on start up and store migrations must be done with the new migrate-store admin command.

    dbms.record_format had two usages. First as the format used for newly created databases, that has been replaced by the db.format. Secondly as the format to use when upgrading the database, changing format family is classified as a migration and can now be done using the migrate-store admin command.

  • Remove BTREE index type. BTREE is replaced by RANGE, TEXT and/or POINT indexes. Make sure to replace or remove any BTREE indexes and constraints backed by BTREE indexes before migrating to 5.0. See the migration guide for more information.

  • Strict config validation (managed by server.config.strict_validation.enabled) no longer allows settings to be declared multiple times in neo4j.conf, with the exception of server.jvm.additional.

  • Core API blocked from creating composite point indexes. Only single-property point indexes are supported

  • Closing relevant CSV metrics writers when database is shut down

  • Fixes a bug in import to high_limit format where an interrupted import could fail on being resumed with Illegal secondary record reference

  • The type of <prefix>.vm.pause_time metric is changed from gauge to counter.

  • Consistency checker now checks id files for nodes, relationships and properties. Any used record with id up for reuse will result in a report: The referenced record is in use but the id is up for reuse in the id file.

  • Fixes a bug where nodes not having the required property for a node key constraint could be created during the creation of the constraint. They would silently violate the constraint and leave the database with a non-fulfilled node key constraint

  • Setting namespaces validation

  • The DbmsInfo class accessible through the org.neo4j.kernel.extension.context.ExtensionContext does not contain the OperationalMode (core, read replica, single) anymore. Extension users can resolve the dependency to HostedOnMode if they want to find the allocation mode of a database at a particular instance.

  • Update org.neo4j.kernel.impl.coreapi.schema.PropertyConstraintDefinition#toString to output the latest Cypher syntax for constraint creation.

  • Update javadoc for IndexDefinition to not assume how index was originally created. Nothing has changed in terms of implementation.

  • Changes to output from IndexDefinition#toString. "UNIQUE" and "TOKEN" is not included in description of "type" anymore. Type will be only LOOKUP, FULLTEXT, RANGE, TEXT or POINT.

  • New index types 'RANGE' and 'POINT' are now fully supported. 'RANGE' indexes support exact lookup and range type queries over all value types and is very similar to the removed 'BTREE' type. 'POINT' indexes support bounding box queries and exact lookup for point values. See documentation for more information.

  • Introducing dbms.checkConfigValue(setting, value) (enterprise,admin) prodcedure for checking if a given value is valid for provided setting. Extending existing procedure dbms.listConfig result with additional information

  • code review and more accurate documentation of the Traversal API

    documentation: https://github.com/neo4j/docs-java-reference/pull/39

  • Clean usage of deprecated dbms.read_only in default neo4j.conf files.

  • Move systemdb.secrets.* settings into dbms.security.*.

  • More user-friendly exceptions when entities not found by elementId.

  • Fixes a bug where some transaction objects could be leaked instead of being released properly.

  • Remove deprecated procedures: db.indexes and db.constraints

  • Greatly improves worst-case performance of scanning for deleted IDs to be reused for new records

  • Changing the default transaction log retention from 7 days down to 2 days. Controlled by setting db.tx_log.rotation.retention_policy

  • Make metrics namespaces mandatory.

  • Jvm additional setting should not split inside quoted values

  • Fixing an issue where 'CALL { ... } IN TRANSACTIONS' could leak inner transactions when the outer transaction was terminated during execution, e.g by timeout

  • Update Coordinate class to expose coordinates as array of primitives instead of list of objects

  • Renaming Neostore records header in diagnostics logging to Metadata

  • Removal of dbms.allow_single_automatic_upgrade setting

  • Fix node degree calculation when relationships are removed in the same transaction

Cypher

  • Allow underscore between digits in number literals.

  • add support for WHERE clauses inside relationship patterns

  • Bug fix: Neo4j now also accepts datetime expressions including an offset of times immediately after switching from summer time to winter time.

  • update to driver version 4.4.0

  • Fix bug in cypher shell where it would fail to start in windows.

  • update to driver version 4.4.1

  • Fix unnecessary Eager planned between MATCH and MERGE on different labels.

  • Fix bug where planner would fail to find a sorted plan to fulfil order on two variables including aggregation, which would result in issuing an "Expected a sorted plan" error.

  • Remove deprecated security procedures:

    • dbms.security.createUser. Replaced by CREATE USER
    • dbms.security.deleteUser. Replaced by DROP USER
    • dbms.security.suspendUser. Replaced by ALTER USER
    • dbms.security.activateUser. Replaced by ALTER USER
    • dbms.security.changeUserPassword. Replaced by ALTER USER
    • dbms.security.changePassword. Replaced by ALTER CURRENT USER SET PASSWORD
    • dbms.security.createRole. Replaced by CREATE ROLE
    • dbms.security.deleteRole. Replaced by DROP ROLE
    • dbms.security.addRoleToUser. Replaced by GRANT ROLE
    • dbms.security.removeRoleFromUser. Replaced by REVOKE ROLE
    • dbms.security.listUsers. Replaced by SHOW USERS
    • dbms.security.listRolesForUser. Replaced by SHOW USER
    • dbms.security.listRoles. Replaced by SHOW ROLES
    • dbms.security.listUsersForRole. Replaced by SHOW ROLES WITH USERS
  • Upgrade to Scala 2.13

  • Neo4j now utilises range indexes when planning queries.

  • The function distance has been been replaced by point.distance

  • Removed the commands for dropping indexes and constraints by schema.

    • DROP INDEX ON :Label(prop) - Replaced by DROP INDEX name.
    • DROP CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY - Replaced by DROP CONSTRAINT name.
    • DROP CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE - Replaced by DROP CONSTRAINT name.
    • DROP CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop) - Replaced by DROP CONSTRAINT name.
    • DROP CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop) - Replaced by DROP CONSTRAINT name.
  • Fixed a bug where using values returned from a procedure would cause a type error like Type mismatch: expected Float, Integer or Duration but was Number.

  • Removed the BRIEF, VERBOSE and EXISTS keywords for SHOW INDEXES and SHOW CONSTRAINTS.

    • SHOW INDEXES BRIEF - Replaced by SHOW INDEXES.
    • SHOW INDEXES VERBOSE - Replaced by SHOW INDEXES YIELD *.
    • SHOW CONSTRAINTS BRIEF - Replaced by SHOW CONSTRAINTS.
    • SHOW CONSTRAINTS VERBOSE - Replaced by SHOW CONSTRAINTS YIELD *.
    • SHOW EXISTS CONSTRAINTS - Replaced by SHOW EXIST CONSTRAINTS.
    • SHOW NODE EXISTS CONSTRAINTS - Replaced by SHOW NODE EXIST CONSTRAINTS.
    • SHOW RELATIONSHIP EXISTS CONSTRAINTS - Replaced by SHOW RELATIONSHIP EXIST CONSTRAINTS.
  • Fixes exception "org.neo4j.exceptions.CypherTypeException: Property values can only be of primitive types or arrays thereof" thrown when concatenating a list with an empty list.

  • Auto completion of commands in Cypher Shell.

  • Fix a bug where, in rare cases, matching with an optional match on the same thing as a preceding match would fail during planning.

  • Update to driver version 4.4.2

  • Fix a bug in the heap memory tracking of intermediate results in the pipelined runtime, that could lead to underestimation of the heap usage for certain queries, and potentially trigger JVM out-of-memory errors for queries consuming too much memory.

  • Fix a bug where, in rare cases, reusing a variable that had previously been used as a path variable would fail during planning.

  • Fix a bug where errors could be masked when using IS NULL or IS NOT NULL

  • Fix a bug that could trigger a null pointer exception in the slotted and pipelined runtimes for certain query plans where an OPTIONAL MATCH with a predicate containing OR was planned with a Union operator.

  • During a rolling upgrade from 4.1 or earlier, roles don't have the privilege required to execute UDFs.

    These privileges are added to the PUBLIC role after the upgrade is done, but not during compatibility mode.

    This is the error when trying to execute a UDF:

    Executing a user defined function is not allowed for user 'XXX' with roles [PUBLIC, architect].
    

    This privilege is now in the list of temporary privileges which take effect during upgrades.

  • Improved performance of queries containing UNWIND and CALL IN TRANSACTIONS

  • Fix a memory leak of the runtime transactional context into the query plan cache

  • Support new syntax for expressing node labels. New operators include:

    • &: logical AND
    • |: logical OR
    • !: logical NOT
    • %: A "wildcard", meaning "any label" (in Cypher this translates to size(labels(n)) > 0

    Operators can be combined to form assertions on node labels in MATCH clauses, e.g. MATCH (n:A|(B&!C)).

  • Implied grouping keys are no longer supported. Only expressions that do not contain aggregations are grouping keys.

  • "Expose driver logs in Cypher Shell, with the new --log parameter and :log command.

  • Patterns like CREATE (a {prop:7})-[r:R {prop: a.prop}]->(b) where a variable introduced in the pattern is also referenced from the same pattern are no longer supported.

  • If a query was accessing values via the index (prop[...]), the planner would always assume that these were dynamic properties. and plan an Eager operator if there may have been a read-write-conflict. This is now changed if the index access is using literals like prop[0] or prop['key'].

  • The deprecated ON DEFAULT GRAPH and ON DEFAULT DATABASE syntax for privileges are no longer supported, use ON HOME GRAPH and ON HOME DATABASE instead.

  • Fix bug in aggregations with LIMIT where query would fail with an array copy out of bounds error.

  • Represent empty column headers with empty string in LOAD CSV.

  • Removal of the old parboiled parser for Cypher. This has been fully replaced by the new Javacc parser.

  • Support for impersonation in Cypher Shell.

  • Fixed issue where query analysis and planning was not terminated when transaction was terminated.

  • Removed the procedures for creating and dropping fulltext indexes.

    • db.index.fulltext.createNodeIndex() - Replaced by CREATE FULLTEXT INDEX ....
    • db.index.fulltext.createRelationshipIndex() - Replaced by CREATE FULLTEXT INDEX ....
    • db.index.fulltext.drop() - Replaced by DROP INDEX ....
  • Removed the deprecated syntax for creating indexes and constraints.

    • CREATE INDEX ON :Label(prop) - Replaced by CREATE INDEX [name] FOR (node:Label) ON (node.prop).
    • CREATE CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE (node.prop1,node.prop2) IS NODE KEY.
    • CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS UNIQUE.
    • CREATE CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop) - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL.
    • CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS NOT NULL - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL.
    • CREATE CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop) - Replaced by CREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL.
    • CREATE CONSTRAINT ON ()-[r:R]-() ASSERT r.prop IS NOT NULL - Replaced by CREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL.
  • Fixed a bug where matching on the same variable multiple times would trigger an exception during planning or produce incorrect results.

  • SHOW PRIVILEGES will now display the home database as 'HOME' instead of 'DEFAULT'

  • Fix bug where you could get an error message like Cannot put key x before first key y, for example in queries using SelectOrSemiApply or ConditionalApply and Limit.

  • Faster execution of queries of the form MATCH (n)-[*..5]->(m) RETURN DISTINCT m, that is queries where you are only interested in the distinct end-nodes of a pattern and do not require all relationships to be traversed.

  • Fix cache properties invalidation when row does not match the predicate in optional expand

  • Fix a rare bug where the output rows of some queries would be unordered, even though an ORDER BY had been correctly placed, see: https://github.com/neo4j/neo4j/issues/12840

  • Fix bug where range index seeks of array types always returns empty result. For example in queries like MATCH (n:Node) WHERE n.indexedProperty > [0] RETURN n;.

  • The aliases column in SHOW DATABASES should be CTList(CTString)

  • Fix error of the kind arraycopy: last source index 1 out of bounds for long[0]

    which could occur when a CartesianProduct was planned under a NestedPlanExpression in pipelined runtime.

  • Fixed an error due to which very particular queries with the same predicate on both sides of an OR expression could not be planned.

  • Pattern expressions for checking existence are no longer supported, except for use in WHERE clauses. Use a pattern comprehension instead.

  • Use lists that are stored in properties as input to toIntegerList, Github issue: opencypher/opencypher#526

  • Fix an issue with user-defined aggregation functions where the result-method could sometimes be called twice on the same row (incorrectly assuming the implementation to be idempotent)

  • Remove support for existence check of properties using exists(). The syntax exists(property) has been replaced by property IS NOT NULL.

  • Add ability to yield and filter the output from TERMINATE TRANSACTIONS. This will not affect what is terminated, only what is returned afterwards. TERMINATE TRANSACTIONS does not allow just filtering without YIELD, so TERMINATE TRANSACTION 'txId' WHERE message <> 'Transaction terminated.' is not valid but TERMINATE TRANSACTION 'txId' YIELD * WHERE message <> 'Transaction terminated.' is.

  • Usages of GetDegree wasn't obvious in the plan description. Now instead

    of size([pattern]) usages of GetDegree will be rendered with getDegree([pattern]).

  • Update driver to 4.4.5

  • Unaliased expressions are no longer supported in subquery RETURN clause. Use RETURN <expression> AS name.

  • Updated the output column set for SHOW TRANSACTIONS. Removed column allocatedBytes as it was not tracked. Added columns currentQueryStartTime, currentQueryStatus, currentQueryActiveLockCount, currentQueryElapsedTime, currentQueryCpuTime, currentQueryWaitTime, currentQueryIdleTime, currentQueryAllocatedBytes, currentQueryPageHits, and currentQueryPageFaults for the current query in the transaction (previously part of dbms.listQueries).

  • Cypher now supports relationship type expressions like MATCH ()-[r:!A&!B]->().

  • Before this change, pattern expressions in boolean contexts were marked as deprecated. This deprecation was removed.

  • Fixed bug where eagerness was handled incorrectly for overlaps in labels for predicates.

  • A new function that returns wether a value is or is not a NaN value

  • Decouple the EXECUTE and EXECUTE BOOSTED privileges to remove the implicit EXECUTE from the EXECUTE BOOSTED privilege.

  • Add new operator Trail used for solving quantified graph patterns.

  • Add columns creationTime, lastStopTime, lastStopTime to the column set for SHOW DATABASES.

  • Introduced the COUNT{} expression to replace the deprecated uses of size() with a relationship pattern

  • The octal syntax 0123 and hexadecimal syntax 0X123 is no longer supported. Use 0o123 and 0x123 instead.

  • discontinue support for remaining patterns with repeated relationship variables such as `MATCH ()-[r]-()

    RETURN [ ()-[r]-()-[r]-() | r ] AS rs`

  • Discontinue support of coercion of list to boolean such as WHERE [1, 2, 3]. Please use NOT isEmpty(...) instead.

  • Fixed Comparison method violates its general contract error during planning.

  • The commands SHOW TRANSACTIONS and TERMINATE TRANSACTIONS can now be used together in a single query. For example, terminating all of Alice transactions:

    SHOW TRANSACTIONS YIELD transactionId AS txId, username AS user
      WHERE user = 'Alice'
    TERMINATE TRANSACTION txId YIELD message
    RETURN txId, message
    
  • Github issue: neo4j/neo4j#12887, fix an issue with ltrim, rtrim, and trim.

  • Fix potential Expected as string value 'substring', but got NO_VALUE'

    error when the output of reduce is used as input to another function.

  • New surface to administer fabric databases, now named “COMPOSITE DATABASESâ€�. Configuration settings have been removed and Composite Databases are now administered via Cypher commands.

  • Fixed rare bug where self reference in equality (´WHERE n:L AND n.p = (n.p = n.p)´) caused stackoverflow error.

  • slotted runtime is now the new default community runtime.

  • Remove dbms.security.oidc.<provider>.redirect_uri setting which has been deprecated and is no longer required.

  • Removed the ability to change Cypher Versions by prepending queries with "CYPHER X.Y" or using the config setting "cypher.default_language_version".

  • Enable use of environment variable NEO4J_ADDRESS to specify connection address in Cypher Shell.

  • Updated output columns for SHOW INDEXES and SHOW CONSTRAINTS:

    • Removed uniqueness column from SHOW INDEXES.
    • Added column owningConstraint (string) to SHOW INDEXES, giving the name of the connected constraint (or null when the index does not belong to any constraint).
    • Changed column ownedIndexId (long) to ownedIndex (string) for SHOW CONSTRAINTS, giving the name of the backing index (or null when not index backed).
  • Adds DEALLOCATE DATABASES FOR SERVER, DROP SERVER, and SHOW SERVERS commands for managing server instances.

  • null values will now match the ELSE clause in CASE expressions

  • Fix bug in Reduce Expressions and List comprehensions hiding variables that should be in scope https://github.com/neo4j/neo4j/issues/12868

  • Logical plans where the same variable is introduced in multiple leaves can cause trouble with inserting eager, which might make the query end up with incorrect results. Before this fix we assumed that a variable was stable as long as it was stable on one leaf. Fix: A variable should be considered unstable if it is both unstable and stable. Fixes github issue https://github.com/neo4j/neo4j/issues/12878

  • Deprecate the use of nodes/relationships on the RHS of a Set Clause e.g MATCH (n)-[r:REL]->(m) SET n=r should now be MATCH (n)-[r:REL]->(m) SET n=properties(r)

  • Upgrade Apache Shiro from 1.8.0 to 1.9.1. This version includes fixes for CVE-2022-32532.

  • Add new operators, DirectedAllRelationshipsScan and UndirectedAllRelationshipScan to Cypher.

    Benchmarks:

    • #c5f015 2.12x generatedmusicdata_read Q35
    • #c5f015 3.11x musicbrainz Q25
    • no regressions, there aren't many queries where this would be a candidate though. Typically queries use a relationship type and a RelationshipTypeScan should in those cases be more efficient.
  • Fix a bug where SHOW TRANSACTIONS would fail when transaction metadata contains types that cannot be serialised to a property (e.g. List)

  • Fix bug with undirected relationship scans and self-loops

  • Fix overflow in resource manager. Users could get errors like java.lang.IllegalArgumentException: Expected positive long value, got -8589934576 because of an overflow when trying to grow the number of tracked resources.

  • Add store column to SHOW DATABASES output

  • Disconnect driver session on exit in Cypher Shell.

  • It is not allowed to in one clause mix label expressions containing non-GPM symbols such as ':' together with GPM-specific symbols such as '(', ')', '&', '!'.

  • Add parameter --uri and environmental variable NEO4J_URI as alternative ways to specify connection address.

  • fix issue where ExpandInto could return the wrong result

  • All notifications should have classification ClientNotification. In this PR we fix some of the current notifications which had severity ClientError or DatabaseError .

  • introduce Infinity, Inf and NaN as Float literals

  • When debug logging is enabled, LdapRealm can attempt to directly log

    Neo4jPrincipal objects resulting in logging like org.neo4j.server.security.auth.Neo4jPrincipal@f1d6260f. Fix it to log the username as expected.

  • Adds ENABLE SERVER command for managing servers.

  • Updates severity on some of the existing notifications. Also, updates status code accordingly (removing Warning from the name if it now has severity Information)

  • Deprecate runtime=interpreted

  • Don't throw when seeking the index for values that cannot be indexed.

  • The deprecated username field has been removed from the security and query logs.

  • Adds RENAME SERVER command for managing servers

  • Adds TOPOLOGY option to CREATE and ALTER DATABASE to specify desired count or primary and secondary servers per database.

  • Adds REALLOCATE DATABASES and ALTER SERVER command for managing servers

Clustering

  • Fixes an issue with token creation (labels, property keys and relationship types) in clustering where internal IDs of created tokens may not be unique, i.e. multiple members could end up creating tokens with the same internal IDs.

  • dbms startup is now asynchronous, which mean that after system database is started the bolt port opens, and other databases start asynchronously and may not be available immediately.

  • Track size of log entries to avoid prefetch buffer exceeding memory constraints.

  • Remove requirement to have multi-DC licence to access multi-DC features.

    Ticket: https://trello.com/c/ECvnAxM4

Packaging

  • Neo4j and cypher-shell deb installers' dependencies changed to be compatible with Oracle java 17.

    • Can no longer use headless JRE due to a circular dependency bug in OpenJDK17 on Ubuntu 18.04
  • cypher-shell java 17 dependency changed to non-headless jre to be compatible with zulu java

  • Fully removed init.d support for 5.0 in the rpm and deb packages. Users must use systemctl and the neo4j.service file installed by the packages. For example sudo systemctl start neo4j.

Security

  • Update jackson-databind from 2.13.1 to 2.13.2.2 (and thus also com.fasterxml.jackson.* from 2.13.1 to 2.13.2), to address CVE-2020-36518
  • Upgraded jetty to v9.4.48 in order to mitigate CVE-2022-2047 and CVE-2022-2048

Browser

  • Touch up guides ✨styling✨
  • Fix cluster detection on neo4j 4.3+
  • Fix bug with incorrect version number & add git hash to overview in stand-alone deployment
  • Zoom to cursor on scroll in visualization
  • Make sure editor displays full database name
  • Zoom graph to fit after initial visualization animation
  • Clear credentials in connection form on disconnect
  • Update :help articles on INDEX & CONSTRAINT
  • Fix credential timeout without initial user interaction
  • Fix links not being blue and not being highlighted in the sidebar

Misc

  • Remove Legacy HTTP API (where endpoints begin with /db/data/transaction/). Please use the endpoints that include the database name (e.g. /db/neo4j/tx/commit).

5.6.0

Kernel

  • Fix an issue with migrate-configuration admin command where plugin settings were incorrectly handled
  • Fixes an issue where the importer could interpret a non-existent node ID from the relationships data as one of the imported nodes. A flag --strict has been added to the import command to control this added strict validation of the node IDs and is enabled by default. Running import with strict check enabled may have a negative performance impact during relationship import.
  • Fix neo4j-admin database info --from-path path validation on paths external to standard config, which incorrectly failed on otherwise valid paths to databases.
  • Fix issue with console appenders in server-logs.xml

Cypher

  • seeking for an empty array would lead to an empty result even if a match existed in the index.
  • Introduce COLLECT Subqueries, This collects the results of the subquery into a list.
  • Add a command to list configuration settings, SHOW SETTINGS.
  • Fix bug for MERGE queries in pipelined runtime.
  • Solve bug where unnecessary sort was planned for some queries beginning with an OPTIONAL MATCH.

Clustering

  • Deprecate dbms.cluster.secondaryReplicationToggle (use dbms.cluster.secondaryReplicationDisable)
  • Splitting out discovery modules
  • [1wUXB3gt] Revert setting name back to dbms.max_databases from server.max_databases

Docker

  • JVM additional configuration set by environment variable will now stop overriding default jvm configurations.

  • Invalid NEO4J_PLUGINS values now produces a helpful error message.

    For example: NEO4J_PLUGINS='["gds"]' will now return:

    "gds" is not a known Neo4j plugin. Options are:
    apoc
    apoc-core
    bloom
    graph-algorithms
    graph-data-science
    graphql
    n10s
    streams
    

Misc

  • Add ability to run CALL {} IN TRANSACTIONS to HTTP Cypher Transactional API using the single request endpoint (e.g db/neo4j/tx/commit)
  • Fix possible deadlock in transaction termination
  • HTTP Transactional Cypher API bookmark support

5.5.0

Kernel

  • Fix reporting of JVM memory metrics
  • neo4j-admin database copy can be used to compact/clean-up a database in-place by setting target to be the same as the source.
  • Add command for performing configuration validation without starting server: neo4j-admin server validate-config
  • Recovery logging and dependencies adaptation
  • Fixes an issue with property key names in importer CSV header couldn't be parsed if they contained : characters. Now this works if the header entry also specifies a property type, e.g. my-key:with-colons:string

Cypher

  • Plan count store lookup for relationship endpoints
  • It is possible now to ALTER DATABASE where the topology is changed with number of primaries increasing chnage from 1 to n.
  • Deprecation of the usage of differently ordered variables in UNION Clauses
  • Fix bug in MERGE ()-[:R]-()
  • Fix a bug where group to role mappings defined for OpenID connect in dbms.security.oidc.<provider>.authorization.group_to_role_mapping were not matched correctly with claims containing capital letters.
  • It is now permitted to repeat a relationship variable in a pattern. This will not return any results, though, as a relationship is not permitted to be traversed more than once. We therefore issue a warning instead.
  • Neo4j will now retry calls to the OpenID Connect discovery endpoint if they do not succeed initially. This applies on initial database startup and if the configuration is updated with dbms.setConfigValue
  • Upgraded Apache Shiro from 1.10.1 to 1.11.0. This version includes fixes for CVE-2023-22602
  • Fix bug in scoping with self referencing variables in a CREATE clause used in conjunction with list comprehension.
  • Fixed a bug where an OPTIONAL MATCH with shortestPath, followed by DISTINCT, would fail during planning.
  • Fix a bug where SKIP and LIMIT was ignored for simple COUNT(...) aggregation queries that was solved with a CountFromCountStore plan.
  • Adds eagerness when returning a full entity node if a node or relationships property or label has been updated.

Clustering

  • Prevent system database bootstrapping with too few Raft members when there are discovery restarts between publishing the Raft member id and observing successful publication.
  • Bug fix where a server went back and forth between pipeline and catchup mode even if there was no load.

Packaging

  • Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.

    • This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system database.
    • Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/

Docker

  • Docker now allows users to accept an evaluation license if they do not have a commercial license.

Misc

  • Fixes an issue where we throw an error if a notification does not have an input position. This happens when queries that produce certain notifications are re-routed to another cluster member with server-side routing. Fixes github issue https://github.com/neo4j/neo4j/issues/13025.
  • Fix issue where server-side routed transactions might not be retried when encountering transient errors

5.4.0

Kernel

  • Ability to specify what license is agreed to during install and startup
  • Completion scripts for neo4j and neo4j-admin cli for Unix. Automatic installation for deb and rpm
  • Fixing security issues
  • Fixes an issue in import where some date value types didn't handle empty values from the CSV files
  • Fixing a couple of small issues with TX log rotation
  • Fixes a performance issue creating Lucene indexes where workers ended up waiting unnecessarily on other threads for merging internal Lucene segment files.

Cypher

  • Generates warnings when the user issues a query with a relationship type expression that can never be fulfilled.
  • Fixes problems where Cypher queries with DELETE inside CALL would not return correct results. The fix was to insert a missing Eager operator.
  • for show databases entries with undetermined roles null is returned rather than unknown.
  • Fix a bug where frequently executed queries never were re-planned. This could happen if the time between executions of a query was always less than cypher.min_replan_interval, and cache space was generous enough.
  • Introduce new operator, IntersectionNodeByLabelsScan, for more efficiently handle queries like MATCH (n:A&B&C)
  • The JWT claim specified in dbms.security.oidc.<provider>.claims.groups may now also contain a single group returned as a string as well as a list of groups as was previously required.
  • fix bug for list literals with in expressions
  • Fix bug in privilege evaluation for the ALTER DATABASE command, where it was possible to bypass denied SET DATABASE ACCESS privilege by leveraging ALTER DATABASE privilege instead.

Clustering

  • Deprecate server.groups for initial.server.tags (#18629)

Packaging

  • Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.

    • This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system
    • Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/

Browser

  • Update driver
  • Fix bug where email was not supported as a username in :server user list
  • Fix performance issue with browser background metadata for rbac users
  • Handle connections to composite databases
  • Fix indent formatting in nested objects
  • Fix relationship stylings not getting applied
  • show alias name in database selector
  • Clear metadata on switching database
  • Add neo4j trial banners
  • Allow setting parameters on composite databases
  • Bugfix: role cluster role incorrectly reported as leader
  • Ensure lost connection doesn't break browser
  • Bugfix - :auto didn't handle newlines
  • Update driver to 5.3.0

5.3.0

Kernel

  • Multiple :ID columns can be specified in importer CSV header to form composite IDs referable from the relationship CSV data.
  • Fixes a bug where neo4j-admin database import incremental would both miss enforcing uniqueness of node key constraints and leave them in an inconsistent state after the import. Also fixes that indexes could have nodes/relationships that violated property existence constraints in them after the import even though these nodes/relationship never made it into the actually imported data.

Cypher

  • SHOW DATABASES now show correct role (primary/secondary) for stopped databases
  • Adding password length requirement for creating and alter user. Default 8 characters but can be modified by using configuration setting dbms.security.auth_minimum_password_length
  • A new implementation of the shortest path algorithm.
  • Introduced eagerness for overlap between writing a property and property function reads.
  • Since 4.4 we were not able to plan value hash joins when the properties are wrapped in a function call. This has been fixed now.
  • Extending subquery support in Exists and Count Expressions to allow full non-updating subqueries.
  • We now validate that URIs used for communicating with OpenId Connect identity providers use the HTTPS scheme. This is required by the specification, but will break for any customers connecting to their identity providers over HTTP which is no longer supported.
  • Previously, the planner did not assume an expression like n.prop =~ ... to filter the results more than just the bare existence of n.prop. This was changed, such that the planner would prefer to apply these predicates earlier during the query evaluation.
  • Fix error Exception closing multiple resources that could happen for plans using Expand(Into), see Github issue: neo4j/neo4j#12968
  • Fixed a bug where an updating query might get stuck in an infinite loop during planning.
  • SHOW DATABASES returns databases from servers even if the server is offline.

Clustering

  • Fixed leak of drivers and connection pools when server side routing
  • Quarantine user databases if recovery fails at startup. A quarantined state will indicate that something is wrong with the store and that manual intervention is required.
  • Routing procedure returns all servers which host the given database (secondaries too) as routers

Browser

  • Fix sysinfo depending on setting missing in 5.0
  • Improve messaging around startup of newly created database
  • fix northwind data not loading properly due to https redirect
  • support connecting to cluster members missing default database

Docker

  • Docker image will warn if password length is less than 8 characters before attempting to start Neo4j database. If the password is too short the container will fail to start.

Misc

  • Fix issue where a high frequency of ALTER ALIAS would create a large number of threads
  • Fix issue where temporal functions failed to run directly on composite databases

5.2.0

Kernel

  • Changing the default value of 'dbms.memory.transaction.total.max' to …
  • Fix edge case where active transactions metrics were inconsistently decremented on closing a transaction, which lead to <prefix>.database.transaction.active_read to potentially appear negative.
  • Fixes possible crashes when using very small page cache sizes
  • Adds additional types to org.neo4j.graphdb.schema.ConstraintType in the Core API
  • Removing internal feature of custom lock manager selection, controlled by internal.dbms.lock_manager
  • Bump commons-text 1.9 -> 1.10.0 so as to address CVE-2022-42889

Cypher

  • The use of the same relationship variable for multiple variable length relationships, e.g. MATCH ()-[r*]->(), ()-[r*]->() is deprecated and will be removed in a future version
  • Upgraded Apache Shiro from 1.9.1 to 1.10.0
  • Added DRYRUN option for server commands
  • Fixes a bug in pipelined execution graph construction, that could cause some queries with UNION inside an updating subquery to fail with the message Could not find downstream argumentStateBuffer with id ArgumentStateMapId(x).
  • Fix bug in Expand(Into) where we could fail to find existing relationships if the same node is expanded multiple times.
  • Fix a bug where pressing ctrl+c in Cypher Shell would leave you in an infinite loop of IOException: Input/Output error errors.

Clustering

  • Fix bug where store copy failed to retry against certain remotes due to issues with address locking logic.
  • Bug fix where a member in a two member raft group couldn't be drained since it was wrongly considered unsafe.
  • Bug fix where the wrong artefact was chosen for databases with the same name but different database ids.
  • Create a 'synonym' for each of the metric cluster.core. cluster.read_replica. with the correct naming cluster.raft. and cluster.store_copy.

Packaging

  • Include a packaging information file under neo4j home

Misc

  • New function graph.propertiesByName() for retrieving properties of constituent graphs on composite databases.
  • Fix bug with map projection in Fabric, where the value of the map projection is returned outside a subquery. Fixes github issue https://github.com/neo4j/neo4j/issues/12939

5.1.0

Kernel

  • Range seek indexed searches will not match NaN, consistent with non indexed range searches
  • Improved performance for Text indexes using new default provider text-2.0.
  • Ability to specify an analyzer in full-text queries.
  • Fixes a bug that caused XML logging files not to be included in neo4j-admin server report.
  • CSV header for incremental import tool can now specify the value type for IDs in its group using the option id-type, e.g: id:ID(MyGroup){label:MyLabel, id-type: int}

Cypher

  • Various security fixes

    This PR is structured to be read either commit by commit, or by looking at the overall diff.

    The source code change is a one-liner. The rest of the PR is adding tests which explore the current behaviour, and make sure this one-liner correctly protects from Path traversal vulnerabilities.

    Please read below if you want to explore the PR commit by commit.

    • 52ca2b078ca2bff9b889e59602841ec09c2e507f Adds about ~1000 tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.

    • 88b492b544e375c1923c7dd86c33dcba3a699bb7 Adds a few tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.

    • 225d316e8ffca3d5c4ffa98127fe0463af539974 One-liner source code change, and fixes the incorrect tests results.

  • Fix issue where performance regressed for queries with "impossible predicates"

  • Update the list of valid timezones to include Europe/Kyiv, as per IANA 2020b.

  • Fix bug where a user could change the database topology with incorrect privileges.

  • Fix bug in pipelined runtime where some queries using AssertingMultiNodeIndexSeekOperator would fail incorrectly with Merge did not find a matching node.... For example in queries like UNWIND [0,1] AS id MERGE (n:A:B {id: id}), if there is a uniqueness constraint on the id property for both A and B labels.

  • Fix bug in pipelined runtime where AssertingMultiNodeIndexSeekOperator failed to perform locking index seeks. This could lead to failures when running concurrent transactions in queries like MERGE (n:A:B {id: x}) when we have a uniqueness constraint on id for both labels A and B.

  • Fixed bug where DROP DATABASE ... IF EXISTS and ALTER DATABASE ... IF EXISTS ... could give DatabaseNotFoundException when there exists a remote database alias with the name.

  • Fixed bug for having * and order by id in same RETURN clause

  • Allow setting/modifying TOPOLOGY without specifying PRIMARY (keeping the default / previous value)

  • Fix a bug where SHOW DATABASES may not include all servers for a database if the servers have the same value for server.bolt.advertised_address

  • Fix a bug with memory tracking in CALL IN TRANSACTION that could lead to an exception with the message "Expected non-negative long value ...".

  • Fix bug where columns could be swapped for UNION queries.

  • Fix a bug in pipelined runtime that can cause incorrect row ordering in queries that leverage order and contain an aggregation.

Clustering

  • Default database is created and allocated to initial members during dbms creation in a best effort way
  • Add server-side routing support for read queries.
  • Fix deadlock in RaftDrainingService area

Browser

  • Fix sysinfo depending on setting missing in 5.0
  • Improve messaging around startup of newly created database
  • fix northwind data not loading properly due to https redirect
  • support connecting to cluster members missing default database

Misc

5.0.0

Kernel

  • FULLTEXT indexes can include lists of strings.

  • Disable io limiters only on global shutdown

  • Introduces a faster variant of consistency check for relationship indexes.

  • Remove neo4j based profilers.

  • Change dbms.tx_state.memory_allocation to use ON_HEAP tx state by default

  • Removes the deprecated --check-label-scan-store, --check-relationship-type-scan-store and --check-property-owners options from consistency checker.

  • Pull Node::delete and Relationship::delete up into Entity

  • Remove deprecated procedure: db.indexDetails. Replaced by SHOW INDEXES YIELD *.

  • Remove deprecated procedure: db.schemaStatements. Replaced by SHOW INDEXES YIELD * and SHOW CONSTRAINTS YIELD *

  • Removal of some deprecated code

  • Remove redefinition of MaxInlineLevel

  • Remove deprecated procedure: db.createIndex. Replaced by CREATE INDEX command.

  • Remove deprecated procedure: db.createUniquePropertyConstraint. Replaced by CREATE CONSTRAINT ... IS UNIQUE command

  • Remove deprecated procedure: db.createNodeKey. Replaced by CREATE CONSTRAINT ... IS NODE KEY command

  • Fix bolt connections to respect dynamic setting of dbms.transaction.timeout

  • Fixes a bug in index transaction state where nodes/relationships created/changed in the same transaction could sometimes be returned several times for queries using composite indexes.

  • Fix false-positive "Potential direct memory leak"

  • Do not select legacy graph.db as the default if present

  • neo4j-admin import does not accept any existing database (even empty ones). Supply --force to remove any files prior to import

  • CSV Import: add support for array data types point[], date[], time[], datetime[], localtime[], localdatetime[], duration[]

  • Fixes an issue where under very specific circumstances an upgraded database could get into a state where it had a chance to assign non-unique transaction IDs to committing transactions

  • Fixes an importer issue where looking up an ID where there were multiple equal in different groups may result in ArrayIndexOutOfBoundsException.

  • Remove support for US/Pacific-New timezone. Existing values that use unsupported timezone will be interpreted as US/Pacific.

  • DatabaseTransactionEventListeners calls afterCommit/Rollback on all

  • Update Log4j to 2.15.0 to address CVE-2021-44228

  • Update Log4j to 2.16.0 CVE-2021-45046

  • Breaking change: Stop shading log4j and update the public logging API

  • Close kernel transaction on periodic transaction context commit

  • Fixes an issue in importer where large node IDs from CSV source that were additionally stored as node property may sometimes end up with the wrong value.

  • Fix an issue where ExpandInto can call get degrees on a dense node when DENY privileges are present. This causes a large amount of unnecessary permissions checks to occur.

    • Points are now incomparable, i.e. x < point and x > point evaluates to NULL for all x. For range seek queries please use point.withingBBox instead

      • Fix so that we get consistent results for range queries on durations regardless if there is an index or not.
      • Fix inconsistent behaviour: duration < duration and point < point evaluates to NULL instead of FALSE
  • Add isAvailable() to GraphDatabaseService

  • Restrict Node::getRelationships return types such that its resource can be released

  • Extend ResourceIterable such that it can release its resource

  • Remove obsolete NeoStoreCommand

  • Adds "element ID" accessors to the neo4j embedded java API:

    • Node#getElementId() and Relationship#getElementId()
    • Transaction#getNodeByElementId(String) and Transaction#getRelationshipByElementId(String) Element IDs are references to entities that, in addition to the internal entity ID, contains information about which database it belongs to.
  • Update relationship index schema syntax in logs and exception messages to align with cypher syntax i.e -[:REL {prop1, prop2}]- becomes ()-[:REL {prop1, prop2}]-()

  • Reduces memory overhead of temporarily buffered deleted internal record IDs

  • Ensure resources closed when using ResourceIterables and ResourceIterators

  • Remove lucene+native-3.0 index provider. It is replaced by TEXT, RANGE and POINT indexes.

  • Fixes an issue cleaning up registered metrics after a failure to start a database, preventing it from being start after that point within the same dbms session.

  • Remove legacy dbms.directories.tx_log setting

  • Remove dbms.index.default_schema_provider setting and associated SchemaIndex enum. Index provider can be selected through the OPTIONS clause for CREATE INDEX/CONSTRAINT

  • Fixes a bug in neo4j-admin report command where using the heap classifier would make the command fail with Error: Failed to write heapdump.hprof

  • CREATE DATABASE accepts storeFormat in OPTIONS clause. The option controls the store format of a newly created database, if using the command to connect a loaded database the option will have no effect.

  • Remove support for the USING PERIODIC COMMIT query hint. The recommended replacement is CALL {...} IN TRANSACTIONS

  • Removed the following deprecated procedures (replaced by SHOW TRANSACTIONS and TERMINATE TRANSACTIONS):

    • dbms.listTransactions()
    • dbms.killTransaction(<tx-id>)
    • dbms.killTransactions(<tx-ids>)
    • dbms.listQueries()
    • dbms.killQuery(<query-id>)
    • dbms.killQueries(<query-ids>)
  • Much faster rebuild of relationship group degrees store

  • Update PublicApi so that PathExpander returns ResourceIterable

  • neo4j-admin import respects dbms.logs.debug.format setting

  • Update classification of Terminated and LockAcquisitionTimeout status codes

  • Always attempt to create database constraints in system graph during upgrade.

  • Escape character in config path parsing are now ignored. E.g setting dbms.directories.data=\test dir\, the \t is no longer interpreted as a tab character. Mostly relevant for paths on Windows

  • Advertised address settings will no longer inherit port from its corresponding listen address setting when unspecified. Instead default value for each affected setting will be used.

  • The old parameter dbms.config.strict_validation, which was false by default, has been replaced by server.config.strict_validation.enabled, which is true by default

  • Removes dbms.allow_upgrade and dbms.record_format settings. Changes to the store that used to be triggered by setting dbms.allow_upgrade=true are now classified as either store upgrades or store migrations. Store upgrades (small, constant time changes) are done automatically on start up and store migrations must be done with the new migrate-store admin command.

    dbms.record_format had two usages. First as the format used for newly created databases, that has been replaced by the db.format. Secondly as the format to use when upgrading the database, changing format family is classified as a migration and can now be done using the migrate-store admin command.

  • Remove BTREE index type. BTREE is replaced by RANGE, TEXT and/or POINT indexes. Make sure to replace or remove any BTREE indexes and constraints backed by BTREE indexes before migrating to 5.0. See the migration guide for more information.

  • Strict config validation (managed by server.config.strict_validation.enabled) no longer allows settings to be declared multiple times in neo4j.conf, with the exception of server.jvm.additional.

  • Core API blocked from creating composite point indexes. Only single-property point indexes are supported

  • Closing relevant CSV metrics writers when database is shut down

  • Fixes a bug in import to high_limit format where an interrupted import could fail on being resumed with Illegal secondary record reference

  • The type of <prefix>.vm.pause_time metric is changed from gauge to counter.

  • Consistency checker now checks id files for nodes, relationships and properties. Any used record with id up for reuse will result in a report: The referenced record is in use but the id is up for reuse in the id file.

  • Fixes a bug where nodes not having the required property for a node key constraint could be created during the creation of the constraint. They would silently violate the constraint and leave the database with a non-fulfilled node key constraint

  • Setting namespaces validation

  • The DbmsInfo class accessible through the org.neo4j.kernel.extension.context.ExtensionContext does not contain the OperationalMode (core, read replica, single) anymore. Extension users can resolve the dependency to HostedOnMode if they want to find the allocation mode of a database at a particular instance.

  • Update org.neo4j.kernel.impl.coreapi.schema.PropertyConstraintDefinition#toString to output the latest Cypher syntax for constraint creation.

  • Update javadoc for IndexDefinition to not assume how index was originally created. Nothing has changed in terms of implementation.

  • Changes to output from IndexDefinition#toString. "UNIQUE" and "TOKEN" is not included in description of "type" anymore. Type will be only LOOKUP, FULLTEXT, RANGE, TEXT or POINT.

  • New index types 'RANGE' and 'POINT' are now fully supported. 'RANGE' indexes support exact lookup and range type queries over all value types and is very similar to the removed 'BTREE' type. 'POINT' indexes support bounding box queries and exact lookup for point values. See documentation for more information.

  • Introducing dbms.checkConfigValue(setting, value) (enterprise,admin) prodcedure for checking if a given value is valid for provided setting. Extending existing procedure dbms.listConfig result with additional information

  • code review and more accurate documentation of the Traversal API

    documentation: https://github.com/neo4j/docs-java-reference/pull/39

  • Clean usage of deprecated dbms.read_only in default neo4j.conf files.

  • Move systemdb.secrets.* settings into dbms.security.*.

  • More user-friendly exceptions when entities not found by elementId.

  • Fixes a bug where some transaction objects could be leaked instead of being released properly.

  • Remove deprecated procedures: db.indexes and db.constraints

  • Greatly improves worst-case performance of scanning for deleted IDs to be reused for new records

  • Changing the default transaction log retention from 7 days down to 2 days. Controlled by setting db.tx_log.rotation.retention_policy

  • Make metrics namespaces mandatory.

  • Jvm additional setting should not split inside quoted values

  • Fixing an issue where 'CALL { ... } IN TRANSACTIONS' could leak inner transactions when the outer transaction was terminated during execution, e.g by timeout

  • Update Coordinate class to expose coordinates as array of primitives instead of list of objects

  • Renaming Neostore records header in diagnostics logging to Metadata

  • Removal of dbms.allow_single_automatic_upgrade setting

  • Fix node degree calculation when relationships are removed in the same transaction

Cypher

  • Allow underscore between digits in number literals.

  • add support for WHERE clauses inside relationship patterns

  • Bug fix: Neo4j now also accepts datetime expressions including an offset of times immediately after switching from summer time to winter time.

  • update to driver version 4.4.0

  • Fix bug in cypher shell where it would fail to start in windows.

  • update to driver version 4.4.1

  • Fix unnecessary Eager planned between MATCH and MERGE on different labels.

  • Fix bug where planner would fail to find a sorted plan to fulfil order on two variables including aggregation, which would result in issuing an "Expected a sorted plan" error.

  • Remove deprecated security procedures:

    • dbms.security.createUser. Replaced by CREATE USER
    • dbms.security.deleteUser. Replaced by DROP USER
    • dbms.security.suspendUser. Replaced by ALTER USER
    • dbms.security.activateUser. Replaced by ALTER USER
    • dbms.security.changeUserPassword. Replaced by ALTER USER
    • dbms.security.changePassword. Replaced by ALTER CURRENT USER SET PASSWORD
    • dbms.security.createRole. Replaced by CREATE ROLE
    • dbms.security.deleteRole. Replaced by DROP ROLE
    • dbms.security.addRoleToUser. Replaced by GRANT ROLE
    • dbms.security.removeRoleFromUser. Replaced by REVOKE ROLE
    • dbms.security.listUsers. Replaced by SHOW USERS
    • dbms.security.listRolesForUser. Replaced by SHOW USER
    • dbms.security.listRoles. Replaced by SHOW ROLES
    • dbms.security.listUsersForRole. Replaced by SHOW ROLES WITH USERS
  • Upgrade to Scala 2.13

  • Neo4j now utilises range indexes when planning queries.

  • The function distance has been been replaced by point.distance

  • Removed the commands for dropping indexes and constraints by schema.

    • DROP INDEX ON :Label(prop) - Replaced by DROP INDEX name.
    • DROP CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY - Replaced by DROP CONSTRAINT name.
    • DROP CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE - Replaced by DROP CONSTRAINT name.
    • DROP CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop) - Replaced by DROP CONSTRAINT name.
    • DROP CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop) - Replaced by DROP CONSTRAINT name.
  • Fixed a bug where using values returned from a procedure would cause a type error like Type mismatch: expected Float, Integer or Duration but was Number.

  • Removed the BRIEF, VERBOSE and EXISTS keywords for SHOW INDEXES and SHOW CONSTRAINTS.

    • SHOW INDEXES BRIEF - Replaced by SHOW INDEXES.
    • SHOW INDEXES VERBOSE - Replaced by SHOW INDEXES YIELD *.
    • SHOW CONSTRAINTS BRIEF - Replaced by SHOW CONSTRAINTS.
    • SHOW CONSTRAINTS VERBOSE - Replaced by SHOW CONSTRAINTS YIELD *.
    • SHOW EXISTS CONSTRAINTS - Replaced by SHOW EXIST CONSTRAINTS.
    • SHOW NODE EXISTS CONSTRAINTS - Replaced by SHOW NODE EXIST CONSTRAINTS.
    • SHOW RELATIONSHIP EXISTS CONSTRAINTS - Replaced by SHOW RELATIONSHIP EXIST CONSTRAINTS.
  • Fixes exception "org.neo4j.exceptions.CypherTypeException: Property values can only be of primitive types or arrays thereof" thrown when concatenating a list with an empty list.

  • Auto completion of commands in Cypher Shell.

  • Fix a bug where, in rare cases, matching with an optional match on the same thing as a preceding match would fail during planning.

  • Update to driver version 4.4.2

  • Fix a bug in the heap memory tracking of intermediate results in the pipelined runtime, that could lead to underestimation of the heap usage for certain queries, and potentially trigger JVM out-of-memory errors for queries consuming too much memory.

  • Fix a bug where, in rare cases, reusing a variable that had previously been used as a path variable would fail during planning.

  • Fix a bug where errors could be masked when using IS NULL or IS NOT NULL

  • Fix a bug that could trigger a null pointer exception in the slotted and pipelined runtimes for certain query plans where an OPTIONAL MATCH with a predicate containing OR was planned with a Union operator.

  • During a rolling upgrade from 4.1 or earlier, roles don't have the privilege required to execute UDFs.

    These privileges are added to the PUBLIC role after the upgrade is done, but not during compatibility mode.

    This is the error when trying to execute a UDF:

    Executing a user defined function is not allowed for user 'XXX' with roles [PUBLIC, architect].
    

    This privilege is now in the list of temporary privileges which take effect during upgrades.

  • Improved performance of queries containing UNWIND and CALL IN TRANSACTIONS

  • Fix a memory leak of the runtime transactional context into the query plan cache

  • Support new syntax for expressing node labels. New operators include:

    • &: logical AND
    • |: logical OR
    • !: logical NOT
    • %: A "wildcard", meaning "any label" (in Cypher this translates to size(labels(n)) > 0

    Operators can be combined to form assertions on node labels in MATCH clauses, e.g. MATCH (n:A|(B&!C)).

  • Implied grouping keys are no longer supported. Only expressions that do not contain aggregations are grouping keys.

  • "Expose driver logs in Cypher Shell, with the new --log parameter and :log command.

  • Patterns like CREATE (a {prop:7})-[r:R {prop: a.prop}]->(b) where a variable introduced in the pattern is also referenced from the same pattern are no longer supported.

  • If a query was accessing values via the index (prop[...]), the planner would always assume that these were dynamic properties. and plan an Eager operator if there may have been a read-write-conflict. This is now changed if the index access is using literals like prop[0] or prop['key'].

  • The deprecated ON DEFAULT GRAPH and ON DEFAULT DATABASE syntax for privileges are no longer supported, use ON HOME GRAPH and ON HOME DATABASE instead.

  • Fix bug in aggregations with LIMIT where query would fail with an array copy out of bounds error.

  • Represent empty column headers with empty string in LOAD CSV.

  • Removal of the old parboiled parser for Cypher. This has been fully replaced by the new Javacc parser.

  • Support for impersonation in Cypher Shell.

  • Fixed issue where query analysis and planning was not terminated when transaction was terminated.

  • Removed the procedures for creating and dropping fulltext indexes.

    • db.index.fulltext.createNodeIndex() - Replaced by CREATE FULLTEXT INDEX ....
    • db.index.fulltext.createRelationshipIndex() - Replaced by CREATE FULLTEXT INDEX ....
    • db.index.fulltext.drop() - Replaced by DROP INDEX ....
  • Removed the deprecated syntax for creating indexes and constraints.

    • CREATE INDEX ON :Label(prop) - Replaced by CREATE INDEX [name] FOR (node:Label) ON (node.prop).
    • CREATE CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE (node.prop1,node.prop2) IS NODE KEY.
    • CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS UNIQUE.
    • CREATE CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop) - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL.
    • CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS NOT NULL - Replaced by CREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL.
    • CREATE CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop) - Replaced by CREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL.
    • CREATE CONSTRAINT ON ()-[r:R]-() ASSERT r.prop IS NOT NULL - Replaced by CREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL.
  • Fixed a bug where matching on the same variable multiple times would trigger an exception during planning or produce incorrect results.

  • SHOW PRIVILEGES will now display the home database as 'HOME' instead of 'DEFAULT'

  • Fix bug where you could get an error message like Cannot put key x before first key y, for example in queries using SelectOrSemiApply or ConditionalApply and Limit.

  • Faster execution of queries of the form MATCH (n)-[*..5]->(m) RETURN DISTINCT m, that is queries where you are only interested in the distinct end-nodes of a pattern and do not require all relationships to be traversed.

  • Fix cache properties invalidation when row does not match the predicate in optional expand

  • Fix a rare bug where the output rows of some queries would be unordered, even though an ORDER BY had been correctly placed, see: https://github.com/neo4j/neo4j/issues/12840

  • Fix bug where range index seeks of array types always returns empty result. For example in queries like MATCH (n:Node) WHERE n.indexedProperty > [0] RETURN n;.

  • The aliases column in SHOW DATABASES should be CTList(CTString)

  • Fix error of the kind arraycopy: last source index 1 out of bounds for long[0]

    which could occur when a CartesianProduct was planned under a NestedPlanExpression in pipelined runtime.

  • Fixed an error due to which very particular queries with the same predicate on both sides of an OR expression could not be planned.

  • Pattern expressions for checking existence are no longer supported, except for use in WHERE clauses. Use a pattern comprehension instead.

  • Use lists that are stored in properties as input to toIntegerList, Github issue: opencypher/opencypher#526

  • Fix an issue with user-defined aggregation functions where the result-method could sometimes be called twice on the same row (incorrectly assuming the implementation to be idempotent)

  • Remove support for existence check of properties using exists(). The syntax exists(property) has been replaced by property IS NOT NULL.

  • Add ability to yield and filter the output from TERMINATE TRANSACTIONS. This will not affect what is terminated, only what is returned afterwards. TERMINATE TRANSACTIONS does not allow just filtering without YIELD, so TERMINATE TRANSACTION 'txId' WHERE message <> 'Transaction terminated.' is not valid but TERMINATE TRANSACTION 'txId' YIELD * WHERE message <> 'Transaction terminated.' is.

  • Usages of GetDegree wasn't obvious in the plan description. Now instead

    of size([pattern]) usages of GetDegree will be rendered with getDegree([pattern]).

  • Update driver to 4.4.5

  • Unaliased expressions are no longer supported in subquery RETURN clause. Use RETURN <expression> AS name.

  • Updated the output column set for SHOW TRANSACTIONS. Removed column allocatedBytes as it was not tracked. Added columns currentQueryStartTime, currentQueryStatus, currentQueryActiveLockCount, currentQueryElapsedTime, currentQueryCpuTime, currentQueryWaitTime, currentQueryIdleTime, currentQueryAllocatedBytes, currentQueryPageHits, and currentQueryPageFaults for the current query in the transaction (previously part of dbms.listQueries).

  • Cypher now supports relationship type expressions like MATCH ()-[r:!A&!B]->().

  • Before this change, pattern expressions in boolean contexts were marked as deprecated. This deprecation was removed.

  • Fixed bug where eagerness was handled incorrectly for overlaps in labels for predicates.

  • A new function that returns wether a value is or is not a NaN value

  • Decouple the EXECUTE and EXECUTE BOOSTED privileges to remove the implicit EXECUTE from the EXECUTE BOOSTED privilege.

  • Add new operator Trail used for solving quantified graph patterns.

  • Add columns creationTime, lastStopTime, lastStopTime to the column set for SHOW DATABASES.

  • Introduced the COUNT{} expression to replace the deprecated uses of size() with a relationship pattern

  • The octal syntax 0123 and hexadecimal syntax 0X123 is no longer supported. Use 0o123 and 0x123 instead.

  • discontinue support for remaining patterns with repeated relationship variables such as `MATCH ()-[r]-()

    RETURN [ ()-[r]-()-[r]-() | r ] AS rs`

  • Discontinue support of coercion of list to boolean such as WHERE [1, 2, 3]. Please use NOT isEmpty(...) instead.

  • Fixed Comparison method violates its general contract error during planning.

  • The commands SHOW TRANSACTIONS and TERMINATE TRANSACTIONS can now be used together in a single query. For example, terminating all of Alice transactions:

    SHOW TRANSACTIONS YIELD transactionId AS txId, username AS user
      WHERE user = 'Alice'
    TERMINATE TRANSACTION txId YIELD message
    RETURN txId, message
    
  • Github issue: neo4j/neo4j#12887, fix an issue with ltrim, rtrim, and trim.

  • Fix potential Expected as string value 'substring', but got NO_VALUE'

    error when the output of reduce is used as input to another function.

  • New surface to administer fabric databases, now named “COMPOSITE DATABASESâ€�. Configuration settings have been removed and Composite Databases are now administered via Cypher commands.

  • Fixed rare bug where self reference in equality (´WHERE n:L AND n.p = (n.p = n.p)´) caused stackoverflow error.

  • slotted runtime is now the new default community runtime.

  • Remove dbms.security.oidc.<provider>.redirect_uri setting which has been deprecated and is no longer required.

  • Removed the ability to change Cypher Versions by prepending queries with "CYPHER X.Y" or using the config setting "cypher.default_language_version".

  • Enable use of environment variable NEO4J_ADDRESS to specify connection address in Cypher Shell.

  • Updated output columns for SHOW INDEXES and SHOW CONSTRAINTS:

    • Removed uniqueness column from SHOW INDEXES.
    • Added column owningConstraint (string) to SHOW INDEXES, giving the name of the connected constraint (or null when the index does not belong to any constraint).
    • Changed column ownedIndexId (long) to ownedIndex (string) for SHOW CONSTRAINTS, giving the name of the backing index (or null when not index backed).
  • Adds DEALLOCATE DATABASES FOR SERVER, DROP SERVER, and SHOW SERVERS commands for managing server instances.

  • null values will now match the ELSE clause in CASE expressions

  • Fix bug in Reduce Expressions and List comprehensions hiding variables that should be in scope https://github.com/neo4j/neo4j/issues/12868

  • Logical plans where the same variable is introduced in multiple leaves can cause trouble with inserting eager, which might make the query end up with incorrect results. Before this fix we assumed that a variable was stable as long as it was stable on one leaf. Fix: A variable should be considered unstable if it is both unstable and stable. Fixes github issue https://github.com/neo4j/neo4j/issues/12878

  • Deprecate the use of nodes/relationships on the RHS of a Set Clause e.g MATCH (n)-[r:REL]->(m) SET n=r should now be MATCH (n)-[r:REL]->(m) SET n=properties(r)

  • Upgrade Apache Shiro from 1.8.0 to 1.9.1. This version includes fixes for CVE-2022-32532.

  • Add new operators, DirectedAllRelationshipsScan and UndirectedAllRelationshipScan to Cypher.

    Benchmarks:

    • #c5f015 2.12x generatedmusicdata_read Q35
    • #c5f015 3.11x musicbrainz Q25
    • no regressions, there aren't many queries where this would be a candidate though. Typically queries use a relationship type and a RelationshipTypeScan should in those cases be more efficient.
  • Fix a bug where SHOW TRANSACTIONS would fail when transaction metadata contains types that cannot be serialised to a property (e.g. List)

  • Fix bug with undirected relationship scans and self-loops

  • Fix overflow in resource manager. Users could get errors like java.lang.IllegalArgumentException: Expected positive long value, got -8589934576 because of an overflow when trying to grow the number of tracked resources.

  • Add store column to SHOW DATABASES output

  • Disconnect driver session on exit in Cypher Shell.

  • It is not allowed to in one clause mix label expressions containing non-GPM symbols such as ':' together with GPM-specific symbols such as '(', ')', '&', '!'.

  • Add parameter --uri and environmental variable NEO4J_URI as alternative ways to specify connection address.

  • fix issue where ExpandInto could return the wrong result

  • All notifications should have classification ClientNotification. In this PR we fix some of the current notifications which had severity ClientError or DatabaseError .

  • introduce Infinity, Inf and NaN as Float literals

  • When debug logging is enabled, LdapRealm can attempt to directly log

    Neo4jPrincipal objects resulting in logging like org.neo4j.server.security.auth.Neo4jPrincipal@f1d6260f. Fix it to log the username as expected.

  • Adds ENABLE SERVER command for managing servers.

  • Updates severity on some of the existing notifications. Also, updates status code accordingly (removing Warning from the name if it now has severity Information)

  • Deprecate runtime=interpreted

  • Don't throw when seeking the index for values that cannot be indexed.

  • The deprecated username field has been removed from the security and query logs.

  • Adds RENAME SERVER command for managing servers

  • Adds TOPOLOGY option to CREATE and ALTER DATABASE to specify desired count or primary and secondary servers per database.

  • Adds REALLOCATE DATABASES and ALTER SERVER command for managing servers

Clustering

  • Fixes an issue with token creation (labels, property keys and relationship types) in clustering where internal IDs of created tokens may not be unique, i.e. multiple members could end up creating tokens with the same internal IDs.

  • dbms startup is now asynchronous, which mean that after system database is started the bolt port opens, and other databases start asynchronously and may not be available immediately.

  • Track size of log entries to avoid prefetch buffer exceeding memory constraints.

  • Remove requirement to have multi-DC licence to access multi-DC features.

    Ticket: https://trello.com/c/ECvnAxM4

Packaging

  • Neo4j and cypher-shell deb installers' dependencies changed to be compatible with Oracle java 17.

    • Can no longer use headless JRE due to a circular dependency bug in OpenJDK17 on Ubuntu 18.04
  • cypher-shell java 17 dependency changed to non-headless jre to be compatible with zulu java

  • Fully removed init.d support for 5.0 in the rpm and deb packages. Users must use systemctl and the neo4j.service file installed by the packages. For example sudo systemctl start neo4j.

Security

  • Update jackson-databind from 2.13.1 to 2.13.2.2 (and thus also com.fasterxml.jackson.* from 2.13.1 to 2.13.2), to address CVE-2020-36518
  • Upgraded jetty to v9.4.48 in order to mitigate CVE-2022-2047 and CVE-2022-2048

Browser

  • Touch up guides ✨styling✨
  • Fix cluster detection on neo4j 4.3+
  • Fix bug with incorrect version number & add git hash to overview in stand-alone deployment
  • Zoom to cursor on scroll in visualization
  • Make sure editor displays full database name
  • Zoom graph to fit after initial visualization animation
  • Clear credentials in connection form on disconnect
  • Update :help articles on INDEX & CONSTRAINT
  • Fix credential timeout without initial user interaction
  • Fix links not being blue and not being highlighted in the sidebar

Misc

  • Remove Legacy HTTP API (where endpoints begin with /db/data/transaction/). Please use the endpoints that include the database name (e.g. /db/neo4j/tx/commit).
Clone this wiki locally