Releases: memgraph/memgraph
v2.17.0
Memgraph v2.17.0 - May 22, 2024
Breaking changes
-
The flag
--replication-restore-state-on-startup
is now set totrue
by default. #2031 -
Memgraph will now fail to start if the Bolt server cannot be created, ensuring a dedicated port is available. Failures in creating the WebSocket and HTTP servers will no longer crash Memgraph but will be logged more effectively. If the WebSocket server fails, the
LoggerSink
will not be added to it. Additionally, Memgraph will crash if the authentication folder cannot be created. #2017
New features and improvements
-
Added functionality to create a user or role only if it does not already exist. This update prevents errors when creating a user or role that already exists. #2032
-
Introduced Docker images specifically tailored for debugging, with Memgraph built in the
RelWithDebInfo mode
. These containers come equipped with essential debugging tools such asperf
,gdb
, andpgrep
, along with other useful apt packages. #2047 -
Added the capability to count the number of hops in queries for each expansion. Each unit of work, including filtering on edge types, edge properties, or visiting already processed nodes, is counted as a hop. The total number of hops is returned in the number_of_hops field in the query summary. #1935
Bug fixes
-
Data instances now use
0.0.0.0:replication_port
for creating the replication server instead of the instance's IP address. This update ensures that the replication server starts correctly. #2038 -
The replication stream is now handled as a local variable for transactions, preventing assertion failures during recovery. #2018
-
Implemented changes to discard leadership requests on follower instances. This update ensures that followers no longer accept user actions intended for the leader. #1932
-
Fixed a NuRaft launcher race condition. The raft server is now considered successfully created once it behaves as a leader. #2040
-
Introduced a new small vector datatype (
16B
) with a small buffer optimization. This new datatype is used forVertex
to have smaller labels collection and smaller edge collections, resulting in a24B
reduction perVertex
. #1970
v2.16.1
Memgraph v2.16.1 - May 15, 2024
New features and improvements
-
Added exponential backoff to the coordinator force reset function. This improvement helps reduce pressure on logs and allows time for machines to come back online by implementing a backoff strategy that starts at 1 second and increases to 5 seconds, followed by resets every 5 seconds. #1996
-
Upgraded the Clojure client dependencies. Memgraph now uses
gorillabs/neo4j-clj
version 5.0.0 for Jepsen testing, Clojure version 1.11.2, andneo4j-harness
version 5.10.0. #1987 -
Added timezone support to Memgraph with the new zoned datetime type. This feature allows you to represent points in time with a defined timezone, enabling you to work with temporal data from different locales and easily migrate datasets with zoned values. #1866 #1976
-
Added
last_succ_resp_ms
and coordinator health status to the output of theSHOW INSTANCES
command. This update allows users to see the elapsed time in milliseconds since the last successful response from instances to the leader's health ping, as well as the health status of the coordinator. #1985 -
Added environment variables for HA Kubernetes cluster setup. This update allows starting the coordinator and data instances using environment variables, enhancing flexibility and ease of configuration for high availability clusters in Kubernetes environments. #1951
-
Added an option to register a replica after the main instance has already been registered in a high availability (HA) setup. This feature enhances the flexibility of replica management in HA configurations. #1911
-
Improved the output of the
SHOW INSTANCES
command. Changes include renamingraft_socket_addr
tocoord_server
andcoordinator_socket_addr
tomgmt_server
, and adding the Bolt server to the output. #1965
Bug fixes
-
Resolved an issue in the automatic index creation process where transactions creating multiple entities simultaneously could lead to unexpected behaviors. This patch ensures reliable auto index creation when dealing with multiple entity creations in a single transaction. #1926
-
This fix ensures robust index rewriting and prevents potential core dumps in situations involving pattern comprehension within queries. Previously, the application could fail when using label or property-label indices with pattern comprehensions. #1968
-
Addressed a flaw where skipped timestamps were not finalized on replicas, leading to inaccuracies in the oldest active timestamp information provided to the GC. This fix ensures all skipped timestamps are now marked as finalized, allowing the GC to accurately manage memory and clear Deltas as needed. Additionally, the RPC session buffer now resets to a maximum of 4 MiB post-session execution, improving memory management. #2003
-
Fixed the DNS resolution capability for endpoint parsing. This update resolves issues with DNS resolution when registering replicas and/or coordinator instances. #2004
-
Replicate only durable commits to replicas during recovery. This ensures that during the recovery process, replicas only receive commits that have been fsynced on the main node, preventing the replication of non-durable data and improving overall system consistency. #1991
-
Expose coordinator's internal functionality to manage the cluster. Users can now execute actions such as
DEMOTE INSTANCE
andFORCE RESET CLUSTER STATE
, which were previously internal operations. These functionalities allow users to reset cluster state and promote their chosen instance to be the MAIN. #1981
v2.16.0
Memgraph v2.16.0 - Apr 10, 2024
New features and improvements
- Added a new command,
DROP GRAPH
, that deletes data in the database in an efficient manner. #1723 - Fixed a bug that caused the incorrect coordinator to become the leader due to missing cluster state data. #1897
- Added support for edge type indices to optimize query performance on graphs. #1542
- Added automatic index creation for node labels and edge types. Two new configuration flags control this feature for labels and edge-types automatically encountered by the database. #1841
- Added support for
bolt+routing
when connecting to a cluster of Memgraph instances. #1796 - Expanded the
min()
andmax()
functions to support temporal types, improving date and time manipulation capabilities. #1790 - Renamed HA flags
--raft-server-id
to--coordinator-id
,--raft-server-port
to--coordinator-port
,--coordinator-server-port
to--management-port
to improve cluster setup. #1820 - Reduced the size of the Delta from 80B to 56B #1747 - Extended the C/C++ API to support query execution. #1773
- Updated queries used for registering replication instances and coordinator instances. #1809
- ¸Introduced the lock on operations such as
SETTING INSTANCE
to MAIN,REGISTER INSTANCE
,UNREGISTER INSTANCE
, andFAILOVER
for better control of the cluster state. #1819 - When doing failover, the Coordinator chooses a new MAIN by comparing which
memgraph
database is up-to-date. #1729 - Changing instance's replication role is now backed by Raft. #1728
- If REPLICA diverges from MAIN, MAIN will automatically initiate a forced data reset on REPLICA. #1777
- User can create, set, or remove labels using property values. #1762
- Introduced the ability to fetch edges based on edge ID. #1808
- Added support for pattern comprehensions when used in
WITH
andRETURN
clauses. #1827 #1874 #1903 - Introduced a force reset feature to revert the cluster to its pre-operation state in case of failure. #1836
Bug fixes
- Added an early exit when doing
OR
filter expressions if the first expression evaluates totrue
. #1738 - Configuration settings are now properly verified to ensure that periodic snapshots are only taken when appropriate. #1835
- Improved replication stability in high-availability (HA) clusters to handle situations where the REPLICA node is several epochs or commits behind the MAIN node. #1743
- Fixed a bug that could occur when shutting down the Raft server. Initializing Memgraph enterprise instance without specifying any flag used in high-availability is now allowed. #1823
- Query allocations now use a single allocation subsystem rather than two. Memory no longer horded by bolt workers. #1801
- The
schema.node_type_properties()
andschema.rel_type_properties()
functions now work as equivalents to Neo4j's functions. #1718 - Merging node or edge with null property now raises an error. #1810
- When adding coordinators in cluster, action will fully succeed or fail before coordinators returns result from query. #1792
- Fixed a bug responsible for the incorrect edge count when a graph was dropped using
DROP GRAPH
. Now, accurate edge counts are displayed in theSHOW STORAGE INFO
output. #1921
v2.15.2
v2.15.1
Memgraph v2.15.1 - Mar 27, 2024
New features and improvements
-
Introduced a new flag,
storage-delta-on-identical-property-update
, which allows for the optional creation of a delta object when a property is updated with the same value. #1791 -
Added durable text indices and [basic text search](/configuration/text-search capabilities. #1603 #1739
-
Removed support for Debian 10, Fedora 36, Ubutnu 18.04. Added support for Debian 12, Debian 12 ARM, Fedora 38, Fedora 39 and Rocky 9.3 Linux distributions #1814
Bug fixes
v2.15.0
Memgraph v2.15.0 - Feb 28, 2024
New features and improvements
-
Enhanced security by integrating a password hashing algorithm into authentication durability mechanisms, alongside existing password hashes. Passwords hashed with SHA-256 will be rehashed with salt upon validation for improved security. #1644
-
Introduced a function to calculate the size of properties (in bytes) within Memgraph storage. #1557
-
The process of demoting old MAIN to REPLICA should eventually succeed fully without any issues. 1711
-
The coordinator now aligns REPLICA to consistently listen to the correct MAIN. 1711
-
Updated the way that Better auth user/role handling. #1699
-
Improved memory handling of Deltas. The value for Deltas is changed from 104B to 80B. #1688
-
Added support for query parameters in LOAD CSV. This enhancement allows users to dynamically specify file paths in the LOAD CSV clause. Executing queries like
LOAD CSV FROM $file AS row CREATE (:Node { column: row[0] });
is now possible, where$file
is a variable representing a valid path to a CSV file. #1653 -
Added support for query parameters in RETURN LIMIT. Users can now specify the limit in a RETURN statement through a parameter, such as
MATCH (n) RETURN n LIMIT $limit;
. This addition makes it easier to dynamically adjust the number of results returned by a query. #1654 -
[Enterprise Ed.] Introduced an experimental feature flag for system replication (
--experimental=system-replication
). This new flag enables both authentication and multi-tenancy replication. #1702 -
Introduced enhancements for multi-tenancy support. The new
SHOW DATABASE;
command reveals the currently used database, returningNULL
if none is active.SHOW DATABASES;
has been updated to display only the existing set of multitenant databases. #1550 -
When using replication, flag
--replication-restore-state-on-startup
needs to be set totrue
. #1707 -
Introduced enhancements for multi-tenancy support. The new
SHOW DATABASE;
command reveals the currently used database, returning NULL if none is active.SHOW DATABASES;
has been updated to display only the existing set of multitenant (MT) databases. #1550 -
REPLICAs are now configured to listen exclusively to a single MAIN instance. In high availability (HA) setups, the coordinator now manages the assignment of REPLICA instances. For configurations using replication without HA, the MAIN instance directly communicates its ID to each REPLICA. #1674
-
Added coordinator instance for managing HA cluster. #1608
-
Added support for restart of replication instances. MAIN can restart as MAIN and as REPLICA depending on the cluster state in the moment of restart. REPLICA always stays REPLICA. #1672
-
Added automatic failover from a single coordinator. #1646
-
Added flags
--raft-server-id
and--raft-server-port
for creating coordinators. #1687 -
When using an authentication module, the module needs to return. That role is the only way to define privileges for the connection. Improved the authentication module with better user and role handling mechanisms. Key enhancements include:
-
Elimination of automatic user creation by the auth module - Introduction of checks to determine the presence of users or the use of an auth module before proceeding
- Support for roles with database access
- The
authenticate()
function now returns a user or role - When an auth module is in use, no data is locally saved - AuthChecker now generates
QueryUser
(user or role), which is responsible for actual authorization checks - Deprecated the following configuration flags:
--auth-module-create-missing-user
,--auth-module-create-missing-role
,--auth-module-manage-roles
#1699
Bug fixes
-
Fixed an issue with the memory tracker not accurately counting memory usage after exceeding the memory limit. - #1651
-
Resolved an issue that led to a crash when an unbound variable was used inside a subquery. - #1710
-
Fixed deadlocks in jemalloc caused by the memory tracker. - #1715
-
Fixed an issue in the Breadth-First Search (BFS) expansion process where the path was not correctly restored to its previous state after expansion, unless it was modified. The path is now appropriately shrunk and the state is restored to its prior condition only when changes have occurred. - #1745
v2.14.1
v2.14.0
Memgraph v2.14.0 - Jan 22, 2024
New features and improvements
toBoolean()
function now maps strings"true"
and"t"
totrue
and"false"
and"f"
tofalse
. #1620- Labels can now also be defined using query parameters. #1602
toString()
function returns double values with precision 15. #1576- When dumping a database, triggers are also included in the CYPHERL file. #1610
Bug fixes
- The
--storage-mode
configuration flag now works as expected. #1609 - Memgraph returns an error instead of crashing when trying to execute the
SHOW STORAGE INFO;
query without the required permission. #1566 - Memgraph returns an error instead of crashing when aborting a transaction due to lack of memory. #1589
- REPLICA timestamp is now correctly propagated. #1615
- Index hinting now works as expected. #1606
- Using the path identifier from the
CREATE
clause in other parts of the query will no longer crash the database. For example, the following query will execute successfully:
CREATE p0=()-[:T0]->()
MERGE ({k:(size(p0))})
RETURN 1;
v2.13.0
Memgraph v2.13.0 - Dec 8, 2023
New features and improvements
- Now you can check information about node labels and edge types by running the schema-related queries
SHOW NODE_LABELS INFO;
andSHOW EDGE_TYPES INFO;
. #1466 - Existence and unique constraints can now also be recovered in parallel, just like indexes. To enable this behaviour, set the
storage-parallel-schema-recovery
configuration flag totrue
. As the new configuration flag includes the constraints, thestorage-parallel-index-recovery
has been deprecated. #1545 - Now you can assert indexes and constraints using the
schema.assert()
procedure. #1485 - Improved the logic when checking the
exist()
statements within theWHERE
clause in order to improve performance. #1539 - The filter information message of
EXPLAIN
andPROFILE
queries displays the exact filtering in the filter expression. #1481 - When the weight lambda of Weighted Shortest Path and All Shortest Paths algoritms uses node properties, it will include all nodes of the path, even the start and end nodes. Also it's possible to mix node and relationships properties, by coalescing the relationship property in the weight lambda. #1434
- There have been changes to
mgp.hpp
method in the C++ API. #1536
Bug fixes
- If results of aggregation functions are returned grouped or if there is no input to aggregate over, rather than returing
0
orempty
together withNULL
, the functions won't return anything. #1531 - If the initialisation CYPHERL file passed using the
--init-file
configuration flag tries to create a user that already exists, the exception will be caught and Memgraph will start successfully. #1465 - All deleted relationships are now correctly replicated to REPLICA instances. Also, replication failures no longer prevent MAIN to write into WAL files. #1540
- The cartesian evaluation of three MATCH clauses no longer uses sequential scanning, thus improving the performance of such queries. #1555
- A bug was fixed that would MATCH and RETURN wrong grouped aggregations. #1518
- Memgraph no longer throws a "Failed deallocation" error when working with the
migrate
query module. #1492 - The C, C++ and Python APIs have been extended with functions to check what storage mode is being used and whether graph elements (or lists/maps thereof) have been deleted. They allow the proper handling of deleted return values or query procedures and functions ran in the in-memory analytical storage mode are now properly handled.#1395
- A bug was fixed where Memgraph would send a success message to clients before certain database operations were executed successfully. #1556
v2.12.1
Memgraph v2.12.1 - Nov 17, 2023
New features and improvements
- Cached query plans are no longer saved during the time interval defined by the
--query-plan-cache-ttl
, rather they are cached by count. You can set the maximum number of cached query plans using the--query-plan-cache-max-size
configuration flag. By deafult, the maximum number of cached query plans is 1000. This change has been made to reduce the memory usage of queries withMERGE
queries and variables. #1348 - Procedures are no longer limited to 100 MB. They can use unlimited resources. If you want to limit memory usage of procedures add
PROCEDURE MEMORY LIMIT 100 KB
after calling a procedure and before yielding results. #1506 - The
SHOW STORAGE INFO;
query now returns the non-swapped physical RAM memory a task has used (as reported by the operating system) asmemory_res
, notmemory_usage
.memory allocated
has been replaced withmemory_tracked
, and it still defines the amount of RAM allocated in the system and tracked by Memgraph. The query also returns the number of memory-mapped areas that the kernel allows a process to have asvm_max_map_count
. #1408 #1426 - Now you can delete all nodes and relationships on a path by using the following
DETACH DELETE
syntax:MATCH p = (:X)-->()-->()-->() DETACH DELETE p;
. #1383 - After recovery, the logs show which indexes and constraints have been recovered. #1480
- Information about using custom memory resources for handling memory when running has been removed from the logs as it's unecessary. #1452
- All the memory allocated inside a procedure is tracked in order to notify when limits are reached. #1443
date
andlocalTime
can now be extracted fromLocalDateTime
data type. #1381
Bug fixes
- Query modules
schema
andconvert
that had been moved from MAGE library to Memgraph now load properly and work as expected #1490 - Instead of crashing the database, using the
exists()
function with any clause other than WHERE throws an exception. #1392 #1382 - The
MEMORY QUERY LIMIT
queries now respect the memory limit as expected. #1468 - Queries using indexed join no longer crash. #1478
- Indexes can now be loaded in parallel as expected. #1479
- The
collect
function, when called on an empty list, now yields no results instead of returningNULL
. #1482 - Using the
WHERE
andIN
subclauses with lists now works as expected. #1494 - The hash join executes as expected when using WHERE subclause. #1496
- When encountering corrupted snapshot and WAL files during recovery, Memgraph now deletes them. #1385
- The snapshot thread is now stopped when switching from
IN_MEMORY_TRANSACTIONAL
toIN_MEMORY_ANALYTICAL
storage mode. Before, the snapshot thread was left running in the ANALYTICAL mode although it was unnecessary. #1385 - When setting properties to all nodes at once using the
SET
subclause via client library, the number of set properties is returned as expected. #1460 - Passing a variable that contains a list to the BFS algorithm now returns a results instead of an exception. #1380
- Upon deleting data, garbage collector deallocates memory as expected. #1471
- If you call a procedure that works on multiple threads and they pass the memory allocation limit, an exception will be thrown. Until now RAM suffered in silence. #1401