Skip to content

Commit dadcb29

Browse files
Merge branch 'master' into reprovide-sweep
2 parents c8369de + dc0dee4 commit dadcb29

File tree

4 files changed

+31
-30
lines changed

4 files changed

+31
-30
lines changed

fullrt/dht.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,9 @@ func (dht *FullRT) Ready() bool {
292292

293293
// TODO: This function needs to be better defined. Perhaps based on going through the peer map and seeing when the
294294
// last time we were connected to any of them was.
295-
dht.peerAddrsLk.RLock()
295+
dht.kMapLk.RLock()
296296
rtSize := len(dht.keyToPeerMap)
297-
dht.peerAddrsLk.RUnlock()
297+
dht.kMapLk.RUnlock()
298298

299299
return rtSize > len(dht.bootstrapPeers)+1
300300
}
@@ -323,13 +323,12 @@ func (dht *FullRT) runCrawler(ctx context.Context) {
323323
}
324324

325325
var addrs []*peer.AddrInfo
326-
dht.peerAddrsLk.Lock()
326+
foundPeersLk.Lock()
327327
for k := range foundPeers {
328328
addrs = append(addrs, &peer.AddrInfo{ID: k}) // Addrs: v.addrs
329329
}
330-
330+
foundPeersLk.Unlock()
331331
addrs = append(addrs, dht.bootstrapPeers...)
332-
dht.peerAddrsLk.Unlock()
333332

334333
clear(foundPeers)
335334

