@cryptotaxi247 / kubo / commits / 698354342

feat(provider): info log AcceleratedDHTClient crawl (#11143)

* feat(provider): log fullrt crawl * fix(provider): improve AcceleratedDHTClient log messages use config option name instead of internal "fullrt" jargon, align terminology with daemon startup message, add time estimate --------- Co-authored-by: Marcin Rataj <lidel@lidel.org>

Guillaume Michel committed Jan 15, 2026 at 17:11 UTC 698354342edd396bebd99e067de732d14aca07fe
1 file changed +34 -3
core/node/provider.go
+34 -3
@@ -16,6 +16,7 @@ import (
16 "github.com/ipfs/go-datastore"
17 "github.com/ipfs/go-datastore/namespace"
18 "github.com/ipfs/go-datastore/query"
19 + log "github.com/ipfs/go-log/v2"
20 "github.com/ipfs/kubo/config"
21 "github.com/ipfs/kubo/repo"
22 irouting "github.com/ipfs/kubo/routing"
@@ -53,6 +54,8 @@ const (
54 keystoreDatastorePath = "keystore"
55 )
56
57 +var errAcceleratedDHTNotReady = errors.New("AcceleratedDHTClient: routing table not ready")
58 +
59 // Interval between reprovide queue monitoring checks for slow reprovide alerts.
60 // Used when Provide.DHT.SweepEnabled=true
61 const reprovideAlertPollInterval = 15 * time.Minute
@@ -325,13 +328,34 @@ type dhtImpl interface {
328
329 type fullrtRouter struct {
330 *fullrt.FullRT
331 + ready bool
332 + logger *log.ZapEventLogger
333 +}
334 +
335 +func newFullRTRouter(fr *fullrt.FullRT, loggerName string) *fullrtRouter {
336 + return &fullrtRouter{
337 + FullRT: fr,
338 + ready: true,
339 + logger: log.Logger(loggerName),
340 + }
341 }
342
343 // GetClosestPeers overrides fullrt.FullRT's GetClosestPeers and returns an
344 // error if the fullrt's initial network crawl isn't complete yet.
345 func (fr *fullrtRouter) GetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) {
333 - if !fr.Ready() {
334 - return nil, errors.New("fullrt: initial network crawl still running")
346 + if fr.ready {
347 + if !fr.Ready() {
348 + fr.ready = false
349 + fr.logger.Info("AcceleratedDHTClient: waiting for routing table initialization (5-10 min, depends on DHT size and network) to complete before providing")
350 + return nil, errAcceleratedDHTNotReady
351 + }
352 + } else {
353 + if fr.Ready() {
354 + fr.ready = true
355 + fr.logger.Info("AcceleratedDHTClient: routing table ready, providing can begin")
356 + } else {
357 + return nil, errAcceleratedDHTNotReady
358 + }
359 }
360 return fr.FullRT.GetClosestPeers(ctx, key)
361 }
@@ -382,6 +406,9 @@ func SweepingProviderOpt(cfg *config.Config) fx.Option {
406 // provides happen as fast as possible via a dedicated worker that continuously
407 // processes the queue regardless of this timing.
408 bufferedIdleWriteTime = time.Minute
409 +
410 + // loggerName is the name of the go-log logger used by the provider.
411 + loggerName = dhtprovider.DefaultLoggerName
412 )
413
414 bufferedProviderOpts := []buffered.Option{
@@ -411,6 +438,8 @@ func SweepingProviderOpt(cfg *config.Config) fx.Option {
438 ddhtprovider.WithDedicatedPeriodicWorkers(int(cfg.Provide.DHT.DedicatedPeriodicWorkers.WithDefault(config.DefaultProvideDHTDedicatedPeriodicWorkers))),
439 ddhtprovider.WithDedicatedBurstWorkers(int(cfg.Provide.DHT.DedicatedBurstWorkers.WithDefault(config.DefaultProvideDHTDedicatedBurstWorkers))),
440 ddhtprovider.WithMaxProvideConnsPerWorker(int(cfg.Provide.DHT.MaxProvideConnsPerWorker.WithDefault(config.DefaultProvideDHTMaxProvideConnsPerWorker))),
441 +
442 + ddhtprovider.WithLoggerName(loggerName),
443 )
444 if err != nil {
445 return nil, nil, err
@@ -419,7 +448,7 @@ func SweepingProviderOpt(cfg *config.Config) fx.Option {
448 }
449 case *fullrt.FullRT:
450 if inDht != nil {
422 - impl = &fullrtRouter{inDht}
451 + impl = newFullRTRouter(inDht, loggerName)
452 }
453 }
454 if impl == nil {
@@ -454,6 +483,8 @@ func SweepingProviderOpt(cfg *config.Config) fx.Option {
483 dhtprovider.WithDedicatedPeriodicWorkers(int(cfg.Provide.DHT.DedicatedPeriodicWorkers.WithDefault(config.DefaultProvideDHTDedicatedPeriodicWorkers))),
484 dhtprovider.WithDedicatedBurstWorkers(int(cfg.Provide.DHT.DedicatedBurstWorkers.WithDefault(config.DefaultProvideDHTDedicatedBurstWorkers))),
485 dhtprovider.WithMaxProvideConnsPerWorker(int(cfg.Provide.DHT.MaxProvideConnsPerWorker.WithDefault(config.DefaultProvideDHTMaxProvideConnsPerWorker))),
486 +
487 + dhtprovider.WithLoggerName(loggerName),
488 }
489
490 prov, err := dhtprovider.New(opts...)