Release Date: 18 July 2022
Neo4j 4.4.9 is a maintenance release with many important improvements and fixes.

Kernel

  • 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

Cypher

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

  • Do not plan distinct unions for overly large type disjunctions to avoid stack overflow errors

  • Fixes a bug where routing table requests may have incorrectly returned a DatabaseNotFound exception during an upgrade from 4.3 to 4.4


    In 4.4, a :DatabaseName label was added to both existing :Database nodes, and also alias nodes. The CommunityTopologyGraphDbmsModel uses the :DatabaseName label in its CoreAPI queries when attempting to look up a DatabaseReference.Internal for a given string database name.

    The issue is that during a rolling upgrade from 4.3 to 4.4, on instances already running 4.4 the model code has been changed and the routing table procedure has been updated to use it but the :DatabaseName label has not yet been created because users have not completed their upgrade or called dbms.upgrade().

    This means that although a :Database node with the correct name exists, the model will return Optional.empty() instead of a database reference and the end user will see a DatabaseNotFound error.

    This PR fixes this by updating the model logic to also consider :Database nodes without the :DatabaseName label, should the correct name property match.

    Thanks to @mnd999 for noticing the issue and pairing on it.

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

  • OuterHashJoin gives wrong result if the joining nodes are from the outer apply. Fix: OuterHashJoin can only join on nodes which are introduced in the leaves of OuterHashJoin. Github issue https://github.com/neo4j/neo4j/issues/12836

  • Fix issue in planning a query with multiple repeated predicates in the WHERE sub-clause, reported in https://github.com/neo4j/neo4j/issues/12877

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

  • 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

  • Fix bug where, when there are two indexes on the same property, the planner would sometimes try to get a value from an index that doesn’t support it

Packaging

  • Changed neo4j.service behaviour to stop neo4j getting stuck in an endless restart loop when neo4j consistently errors on startup (for example if the neo4j.conf is misconfigured).

Causal Clustering

  • Fixing that a database can get stuck in store copying if it is stopped during store copy.

  • Fixing the "There is nothing to send." error occuring in some scenarios at the end of a store copy.

Browser

  • Modernize background queries & remove use of deprectated syntax

  • Always send transaction metadata on cypher queries

  • Read cluster role from SHOW DATABASES rather than deprecated dbms.cluster.role

  • Make sure proper metadata is passed along with queries

  • Handle upcoming setting renames in neo4j 5.0

  • Fix PNG exports font

  • Use SHOW TRANSACTIONS instead of dbms.listQueries in :queries

  • Re-add metrics for successful queries

  • (*) in property panel now shows node count, rather than total label count

  • Add url param to preselect in connect frame

Docker

Misc

  • Stop leaking passwords to the terminal when standard out is redirected. In situations like cypher-shell -u neo4j -f statements.cypher > out.txt.

  • Fixed an edge case where a None.get exception was thrown when referencing a fabric graph inside a subquery, Github issue: neo4j/neo4j#12886

Changelog and Documentation

4.4 Changelog.
4.4 Operations manual.