Repository navigation
fix: findings from live testing 0.2.0 against Arc main (single node, edge sync, cluster) - #30
Merged
Merged
Conversation
Exercises every new or changed SDK method against a real Arc built from main: query/profile/query_id/Arrow options, governance 429, precision, tag_columns, partial writes (LP, msgpack rows, buffered), health and readiness, schema, deletes, auth, compaction, backup, CQ, retention, reconciliation, diagnostics, cluster on standalone, RBAC, audit, query management, edge sync hub/spoke/bundle, and the installation-id header. Skipped unless ARC_TEST_URL is set; extra gates for licensed targets, local storage access and edge-sync hub/spoke.
Found running the SDK against an Arc main build (1943fe87):
- query_measurement retried Arc's governance 429 as an ordinary GET (5
requests, ~3s) before raising. It now retries 503 only, like the query
POSTs.
- register_spoke(spoke_id) always failed: the default name "" is refused
by Arc ("spoke name is required"). name now defaults to spoke_id.
- reconciliation.get_run and the spoke status/ledger reads retried a
permanent 503 (no reconciliation / no edge-sync transport on this
node) with backoff before raising. They now raise at once.
Arrow dictionary-encoding thresholds, the CQ execute end_time limit and watermark_status on standalone, spoke ledger discovery, and what an RBAC-only token (permissions=[]) can and cannot do.
…arc#1424, arc#1425)
…stly Found on a live 4-node cluster (Arc main 1943fe87): - A non-dry-run delete can wait 30 s inside Arc (deleteLocalWait, and the database delete's peer flush), equal to the default client timeout, so a delete that ran was reported as a connection failure and its unreachable_files were lost. Row and database deletes now use at least 90 s; post/delete take a per-request timeout. - A read timeout or a connection lost mid-response no longer says 'Failed to connect': the request was sent and may have been applied. - cluster.remove_node raised nothing when Arc answered 200 with success=false (no clustering); it now raises ArcError and escapes the id. - Docs: data deletes must go to the primary writer (others refuse with 503, unlike writes); assign_compactor's 409 when no compactor lease is managed.
Remove the file from every node, not just the primary: Arc's delete waits up to deleteLocalWait for listed files and the file puller heals a copy missing on one node from any peer, so the old fixture raced that pull.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ran the 0.2.0 SDK against real Arc builds from main (
1943fe87, the 2027.01.1 code), fixed what broke, and checked in the live suites so they can be re-run against any build.Setups tested
SDK bugs found and fixed
query_measurementretried Arc's governance 429 (5 requests, ~3 s)register_spoke(spoke_id)always failed: Arc refuses the default empty namenamedefaults tospoke_idreconciliation.get_runand spokestatus/ledgerretried a 503 that won't change (no reconciliation / no edge-sync transport), stalling seconds before raisingdeleteLocalWait, peer flush), equal to the default client timeout. The caller got "Failed to connect" and lostunreachable_files.post/deleteaccept a per-request timeoutcluster.remove_nodereturned Arc's 200{"success": false}(no clustering) as if the node had been removedArcError; the id is escapedpip install arc-client[...]arc-tsdb-clientEach fix has a unit test.
Docs corrected from observed behavior
executeend_time limit, andwatermark_statuson standalone.permissions=[]token can't do: run SQL.assign_compactor's extra 409.Live suites (opt-in, skipped without env)
tests/integration/test_live_parity.py: single node plus edge sync. 75 passed, 6 edge-sync skips when hub/spoke aren't running, and 2xfail(strict=True)for the Arc bugs below.tests/integration/test_live_cluster.py: 42 passed, plus 1 opt-inremove_node, which passed when enabled. One flaky fixture is fixed: it removed a file from only one node, and Arc's file puller healed it.Arc issues filed
allow_unreachable=truestill waits the full 30 s.Not exercised
assign_compactorsuccess (needs a compactor-role node), andunflushed_nodes(shared storage only).Checks
1087 unit + integration tests pass without env; ruff and mypy clean.