Skip to content

chore(deps): bump actions/checkout from 4 to 6#20

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/checkout-6
Closed

chore(deps): bump actions/checkout from 4 to 6#20
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/checkout-6

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Mar 30, 2026

Copy link
Copy Markdown
Contributor

Bumps actions/checkout from 4 to 6.

Release notes

Sourced from actions/checkout's releases.

v6.0.0

What's Changed

Full Changelog: actions/checkout@v5.0.0...v6.0.0

v6-beta

What's Changed

Updated persist-credentials to store the credentials under $RUNNER_TEMP instead of directly in the local git config.

This requires a minimum Actions Runner version of v2.329.0 to access the persisted credentials for Docker container action scenarios.

v5.0.1

What's Changed

Full Changelog: actions/checkout@v5...v5.0.1

v5.0.0

What's Changed

⚠️ Minimum Compatible Runner Version

v2.327.1
Release Notes

Make sure your runner is updated to this version or newer to use this release.

Full Changelog: actions/checkout@v4...v5.0.0

v4.3.1

What's Changed

Full Changelog: actions/checkout@v4...v4.3.1

v4.3.0

What's Changed

... (truncated)

Changelog

Sourced from actions/checkout's changelog.

Changelog

v6.0.2

v6.0.1

v6.0.0

v5.0.1

v5.0.0

v4.3.1

v4.3.0

v4.2.2

v4.2.1

v4.2.0

v4.1.7

v4.1.6

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels Mar 30, 2026
@TinDang97 TinDang97 mentioned this pull request Mar 30, 2026
2 tasks
@dependabot @github

dependabot Bot commented on behalf of github Mar 31, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot dependabot Bot deleted the dependabot/github_actions/actions/checkout-6 branch March 31, 2026 07:10
pilotspacex-byte pushed a commit that referenced this pull request Jul 9, 2026
…uracy

Two related vector-index correctness gaps from the production-hardening
audit (Batch D).

#20 Multi-vector-field deletion resurrection:
tombstone_key_in_index only walked the default field's SegmentHolder
(idx.segments); secondary VECTOR fields live in a separate
idx.field_segments map that it never iterated. DEL/UNLINK/HDEL therefore
left the vector alive in every non-default field, and a subsequent
`FT.SEARCH idx '@field2:[...]'` resurrected the deleted document -- under
a synthetic `vec:<id>` key, since the shared key_hash_to_key map was
cleared unconditionally. Extracted a `tombstone_key_in_holder` helper and
now apply it to the default field AND each field_segments entry.

#28 FT.INFO num_docs miscount:
- MutableSegment::len() returns entries.len() including tombstoned slots
  (mark_deleted_* only flips delete_lsn in place until compaction), so
  num_docs inflated by up to compact_threshold under DEL/HSET churn.
  Added MutableSegment::live_len() (excludes tombstones) and use it for
  num_docs / mutable_vectors in ft_info.rs (top-level + both per-field
  blocks).
- DiskANN cold-tier segments (experimental, gated by MOON_VEC_COLD_TIER)
  were never summed even though cold docs ARE returned by FT.SEARCH.
  Added a `snap.cold` loop backed by a new DiskAnnSegment::num_docs().

Red/green tests:
- vector::segment::mutable::tests::test_live_len_excludes_tombstoned
- vector::store::bg_compact_tests::test_del_tombstones_secondary_vector_field

Both runtimes compile + clippy -D warnings clean; 65 vector tests pass.

Refs: tmp/PRODUCTION-HARDENING-AUDIT.md findings 20, 28 (Batch D).

author: Tin Dang
TinDang97 added a commit that referenced this pull request Jul 11, 2026
…k epoch cancellation

Attach-under-write stress testing of R2 (#283) surfaced three defects.
All are fixed here before the PR merges; none shipped in a release.

1) REPLICAOF leaked the previous replica task (pre-existing, dominant
   signal). `REPLICAOF host port` spawned a fresh run_replica_task
   without stopping the old one, and `REPLICAOF NO ONE` only flipped the
   role: the old task kept streaming AND applying. Each NO-ONE →
   re-attach cycle stacked one more live applier — replica INCR counters
   ran ~25-35% ABOVE the master (reproduced at shards=1 and shards=4).
   Fix: process-global REPLICA_TASK_EPOCH ticket. StartReplication and
   PromoteToMaster bump the generation; a superseded task exits at the
   reconnect-loop top, before snapshot load, and before applying any
   parsed chunk — it can never mutate the keyspace again.

