Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
ab74101
test GCP result order (#1097)
guillaumemichel Jul 12, 2025
3a0f8bb
provider initial commit
guillaumemichel Jul 9, 2025
6bd8b58
provider: keystore (#1096)
guillaumemichel Jul 23, 2025
010def7
provider: SweepingProvider interface (#1098)
guillaumemichel Jul 23, 2025
bc1f342
provider: Connectivity Checker (#1099)
guillaumemichel Jul 24, 2025
ae1c18f
provider: key helpers (#1101)
guillaumemichel Jul 24, 2025
49b3acb
provider: add ShortestCoveredPrefix helper (#1102)
guillaumemichel Jul 24, 2025
5e720eb
provider: trie items listing helpers (#1103)
guillaumemichel Jul 24, 2025
6e77db2
provider: helpers trie find prefix (#1104)
guillaumemichel Jul 24, 2025
8057765
provider: find subtrie helper (#1105)
guillaumemichel Jul 24, 2025
9c3161c
provider: NextNonEmptyLeaf trie helper (#1106)
guillaumemichel Jul 24, 2025
979ccc2
provider: PruneSubtrie helper (#1107)
guillaumemichel Jul 24, 2025
d8f1c63
provider: trie region helpers (#1109)
guillaumemichel Jul 24, 2025
c72809c
provider: helpers pacakge rename (#1111)
guillaumemichel Jul 24, 2025
e2adfb2
provider: keyspace helpers
guillaumemichel Jul 24, 2025
724b286
add missing ShortestCoveredPrefix
guillaumemichel Jul 24, 2025
d05b1f9
provider: trie allocation helper correction #1108
guillaumemichel Aug 14, 2025
a41eaa4
provider: adding provide and reprovide queue (#1114)
guillaumemichel Aug 5, 2025
911055b
provider: network operations (#1115)
guillaumemichel Aug 5, 2025
99929e4
provider: ProvideStatus interface (#1110)
guillaumemichel Aug 8, 2025
3e8ebb4
provider: schedule prefix length (#1116)
guillaumemichel Aug 13, 2025
648fa03
provider: schedule (#1117)
guillaumemichel Aug 13, 2025
ea7a839
provider: handleProvide (#1118)
guillaumemichel Aug 13, 2025
582e3c4
provider: swarm exploration (#1120)
guillaumemichel Aug 13, 2025
e3761f9
provider: batch provide (#1121)
guillaumemichel Aug 13, 2025
fb1534c
provider: batch reprovide (#1122)
guillaumemichel Aug 13, 2025
1704edb
provider: catchup pending work (#1123)
guillaumemichel Aug 13, 2025
0cb418a
provider: options (#1124)
guillaumemichel Aug 13, 2025
a67da4b
provide: handle reprovide (#1125)
guillaumemichel Aug 13, 2025
f0631c4
provider: daemon (#1126)
guillaumemichel Aug 13, 2025
d5c2df1
provider: integration tests (#1127)
guillaumemichel Aug 13, 2025
3bf45a4
go.mod conflicts
guillaumemichel Aug 19, 2025
ca7bfb8
provider: refresh schedule (#1131)
guillaumemichel Aug 19, 2025
6969f64
dual: provider (#1132)
guillaumemichel Aug 19, 2025
160a41e
provider: minor fixes (#1133)
guillaumemichel Aug 22, 2025
2f250a5
provider: connectivity state machine (#1135)
guillaumemichel Sep 4, 2025
ade2c00
provider: use synctest in time based tests #1136
guillaumemichel Sep 4, 2025
cd54443
keystore: revamp (#1142)
guillaumemichel Sep 8, 2025
ba690c7
provider: ResettableKeyStore (#1146)
guillaumemichel Sep 16, 2025
93ac606
keystore: remove mutex (#1147)
guillaumemichel Sep 16, 2025
e2f65e5
buffered provider (#1149)
guillaumemichel Sep 16, 2025
0181891
provider: minor fixes (#1150)
guillaumemichel Sep 16, 2025
efcdc80
rename KeyStore -> Keystore (#1151)
guillaumemichel Sep 16, 2025
a5b7683
provider: more minor fixes (#1152)
guillaumemichel Sep 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions amino/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ const (
// find the multiaddress associated with the returned peer id.
DefaultProviderAddrTTL = 24 * time.Hour

// DefaultReprovideInterval is the default interval at which the keys should
// be reprovided to the DHT swarm to ensure there are enough live records in
// the swarm.
DefaultReprovideInterval = 22 * time.Hour

// DefaultMaxPeersPerIPGroup is the maximal number of peers with addresses in
// the same IP group allowed in the routing table. Once this limit is
// reached, newly discovered peers with addresses in the same IP group will
Expand Down
20 changes: 20 additions & 0 deletions dht.go
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,11 @@ func (dht *IpfsDHT) RoutingTable() *kb.RoutingTable {
return dht.routingTable
}

// BucketSize returns the size of the DHT's routing table buckets.
func (dht *IpfsDHT) BucketSize() int {
return dht.bucketSize
}

// Close calls Process Close.
func (dht *IpfsDHT) Close() error {
dht.cancel()
Expand Down Expand Up @@ -897,6 +902,11 @@ func (dht *IpfsDHT) Host() host.Host {
return dht.host
}

// MessageSender returns the DHT's message sender.
func (dht *IpfsDHT) MessageSender() pb.MessageSender {
return dht.msgSender
}

// Ping sends a ping message to the passed peer and waits for a response.
func (dht *IpfsDHT) Ping(ctx context.Context, p peer.ID) error {
ctx, span := internal.StartSpan(ctx, "IpfsDHT.Ping", trace.WithAttributes(attribute.Stringer("PeerID", p)))
Expand Down Expand Up @@ -932,6 +942,16 @@ func (dht *IpfsDHT) maybeAddAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Dura
dht.peerstore.AddAddrs(p, dht.filterAddrs(addrs), ttl)
}

// FilteredAddrs returns the set of addresses that this DHT instance
// advertises to the swarm, after applying the configured addrFilter.
//
// For example:
// - In a public DHT, local and loopback addresses are filtered out.
// - In a LAN DHT, only loopback addresses are filtered out.
func (dht *IpfsDHT) FilteredAddrs() []ma.Multiaddr {
return dht.filterAddrs(dht.host.Addrs())
}

func (dht *IpfsDHT) filterAddrs(addrs []ma.Multiaddr) []ma.Multiaddr {
if f := dht.addrFilter; f != nil {
return f(addrs)
Expand Down
13 changes: 10 additions & 3 deletions dht_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1738,26 +1738,33 @@ func TestFindClosestPeers(t *testing.T) {
nDHTs := 30
dhts := setupDHTS(t, ctx, nDHTs)
defer func() {
for i := 0; i < nDHTs; i++ {
for i := range nDHTs {
dhts[i].Close()
defer dhts[i].host.Close()
}
}()

t.Logf("connecting %d dhts in a ring", nDHTs)
for i := 0; i < nDHTs; i++ {
for i := range nDHTs {
connect(t, ctx, dhts[i], dhts[(i+1)%len(dhts)])
}

querier := dhts[1]
peers, err := querier.GetClosestPeers(ctx, "foo")
queryStr := "foo"
peers, err := querier.GetClosestPeers(ctx, queryStr)
if err != nil {
t.Fatal(err)
}

if len(peers) < querier.beta {
t.Fatalf("got wrong number of peers (got %d, expected at least %d)", len(peers), querier.beta)
}

queryKey := kb.ConvertKey(queryStr)
sortedPeers := kb.SortClosestPeers(peers, queryKey)
for i := range len(sortedPeers) {
require.Equal(t, sortedPeers[i], peers[i])
}
}

func TestFixLowPeers(t *testing.T) {
Expand Down
7 changes: 6 additions & 1 deletion fullrt/dht.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ func NewFullRT(h host.Host, protocolPrefix protocol.ID, options ...Option) (*Ful
EnableProviders: true,
EnableValues: true,
ProtocolPrefix: protocolPrefix,
MsgSenderBuilder: net.NewMessageSenderImpl,
}

if err := dhtcfg.Apply(fullrtcfg.dhtOpts...); err != nil {
Expand All @@ -163,7 +164,7 @@ func NewFullRT(h host.Host, protocolPrefix protocol.ID, options ...Option) (*Ful
return nil, err
}

ms := net.NewMessageSenderImpl(h, amino.Protocols)
ms := dhtcfg.MsgSenderBuilder(h, amino.Protocols)
protoMessenger, err := dht_pb.NewProtocolMessenger(ms)
if err != nil {
return nil, err
Expand Down Expand Up @@ -303,6 +304,10 @@ func (dht *FullRT) Host() host.Host {
return dht.h
}

func (dht *FullRT) MessageSender() dht_pb.MessageSender {
return dht.messageSender
}

func (dht *FullRT) runCrawler(ctx context.Context) {
defer dht.wg.Done()
t := time.NewTicker(dht.crawlerInterval)
Expand Down
23 changes: 14 additions & 9 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
module github.com/libp2p/go-libp2p-kad-dht

go 1.24
go 1.24.0

require (
github.com/gammazero/deque v1.1.0
github.com/google/gopacket v1.1.19
github.com/google/uuid v1.6.0
github.com/guillaumemichel/reservedpool v0.2.0
github.com/hashicorp/golang-lru v1.0.2
github.com/ipfs/boxo v0.33.1
github.com/ipfs/go-cid v0.5.0
github.com/ipfs/go-datastore v0.8.2
github.com/ipfs/go-datastore v0.8.4
github.com/ipfs/go-detect-race v0.0.1
github.com/ipfs/go-log/v2 v2.8.0
github.com/ipfs/go-test v0.2.2
github.com/ipfs/go-dsqueue v0.0.5
github.com/ipfs/go-log/v2 v2.8.1
github.com/ipfs/go-test v0.2.3
github.com/libp2p/go-libp2p v0.43.0
github.com/libp2p/go-libp2p-kbucket v0.7.0
github.com/libp2p/go-libp2p-kbucket v0.8.0
github.com/libp2p/go-libp2p-record v0.3.1
github.com/libp2p/go-libp2p-routing-helpers v0.7.5
github.com/libp2p/go-libp2p-testing v0.12.0
Expand All @@ -25,11 +28,12 @@ require (
github.com/multiformats/go-multibase v0.2.0
github.com/multiformats/go-multihash v0.2.3
github.com/multiformats/go-multistream v0.6.1
github.com/stretchr/testify v1.10.0
github.com/probe-lab/go-libdht v0.2.1
github.com/stretchr/testify v1.11.1
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1
go.opentelemetry.io/otel v1.37.0
go.opentelemetry.io/otel/metric v1.37.0
go.opentelemetry.io/otel/trace v1.37.0
go.opentelemetry.io/otel v1.38.0
go.opentelemetry.io/otel/metric v1.38.0
go.opentelemetry.io/otel/trace v1.38.0
go.uber.org/multierr v1.11.0
go.uber.org/zap v1.27.0
gonum.org/v1/gonum v0.16.0
Expand All @@ -50,6 +54,7 @@ require (
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/huin/goupnp v1.3.0 // indirect
github.com/ipfs/go-block-format v0.2.2 // indirect
github.com/ipld/go-ipld-prime v0.21.0 // indirect
Expand Down
42 changes: 26 additions & 16 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiD
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gammazero/deque v1.1.0 h1:OyiyReBbnEG2PP0Bnv1AASLIYvyKqIFN5xfl1t8oGLo=
github.com/gammazero/deque v1.1.0/go.mod h1:JVrR+Bj1NMQbPnYclvDlvSX0nVGReLrQZ0aUMuWLctg=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98=
Expand Down Expand Up @@ -108,11 +110,15 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/guillaumemichel/reservedpool v0.2.0 h1:q73gtdMFJHtW+dDJ/fwtk34p7JprQv8fJSK7dEjf8Sw=
github.com/guillaumemichel/reservedpool v0.2.0/go.mod h1:sXSDIaef81TFdAJglsCFCMfgF5E5Z5xK1tFhjDhvbUc=
github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU=
github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
Expand All @@ -127,19 +133,21 @@ github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg=
github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk=
github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE=
github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw=
github.com/ipfs/go-datastore v0.8.2 h1:Jy3wjqQR6sg/LhyY0NIePZC3Vux19nLtg7dx0TVqr6U=
github.com/ipfs/go-datastore v0.8.2/go.mod h1:W+pI1NsUsz3tcsAACMtfC+IZdnQTnC/7VfPoJBQuts0=
github.com/ipfs/go-datastore v0.8.4 h1:vXEsd76T3KIOSKXizjhmS3ICGMl+oOSjpLSxE3v8/Wc=
github.com/ipfs/go-datastore v0.8.4/go.mod h1:uT77w/XEGrvJWwHgdrMr8bqCN6ZTW9gzmi+3uK+ouHg=
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk=
github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8=
github.com/ipfs/go-dsqueue v0.0.5 h1:TUOk15TlCJ/NKV8Yk2W5wgkEjDa44Nem7a7FGIjsMNU=
github.com/ipfs/go-dsqueue v0.0.5/go.mod h1:i/jAlpZjBbQJLioN+XKbFgnd+u9eAhGZs9IrqIzTd9g=
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
github.com/ipfs/go-log/v2 v2.8.0 h1:SptNTPJQV3s5EF4FdrTu/yVdOKfGbDgn1EBZx4til2o=
github.com/ipfs/go-log/v2 v2.8.0/go.mod h1:2LEEhdv8BGubPeSFTyzbqhCqrwqxCbuTNTLWqgNAipo=
github.com/ipfs/go-test v0.2.2 h1:1yjYyfbdt1w93lVzde6JZ2einh3DIV40at4rVoyEcE8=
github.com/ipfs/go-test v0.2.2/go.mod h1:cmLisgVwkdRCnKu/CFZOk2DdhOcwghr5GsHeqwexoRA=
github.com/ipfs/go-log/v2 v2.8.1 h1:Y/X36z7ASoLJaYIJAL4xITXgwf7RVeqb1+/25aq/Xk0=
github.com/ipfs/go-log/v2 v2.8.1/go.mod h1:NyhTBcZmh2Y55eWVjOeKf8M7e4pnJYM3yDZNxQBWEEY=
github.com/ipfs/go-test v0.2.3 h1:Z/jXNAReQFtCYyn7bsv/ZqUwS6E7iIcSpJ2CuzCvnrc=
github.com/ipfs/go-test v0.2.3/go.mod h1:QW8vSKkwYvWFwIZQLGQXdkt9Ud76eQXRQ9Ao2H+cA1o=
github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E=
github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ=
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
Expand Down Expand Up @@ -195,8 +203,8 @@ github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIi
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-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
github.com/libp2p/go-libp2p-kbucket v0.7.0 h1:vYDvRjkyJPeWunQXqcW2Z6E93Ywx7fX0jgzb/dGOKCs=
github.com/libp2p/go-libp2p-kbucket v0.7.0/go.mod h1:blOINGIj1yiPYlVEX0Rj9QwEkmVnz3EP8LK1dRKBC6g=
github.com/libp2p/go-libp2p-kbucket v0.8.0 h1:QAK7RzKJpYe+EuSEATAaaHYMYLkPDGC18m9jxPLnU8s=
github.com/libp2p/go-libp2p-kbucket v0.8.0/go.mod h1:JMlxqcEyKwO6ox716eyC0hmiduSWZZl6JY93mGaaqc4=
github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs=
github.com/libp2p/go-libp2p-record v0.3.1 h1:cly48Xi5GjNw5Wq+7gmjfBiG9HCzQVkiZOUZ8kUl+Fg=
github.com/libp2p/go-libp2p-record v0.3.1/go.mod h1:T8itUkLcWQLCYMqtX7Th6r7SexyUJpIyPgks757td/E=
Expand Down Expand Up @@ -346,6 +354,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4=
github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw=
github.com/probe-lab/go-libdht v0.2.1 h1:oBCsKBvS/OVirTO5+BT6/AOocWjdqwpfSfkTfBjUPJE=
github.com/probe-lab/go-libdht v0.2.1/go.mod h1:q+WlGiqs/UIRfdhw9Gmc+fPoAYlOim7VvXTjOI6KJmQ=
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc=
github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE=
Expand Down Expand Up @@ -421,8 +431,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
Expand All @@ -446,12 +456,12 @@ go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4=
go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE=
go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg=
Expand Down
2 changes: 1 addition & 1 deletion lookup_optim.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ func (os *optimisticState) stopFn(qps *qpeerset.QueryPeerset) bool {
func (os *optimisticState) putProviderRecord(pid peer.ID) {
err := os.dht.protoMessenger.PutProviderAddrs(os.putCtx, pid, []byte(os.key), peer.AddrInfo{
ID: os.dht.self,
Addrs: os.dht.filterAddrs(os.dht.host.Addrs()),
Addrs: os.dht.FilteredAddrs(),
})
os.peerStatesLk.Lock()
if err != nil {
Expand Down
65 changes: 65 additions & 0 deletions provider/buffered/options.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Package buffered provides a buffered provider implementation that queues operations
// and processes them in batches for improved performance.
package buffered

import "time"

const (
// DefaultDsName is the default datastore namespace for the buffered provider.
DefaultDsName = "bprov" // for buffered provider
// DefaultBatchSize is the default number of operations to process in a single batch.
DefaultBatchSize = 1 << 10
// DefaultIdleWriteTime is the default duration to wait before flushing pending operations.
DefaultIdleWriteTime = time.Minute
)

// config contains all options for the buffered provider.
type config struct {
dsName string
batchSize int
idleWriteTime time.Duration
}

// Option is a function that configures the buffered provider.
type Option func(*config)

// getOpts creates a config and applies Options to it.
func getOpts(opts []Option) config {
cfg := config{
dsName: DefaultDsName,
batchSize: DefaultBatchSize,
idleWriteTime: DefaultIdleWriteTime,
}

for _, opt := range opts {
opt(&cfg)
}
return cfg
}

// WithDsName sets the datastore namespace for the buffered provider.
// If name is empty, the option is ignored.
func WithDsName(name string) Option {
return func(c *config) {
if len(name) > 0 {
c.dsName = name
}
}
}

// WithBatchSize sets the number of operations to process in a single batch.
// If n is zero or negative, the option is ignored.
func WithBatchSize(n int) Option {
return func(c *config) {
if n > 0 {
c.batchSize = n
}
}
}

// WithIdleWriteTime sets the duration to wait before flushing pending operations.
func WithIdleWriteTime(d time.Duration) Option {
return func(c *config) {
c.idleWriteTime = d
}
}
Loading
Loading