@@ -480,30 +479,35 @@ func (dht *FullRT) GetClosestPeers(ctx context.Context, key string) ([]peer.ID,
480479
ipGroupCounts := make(map[peerdiversity.PeerIPGroupKey]map[peer.ID]struct{})
481480
peers := make([]peer.ID, 0, dht.bucketSize)
482481

482+
// Lock routing table, keyToPeerMap and peer addresses so that they cannot be
483+
// changed during a GetClosestPeers call. Otherwise peers may be removed,
484+
// resulting in keys missing in maps.
485+
dht.rtLk.RLock()
486+
defer dht.rtLk.RUnlock()
487+
dht.kMapLk.RLock()
488+
defer dht.kMapLk.RUnlock()
489+
dht.peerAddrsLk.RLock()
490+
defer dht.peerAddrsLk.RUnlock()
491+
483492
// If ipDiversityFilterLimit is non-zero, the step is slightly larger than
484493
// the bucket size, allowing to have a few backup peers in case some are
485494
// filtered out by the diversity filter. Multiple calls to ClosestN are
486495
// expensive, but increasing the `count` parameter is cheap.
487496
step := dht.bucketSize + 2*dht.ipDiversityFilterLimit
488497
for nClosest := 0; nClosest < dht.rt.Size(); nClosest += step {
489-
dht.rtLk.RLock()
490498
// Get the last `step` closest peers, because we already tried the `nClosest` closest peers
491499
closestKeys := kademlia.ClosestN(kadKey, dht.rt, nClosest+step)[nClosest:]
492-
dht.rtLk.RUnlock()
493500

494501
PeersLoop:
495502
for _, k := range closestKeys {
496-
dht.kMapLk.RLock()
497503
// Recover the peer ID from the key
498504
p, ok := dht.keyToPeerMap[string(k)]
499505
if !ok {
500506
logger.Errorf("key not found in map")
501507
continue
502508
}
503-
dht.kMapLk.RUnlock()
504-
dht.peerAddrsLk.RLock()
509+
505510
peerAddrs := dht.peerAddrs[p]
506-
dht.peerAddrsLk.RUnlock()
507511

508512
if dht.ipDiversityFilterLimit > 0 {
509513
for _, addr := range peerAddrs {

go.mod

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ require (
88
github.com/google/uuid v1.6.0
99
github.com/guillaumemichel/reservedpool v0.0.0-20250528150143-39abfe9e5b68
1010
github.com/hashicorp/golang-lru v1.0.2
11-
github.com/ipfs/boxo v0.30.0
11+
github.com/ipfs/boxo v0.31.0
1212
github.com/ipfs/go-cid v0.5.0
1313
github.com/ipfs/go-datastore v0.8.2
1414
github.com/ipfs/go-detect-race v0.0.1
1515
github.com/ipfs/go-log/v2 v2.6.0
16-
github.com/ipfs/go-test v0.2.1
16+
github.com/ipfs/go-test v0.2.2
1717
github.com/libp2p/go-libp2p v0.41.1
1818
github.com/libp2p/go-libp2p-kbucket v0.7.1-0.20250514131430-6bb8b16e312b
1919
github.com/libp2p/go-libp2p-record v0.3.1
@@ -61,8 +61,7 @@ require (
6161
github.com/google/pprof v0.0.0-20250208200701-d0013a598941 // indirect
6262
github.com/gorilla/websocket v1.5.3 // indirect
6363
github.com/huin/goupnp v1.3.0 // indirect
64-
github.com/ipfs/go-block-format v0.2.0 // indirect
65-
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
64+
github.com/ipfs/go-block-format v0.2.1 // indirect
6665
github.com/ipld/go-ipld-prime v0.21.0 // indirect
6766
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
6867
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
@@ -95,12 +94,12 @@ require (
9594
github.com/pion/dtls/v2 v2.2.12 // indirect
9695
github.com/pion/dtls/v3 v3.0.4 // indirect
9796
github.com/pion/ice/v4 v4.0.8 // indirect
98-
github.com/pion/interceptor v0.1.37 // indirect
97+
github.com/pion/interceptor v0.1.39 // indirect
9998
github.com/pion/logging v0.2.3 // indirect
10099
github.com/pion/mdns/v2 v2.0.7 // indirect
101100
github.com/pion/randutil v0.1.0 // indirect
102101
github.com/pion/rtcp v1.2.15 // indirect
103-
github.com/pion/rtp v1.8.11 // indirect
102+
github.com/pion/rtp v1.8.18 // indirect
104103
github.com/pion/sctp v1.8.37 // indirect
105104
github.com/pion/sdp/v3 v3.0.10 // indirect
106105
github.com/pion/srtp/v3 v3.0.4 // indirect

go.sum

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,10 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO
146146
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
147147
github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
148148
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
149-
github.com/ipfs/boxo v0.30.0 h1:7afsoxPGGqfoH7Dum/wOTGUB9M5fb8HyKPMlLfBvIEQ=
150-
github.com/ipfs/boxo v0.30.0/go.mod h1:BPqgGGyHB9rZZcPSzah2Dc9C+5Or3U1aQe7EH1H7370=
151-
github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs=
152-
github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM=
149+
github.com/ipfs/boxo v0.31.0 h1:h+zE4Pcf2rzlctQtLxhltPvflpojyLflXVWQfVR0pz0=
150+
github.com/ipfs/boxo v0.31.0/go.mod h1:gEkUkBiZWtEjHd1AiUxaWEYaQApPtbeGF45fdfCwLX0=
151+
github.com/ipfs/go-block-format v0.2.1 h1:96kW71XGNNa+mZw/MTzJrCpMhBWCrd9kBLoKm9Iip/Q=
152+
github.com/ipfs/go-block-format v0.2.1/go.mod h1:frtvXHMQhM6zn7HvEQu+Qz5wSTj+04oEH/I+NjDgEjk=
153153
github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
154154
github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg=
155155
github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk=
@@ -163,13 +163,11 @@ github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9
163163
github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8=
164164
github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
165165
github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc=
166-
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
167-
github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs=
168166
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
169167
github.com/ipfs/go-log/v2 v2.6.0 h1:2Nu1KKQQ2ayonKp4MPo6pXCjqw1ULc9iohRqWV5EYqg=
170168
github.com/ipfs/go-log/v2 v2.6.0/go.mod h1:p+Efr3qaY5YXpx9TX7MoLCSEZX5boSWj9wh86P5HJa8=
171-
github.com/ipfs/go-test v0.2.1 h1:/D/a8xZ2JzkYqcVcV/7HYlCnc7bv/pKHQiX5TdClkPE=
172-
github.com/ipfs/go-test v0.2.1/go.mod h1:dzu+KB9cmWjuJnXFDYJwC25T3j1GcN57byN+ixmK39M=
169+
github.com/ipfs/go-test v0.2.2 h1:1yjYyfbdt1w93lVzde6JZ2einh3DIV40at4rVoyEcE8=
170+
github.com/ipfs/go-test v0.2.2/go.mod h1:cmLisgVwkdRCnKu/CFZOk2DdhOcwghr5GsHeqwexoRA=
173171
github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E=
174172
github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ=
175173
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
@@ -346,8 +344,8 @@ github.com/pion/dtls/v3 v3.0.4 h1:44CZekewMzfrn9pmGrj5BNnTMDCFwr+6sLH+cCuLM7U=
346344
github.com/pion/dtls/v3 v3.0.4/go.mod h1:R373CsjxWqNPf6MEkfdy3aSe9niZvL/JaKlGeFphtMg=
347345
github.com/pion/ice/v4 v4.0.8 h1:ajNx0idNG+S+v9Phu4LSn2cs8JEfTsA1/tEjkkAVpFY=
348346
github.com/pion/ice/v4 v4.0.8/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw=
349-
github.com/pion/interceptor v0.1.37 h1:aRA8Zpab/wE7/c0O3fh1PqY0AJI3fCSEM5lRWJVorwI=
350-
github.com/pion/interceptor v0.1.37/go.mod h1:JzxbJ4umVTlZAf+/utHzNesY8tmRkM2lVmkS82TTj8Y=
347+
github.com/pion/interceptor v0.1.39 h1:Y6k0bN9Y3Lg/Wb21JBWp480tohtns8ybJ037AGr9UuA=
348+
github.com/pion/interceptor v0.1.39/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic=
351349
github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
352350
github.com/pion/logging v0.2.3 h1:gHuf0zpoh1GW67Nr6Gj4cv5Z9ZscU7g/EaoC/Ke/igI=
353351
github.com/pion/logging v0.2.3/go.mod h1:z8YfknkquMe1csOrxK5kc+5/ZPAzMxbKLX5aXpbpC90=
@@ -357,8 +355,8 @@ github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA=
357355
github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8=
358356
github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo=
359357
github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0=
360-
github.com/pion/rtp v1.8.11 h1:17xjnY5WO5hgO6SD3/NTIUPvSFw/PbLsIJyz1r1yNIk=
361-
github.com/pion/rtp v1.8.11/go.mod h1:8uMBJj32Pa1wwx8Fuv/AsFhn8jsgw+3rUC2PfoBZ8p4=
358+
github.com/pion/rtp v1.8.18 h1:yEAb4+4a8nkPCecWzQB6V/uEU18X1lQCGAQCjP+pyvU=
359+
github.com/pion/rtp v1.8.18/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk=
362360
github.com/pion/sctp v1.8.37 h1:ZDmGPtRPX9mKCiVXtMbTWybFw3z/hVKAZgU81wcOrqs=
363361
github.com/pion/sctp v1.8.37/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE=
364362
github.com/pion/sdp/v3 v3.0.10 h1:6MChLE/1xYB+CjumMw+gZ9ufp2DPApuVSnDT8t5MIgA=

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"version": "v0.33.0"
2+
"version": "v0.33.1"
33
}

0 commit comments

Comments
 (0)