2) Snapshot-vs-live exactly-once now rests on an offset cut, not on
   FIFO placement. Two review rounds found opposite failure modes for
   placement schemes on the PSYNC connection's own shard:
     - queued snapshot leg (drain-time capture): a local write between
       push and drain was in the body AND live-sent behind the
       registration → double-apply (reproduced, +35%);
     - inline capture + queued registration: a same-cycle SPSC execute
       was neither in the body (applied after capture) nor live-sent
       (execute_batch direct-send runs before other_messages processes
       the registration) — with its bytes in the backlog and the offset
       advanced: silent loss + permanent replica ACK lag.
   Fix: every fan-out entry records cut = shard offset at body capture;
   every live record carries its per-shard end_offset; delivery requires
   end_offset > cut. Registration placement no longer matters, so ALL
   shards — including the PSYNC connection's own — use the same
   PrepareReplicaSync arm (the special-cased inline self-leg is gone).
   The cut/end_offset axis is the PER-SHARD counter, never the master
   offset (seed_master_offset diverges the two after AOF recovery).

3) Same-key wire ordering. SPSC-dispatched writes sent to replicas
   directly from the execute arm while local handler writes deferred
   through the self queue — a later-offset write could reach the wire
   before an earlier-offset same-key write, replaying out of the
   master's serialization order (analysis finding; not reproduced in
   ~10 black-box attempts). ALL live sends now flow through the
   self-queue ReplicaLiveFanout arm: per-shard wire order == FIFO order
   == offset order by construction.

Tests (red/green: 1 and 2 reproduced red before their fixes):
- tests/replication_multishard.rs +3:
  attach_under_write_no_double_apply (4-shard, 5x detach/re-attach under
  4-writer pipelined INCR load, exact per-counter parity),
  singleshard_master_attach_under_write_control (same at shards=1 — the
  discriminating control that proved the task leak pre-existing),
  same_key_write_order_parity (12 conns APPEND-race 32 shared keys
  through both write paths; replica must byte-equal master).
- Full regression: multishard 9/9, streaming 7/7, hardening 5/5,
  graph 5/5, aof_multidb_kill9 4/4, lib 4115 (monoio) + 3316 (tokio),
  clippy -D warnings both matrices, fmt — macOS and Linux VM.

Mechanical: ShardMessage::RegisterReplica boxed (RegisterReplicaPayload;
the extra offset fields pushed it past the 64-byte cap), ReplicaFanout
tuple → struct with cut, increment_shard_offset returns the per-shard
post-advance offset.

