declared_builds takes 0.86 GB an hour since f06bfdc3: each row repeats its closure's units' reads, and the database volume has about a day and a half left #59
Open
opened 2026-11-13 13:50:58 +00:00 by xemmerling
·
0 comments
No Branch/Tag specified
main
dev/schema-step-order
t-join-release
t-work-booking
t-ahead-deadlock-wip
t-hotfix-9ae
t-width-work
t-id-token-renew
t-claim-unkept
t-resume-live
t-run-record
t-all-lockfiles
t-relay-offset
t-blame-event
t-freer-links
t-load-tests
t-jobserver2
t-starved-timeout
t-client-pack
t-offline-config
t-test-plan
t-told-resume2
t-jobserver
t-told-resume
t-outbound2
t-crash-open-bench
t-told-once
guest-never-below-given
admit-page-cache-active
pooled-admission
driver-give-back
no-sizes
one-driver-per-check
archive/vm-root-share
archive/build-out-kept
archive/cargo-perf
archive/virtiofs-readdir-alloc
archive/vm-outputs-stream
archive/stable-verify-priority
archive/agents-1
archive/stack-parallel
archive/cpu-admission
archive/narrow-from-every-log
archive/old-t
archive/worker-store-gc
archive/failing-builds-kept
archive/vm-cargo-home
archive/lifecycle
archive/bench-own-cores
archive/place-test-binaries-nocopy
archive/vm-net-upload-stall
archive/booking-current-use
archive/archive-dep-out-dirs
archive/any-arch-shards
archive/prepare-stall-progress-ns20
archive/s2
archive/next-set-20
archive/store-full-waits
archive/fetch-caps-by-node
archive/vm-step-phases
archive/arm-only-for-arm
archive/deploy-all-workers
archive/lifecycle-staging
archive/lifecycle-1-wire
archive/fast-gate
archive/cargo-key-narrow
archive/log-leads-followup
archive/gate-limit
archive/prepare-stall-vm-bytes
archive/lifecycle-2-ends
archive/cache-hits-bind
archive/failing-reused
archive/oci-archive-direct
archive/prepare-stall-progress
archive/test-quarantine
archive/crash-safe-on-18
archive/build-script-etxtbsy
archive/old-release
archive/next-set-19c
archive/wait-reasons
archive/cache-put-best-effort
archive/hang-not-t-time
archive/shard-test-results
archive/vm-carry-on-17
archive/check-test-filter
archive/artifact-path-beneath
archive/stall-room-xfs
archive/build-dir-no-recopy
archive/cache-hits-link
archive/outputs-no-follow-on-copy
archive/outputs-no-follow
archive/next-set-19
archive/hang-detect
archive/stable-verify-stable-plan
archive/freer-target-only
archive/lease-pricing-narrow
archive/vm-outputs-once
archive/queue-place-starved
archive/publish-reads
archive/disk-warning-scratch
archive/outputs-no-copy
archive/wd-probe-3min
archive/watchdog-on-d65
archive/log-leads-with-excerpt
archive/queue-place
archive/prep-watchdog-progress
archive/cache-put-stack-room
archive/cache-put-stack
archive/place-by-pace
archive/nested-sync-helper
archive/next-set-18y
archive/archive-bins-by-env-19
archive/next-set-18
archive/disk-want-held
archive/young-booking-back
archive/flaky-tests-1027b
archive/next-set-17
archive/prep-start-at-close
archive/unpack-error-on-17
archive/server-memory-high
archive/vm-start-held
archive/vm-carry-on-14
archive/space-trim-registry-room
archive/file-cache-ns16
archive/unpack-error-final
archive/crash-safe-worker
archive/server-space-trim
archive/status-big-runs
archive/nested-tmp-volatile
archive/publish-refresh
archive/gc-cache-quiet-reads
archive/next-set-16
archive/vm14-proof
archive/csw-node-kill
archive/unpack-link
archive/vm-tests-15
archive/seccomp-allow-field
archive/flaky-tests-1027-ns15
archive/shard-fail-fast
archive/server-node-check
archive/live-log-restart
archive/unpack-no-orphans
archive/flaky-tests-1027
archive/fetch-share-images
archive/fetch-images-red4
archive/forget-cached
archive/put-file-once-ns15
archive/recheck-rank-15
archive/fetch-images-red3
archive/unpack-no-orphans-red2
archive/fetch-io-pass-followups
archive/sandbox-no-fallback-ns15
archive/unpack-no-orphans-red
archive/archive-bins-by-env-ns15
archive/ns15-proof
archive/next-set-15
archive/archive-bins-by-env
archive/vm-guest-panic-15
archive/sandbox-no-fallback
archive/recheck-rank
archive/placement-ahead-bound
archive/carry-keeps-listing
archive/registry-parallel-pull
archive/sandbox-tests-15
archive/attempt-log-live-15
archive/follow-progress-16
archive/follow-progress-15
archive/ns15-archive-base
archive/fetch-io-max-on-13
archive/fetch-images-red2
archive/transient-build-fail-15
archive/test-ended-early-15
archive/archive-keep-cleanup
archive/main-merge-14
archive/sandbox-clone3-fallback
archive/vm-carry-on-13
archive/fetch-io-sweep-15
archive/vm-root-disk-fixes
archive/vm-guest-panic
archive/follow-progress-14
archive/archive-keep-on-demand
archive/vm-exit-unseen
archive/file-cache-share
archive/bwrap-root-userns
archive/transient-build-fail
archive/fetch-io-max
archive/file-cache-guard-11
archive/fetch-io-sweep
archive/archive-build-dir-skip
archive/next-set-14
archive/wrapper-one-read
archive/archive-tmp-links
archive/attempt-log-live
archive/fetch-share-and-order
archive/vm-hang-io-wait
archive/vm-carry-fixes
archive/image-cancel
archive/test-ended-early
archive/sim-on-train3-bundle
archive/hits-layer-wip
archive/t-old-putfile
archive/archive-links
archive/stall-on-13
archive/carried-prep-completes
archive/put-file-once
archive/preview-14
archive/follow-progress
archive/gc-reads-dont-protect
archive/admission-replay-people
archive/people-pickup
archive/gc-pass-visible
archive/hits-layer
archive/own-build-priced
archive/compact-stamps-followup
archive/prepare-timing
archive/sim-on-train3
archive/next-set-13
archive/next-set-12b
archive/sim-on-next-set-12
archive/deploy-doc-no-kill
archive/next-set-12
archive/attempt-logs-real
archive/sim-tests-green
archive/shard-label-index
archive/young-booking
archive/next-set-11
archive/data-dir-config-env
archive/vm-sync-not-host-store
archive/attempt-logs
archive/wrapper-ro
archive/tests-wait-on-events
archive/blame-git-optional-needs
archive/job-file-headroom-impl
archive/next-set-10
archive/blame-verdict-fresh-parent
archive/compact-touched-stamps
archive/interactive-incremental-off
archive/follow-lost-lines-counted
archive/evict-test
archive/next-set-trial
archive/keys-cover-output-bytes
archive/file-cache-guard
archive/blame-after-parent
archive/test-filter-matching-nothing-fails
archive/s1-on-d96
archive/draining-node-queues
archive/tprev-checks-prod-next
archive/s1-dead
archive/follow-live-run
archive/guard-stopped-setup-text
archive/io-error-cause
archive/source-layer-whole
archive/clippy-groups
archive/worker-silence-grace
archive/price-touched
archive/prod-next
archive/batch1
archive/s1-on-prod-next
archive/vmcache/sandbox-copyup-pin
archive/s1-xfs-store
archive/warm-script-builds
archive/vmcache/setup-tag-digest
archive/vmcache/setup-should-fixes
archive/vmcache/setup-any-arch
archive/guard-livelock
archive/host-budget
archive/wire-format-test
archive/admission-replay
archive/switch-safe
archive/stall-window
archive/upgrade-carries-preparing
archive/static-init
archive/switch-proof-b
archive/carry-tokens
archive/seals-together
archive/switch-safe-storage
archive/switch-safe-worker
archive/batch-b-prev
archive/vmcache/batch-b
archive/carry-vm-helpers
archive/small-llvm-args-failed-log
archive/batch-a
archive/stall-hotfix
archive/prev-pacing
archive/u-try-wip
archive/u-try
archive/u-try-wip2
archive/flatten-verify
archive/poll-free
archive/flatten-tiers
archive/hotfix-cross
archive/pool-stall
archive/disk-pacing
archive/u-builds-from-graph
archive/mac-idle
archive/ship-direct
archive/vmcache/shards
archive/soft-margin
archive/behind-no-target
archive/filtered-binaries
archive/vmcache/setup-layers
archive/direct-off-prev
archive/probe-budget
archive/vm-helper-exit
archive/jobs-soft-bound
archive/vmcache/vm-disks
archive/vmcache/failure-outputs
archive/narrowed-not-verdict
archive/scratch-direct-off
archive/handover-holds
archive/memory-lines
archive/drain-destroys
archive/pool-size
archive/drain-own-frees
archive/test-schema-drop
archive/deploy-disk
archive/deploy-disk-lines
archive/clone-aware-freeing
archive/absolute-headroom
archive/zfs-pool-size
archive/u-int5
archive/u-load
archive/u-warn
archive/u-steer
archive/revert-stall-once
archive/guard-headroom
archive/u-int3
archive/u-readsets
archive/u-hermetic
archive/mem-virtio
archive/u-buildjobs
archive/u-waits
archive/u-three
archive/u-zfs-stall
archive/u-config
archive/u-lean
archive/u-e2e
archive/u-integrate2
archive/u-jobenv
archive/u-cache-blobs
archive/u-observe2
archive/u-sched-nospread
archive/u-node-bound
archive/u-sched-oom
archive/u-review-store
archive/u-observe
archive/u-review-engine
archive/u-review-srv
archive/u-review-node
archive/u-review-sched
archive/preempt-measured
archive/u-integrate
archive/u-eng
archive/lock-off-runtime
archive/u-vm
archive/u-gone
archive/u-offline
archive/ready-starve
archive/u-notices
archive/heads-never-superseded
archive/u-learn
archive/int
archive/u-graph
archive/u-umount
archive/supersede-followed
archive/preparing-booking
archive/u-xdev
archive/u-env
archive/u-poll
archive/u-wrap
archive/u-room
archive/u-wrap-try
archive/u-fixed
archive/unstall
archive/u-fix3
archive/u-cwd
archive/resume-supersedes
archive/server-heap
archive/u-harness
archive/u-macos
archive/u-node
archive/u-eng2
archive/u-leader
archive/u-cutover
archive/u-cache
archive/u-sched
archive/u-engine
archive/chore/agpl-license
archive/note-x86-disk-room
archive/pass-cost
archive/prod-defects
archive/clippy-false-greens
archive/t-pace-variance-prototype
archive/outputs-reattach
archive/fix-retry-needs
archive/no-supersede-uncached
archive/fix/promoted-view-mtime
archive/rb-merge
archive/ft-sched
archive/ft-node
archive/ft-engine
archive/fx-sim
archive/fx2-mem
archive/fx2-store
archive/fx2-ci
archive/fx-work
archive/fx-ci
archive/fx-sched
archive/fx-req
archive/fx-store
archive/fx-cache
archive/rb-storage
archive/rb-scheduling
archive/rb-sweep
archive/rb-tracking
archive/rb-workers
archive/rb-client
archive/rb-profiles
archive/rebuild
archive/batch-deploy
archive/fix-roll
archive/work
archive/fix-busy
archive/fix-perf
archive/fix-suite
archive/fix-spread
archive/fix-sig
archive/fix-wait
archive/fix-init
archive/sizing
archive/fix-drift
archive/delivery
archive/fix-snap
archive/fix-own
archive/fix-rollout
archive/fix-hang
archive/fix-tree
archive/images
archive/fill
archive/sched-gate-preparing-after
archive/takeover-sim
archive/image-d244b22
archive/image-ce8a09e
archive/image-c9ff4f7
archive/image-489bec9
archive/image-7e07ffb
archive/image-583ea93
archive/image-8e1cd2c
archive/image-fbf0a9c
archive/image-6924e11
archive/image-29cabc3
archive/image-97ebb0e
archive/image-d0e23ac
archive/image-319fce9
archive/image-4f689e1
archive/image-feacbcd
archive/image-d5d9446
archive/image-6b86940
archive/fix/dedup-priority-promotion
archive/image-a5b0fe3
archive/image-462afb1
archive/image-f39d42c
archive/image-6e71fb4
archive/image-0c62329
archive/resources
archive/image-112b6a6
archive/image-8b06530
archive/image-5ae7cd8
archive/fmt-fix-in-t-toml
archive/image-arm64
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
tilo/t#59
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Update 15:17Z 2026-11-13:
123aaf58is on production since 15:14:52Z (my promote). It also carries34ce569dandb96c6335.Proof on testing first: the schema step (34 to 35) with the old rows intact; the forced whole check set 8 of 8 under the new server; a state with new keys left rows named by ids, each with
ofequal to its outputs andoutsideNULL, their units' reads reused across runs; and one build served by its declared key from such a row (test/t-cache asked again after a change only the test run reads: its tests ran in 4 s with no build job,t_declared_served_total{by="declared"}0 to 1 on testing).Two properties of the new form to know. A build whose row the trust rule refuses (a person's build over a row main wrote) still leaves its units' reads, named by no row, until they age out after four days; they are a few KB each and shared by content. And what is left of a row is its id map, about 25 KB in hex; a
byteaform would about halve it.I read the table's growth, the declared counters and admission at 5, 15 and 60 minutes and put the hour's table here.
Update 14:52Z 2026-11-13: fixed on main as
123aaf58; not on production yet.jobs/declared: a unit's outside reads are kept once, and a declared build's row names them by id.It is the change described below with the rollback rule added:outside_idsis{"of": <outputs>, "ids": {unit: id}}; a reader takesoutsidewhen it is set (the row's last writer said it), else the ids only whenofis the row's outputs, else the reads are unknown. A test replays the statement of the build before over new rows in the four cases (known or unknown reads, the same or other outputs): no row is read through ids left behind.Forced whole check set on testing: 8 of 8 on the commit (run ra0aa006676, PostgreSQL 18), its nine new tests among them. Production-size test with the extra field: first head 7.7 times smaller, a second head 9.3 times, 8.4 after two.
Next from my side: main's head on testing (the schema step, the old rows still read, a forced set writing rows in the new form, a declared hit from one), then the promote, which also carries your
34ce569dandb96c6335. I readb96c6335for the upgrade: no protocol, contract or job file changes. After it I read the table's growth, the declared counters against 13:23 to 13:53Z (served by declared key 1,184 per half hour), the database's memory against 4.9 GB, and admission against the half hour before. If you would rather promoteb96c6335yourselves first, say so here soon; the volume had 28.1 GB free at 14:43Z.Update 14:36Z 2026-11-13: the fix is written and passes on testing; I am holding it for one more rule before it lands. A unit's reads are kept once in
outside_readsunder the hash of their JSON text and a row names them by unit (outside_ids,outsideNULL for rows written from now on). The schema step only creates the table and adds the column. Rows written before stay readable until they age out.Kept, the upsert's rule and what a hit is held to are unchanged.What is left is mostly the rows' id maps (about 25 KB a row in hex); a
byteaform would about halve that and is a later step. Largest statement 2.55 MB of reads and 1.51 MB of rows against the 4 MiB bound; a read of 32 keys named 5,501 units' reads and fetched 1,187. The forced whole check set passed 8 of 8 on testing (run r3489aa9296, PostgreSQL 18), the eight new tests among them.Why I hold it: a rollback. The build before this one writes rows with its own statement, which does not know
outside_idsand leaves it. After a roll-forward a row it rewrote with unknown reads and other outputs would be read through the ids of the build before, as known, and a declared hit could be served against another build's reads. So an id map will name the outputs it was written for, and a reader takesoutsidewhen it is there, else the ids only when their outputs are the row's, else unknown. That is being added with tests that replay the old statement over a new row; the amended commit gets its own check set. The volume had 28.0 GB free at 14:31Z.Update 14:01Z 2026-11-13: the table's own size over a full hour, which corrects my rate. From 12:59:44 to 13:59:56Z
declared_buildsgrew 882 MB (+88, +551, +243 MB in the three 20-minute steps), the database 979 MB, the volume's use 875 MB;readsdid not grow andcommit_keystook 16 MB. That is 0.86 GB an hour, not the 1.1 I wrote from 70 minutes of rows last written, and nine tenths of the volume's growth. With 28.0 GB free the room lasts about 33 hours at the hour's rate, 18 to 24 at the rate of its bursts. The fix is being written; nothing of it is on main yet.What is happening, 2026-11-13 on t.tilo.so. Since
f06bfdc3went live (12:32Z)declared_buildstakes about 1.1 GB an hour, three times yesterday's average, and the database's volume has about a day of room left. A full t-pg-1 stops production (it did on 11-02).declared_buildsat 13:48Zoutsidedeclared_builds, 12:59 to 13:19Z and 13:19 to 13:39Zoutsidestored by rows last written, per ten minutes, 11:10 to 12:20Zoutsidenow and beforeoutsidestored by day of last writeIt is not bloat: autovacuum ran on the table at 13:39Z and on its TOAST table at 13:46Z, with no dead rows left.
Why.
f06bfdc3did what it was for: builds held tounitfell from 29% to 1.3%, so the clippy family's builds are now kept with what their units read, where theiroutsidewas NULL before. A row keeps the reads of every unit of its package's closure (closure,outside_of), by value. So a unit's reads are written again in the row of every package that builds on it, and again for every head that re-keys those packages. With three days kept, 1.1 GB an hour wants about 80 GB.Proposal. Keep each unit's reads once. A table
outside_reads (id BYTEA PRIMARY KEY, reads JSONB NOT NULL, at_ms BIGINT NOT NULL),idthe hash of the unit'sOutsideas written; a row ofdeclared_buildsnames its units' ids (a new column,outsideleft NULL for new rows) and is read by fetching the ids its chunk names once. Rows written before stay readable as they are until their three days pass. What a lookup is given (Kept) is the same value as today for the same build; a row naming an id that is gone is a row whose reads are unknown, which is never served. This also cuts whatkeptcarries for a chunk of keys (up to 42 MB of text today), since units shared by the chunk's rows come once.I am commissioning this now, with a test at production's size (stored bytes, a statement's size, and the same
Keptback), because the room is about a day. Say here if you would rather have it another way; I build on declared.rs as it is and change nothing of what a declared hit is held to.One hour on production (
123aaf58, 15:14:52Z to 16:15Z 11-13): kept.declared_buildsoutside_readsBuilds held to
outsidein the hour: 1,962 (37 tounit, 1 undeclared). No check was tolderror. The one job that ended with a cause is #60'sstore_io, not this change. Still to read: the table after 12:30Z 11-14, when the rows that hold reads by value begin to pass their three days.declared_builds takes 1.1 GB an hour since f06bfdc3: each row repeats its closure's units' reads, and the database volume has about a day leftto declared_builds takes 0.86 GB an hour since f06bfdc3: each row repeats its closure's units' reads, and the database volume has about a day and a half left