From 302cfa81aef0086024df8af7eb7cd6cbe485fd28 Mon Sep 17 00:00:00 2001 From: guillaumemichel Date: Wed, 11 Jun 2025 11:03:39 +0200 Subject: [PATCH] update reprovider dep --- core/node/groups.go | 18 +++++++++-------- core/node/provider.go | 47 +++++++++++++++++++++++++++++++++++++++---- go.mod | 2 +- go.sum | 6 ++---- 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/core/node/groups.go b/core/node/groups.go index d95e99497..652ee6ac4 100644 --- a/core/node/groups.go +++ b/core/node/groups.go @@ -17,6 +17,7 @@ import ( "github.com/ipfs/kubo/config" "github.com/ipfs/kubo/core/node/libp2p" "github.com/ipfs/kubo/p2p" + "github.com/libp2p/go-libp2p-kad-dht/reprovider" pubsub "github.com/libp2p/go-libp2p-pubsub" "github.com/libp2p/go-libp2p-pubsub/timecache" "github.com/libp2p/go-libp2p/core/peer" @@ -365,16 +366,17 @@ func Online(bcfg *BuildCfg, cfg *config.Config, userResourceOverrides rcmgr.Part fx.Provide(p2p.New), LibP2P(bcfg, cfg, userResourceOverrides), - OnlineProviders( - isProviderEnabled, - cfg.Reprovider.Strategy.WithDefault(config.DefaultReproviderStrategy), - cfg.Reprovider.Interval.WithDefault(config.DefaultReproviderInterval), - cfg.Routing.AcceleratedDHTClient.WithDefault(config.DefaultAcceleratedDHTClient), - int(cfg.Provider.WorkerCount.WithDefault(config.DefaultProviderWorkerCount)), - ), - KadProvider( + // OnlineProviders( + // isProviderEnabled, + // cfg.Reprovider.Strategy.WithDefault(config.DefaultReproviderStrategy), + // cfg.Reprovider.Interval.WithDefault(config.DefaultReproviderInterval), + // cfg.Routing.AcceleratedDHTClient.WithDefault(config.DefaultAcceleratedDHTClient), + // int(cfg.Provider.WorkerCount.WithDefault(config.DefaultProviderWorkerCount)), + // ), + SweepingReprovider( isProviderEnabled, cfg.Reprovider.Strategy.WithDefault(config.DefaultReproviderStrategy), + reprovider.WithReprovideInterval(cfg.Reprovider.Interval.WithDefault(config.DefaultReproviderInterval)), ), ) } diff --git a/core/node/provider.go b/core/node/provider.go index 4f918a090..ddf3c0af7 100644 --- a/core/node/provider.go +++ b/core/node/provider.go @@ -18,8 +18,12 @@ import ( "github.com/ipfs/kubo/config" "github.com/ipfs/kubo/repo" irouting "github.com/ipfs/kubo/routing" - dht "github.com/libp2p/go-libp2p-kad-dht" + dht_pb "github.com/libp2p/go-libp2p-kad-dht/pb" "github.com/libp2p/go-libp2p-kad-dht/reprovider" + "github.com/libp2p/go-libp2p/core/host" + peer "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/routing" + ma "github.com/multiformats/go-multiaddr" mh "github.com/multiformats/go-multihash" "go.uber.org/fx" ) @@ -166,7 +170,20 @@ func OnlineProviders(provide bool, providerStrategy string, reprovideInterval ti ) } -func KadProvider(provide bool, reprovideStrategy string, d *dht.IpfsDHT, opts ...reprovider.Option) fx.Option { +type kadClient interface { + GetClosestPeers(context.Context, string) ([]peer.ID, error) + Provide(context.Context, cid.Cid, bool) error + Context() context.Context + Host() host.Host + MessageSender() dht_pb.MessageSender +} + +type kadClientWithAddrsFilter interface { + kadClient + FilteredAddrs() []ma.Multiaddr +} + +func SweepingReprovider(provide bool, reprovideStrategy string, opts ...reprovider.Option) fx.Option { if !provide { return OfflineProviders() } @@ -180,10 +197,32 @@ func KadProvider(provide bool, reprovideStrategy string, d *dht.IpfsDHT, opts .. return fx.Options( keyProvider, - fx.Provide(func(d *dht.IpfsDHT, keyProvider provider.KeyChanFunc, opts ...reprovider.Option) (provider.Provider, error) { + fx.Provide(func(router routing.Routing, keyProvider provider.KeyChanFunc, opts ...reprovider.Option) (provider.Provider, error) { ctx := context.Background() + + dhtClient, ok := router.(kadClient) + if !ok { + return nil, errors.New("reprovide sweep only available for normal and accelerated DHT clients") + } + + var selfAddrs func() []ma.Multiaddr + if client, addrsFilter := dhtClient.(kadClientWithAddrsFilter); addrsFilter { + selfAddrs = client.FilteredAddrs + } else { + // Accelerated DHT doesn't have an address filter + selfAddrs = dhtClient.Host().Addrs + } + + opts = append(opts, + reprovider.WithPeerID(dhtClient.Host().ID()), + reprovider.WithRouter(dhtClient), + reprovider.WithSelfAddrs(selfAddrs), + reprovider.WithMessageSender(dhtClient.MessageSender()), + reprovider.WithAddLocalRecord(func(h mh.Multihash) error { return dhtClient.Provide(ctx, cid.NewCidV1(cid.Raw, h), false) }), + ) + // Create DHT Sweeping Reprovider - r, err := reprovider.NewDHTReprovider(d, opts...) + r, err := reprovider.NewReprovider(dhtClient.Context(), opts...) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index 4b2f7b186..fd40cd8ba 100644 --- a/go.mod +++ b/go.mod @@ -53,7 +53,7 @@ require ( github.com/libp2p/go-doh-resolver v0.5.0 github.com/libp2p/go-libp2p v0.43.0 github.com/libp2p/go-libp2p-http v0.5.0 - github.com/libp2p/go-libp2p-kad-dht v0.33.1 + github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611084458-65bebac64139 github.com/libp2p/go-libp2p-pubsub v0.14.2 github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b github.com/libp2p/go-libp2p-pubsub-router v0.6.0 diff --git a/go.sum b/go.sum index 61e7aa997..1cd99d9ca 100644 --- a/go.sum +++ b/go.sum @@ -514,10 +514,8 @@ github.com/libp2p/go-libp2p-gostream v0.6.0 h1:QfAiWeQRce6pqnYfmIVWJFXNdDyfiR/qk github.com/libp2p/go-libp2p-gostream v0.6.0/go.mod h1:Nywu0gYZwfj7Jc91PQvbGU8dIpqbQQkjWgDuOrFaRdA= github.com/libp2p/go-libp2p-http v0.5.0 h1:+x0AbLaUuLBArHubbbNRTsgWz0RjNTy6DJLOxQ3/QBc= github.com/libp2p/go-libp2p-http v0.5.0/go.mod h1:glh87nZ35XCQyFsdzZps6+F4HYI6DctVFY5u1fehwSg= -github.com/libp2p/go-libp2p-kad-dht v0.33.1-0.20250610105912-ff841c59c823 h1:EJmqq+Gk8HBMbujYWpGIhcHsBp/8HMjX/lDoH3ewLQU= -github.com/libp2p/go-libp2p-kad-dht v0.33.1-0.20250610105912-ff841c59c823/go.mod h1:Eg8zjv+vgX738Qc3oTGaQQPztO5hV4eguvkNGwkILUw= -github.com/libp2p/go-libp2p-kad-dht v0.33.1-0.20250610130939-fedd1008dd90 h1:xP58qI1rxEj1RDaC6CnfSH0sPWfsVz73KmJhqbMRxc4= -github.com/libp2p/go-libp2p-kad-dht v0.33.1-0.20250610130939-fedd1008dd90/go.mod h1:Eg8zjv+vgX738Qc3oTGaQQPztO5hV4eguvkNGwkILUw= +github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611084458-65bebac64139 h1:u1/4EtZc/8faeg7o+L4BSnAHJQD73Ogia5oTMBLrf2Q= +github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611084458-65bebac64139/go.mod h1:aclSBU9n3XgL5VucPNW2eanQtLYvRHaFVTx1L/Rz0Nw= github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio= github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b h1:qh7OgCwt5AjJohJH+oXKZw6iDeIWKJOZaLXwkxrW0WQ= github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b/go.mod h1:3CofRbwJbTybT8WVM2z/h5dj2FPNar6YLyxUc4Tmv1E=