dual reprovider

This commit is contained in:
guillaumemichel 2025-06-11 14:32:02 +02:00 committed by gammazero
parent 7b11dfccc5
commit a60eaee7f2
7 changed files with 13 additions and 52 deletions

View File

@ -2,7 +2,6 @@ package node
import (
"context"
"errors"
"fmt"
"time"
@ -18,11 +17,8 @@ import (
"github.com/ipfs/kubo/config"
"github.com/ipfs/kubo/repo"
irouting "github.com/ipfs/kubo/routing"
dht_pb "github.com/libp2p/go-libp2p-kad-dht/pb"
"github.com/libp2p/go-libp2p-kad-dht/dual"
"github.com/libp2p/go-libp2p-kad-dht/reprovider"
"github.com/libp2p/go-libp2p/core/host"
peer "github.com/libp2p/go-libp2p/core/peer"
ma "github.com/multiformats/go-multiaddr"
mh "github.com/multiformats/go-multihash"
"go.uber.org/fx"
)
@ -169,19 +165,6 @@ func OnlineProviders(provide bool, providerStrategy string, reprovideInterval ti
)
}
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()
@ -196,32 +179,10 @@ func SweepingReprovider(provide bool, reprovideStrategy string, opts ...reprovid
return fx.Options(
keyProvider,
fx.Provide(func(router irouting.ProvideManyRouter, keyProvider provider.KeyChanFunc, opts ...reprovider.Option) (provider.Provider, error) {
fx.Provide(func(d *dual.DHT, 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.NewReprovider(dhtClient.Context(), opts...)
r, err := d.NewSweepingReprovider(opts...)
if err != nil {
return nil, err
}

View File

@ -112,7 +112,7 @@ require (
github.com/libp2p/go-doh-resolver v0.5.0 // indirect
github.com/libp2p/go-flow-metrics v0.3.0 // indirect
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611084458-65bebac64139 // indirect
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611122759-3d39daf2369d // indirect
github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b // indirect
github.com/libp2p/go-libp2p-pubsub v0.14.2 // indirect
github.com/libp2p/go-libp2p-pubsub-router v0.6.0 // indirect

View File

@ -428,8 +428,8 @@ github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl9
github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g=
github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw=
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-kad-dht v0.33.2-0.20250611122759-3d39daf2369d h1:bZnem+ck3Bl7u0h47VWOm0fdu5QzEyxH9zpcdZmcDr8=
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611122759-3d39daf2369d/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=

4
go.mod
View File

@ -53,9 +53,9 @@ 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.2-0.20250611084458-65bebac64139
github.com/libp2p/go-libp2p-pubsub v0.14.2
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611122759-3d39daf2369d
github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b
github.com/libp2p/go-libp2p-pubsub v0.14.2
github.com/libp2p/go-libp2p-pubsub-router v0.6.0
github.com/libp2p/go-libp2p-record v0.3.1
github.com/libp2p/go-libp2p-routing-helpers v0.7.5

4
go.sum
View File

@ -514,8 +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.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-kad-dht v0.33.2-0.20250611122759-3d39daf2369d h1:bZnem+ck3Bl7u0h47VWOm0fdu5QzEyxH9zpcdZmcDr8=
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611122759-3d39daf2369d/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=

View File

@ -169,7 +169,7 @@ require (
github.com/libp2p/go-flow-metrics v0.3.0 // indirect
github.com/libp2p/go-libp2p v0.43.0 // indirect
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611084458-65bebac64139 // indirect
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611122759-3d39daf2369d // indirect
github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b // indirect
github.com/libp2p/go-libp2p-record v0.3.1 // indirect
github.com/libp2p/go-libp2p-routing-helpers v0.7.5 // indirect

View File

@ -431,8 +431,8 @@ github.com/libp2p/go-libp2p v0.43.0 h1:b2bg2cRNmY4HpLK8VHYQXLX2d3iND95OjodLFymvq
github.com/libp2p/go-libp2p v0.43.0/go.mod h1:IiSqAXDyP2sWH+J2gs43pNmB/y4FOi2XQPbsb+8qvzc=
github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94=
github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8=
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-kad-dht v0.33.2-0.20250611122759-3d39daf2369d h1:bZnem+ck3Bl7u0h47VWOm0fdu5QzEyxH9zpcdZmcDr8=
github.com/libp2p/go-libp2p-kad-dht v0.33.2-0.20250611122759-3d39daf2369d/go.mod h1:aclSBU9n3XgL5VucPNW2eanQtLYvRHaFVTx1L/Rz0Nw=
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=
github.com/libp2p/go-libp2p-record v0.3.1 h1:cly48Xi5GjNw5Wq+7gmjfBiG9HCzQVkiZOUZ8kUl+Fg=