diff --git a/pages/fundamentals/data-durability.mdx b/pages/fundamentals/data-durability.mdx index 123d1c917..6f3bc7c9a 100644 --- a/pages/fundamentals/data-durability.mdx +++ b/pages/fundamentals/data-durability.mdx @@ -95,6 +95,39 @@ via `--storage-snapshot-retention-count`. enforces periodic snapshots when WAL is enabled and will fail to start if WAL is enabled with snapshot interval set to zero. +

WAL data integrity

+ + +Per-transaction WAL checksums were introduced in Memgraph v3.12. + +WAL files written by older versions do not contain checksums and are recovered +without integrity verification. Checksum verification applies only to WAL files +written by Memgraph v3.12 or newer. + + +To guard against silent on-disk corruption, Memgraph protects WAL files with +[CRC32](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) checksums: + +- The **WAL file header** (offsets and metadata such as the UUID, epoch ID and + sequence number) is protected by its own checksum. +- **Each transaction** is protected by a 4-byte checksum covering the + transaction's bytes (transaction start, deltas and transaction end). + +Checksums are verified automatically during recovery. If a transaction's stored +checksum does not match the recomputed value, the WAL is considered corrupted at +that point and recovery stops, so corrupted data is never applied to the +database. A mismatch in the WAL header causes recovery from that file to fail. + +The same checksums protect WAL files that are buffered on disk on a replica +before being applied, so corruption introduced between the main and the replica +is detected before the data is committed. Deltas streamed during the commit +(`PrepareCommitRpc`) are not checksummed because the TCP transport already +provides integrity guarantees. + + +Snapshots are not yet protected by checksums. + + ### Snapshots Snapshots provide a faster way to restore the states of your database. Snapshots are created periodically based on the value defined with the diff --git a/pages/querying/functions.mdx b/pages/querying/functions.mdx index 2c1613f39..6ff140a23 100644 --- a/pages/querying/functions.mdx +++ b/pages/querying/functions.mdx @@ -182,7 +182,7 @@ All aggregation functions can be used with the `DISTINCT` operator to perform ca | `endsWith` | `endsWith(string: string, substring: string) -> (boolean)` | Check if the first argument ends with the second. | | `left` | `left(string: string, count: integer) -> (string)` | Returns a string containing the specified number of leftmost characters of the original string. | | `lTrim` | `lTrim(string: string) -> (string)` | Returns the original string with leading whitespace removed. | -| `replace` | `replace(string: string, search-string: string, replacement-string: string) -> (string)` | Returns a string in which all occurrences of a specified string in the original string have been replaced by another (specified) string. | +| `replace` | `replace(string: string, search-string: string, replacement-string: string) -> (string)` | Returns a string in which all occurrences of a specified string in the original string have been replaced by another (specified) string. An empty `search-string` matches at every position. | | `reverse` | `reverse(string: string) -> (string)` | Returns a string in which the order of all characters in the original string have been reversed. | | `right` | `right(string: string, count: integer) -> (string)` | Returns a string containing the specified number of rightmost characters of the original string. | | `rTrim` | `rTrim(string: string) -> (string)` | Returns the original string with trailing whitespace removed. | diff --git a/pages/release-notes.mdx b/pages/release-notes.mdx index 9b2d57b16..517b5e040 100644 --- a/pages/release-notes.mdx +++ b/pages/release-notes.mdx @@ -46,6 +46,42 @@ guide. ## 🚀 Latest release +### Memgraph v3.12.0 - July 29th, 2026 + +{

✨ New features

} + +- Added `--storage-light-edge` (default `false`) to opt into a compact light-edge + storage path for lower memory use on edge-heavy graphs. The flag must be enabled + at startup; when off, behavior is unchanged. + [#4228](https://github.com/memgraph/memgraph/pull/4228) +- Light-edge storage (with `--storage-light-edge`) uses a dedicated edge pool and + graveyard reclamation for create, find, and delete, reducing per-edge memory + overhead while keeping transactional semantics. + [#4271](https://github.com/memgraph/memgraph/pull/4271) + +{

🛠️ Improvements

} + +- WAL files are now protected with CRC32 checksums. The WAL header and each + transaction carry their own checksum, which is verified during recovery and on + replicas before the data is applied, so silent on-disk corruption is detected + instead of being recovered. WAL files written by older versions remain + recoverable without verification. + [#4225](https://github.com/memgraph/memgraph/pull/4225) + +{

🐞 Bug fixes

} + +- Fixed `replace()` causing an infinite loop and OOM when the search string is empty. Empty search now inserts the replacement at every character boundary with bounded allocation, so queries such as `replace("abc", "", "-")` return `"-a-b-c-"` instead of crashing the server. [#4269](https://github.com/memgraph/memgraph/pull/4269) +- Fixed Bolt 4.4 clients receiving routing tables from data instances and + incorrectly defaulting the target database. Data instances now reject routing + requests, and database selection over Bolt 4.4 works as expected. + [#4270](https://github.com/memgraph/memgraph/pull/4270) + +### Lab v3.12.0 - July 29th, 2026 + + + +## Previous releases + ### Memgraph v3.11.0 - June 17th, 2026 {

⚠️ Breaking changes

} @@ -320,8 +356,6 @@ guide. -## Previous releases - ### Memgraph v3.10.1 - May 15th, 2026 {

🐞 Bug fixes

}