chore(worker): set `placement.region = aws:us-east-1`; add the 5-round-trip budget counter to the contract suite

Ouverte
#39 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
48/100
Type d'issue
Fonctionnalité
Clarté
Clairement spécifiée
Activité
Active
Stack technique
postgresql, rust

Piste de recherche

Read crates/thrust-worker/wrangler.toml and wrangler.stage2.toml, then inspect the Pg wrapper in crates/thrust-adapters-postgres/src/lib.rs and the contract suite described in docs/src/architecture/app.md. Check the existing benchmark entry point in crates/thrust-contract-tests/src/bin/bench.rs and coordinate its deployed runs with issue #37, which recreates the deleted Stage 2 resources. Done means both configs pass dry-run, the Postgres contract test enforces the five round-trip limit and kills its mutant, memory targets are explicitly excluded, placement is verified, and benchmark results are recorded.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

area:infra prio:p0 review:fable-2026-10-19

Context

Neither crates/thrust-worker/wrangler.toml nor wrangler.stage2.toml has a [placement] section. The database is in us-east-1: ADR-0094:39, and the thrust-pg instances run on us-east-1a and us-east-1b nodes (research/0010:316). The Stage 2 numbers were taken from one laptop in the US east: list p95 86 ms, create p95 296 ms at c=1 and 559 ms at c=8, and 595 to 615 ms for the first database request on a fresh isolate (research/0004:383-387). Every statement goes through the Pg wrapper as one round trip (crates/thrust-adapters-postgres/src/lib.rs:106-127); today a list costs two (membership at lines 187-191, the list at lines 229-230). The contract suite is a black-box HTTP suite (docs/src/architecture/app.md:68), and bench takes iterations and concurrency (crates/thrust-contract-tests/src/bin/bench.rs:2).

Problem

The p95 < 500 ms target (SPEC.md:78) is set by three things the plan does not budget: placement, query count and the cold path.

  • Placement: Cloudflare puts each sequential query at 20 to 30 ms from a distant region and 1 to 3 ms when the Worker is placed nearby (hyperdrive/concepts/how-hyperdrive-works), and placement hints accept placement.region = "aws:us-east-1" (workers/configuration/placement).
  • Query count: Plane's project page fires 13 reads and its workspace wrapper fires 9 (research/0003:47-48). Without a budget, the compat layer will reproduce Django's N+1 query shapes.
  • Measurement: where p95 is measured is still open (Q-G5.2, QUESTIONS.md:299; SPEC.md:83).

Proposal

Covers FR-08 items (1) to (3). The plan side is the ADR-0040 (S3, S5) and ADR-0094 round-29 notes and the SPEC §6.4 text.

  • Add to both wrangler files:
    [placement]
    region = "aws:us-east-1"
    
  • Budget list endpoints at no more than 5 database round trips per request. The Postgres adapter counts every statement issued through Pg during one request (the review's "counting Connector") and reports the count only when THRUST_TEST_ROUTES is on, for example in an x-thrust-db-round-trips response header. A contract test asserts the count on the Postgres targets.
  • Re-run bench at c=1 and c=8 against the deployed Worker with placement set, from the same vantage point as research/0004 §10.3. The Stage 2 resources were deleted (wrangler.stage2.toml:3), so run this together with the spike 0002 runs in #37, which recreate them and also add the distant-region bench.
  • Context for Q-G5.2, which the plan edits answer: "p95 of a synthetic probe from the origin's region on the warm path, 5-minute cadence, cold starts reported separately; availability over a rolling 30 days on the same probe". FR-08 (4), the allocation order, is measured in #37.

Acceptance criteria

  • grep -n 'region = "aws:us-east-1"' crates/thrust-worker/wrangler*.toml matches both files, and wrangler deploy --dry-run accepts the config.
  • The Workers API reports the deployed Worker's placement (workers/configuration/placement, "Check placement status").
  • Contract test list_endpoints_stay_within_five_db_round_trips passes on native-pg and worker-cf, and it fails against a mutant that issues one extra statement per returned row. Add the mutant to scripts/mutants.sh, where it must be reported KILLED.
  • On the memory targets, which count nothing, the test is excluded explicitly and the expected pass count is adjusted, so it cannot pass vacuously.
  • The c=1 and c=8 results with placement on are recorded next to the research/0004 §10.3 table.

References

  • Review: .agents/plans/contrail/reviews/2026-10-19-fable-architecture-review.md (FR-08)
  • crates/thrust-worker/wrangler.toml; crates/thrust-worker/wrangler.stage2.toml; crates/thrust-adapters-postgres/src/lib.rs:106-127,187-191,229-230; crates/thrust-contract-tests/src/bin/bench.rs
  • SPEC §6.4 (SPEC.md:78,83); Q-G5.2 (QUESTIONS.md:299); ADR-0040 S3 and S5 (adrs/data/base/0040-system-of-record-database.md:82,84); ADR-0043; ADR-0094:39
  • research/0004 §10.3 (research/0004-rust-on-workers-binding-matrix.md:383-387); research/0003-compat-plane-inventory.md:47-48; spike 0002 step 7
  • Cloudflare docs: workers/configuration/placement; hyperdrive/concepts/how-hyperdrive-works

Finding: FR-08

Langage dominant
Rust
Étoiles
0
Forks
0
Merge moyen
1 h 35 min
PR mergées (30 j)
67

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de aRustyDev/thrust

Toutes les issues de aRustyDev/thrust

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.