Repository navigation
test(ingestor): wait for async tx_last_seen backfill before seeding - #58
Merged
Merged
Conversation
OpenStore schedules tx_last_seen_backfill_v1 in the background. When it ran between the test's separate observation inserts it stamped a partial MAX (100), and the test's own backfill call then skipped the row because it only selects last_seen = 0, failing with "last_seen = 100, want 300". Wait for the store's async migrations before each backfill test seeds data or changes the package-level batch settings. Add a deterministic regression test that the InsertTransmission observation bump heals a row a backfill stamped from partial data. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Problem
TestBackfillTxLastSeen_ResolvesFromMaxObservationTimestampfejlede intermitterende medlast_seen = 100, want 300(bl.a. merge-CI run 35107538732 efter #57; også dokumenteret i #17, #33 og #52).Årsag:
newTestStore→OpenStorestarter den automatiske async migrationtx_last_seen_backfill_v1(cmd/ingestor/db.go:211). Testen seeder derefter transmissionen og observationerne 100, 300, 200 som separate auto-commits. Når baggrunds-backfillen kørte midt i seedingen, læste den de delvist indsatte testdata og sattelast_seen = 100. Backfillen vælger kun rækker medlast_seen = 0(db.go:262), så testens eget, direktebackfillTxLastSeen-kald sprang rækken over.Rækkefølgen er vist med midlertidig instrumentering i en isoleret diagnosekopi (ikke en del af denne PR): i 10/10 fejlende kørsler committede baggrundskørslen
last_seen=100efter observation 100 og før 300, og den kørte stadig, da testen læste værdien.Rettelse
Kun testfixture-synkronisering — ingen produktionsændringer, ingen ændring af den fælles
newTestStore-helper:TestBackfillTxLastSeen_*kalderstore.WaitForAsyncMigrations()straks efternewTestStore(t), før de seeder data eller ændrer de package-globaletxLastSeenBackfillBatchSize/txLastSeenBackfillYield. Det er den eksisterende ventemekanisme (backfillWg), som dækker begge async migrations fraOpenStore.Ny regressionstest
TestBackfillTxLastSeen_PartialClaimHealedByObservationBumplåser den invariant fast, somlast_seen = 0-filteret bygger på:last_seen = 100via backfill (og asserter det).InsertTransmission-kodevej.last_seen = 300.Ingen baggrundstiming bruges til at fremkalde tilstanden.
Mutationstjek (tidligere kørt, ikke genkørt her): i en scratch-kopi blev
stmtBumpTxLastSeendeaktiveret (... AND 0). Den nye test fejlede 3/3 på den forventede slut-assertion (last_seen = 100, want 300); de øvrige fire tests bestod. Mutationen er ikke med i denne PR.Verifikation
Alle lokale resultater er macOS arm64, go1.26.0 (
GOTOOLCHAIN=local), på eksporter af de præcise træer, med ydre tidsgrænser.Friske kørsler på denne PR's HEAD (
14789759):^TestBackfillTxLastSeen_: 10/10 bestået normalt; 5/5 bestået under-race, 0 race-advarsler.go vet .: ren.gofmt -l: ren.git diff --check: ren.Tidligere kørsler (samme indhold, ikke genkørt):
-race, 0 race-advarsler.aac4fae2, testfamilien: 38 bestået / 12 fejlet af 50 (allelast_seen = 100, want 300).go test -count=1 -timeout 20m -coverprofile=… ./...), 3 skiftevise kørsler: baseline 2 ok / 1 fejlet (samme assertion); candidate 3/3 ok.Uafhængigt review (reviewer, der ikke implementerede rettelsen) bestod uden blockers.
Begrænsninger og åbne spørgsmål
TestMQTTStallWatchdog_DisconnectedEscalationThrottled_1749fejlede én gang i en tidligere lokal baseline-kørsel (got 2 invocations). Den er ikke undersøgt her.cmd/server/routes.goindsætter observationer uden at opdateretransmissions.last_seen. Den er ikke undersøgt eller ændret. Denne PR frikender ikke alle produktionsskriveveje, og det er ikke udelukket, at den vej kan efterlade en forkert (også ikke-nul)last_seen.newTestStore, kan potentielt have samme type race; det er ikke gennemgået i denne PR.🤖 Generated with Claude Code