Test-harness hardening surfaced by the Linux VM sweep (task #18 class):
- replication_hardening now honors MOON_BIN (hardcoded
  ./target/release/moon exec'd the wrong-platform binary on the shared
  macOS/Linux checkout — all 5 tests failed to connect on the VM);
- aof_multidb_kill9 wait_ready treats a connection RESET during moon's
  bootstrap→per-shard SO_REUSEPORT listener handover as "not ready yet"
  instead of panicking (3/4 VM failures, reproduced with main's binary
  too — environment-timing flake, not a code regression).

Refs: task #20, task #36, PR #283
author: Tin Dang <tindang.ht97@gmail.com>
TinDang97 added a commit that referenced this pull request Jul 11, 2026
… failure (review)

CodeRabbit round on PR #283:

- PrepareReplicaSync reply collection is now bounded (30s timeout per
  leg): a wedged shard can no longer park the PSYNC task — and the
  fan-out registrations it holds — forever. On expiry the sync aborts
  with explicit unregister everywhere; the replica reconnects and
  retries.
- Socket-write failures during the +FULLRESYNC/RDB transfer also
  unregister on every shard instead of leaving the entries to the
  passive next-write Disconnected prune.
- docs/guides/clustering.md quotes the full tokio PSYNC error text.
- CHANGELOG documents the 16K pre-RDB live-buffer limitation (overflow
  during a very large snapshot under sustained writes KICKS the replica
  loudly into a retry — never silent divergence).

Verified: multishard 9/9, clippy -D warnings, fmt.

Refs: task #20, PR #283
author: Tin Dang <tindang.ht97@gmail.com>
pilotspacex-byte added a commit that referenced this pull request Jul 11, 2026
…ord SELECT framing (#283)

* feat(replication): R2 multi-shard master PSYNC — merged RDB + per-record SELECT framing

Masters running --shards N now serve full replication to a single-shard
replica (task #20, RFC 1B). Previously PSYNC on a multi-shard master was
rejected outright.

Design:
- ShardMessage::PrepareReplicaSync fans to every shard (self queue for the
  accepting shard, SPSC mesh + notifier for the rest). Each shard's arm
  serializes its keyspace slice to an RDB BODY, captures its shard offset,
  and registers the replica's live channel in ONE synchronous stretch on its
  own thread — per shard there is no window between "in the snapshot" and
  "streamed live", so no backlog catch-up leg exists and non-idempotent
  commands cannot double-apply.
- The PSYNC task stitches bodies into ONE valid Redis-format RDB
  (redis_rdb::write_rdb_merged) and replies
  `+FULLRESYNC <replid> <sum of shard offsets>` + one $<len> bulk — the
  replica's existing R0 loader is unchanged. Index defs ride once; graph
  content is sharded so the snapshot carries one moon-graph-store aux entry
  PER shard, and the replica imports all of them (install_graph_store_many /
  read_moon_aux_all).
- Merged-wire db context: N shard threads feed one replica socket, so
  per-shard SELECT tracking cannot work. On multi-shard masters every
  db-scoped record is fused with its own `SELECT <db>` prefix as ONE record
  (one channel send, one backlog append pair, one offset advance) in both
  the cross-shard path (wal_append_and_fanout) and the local leg
  (record_local_write_db) — no interleave can split a SELECT from the write
  it frames. Gated on the replica-attach hint; single-shard masters keep the
  emit-on-change tracking.
- Partial resync degrades to full: a single scalar offset cannot map back
  onto N per-shard backlogs.
- R1 pieces carry over unchanged: overflow-kick (shared kicked flag across
  all N fan-out entries), REPLCONF ACK reader, WAIT (summed snapshot offset
  keeps total_offset - base == bytes-on-wire, so ACK math stays exact).

Verification (red/green):
- NEW tests/replication_multishard.rs — 6 e2e over real processes, written
  first and failing on main: 2/4/8-shard full resync + live convergence with
  INCR exactness, interleaved multi-db writers (5k keys x 2 dbs, leak
  asserts both directions), per-shard graph snapshot import, raw-handshake
  partial->full degradation with merged-RDB REDIS-magic assert.
- NEW unit merged_multishard_rdb_round_trip (repeated SELECTDB sections +
  repeated graph aux entries load as one keyspace, CRC valid).
- Regression: replication_streaming 7/7, replication_hardening 3/3,
  replication_graph 5/5, aof_multidb_kill9 4/4, lib 4115 (monoio) +
  3316 (tokio), clippy -D warnings on both matrices, fmt clean.

author: Tin Dang <tindang.ht97@gmail.com>

* docs(replication): document self-queue-first drain dependency in PrepareReplicaSync arm

author: Tin Dang <tindang.ht97@gmail.com>

* feat(replication): R3 — tokio PSYNC clear error + topology docs refresh

RFC v0.2-R3 (2A + 4B), riding the R2 PR:

- A runtime-tokio master now answers PSYNC with
  `-ERR PSYNC requires runtime-monoio on the master (this build runs
  runtime-tokio)` instead of falling through to generic dispatch — an
  attaching replica's log states WHY the sync failed. Wired in both tokio
  paths (handler_sharded intercept + handler_single inline arm) and verified
  live against real tokio binaries at shards=1 and shards=2.
- Docs refreshed for the R2 topology:
  - docs/guides/clustering.md: v0.1.x "master must run --shards 1" warning
    replaced with the v0.7 deployment shape (any-N master / --shards 1
    replicas, merged-RDB semantics, partial->full at N>1, WS/MQ plane
    caveat).
  - README.md: replication bullets updated (also fixes the stale claim that
    replicas could run --shards N — the replica task refuses N != 1).
  - docs/PRODUCTION-CONTRACT.md: REPL-MULTISHARD-01 and WAIT-01 flipped to
    done with R2/R1 evidence.
- CHANGELOG [Unreleased] amended accordingly.

author: Tin Dang <tindang.ht97@gmail.com>

* fix(replication): exactly-once live fanout (offset cut) + replica-task epoch cancellation

Attach-under-write stress testing of R2 (#283) surfaced three defects.
All are fixed here before the PR merges; none shipped in a release.

1) REPLICAOF leaked the previous replica task (pre-existing, dominant
   signal). `REPLICAOF host port` spawned a fresh run_replica_task
   without stopping the old one, and `REPLICAOF NO ONE` only flipped the
   role: the old task kept streaming AND applying. Each NO-ONE →
   re-attach cycle stacked one more live applier — replica INCR counters
   ran ~25-35% ABOVE the master (reproduced at shards=1 and shards=4).
   Fix: process-global REPLICA_TASK_EPOCH ticket. StartReplication and
   PromoteToMaster bump the generation; a superseded task exits at the
   reconnect-loop top, before snapshot load, and before applying any
   parsed chunk — it can never mutate the keyspace again.

2) Snapshot-vs-live exactly-once now rests on an offset cut, not on
   FIFO placement. Two review rounds found opposite failure modes for
   placement schemes on the PSYNC connection's own shard:
     - queued snapshot leg (drain-time capture): a local write between
       push and drain was in the body AND live-sent behind the
       registration → double-apply (reproduced, +35%);
     - inline capture + queued registration: a same-cycle SPSC execute
       was neither in the body (applied after capture) nor live-sent
       (execute_batch direct-send runs before other_messages processes
       the registration) — with its bytes in the backlog and the offset
       advanced: silent loss + permanent replica ACK lag.
   Fix: every fan-out entry records cut = shard offset at body capture;
   every live record carries its per-shard end_offset; delivery requires
   end_offset > cut. Registration placement no longer matters, so ALL
   shards — including the PSYNC connection's own — use the same
   PrepareReplicaSync arm (the special-cased inline self-leg is gone).
   The cut/end_offset axis is the PER-SHARD counter, never the master
   offset (seed_master_offset diverges the two after AOF recovery).

3) Same-key wire ordering. SPSC-dispatched writes sent to replicas
   directly from the execute arm while local handler writes deferred
   through the self queue — a later-offset write could reach the wire
   before an earlier-offset same-key write, replaying out of the
   master's serialization order (analysis finding; not reproduced in
   ~10 black-box attempts). ALL live sends now flow through the
   self-queue ReplicaLiveFanout arm: per-shard wire order == FIFO order
   == offset order by construction.

