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 + } +}