kubo/core/node
Marcin Rataj a688b7eeac
fix(mfs): add soft limit for --flush=false (#10985)
* fix: add MFS operation limit for --flush=false

adds a global counter that tracks consecutive MFS operations performed
with --flush=false and fails with clear error after limit is reached.

this prevents unbounded memory growth while avoiding the data corruption
risks of auto-flushing.

- adds Internal.MFSNoFlushLimit config
- operations fail with actionable error at limit
- counter resets on successful flush or any --flush=true operation
- operations with --flush=true reset and don't count

this commit removes automatic flush from https://github.com/ipfs/kubo/pull/10971
and instead errors to encourage users of --flush=false to develop a habit
of calling 'ipfs files flush' periodically.

boxo will no longer auto-flush (https://github.com/ipfs/boxo/pull/1041) to
avoid corruption issues, and kubo applies the limit to 'ipfs files' commands
instead.

closes #10842

* test: add tests for MFSNoFlushLimit

tests verify the new Internal.MFSNoFlushLimit config option:
- default limit of 256 operations
- custom limit configuration
- counter reset on flush=true
- counter reset on explicit flush command
- limit=0 disables the feature
- multiple MFS command types count towards limit

* docs: explain why MFS operations fail instead of auto-flushing

addresses feedback from https://github.com/ipfs/kubo/pull/10985#pullrequestreview-3256250970

- clarify that automatic flushing at limit was considered but rejected
- explain the data corruption risks of auto-flushing
- guide users who want auto-flush to use --flush=true (default)
- document benefits of explicit failure for batch operations
2025-09-26 01:25:23 +02:00
..
helpers collection of typo fixes (#10647) 2024-12-29 21:27:41 -08:00
libp2p refactor(ci): optimize build workflows (#10973) 2025-09-19 14:44:38 +02:00
bitswap.go fix: Provide according to Reprovider.Strategy (#10886) 2025-08-08 10:56:44 +02:00
builder.go feat(config): AutoConf with "auto" placeholders (#10883) 2025-08-20 05:59:11 +02:00
core.go fix(mfs): add soft limit for --flush=false (#10985) 2025-09-26 01:25:23 +02:00
dns.go feat(config): AutoConf with "auto" placeholders (#10883) 2025-08-20 05:59:11 +02:00
groups.go docs(provide): validation and reprovide cycle visualization (#10977) 2025-09-19 18:47:30 +02:00
helpers.go refactor: remove goprocess (#10872) 2025-08-06 00:33:45 +02:00
identity.go chore: bump go-libp2p v0.22.0 & go1.18&go1.19 2022-09-09 17:09:38 +02:00
ipns.go refactor: update to boxo without goprocess (#10567) 2024-11-19 18:04:22 +01:00
peering.go chore: migrate peering to ipfs/boxo (#10157) 2023-10-31 13:45:51 +00:00
provider.go fix: SweepingProvider slow start (#10980) 2025-09-25 17:11:58 +02:00
storage.go fix: provide Filestore nodes (#10990) 2025-09-26 00:49:02 +02:00