mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 10:27:46 +08:00
|
Some checks are pending
CodeQL / codeql (push) Waiting to run
Docker Check / lint (push) Waiting to run
Docker Check / build (push) Waiting to run
Gateway Conformance / gateway-conformance (push) Waiting to run
Gateway Conformance / gateway-conformance-libp2p-experiment (push) Waiting to run
Go Build / go-build (push) Waiting to run
Go Check / go-check (push) Waiting to run
Go Lint / go-lint (push) Waiting to run
Go Test / go-test (push) Waiting to run
Interop / interop-prep (push) Waiting to run
Interop / helia-interop (push) Blocked by required conditions
Interop / ipfs-webui (push) Blocked by required conditions
Sharness / sharness-test (push) Waiting to run
Spell Check / spellcheck (push) Waiting to run
* feat: fast provide * Check error from provideRoot * do not provide if nil router * fix(commands): prevent panic from typed nil DHTClient interface Fixes panic when ipfsNode.DHTClient is a non-nil interface containing a nil pointer value (typed nil). This happened when Routing.Type=delegated or when using HTTP-only routing without DHT. The panic occurred because: - Go interfaces can be non-nil while containing nil pointer values - Simple `if DHTClient == nil` checks pass, but calling methods panics - Example: `(*ddht.DHT)(nil)` stored in interface passes nil check Solution: - Add HasActiveDHTClient() method to check both interface and concrete value - Update all 7 call sites to use proper check before DHT operations - Rename provideRoot → provideCIDSync for clarity - Add structured logging with "fast-provide" prefix for easier filtering - Add tests covering nil cases and valid DHT configurations Fixes: https://github.com/ipfs/kubo/pull/11046#issuecomment-3525313349 * feat(add): split fast-provide into two flags for async/sync control Renames --fast-provide to --fast-provide-root and adds --fast-provide-wait to give users control over synchronous vs asynchronous providing behavior. Changes: - --fast-provide-root (default: true): enables immediate root CID providing - --fast-provide-wait (default: false): controls whether to block until complete - Default behavior: async provide (fast, non-blocking) - Opt-in: --fast-provide-wait for guaranteed discoverability (slower, blocking) - Can disable with --fast-provide-root=false to rely on background reproviding Implementation: - Async mode: launches goroutine with detached context for fire-and-forget - Added 10 second timeout to prevent hanging on network issues - Timeout aligns with other kubo operations (ping, DNS resolve, p2p) - Sufficient for DHT with sweep provider or accelerated client - Sync mode: blocks on provideCIDSync until completion (uses req.Context) - Improved structured logging with "fast-provide-root:" prefix - Removed redundant "root CID" from messages (already in prefix) - Clear async/sync distinction in log messages - Added FAST PROVIDE OPTIMIZATION section to ipfs add --help explaining: - The problem: background queue takes time, content not immediately discoverable - The solution: extra immediate announcement of just the root CID - The benefit: peers can find content right away while queue handles rest - Usage: async by default, --fast-provide-wait for guaranteed completion Changelog: - Added highlight section for fast root CID providing feature - Updated TOC and overview - Included usage examples with clear comments explaining each mode - Emphasized this is extra announcement independent of background queue The feature works best with sweep provider and accelerated DHT client where provide operations are significantly faster. * fix(add): respect Provide config in fast-provide-root fast-provide-root should honor the same config settings as the regular provide system: - skip when Provide.Enabled is false - skip when Provide.DHT.Interval is 0 - respect Provide.Strategy (all/pinned/roots/mfs/combinations) This ensures fast-provide only runs when appropriate based on user configuration and the nature of the content being added (pinned vs unpinned, added to MFS or not). * Update core/commands/add.go --------- Co-authored-by: gammazero <11790789+gammazero@users.noreply.github.com> Co-authored-by: Marcin Rataj <lidel@lidel.org> |
||
|---|---|---|
| .. | ||
| changelogs | ||
| examples | ||
| logo | ||
| production | ||
| specifications | ||
| add-code-flow.md | ||
| AUTHORS | ||
| cli-http-api-core-diagram.png | ||
| command-completion.md | ||
| config.md | ||
| content-blocking.md | ||
| customizing.md | ||
| datastores.md | ||
| debug-guide.md | ||
| delegated-routing.md | ||
| developer-certificate-of-origin | ||
| EARLY_TESTERS.md | ||
| environment-variables.md | ||
| experimental-features.md | ||
| file-transfer.md | ||
| fuse.md | ||
| gateway.md | ||
| generate-authors.sh | ||
| http-rpc-clients.md | ||
| implement-api-bindings.md | ||
| libp2p-resource-management.md | ||
| metrics.md | ||
| plugins.md | ||
| provide-stats.md | ||
| README.md | ||
| RELEASE_CHECKLIST.md | ||
| RELEASE_ISSUE_TEMPLATE.md | ||
| releases_thunderdome.md | ||
| releases.md | ||
| telemetry.md | ||
| transports.md | ||
| windows.md | ||
Developer Documentation and Guides
If you are looking for User Documentation & Guides, please visit docs.ipfs.tech or check General Documentation.
If you’re experiencing an issue with IPFS, please follow our issue guide when filing an issue!
Otherwise, check out the following guides to using and developing IPFS:
General Documentation
Developing kubo
- First, please read the Contributing Guidelines for IPFS projects and then the Contributing Guidelines for Go code specifically
- Building on…
- Performance Debugging Guidelines
- Release Checklist
Guides
- How to Implement an API Client
- Connecting with Websockets — if you want
js-ipfsnodes in web browsers to connect to yourkubonode, you will need to turn on websocket support in yourkubonode.
Advanced User Guides
- Transferring a File Over IPFS
- Installing command completion
- Mounting IPFS with FUSE
- Installing plugins
- Setting up an IPFS Gateway
Other
- Thanks to all our contributors ❤️ (We use the
generate-authors.shscript to regenerate this list.) - How to file a GitHub Issue