Summary
bitsocial-cli pins kubo@0.42.0 (package.json) and owns the production daemon spawn
(src/ipfs/startIpfs.ts, spawn(kuboExePath, ["daemon", "--migrate"])). It should be bumped to
kubo@0.43.0.
This is a release blocker for the garbage-collection change in pkcprotocol/pkc-js#225: pkc-js
only carries kubo as a devDependency (its test binary), so the daemon that actually runs in
production is the one this repo ships.
Why it blocks
pkc-js is changing repo.gc from an effectively-never lottery (Math.random() < 0.00001 per
community sync) to a real schedule: GC once the repo crosses 90% of Datastore.StorageMax, with a
1h floor between runs. That is the fix for the node that reached ~190 GB against a 10 GB
StorageMax and then exhausted both disk and inodes.
On kubo <= 0.42.0, running repo gc concurrently with MFS writes can wedge MFS permanently — GC
collects blocks an in-flight write has added but not yet linked into the persisted MFS root, and the
next traversal blocks forever on a missing block while holding the MFS mutex. Making GC actually run
on 0.42.0 would therefore trade a disk-exhaustion failure for a daemon-wedge failure.
kubo 0.43.0 fixes both halves:
Change needed
package.json: "kubo": "0.42.0" -> "0.43.0", regenerate the lockfile.
- No
--enable-gc flag is needed. pkc-js drives GC over the RPC API, which does the same work;
--enable-gc would only add a second, independent schedule.
- Worth checking while here:
Datastore.StorageMax is what the new pkc-js watermark measures
against, so whatever value the CLI writes into the repo config is now load-bearing rather than
decorative.
0.43.0 breaking change to check
The daemon refuses to start when Ipns.RecordLifetime is shorter than Ipns.RepublishPeriod. If
the CLI writes either key into the repo config, verify the pair is still valid.
Related
Summary
bitsocial-clipinskubo@0.42.0(package.json) and owns the production daemon spawn(
src/ipfs/startIpfs.ts,spawn(kuboExePath, ["daemon", "--migrate"])). It should be bumped tokubo@0.43.0.This is a release blocker for the garbage-collection change in pkcprotocol/pkc-js#225:
pkc-jsonly carries
kuboas adevDependency(its test binary), so the daemon that actually runs inproduction is the one this repo ships.
Why it blocks
pkc-js is changing
repo.gcfrom an effectively-never lottery (Math.random() < 0.00001percommunity sync) to a real schedule: GC once the repo crosses 90% of
Datastore.StorageMax, with a1h floor between runs. That is the fix for the node that reached ~190 GB against a 10 GB
StorageMaxand then exhausted both disk and inodes.On kubo <= 0.42.0, running
repo gcconcurrently with MFS writes can wedge MFS permanently — GCcollects blocks an in-flight write has added but not yet linked into the persisted MFS root, and the
next traversal blocks forever on a missing block while holding the MFS mutex. Making GC actually run
on 0.42.0 would therefore trade a disk-exhaustion failure for a daemon-wedge failure.
kubo 0.43.0 fixes both halves:
ipfs adduses, and GC reads the MFS root whileholding the GC lock, so GC can no longer collect data a live write still needs
(fix(mfs): stop repo gc from freezing files ops ipfs/kubo#11386).
files read/files writehonor--timeout(feat(mfs): bound under-lock DAG reads ipfs/boxo#1185).Change needed
package.json:"kubo": "0.42.0"->"0.43.0", regenerate the lockfile.--enable-gcflag is needed. pkc-js drives GC over the RPC API, which does the same work;--enable-gcwould only add a second, independent schedule.Datastore.StorageMaxis what the new pkc-js watermark measuresagainst, so whatever value the CLI writes into the repo config is now load-bearing rather than
decorative.
0.43.0 breaking change to check
The daemon refuses to start when
Ipns.RecordLifetimeis shorter thanIpns.RepublishPeriod. Ifthe CLI writes either key into the repo config, verify the pair is still valid.
Related
sync: false/ zero-byte blocks; adjacent (it is the corruption mode observed onthe same node) but a separate fix