From 91dd98c3deb4da1eb9a996a351288e17ff3f8e35 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Wed, 19 Nov 2025 17:55:23 +0100 Subject: [PATCH] feat(rpc): add fast-provide-root and fast-provide-wait to Add add FastProvideRoot and FastProvideWait options to UnixfsAddSettings, allowing RPC clients to control immediate DHT providing of root CIDs for faster content discovery these options default to server config (Import.FastProvideRoot and Import.FastProvideWait) when not explicitly set by the client --- client/rpc/unixfs.go | 8 ++++++++ core/coreiface/options/unixfs.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/client/rpc/unixfs.go b/client/rpc/unixfs.go index 316cc21a8..68586472b 100644 --- a/client/rpc/unixfs.go +++ b/client/rpc/unixfs.go @@ -56,6 +56,14 @@ func (api *UnixfsAPI) Add(ctx context.Context, f files.Node, opts ...caopts.Unix req.Option("raw-leaves", options.RawLeaves) } + if options.FastProvideRootSet { + req.Option("fast-provide-root", options.FastProvideRoot) + } + + if options.FastProvideWaitSet { + req.Option("fast-provide-wait", options.FastProvideWait) + } + switch options.Layout { case caopts.BalancedLayout: // noop, default diff --git a/core/coreiface/options/unixfs.go b/core/coreiface/options/unixfs.go index 45e880ed1..b95e54621 100644 --- a/core/coreiface/options/unixfs.go +++ b/core/coreiface/options/unixfs.go @@ -52,6 +52,11 @@ type UnixfsAddSettings struct { PreserveMtime bool Mode os.FileMode Mtime time.Time + + FastProvideRoot bool + FastProvideRootSet bool + FastProvideWait bool + FastProvideWaitSet bool } type UnixfsLsSettings struct { @@ -97,6 +102,11 @@ func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, cid.Prefix, PreserveMtime: false, Mode: 0, Mtime: time.Time{}, + + FastProvideRoot: false, + FastProvideRootSet: false, + FastProvideWait: false, + FastProvideWaitSet: false, } for _, opt := range opts { @@ -396,3 +406,23 @@ func (unixfsOpts) Mtime(seconds int64, nsecs uint32) UnixfsAddOption { return nil } } + +// FastProvideRoot sets whether to immediately provide root CID to DHT for faster discovery. +// If not set, server uses Import.FastProvideRoot config value (default: true). +func (unixfsOpts) FastProvideRoot(enable bool) UnixfsAddOption { + return func(settings *UnixfsAddSettings) error { + settings.FastProvideRoot = enable + settings.FastProvideRootSet = true + return nil + } +} + +// FastProvideWait sets whether to block until fast provide completes. +// If not set, server uses Import.FastProvideWait config value (default: false). +func (unixfsOpts) FastProvideWait(enable bool) UnixfsAddOption { + return func(settings *UnixfsAddSettings) error { + settings.FastProvideWait = enable + settings.FastProvideWaitSet = true + return nil + } +}