Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: valkey-io/valkey
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 9.1.0
Choose a base ref
...
head repository: valkey-io/valkey
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9.1
Choose a head ref
  • 2 commits
  • 34 files changed
  • 9 contributors

Commits on Jun 10, 2026

  1. Fix crash when active field-expiry leaves a single-entry HT vset buck… (

    #3957)
    
    backport of (#3950)
    
    When a hash has many fields whose expirations fall in the same
    volatile-set time-bucket (>127 entries), that bucket is encoded as a
    hashtable (HT). The active field-expiry path drains expired entries via
    vsetBucketRemoveExpired_HASHTABLE(), but it is bounded by the per-key
    expire quota (max_count, from dbReclaimExpiredFields). When the quota
    stops the drain one entry short, the function only collapsed the bucket
    to NONE at size 0 and left it as an HT bucket holding a single entry.
    
    That violates the invariant enforced by removeFromBucket_HASHTABLE(),
    which asserts hashtableSize(ht) > 0 after a delete and downgrades an HT
    bucket to SINGLE at size 1. A later normal removal of that lone field --
    HDEL, or a cross-bucket HSETEX update routed through
    removeEntryFromRaxBucket() -- deletes the sole entry, drops the size 1
    -> 0, and trips the assertion.
    
    Fix: Apply the same downgrade in the expiry path: when draining leaves
    exactly one entry, downgrade the HT bucket to SINGLE so the invariant
    holds. Behavior is unchanged when the bucket drains fully (-> NONE) or
    retains two or more entries (-> HT, as the normal removal path already
    tolerates).
    
    Add a regression test that fills one time-bucket past the HT threshold,
    expires all but one entry, then removes the survivor through the normal
    path; it crashed before this fix and passes after.
    
    Signed-off-by: Ran Shidlansik <ranshid@amazon.com>
    ranshid authored Jun 10, 2026
    Configuration menu
    Copy the full SHA
    5789b3c View commit details
    Browse the repository at this point in the history

Commits on Jun 11, 2026

  1. [backport] Backport sweep for 9.1 (#3774)

    # Backport sweep for 9.1
    
    Automated cherry-picks from PRs marked "To be backported".
    
    ## Applied
    
    | Source PR | Title | Detail |
    |---|---|---|
    | #3743 | Fix buffered_reply assert in HFE commands with module keyspace
    notifications | cherry-picked in a prior sweep |
    | #3766 | Fix flaky block_keyspace_notification test for HGETDEL notify
    race | cherry-picked in a prior sweep |
    | #3800 | Fix heap-use-after-free in ACL LOAD when client free is
    deferred | cherry-picked in a prior sweep |
    | #3723 | Fix double-finish and RESP reply violation in cluster slot
    migration | cherry-picked in a prior sweep |
    | #3872 | Redacting customer information when hide_user_data_from_log is
    true in rdb.c, networking.c, debug.c and t_hash | cherry-picked in a
    prior sweep |
    | #3846 | Fix use-after-free in VM_RegisterClusterMessageReceiver |
    cherry-picked in a prior sweep |
    | #3806 | Add ALL_DBS flag to CLUSTER FLUSHSLOT for database-level ACL |
    cherry-picked in a prior sweep |
    | #3847 | Harden SENTINEL commands and config rewrite against
    control-character injection | |
    | #3801 | Validate every DB clause in COPY against ACL db= permissions |
    |
    | #3851 | Replace AUTOMATION_PAT with Valkeyrie Bot GitHub App token | |
    | #3848 | Fix cluster AUX-field control-character and delimiter
    injection | |
    | #3544 | Revert "IO-Threads redesign cleanup work (#3544)" |
    cherry-picked in a prior sweep |
    | #3888 | Report exact dbid for COPY in ACL LOG when db= access is
    denied | conflicts resolved by Claude Code |
    | #3942 | Fix shard_id format specifier in UPDATE message log |  |
    | #3941 | Avoid random() % 0 undefined behaviour when
    cluster-node-timeout < 30 | |
    
    ---
    *Generated by valkey-ci-agent using Claude Code.*
    
    ---------
    
    Signed-off-by: Binbin <binloveplay1314@qq.com>
    Signed-off-by: Ran Shidlansik <ranshid@amazon.com>
    Signed-off-by: chx9 <lovelypiska@outlook.com>
    Signed-off-by: zackcam <zackcam@amazon.com>
    Signed-off-by: Eran Ifrah <eifrah@amazon.com>
    Signed-off-by: Jules Lasarte <lasartej@amazon.com>
    Signed-off-by: jjuleslasarte <jules.lasarte@gmail.com>
    Signed-off-by: akash kumar <akumdev@amazon.com>
    Co-authored-by: Binbin <binloveplay1314@qq.com>
    Co-authored-by: Ran Shidlansik <ranshid@amazon.com>
    Co-authored-by: lovelypiska <lovelypiska@outlook.com>
    Co-authored-by: zackcam <zackcam@amazon.com>
    Co-authored-by: eifrah-aws <eifrah@amazon.com>
    Co-authored-by: jjuleslasarte <jules.lasarte@gmail.com>
    Co-authored-by: Jules Lasarte <lasartej@amazon.com>
    Co-authored-by: Akash Kumar <45854686+akashkgit@users.noreply.github.com>
    9 people authored Jun 11, 2026
    Configuration menu
    Copy the full SHA
    71545e0 View commit details
    Browse the repository at this point in the history
Loading