Skip to content

v4.22.3

Choose a tag to compare

@DvirDukhan DvirDukhan released this 28 Oct 14:06
3dbf13e

FalkorDB 4.22.3

Bug Fixes

  • Indexed values of 0 or false disappeared after a reload.
    A range-indexed property whose value was 0, 0.0 or false was dropped
    from the index every time the index was rebuilt from an RDB: on restart,
    RESTORE, replica full sync or failover. The node or edge stayed in the
    graph, but index lookups no longer found it, so a MERGE on that value could
    create a duplicate. The fix is in RediSearch (FalkorDB/RediSearch#31), which
    this release picks up. (#3512, #3513)

  • Crash on a fixed-length variable-length pattern with a filtered far endpoint.
    A query like MATCH (a:A)-[*2..2]-(b:B {id: 2}) RETURN count(*), or the same
    filter written as WHERE b.id = 2, crashed the server. With a relationship
    type ([:R*2..2]) the query didn't crash but returned no rows. The planner
    started the traversal from the edge and then read the edge as a node label.
    Present since 4.20.0. (#2542, #3539)

  • Assertion failure on OPTIONAL MATCH inside nested CALL subqueries.
    When a nested CALL {} branch produced no rows, the inner OPTIONAL MATCH
    traversal was reset before it had ever run, and clearing its uninitialized
    state aborted debug builds. (#3475, #3474)

Improvements

  • Write queries no longer freeze the server while waiting for the graph lock.
    A write query used to take Redis's global lock and then wait, still holding
    it, for the graph's write lock. A long-running read on one graph could
    therefore stall every other command on the server. A writer now waits at most
    WRITE_LOCK_POLL_INTERVAL milliseconds for the graph lock, then releases
    Redis's global lock and tries again. While a writer is waiting, new read
    queries on the same graph let it go first so it isn't starved. That wait
    counts against the read query's timeout, and a read that runs out of time
    fails with the usual timeout error. (#3421, #3422)

Configuration

  • New WRITE_LOCK_POLL_INTERVAL (milliseconds, default 5): how long a write
    query waits for the graph write lock before releasing Redis's global lock and
    retrying. 0 restores the previous behavior of a single blocking wait.
    Settable as a module argument or at runtime with GRAPH.CONFIG SET. (#3422)

Dependencies

  • GraphBLAS updated to 10.5.2-beta2, with the precompiled (PreJIT) kernels
    regenerated for the new version. (#3420)
  • RediSearch updated to include the index fix above. (#3513)

Full Changelog: v4.22.2...v4.22.3