Repository navigation
perf: concurrent PutObject parts - #148
Conversation
|
/forge-perf |
ce41d9b to
34d0b4f
Compare
|
/forge-perf |
forge-perf
Verdict: slower, judged on the median against its noise band. Positive deltas mean the branch ingests faster. Main runs the current main set; branch swaps in this commit's image. The runs table on the forge-perf page lists each run. |
|
The trace answers it. The concurrency is working exactly as coded; it just can't help, because the time is spent waiting on S3, and adding connections makes the S3 side worse. What the trace shows for this upload. One 130.6 MiB blob into Piri, nine parts. Piri's object store put took 3.39 s. The ingest side is fast: whenever a buffer was free, the next 16 MiB part was read from Ingot in about 40 to 60 ms, so the whole body could have been read in about half a second. Every part was dispatched by 1.34 s into the put. The put then sat idle for 1.95 s waiting for the slowest in-flight part, and only then sent CompleteMultipartUpload. The part PUTs to S3 are the problem. Same size, wildly different times:
No retries: each part has exactly one HTTP span with a 200. Two parts took 2.0 and 2.5 s while their neighbours, dispatched at the same moment, took 300 to 450 ms. That is a bimodal S3 tail, the signature of connections stalling on packet loss at the instance's egress cap rather than S3 being uniformly slow. Why parallel parts don't help here. This run was on the m9gd.8xlarge with 64 drill workers, which the calibration sweep already put at the box's S3 ceiling. Each upload's bytes leave the box at the aggregate rate divided by 64 regardless of how many connections it opens. With the PR, 64 uploads each hold up to 4 parts in flight, so 256 connections share the NIC instead of 64. Each connection gets a quarter of the bandwidth, the ENA allowance drops more packets, and stalled connections crawl. An upload can't finish until its slowest part lands, so per-upload latency tracks the worst of its four connections instead of the average of one. Two more costs come on top: minio-go keeps only 16 idle connections per host, so most parts dial a new TLS connection and re-run slow start, and every put allocates and zeroes a 64 MiB buffer pool. What it means for the PR. The read-ahead in the parallel path also gates on the same four buffers, so from part 5 onward every read waited for an upload to finish. The gaps between part starts match the end times of earlier parts exactly. In other words the parallel path turned a fast reader into one paced by S3 tail latency, with no aggregate gain. Per-upload concurrency only pays when a single upload has the box's bandwidth to itself, which the drill never does. If the goal is faster ingest under the drill, the knob is the aggregate: fewer, fatter connections, or getting the box's S3 egress higher (the s3-ceiling numbers), not more connections per upload. I'd close this PR and leave the default options, which also keeps the s3-ceiling calibration modelling the real call. |
Stop tuning the S3 client. The forge-perf numbers say main is already at the box's network ceiling, so no Piri-side upload change can show up in the drill.
Main runs at 93 percent of the S3 ceiling and 91 percent of the NIC, and both runs carry the What I would do instead, in order:
One small thing worth a look on the Piri side while the rest lands: in the accept step the HEAD on the freshly written blob took 233 ms, which is on the critical path of every conclude. It is a symptom of the saturated NIC rather than a bug, but if allocate already records the size, that HEAD can go. |
## Summary - The pin at forge-perf 373f9ec asked for `pull-requests: read`. GitHub checks `pull-requests` for a comment or reaction whose issue is a pull request, so the first `/forge-perf` run on that pin (fil-forge/piri#148) failed with `Resource not accessible by integration (HTTP 403)` at the reaction step. - This pins forge-perf 7b373a4, whose jobs hold `pull-requests: write`, and grants write. fil-forge/piri#149 made the same change, and the next run on piri#148 passed all four jobs. - Until this merges, `/forge-perf` on this repository fails at its first step. ## Test plan - [x] `actionlint` clean. - [x] The same pin and grant ran end to end on fil-forge/piri#148. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
## Summary - The pin at forge-perf 373f9ec asked for `pull-requests: read`. GitHub checks `pull-requests` for a comment or reaction whose issue is a pull request, so the first `/forge-perf` run on that pin (fil-forge/piri#148) failed with `Resource not accessible by integration (HTTP 403)` at the reaction step. - This pins forge-perf 7b373a4, whose jobs hold `pull-requests: write`, and grants write. fil-forge/piri#149 made the same change, and the next run on piri#148 passed all four jobs. - Until this merges, `/forge-perf` on this repository fails at its first step. ## Test plan - [x] `actionlint` clean. - [x] The same pin and grant ran end to end on fil-forge/piri#148. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
## Summary - The pin at forge-perf 373f9ec asked for `pull-requests: read`. GitHub checks `pull-requests` for a comment or reaction whose issue is a pull request, so the first `/forge-perf` run on that pin (fil-forge/piri#148) failed with `Resource not accessible by integration (HTTP 403)` at the reaction step. - This pins forge-perf 7b373a4, whose jobs hold `pull-requests: write`, and grants write. fil-forge/piri#149 made the same change, and the next run on piri#148 passed all four jobs. - Until this merges, `/forge-perf` on this repository fails at its first step. ## Test plan - [x] `actionlint` clean. - [x] The same pin and grant ran end to end on fil-forge/piri#148. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
/forge-perf |
forge-perf
Verdict: within noise, judged on the median against its noise band. Positive deltas mean the branch ingests faster. Main runs the current main set; branch swaps in this commit's image. The runs table on the forge-perf page lists each run. |
Published from fil-forge/piri#148 - Digest: `sha256:b5ad03d3f41160409e6d435937987f76b91415f73180134777b1b839adf09d42` - Commit: fil-forge/piri@652613d - Publish run: https://github.com/fil-forge/piri/actions/runs/37007922557 Merging rewrites [`nodes/dev/apps/versions.env`](https://github.com/fil-forge/infra-nodes/blob/main/nodes/dev/apps/versions.env) and queues the image. The node picks it up on its next reconcile pass, waits for a safe proving window and then restarts the service, so the deploy happens well after this merges. Co-authored-by: fil-forge-bot[bot] <318653112+fil-forge-bot[bot]@users.noreply.github.com>
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b5ad03d` What fil-forge/piri brings over staging's pin, `7ba7d94..652613d`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) ## ingot `sha256:f84a61c` → `sha256:4afc495` What fil-forge/ingot brings over staging's pin, `73de672..4f1d5a0`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:4afc495` What fil-forge/ingot brings over staging's pin, `73de672..4f1d5a0`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:4afc495` What fil-forge/ingot brings over staging's pin, `73de672..4f1d5a0`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:a713773` What fil-forge/ingot brings over staging's pin, `73de672..4124d17`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:ff67efa` What fil-forge/ingot brings over staging's pin, `73de672..054dd6c`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17) - Drop a multipart part's spool copy once it parks (fil-forge/ingot#217) (054dd6c)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:579531f` What fil-forge/ingot brings over staging's pin, `73de672..3f09138`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17) - Drop a multipart part's spool copy once it parks (fil-forge/ingot#217) (054dd6c) - Split local blob storage into a spool and a cache, and evict to a byte budget (fil-forge/ingot#218) (3f09138)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:579531f` What fil-forge/ingot brings over staging's pin, `73de672..3f09138`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17) - Drop a multipart part's spool copy once it parks (fil-forge/ingot#217) (054dd6c) - Split local blob storage into a spool and a cache, and evict to a byte budget (fil-forge/ingot#218) (3f09138)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:944ae69` What fil-forge/ingot brings over staging's pin, `73de672..3c2561d`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17) - Drop a multipart part's spool copy once it parks (fil-forge/ingot#217) (054dd6c) - Split local blob storage into a spool and a cache, and evict to a byte budget (fil-forge/ingot#218) (3f09138) - Report local blob storage's size and removals as metrics (fil-forge/ingot#219) (3c2561d)
Sets every staging pin in `nodes/staging/eu-central-3/apps/versions.env` to what `nodes/dev/apps/versions.env` pins on `main`. Merging this is the promotion: the node picks it up on its next reconcile pass, waits for a safe proving window and restarts each service that changed. This pull request is rebuilt on every push to `main` and closed once staging matches dev, so edits to it are overwritten unless they are pushed to `bot/promote-staging` by hand. ## piri `sha256:c16a9f9` → `sha256:b6f7371` What fil-forge/piri brings over staging's pin, `7ba7d94..d20dcec`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/piri#147) (a6e6377) - fix: forge-perf needs PR write (fil-forge/piri#149) (4be8d80) - ci: call libforge workspace test workflow at @main (fil-forge/piri#150) (6bd80b7) - Say why `upgrade-check` finds an upgrade unsafe (fil-forge/piri#151) (2773386) - chore(deps): bump github.com/labstack/echo/v4 from 4.15.4 to 4.16.0 (fil-forge/piri#155) (5b9b004) - chore(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (fil-forge/piri#154) (dcc1570) - chore(deps): bump modernc.org/sqlite from 1.59.0 to 1.60.0 (fil-forge/piri#161) (de4bff7) - chore(deps): bump github.com/ethereum/go-ethereum from 1.17.5 to 1.17.6 (fil-forge/piri#159) (eaa6bc4) - chore(deps): bump github.com/alanshaw/dag-json-gen from 0.0.9 to 0.0.10 (fil-forge/piri#160) (e9f9ede) - chore(deps): bump github.com/shirou/gopsutil/v4 from 4.26.8 to 4.26.9 (fil-forge/piri#158) (074f08e) - feat: support digest-less allocations (fil-forge/piri#153) (2265f2d) - perf: concurrent PutObject parts (fil-forge/piri#148) (652613d) - perf: tweak settle concurrency (fil-forge/piri#163) (d20dcec) ## ingot `sha256:f84a61c` → `sha256:5bacbc2` What fil-forge/ingot brings over staging's pin, `73de672..2831688`: - Add /forge-perf: benchmark a pull request on forge-perf (fil-forge/ingot#196) (4fe80d3) - perf: use pull based `go-fee` with pooled buffers (fil-forge/ingot#197) (d84cfc3) - Grant forge-perf's pr-run.yml pull-requests: write again (fil-forge/ingot#200) (1d88644) - ci: call libforge workspace test workflow at @main (fil-forge/ingot#199) (ae1dff9) - perf: md5 only when needed (fil-forge/ingot#198) (adcf0a6) - feat: blob hash trails uploaded data (fil-forge/ingot#201) (4f1d5a0) - build(deps): bump github.com/aws/aws-sdk-go-v2/credentials from 1.20.5 to 1.20.6 (fil-forge/ingot#211) (dc0c25c) - build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.113.2 to 1.113.4 (fil-forge/ingot#214) (bb09c6a) - build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.33.5 to 1.33.6 (fil-forge/ingot#212) (f814a48) - Free a deleted object's spool copy (fil-forge/ingot#216) (4124d17) - Drop a multipart part's spool copy once it parks (fil-forge/ingot#217) (054dd6c) - Split local blob storage into a spool and a cache, and evict to a byte budget (fil-forge/ingot#218) (3f09138) - Report local blob storage's size and removals as metrics (fil-forge/ingot#219) (3c2561d) - Restore the cache's retention windows and forced pass (fil-forge/ingot#220) (2831688)

Second attempt refs #140