Skip to content

Curio v1.27.4

Choose a tag to compare

@Reiers Reiers released this 28 Apr 11:59
· 49 commits to main since this release
23d78ff

Curio v1.27.4

03ABD6C3-1CDB-42DA-848C-90D9853BAFAB

✨ Overview

Curio v1.27.4 brings the PDP proving stack out of the parallel pdpv0 branch and into the main release train. From this release on, every Curio node ships with PDP support by default, with a long tail of stabilisation fixes for retrieval, partial content, and the proof pipeline. Storage Providers running PDP no longer need a separate build.

Beyond PDP, this release ships meaningful Market 2.0 (mk20) hardening.

Building from source now requires Go 1.26 or newer.

Storage Providers are strongly encouraged to upgrade, particularly those running HTTPS retrieval, those on the pdpv0 branch (now folded into main), or anyone who hit the parked_pieces uniqueness or config-layer ordering issues from v1.27.3.

Field Value
Version v1.27.4
Type Stable
Compare v1.27.3...v1.27.4 (33 commits)
Build Go 1.26+ required to build from source
Schema parked_pieces uniqueness migration applied automatically

⭐ Highlights

🛰️ PDP V0 lands in main

The PDP proving stack moves out of the parallel pdpv0 branch and into the primary release train. From this release on, every Curio node ships with PDP support. No separate build, no separate config layer.

#1106 Merge pdpv0 into main
#1127 Post-migration fixes
#1129 Partial-content serving for pieces
#1150 frisbii update + fast-path Has() for head requests
#1112 Urgent: tx in taskFunc callbacks unblocks pdpv0 upgrades

🛒 Market 2.0 (mk20) hardening

Backpressure and client filter on inbound deals, DDO start_duration clamps, contract-as-client authentication path, and a follow-up on the mk12 indexing regression that v1.27.3 surfaced.

#1087 Mk20 updates
#1130 Fix mk12 indexing
#1169 marketAddress client toggle and improvements

📡 IPNI ad chain race condition fixed

Concurrent IPNI ad publishers could read the same ipni_head, build different ads against the same predecessor, and last-writer-wins the head update. The visible result was a disconnected provider head chain. Fixed with an optimistic compare-and-swap on ipni_head so an ad is only inserted when the head still matches the predecessor it was built and signed against.

#1149 Fix IPNI Ad creation race condition

🎯 Unseal-by-piece

Accepts a list of PieceCIDs and resolves the minimal covering set of sectors to unseal. Hit-rate-sorted best-effort (true bin-packing is NP-hard), biased toward sectors already marked to keep an unsealed copy. Logs which sectors were already selected and which are now selected, plus the relationships.

#1100 unseal-by-piece


🛠️ Upgrade prep for Storage Providers

Read this before upgrading.

Concern What to know
HTTPS retrieval Upgrade. The goroutine + fd leak fix in #1141 is real.
parked_pieces Migration tightens an existing uniqueness constraint (#1163). Duplicate active rows from the previous behavior are logged rather than silently consolidated. Worth a glance before upgrade.
ParkPieceMinFreeStoragePercent Default lowered from 20 to 5 (#1142). Storage Providers who relied on the previous default for headroom should set the value explicitly.
PDP V0 branch users pdpv0 is now merged into main. Existing pdpv0 builds will pick up main for their next build.
Building from source Go 1.26+ is now required (#1155). The Debian apt packages still ship a self-contained binary, no Go install needed.
FFI Updated (#1177). Source builds will pull the new version automatically; no operator action needed.

🐛 Bug fixes

PR Title
#1141 Goroutine and fd leak in Reader/ReaderPiece/cachedreader
#1149 IPNI ad creation race condition
#1147 Snap edge case: CommR == CommK on all-zero data
#1163 parked_pieces entries truly unique
#1130 mk12 indexing
#1127 PDPv0 issues after migration
#1129 Partial content serving for pieces
#1112 Urgent: use tx in taskFunc callbacks
#1113 IPNI: urlhelper.FromURLWithPort for correct multiaddr generation
#1116 Include CommR in proofshare client request idempotency key
#1119 Cap CanAccept slice to len(ids) (out-of-bounds panic)
#1117 Preserve config layer ordering during dedup
#1161 0315sql multi-query rewrite (hours of delay on large SPs)
#1172 Filter SQL bug
#1169 marketAddress client toggle and improvements

🔧 Improvements

PR What it adds
#1138 Respect PostedTime in scheduling
#1100 Unseal-by-piece
#1098 Singleton task run-now in WebUI
#1164 TaskID clickable in Recent Failures
#1080 Snark consumer integration and docs
#1167 Replace local savecache with upstream commp-hash-hash
#1142 ParkPieceMinFreeStoragePercent default lowered to 5

📦 Dependencies

PR Update
#1177 FFI
#1170 ipld-prime
#1155 Go 1.26
#1104 google.golang.org/grpc 1.77.0 → 1.79.3
#1107 github.com/buger/jsonparser 1.1.1 → 1.1.2
#1056 Bulk dependency updates for security advisories
🏗️ Build & CI (click to expand)
PR Change
#1159 Switch to Postgres template itests
#1162 CI speed test, runner type retuned (AMD c5a 2xlarge)
#1160 AMI test workflow
#1166 PDPv0: switch to AWS CI (also bumped Go 1.25)
#1140 End-to-end deal tests
#1115 Better DB-in-transaction test
#1144 Cached reader tests
#1168 Downgrade test friendly with template DBs
#1143 Coverage report on forks
#1171 Fix apt cache for CI tests
#1158 Trap command + topdir extraction
#1135 Prevent "add to FOC project" workflow failure for existing items
Reverts
PR Note
#1123 Revert "itests should try pg / scylla" (#1094). The replacement landed as Postgres template itests in #1159.

🙏 Contributors

@LexLuthr · @magik6k · @snadrus · @beck-8 · @rvagg · @TippyFlitsUK · @galargh · @rjan90 · @lordshashank · @BigLep · @Reiers

Thanks to everyone who built, reviewed, and tested this release.


📜 Full Changelog: v1.27.3...v1.27.4
🐛 Issues: https://github.com/filecoin-project/curio/issues
💬 Help: Filecoin Slack #fil-curio-help