Tests (red/green: 1 and 2 reproduced red before their fixes):
- tests/replication_multishard.rs +3:
  attach_under_write_no_double_apply (4-shard, 5x detach/re-attach under
  4-writer pipelined INCR load, exact per-counter parity),
  singleshard_master_attach_under_write_control (same at shards=1 — the
  discriminating control that proved the task leak pre-existing),
  same_key_write_order_parity (12 conns APPEND-race 32 shared keys
  through both write paths; replica must byte-equal master).
- Full regression: multishard 9/9, streaming 7/7, hardening 5/5,
  graph 5/5, aof_multidb_kill9 4/4, lib 4115 (monoio) + 3316 (tokio),
  clippy -D warnings both matrices, fmt — macOS and Linux VM.

Mechanical: ShardMessage::RegisterReplica boxed (RegisterReplicaPayload;
the extra offset fields pushed it past the 64-byte cap), ReplicaFanout
tuple → struct with cut, increment_shard_offset returns the per-shard
post-advance offset.

Test-harness hardening surfaced by the Linux VM sweep (task #18 class):
- replication_hardening now honors MOON_BIN (hardcoded
  ./target/release/moon exec'd the wrong-platform binary on the shared
  macOS/Linux checkout — all 5 tests failed to connect on the VM);
- aof_multidb_kill9 wait_ready treats a connection RESET during moon's
  bootstrap→per-shard SO_REUSEPORT listener handover as "not ready yet"
  instead of panicking (3/4 VM failures, reproduced with main's binary
  too — environment-timing flake, not a code regression).

Refs: task #20, task #36, PR #283
author: Tin Dang <tindang.ht97@gmail.com>

* fix(replication): bounded PSYNC prepare wait + unregister on transfer failure (review)

CodeRabbit round on PR #283:

- PrepareReplicaSync reply collection is now bounded (30s timeout per
  leg): a wedged shard can no longer park the PSYNC task — and the
  fan-out registrations it holds — forever. On expiry the sync aborts
  with explicit unregister everywhere; the replica reconnects and
  retries.
- Socket-write failures during the +FULLRESYNC/RDB transfer also
  unregister on every shard instead of leaving the entries to the
  passive next-write Disconnected prune.
- docs/guides/clustering.md quotes the full tokio PSYNC error text.
- CHANGELOG documents the 16K pre-RDB live-buffer limitation (overflow
  during a very large snapshot under sustained writes KICKS the replica
  loudly into a retry — never silent divergence).

Verified: multishard 9/9, clippy -D warnings, fmt.

Refs: task #20, PR #283
author: Tin Dang <tindang.ht97@gmail.com>

---------

Co-authored-by: Tin Dang <tindang.ht97@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants