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

オープン
#39 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
機能追加
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
postgresql, rust

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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

主要言語
Rust
スター
0
フォーク
0
平均マージ
1時間 35分
マージ済み PR(30日)
67

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

aRustyDev/thrust のほかの issue

aRustyDev/thrust の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。