Skip to content

test(integration): shared-storage live suite + stream claims from a killed primary - #31

Merged
xe-nvdk merged 1 commit into
mainfrom
test/live-shared
Nov 2, 2026
Merged

xe-nvdk merged 1 commit into
mainfrom
test/live-shared

Conversation

@xe-nvdk

@xe-nvdk xe-nvdk commented Nov 2, 2026

Copy link
Copy Markdown
Member

Covers what the first round of live testing (#30) couldn't reach. Two new rigs, both built from Arc main eab8c078.

Shared storage: tests/integration/test_live_shared.py

Opt-in via ARC_TEST_SHARED_URLS. The rig is enterprise-shared (SeaweedFS as the hot bucket) plus a dedicated compactor node, an AWS S3 cold tier, and mosquitto.

  • Compactor lease: assign_compactor moves the lease to a writer and back. Assigning the current holder returns 409.
  • Daily compaction: runs on the dedicated compactor and shows up in history and cycles.
  • Tiering: policies (set/get/effective/list/delete), a dry run then a real migration to the cold bucket, and the rows still read from a writer and from the reader.
  • MQTT: the full subscription lifecycle against a real broker. Published messages are stored and queryable.
  • unflushed_nodes: a frozen writer holds buffered rows. The 503 refusal keeps the body, and allow_unreachable reports the frozen writer for both the data delete and the database drop.
  • Strict xfail: tiering: GET /api/v1/tiering/files ignores tier when database is also set arc#1430, tiering files ignores tier when database is set.

Stream takeover: test_live_cluster.py

  • New opt-in test test_stream_claim_after_primary_killed (ARC_TEST_CLUSTER_STREAM_TAKEOVER=1). It kills the primary while its rows are unflushed. A standby claims and publishes them exactly once. The test then checks that releasing or abandoning a finished claim returns 409, a wrong epoch returns 404, and a follower returns 409.
  • Fixes test_release_stream_claim: it filtered on finished, but Arc's field is done.

Doc fixes from the runs

  • MQTT: subscriptions start stopped (auto_start means start when Arc boots), and each one lives on the node that created it.
  • unflushed_nodes: entries are messages naming each node, not bare ids.
  • Deletes: Arc waits about 30-40 s for unreachable peers before it answers.
  • tiering.files: notes arc#1430.

Arc issues found

Results

Suite Result
Shared storage 6 passed + 1 xfail, on 2 consecutive full runs after the last test fix
Tiering tests alone 6 consecutive passes
Stream claims 3 passed, 3 consecutive runs
Unit 1087 passed

https://claude.ai/code/session_01VMc4wAG9mUUc3wB2ingB8c

…lled primary

New opt-in suite tests/integration/test_live_shared.py (ARC_TEST_SHARED_URLS)
against enterprise-shared plus a compactor node, an S3 cold tier and MQTT:
compactor lease moves, daily compaction on the dedicated compactor, tiering
policies, migration to cold and reads from it, the MQTT subscription
lifecycle end to end, and unflushed_nodes from a frozen writer. Strict xfail
for arc#1430 (tiering files ignores tier with database); the frozen writer is
restarted, not just unpaused, because of arc#1431.

test_live_cluster.py: opt-in test_stream_claim_after_primary_killed
(ARC_TEST_CLUSTER_STREAM_TAKEOVER=1) creates a real claim and checks
release/abandon of a finished claim; the release test read "finished", but
Arc's field is "done".

Docs from the live runs: MQTT subscriptions start stopped (auto_start means
on Arc boot) and live on the node that created them; unflushed_nodes entries
are messages naming the node; a delete waits for unreachable peers first;
tiering.files notes arc#1430.

Claude-Session: https://claude.ai/code/session_01VMc4wAG9mUUc3wB2ingB8c
@xe-nvdk
xe-nvdk merged commit b644c53 into main Nov 2, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant