WIP rcmgr auto limit scaling
Marten Seemann committed
Jul 2, 2022 at 14:45 UTC
c3589a172870c40cd73c8fda0298a1d523bb0eeb
8 files changed
+207
-254
config/swarm.go
+2
-2
@@ -139,8 +139,8 @@ type ConnMgr struct {
139
// <https://github.com/libp2p/go-libp2p-resource-manager#readme>
140
type ResourceMgr struct {
141
// Enables the Network Resource Manager feature, default to on.
142
- Enabled Flag `json:",omitempty"`
143
- Limits *rcmgr.BasicLimiterConfig `json:",omitempty"`
142
+ Enabled Flag `json:",omitempty"`
143
+ Limits *rcmgr.LimitConfig `json:",omitempty"`
144
}
145
146
const (
core/commands/swarm.go
+1
-1
@@ -401,7 +401,7 @@ Changes made via command line are persisted in the Swarm.ResourceMgr.Limits fiel
401
402
// set scope limit to new values (when limit.json is passed as a second arg)
403
if req.Files != nil {
404
- var newLimit rcmgr.BasicLimitConfig
404
+ var newLimit rcmgr.BaseLimit
405
it := req.Files.Entries()
406
if it.Next() {
407
file := files.FileFromEntry(it)
core/node/libp2p/rcmgr.go
+39
-124
@@ -34,7 +34,7 @@ func ResourceManager(cfg config.SwarmConfig) interface{} {
34
35
enabled := cfg.ResourceMgr.Enabled.WithDefault(false)
36
37
- /// ENV overrides Config (if present)
37
+ // ENV overrides Config (if present)
38
switch os.Getenv("LIBP2P_RCMGR") {
39
case "0", "false":
40
enabled = false
@@ -50,19 +50,17 @@ func ResourceManager(cfg config.SwarmConfig) interface{} {
50
return nil, opts, fmt.Errorf("opening IPFS_PATH: %w", err)
51
}
52
53
- defaultLimits := adjustedDefaultLimits(cfg)
53
+ limitCfg := adjustedDefaultLimits(cfg)
54
+ libp2p.SetDefaultServiceLimits(limitCfg)
55
+ limits := limitCfg.AutoScale()
56
55
- var limits rcmgr.BasicLimiterConfig
57
if cfg.ResourceMgr.Limits != nil {
57
- limits = *cfg.ResourceMgr.Limits
58
+ l := *cfg.ResourceMgr.Limits
59
+ l.Apply(limits)
60
+ limits = l
61
}
62
60
- limiter, err := rcmgr.NewLimiter(limits, defaultLimits)
61
- if err != nil {
62
- return nil, opts, err
63
- }
64
-
65
- libp2p.SetDefaultServiceLimits(limiter)
63
+ limiter := rcmgr.NewFixedLimiter(limits)
64
65
ropts := []rcmgr.Option{rcmgr.WithMetrics(createRcmgrMetrics())}
66
@@ -195,8 +193,8 @@ func NetStat(mgr network.ResourceManager, scope string) (NetStatOut, error) {
193
}
194
}
195
198
-func NetLimit(mgr network.ResourceManager, scope string) (rcmgr.BasicLimitConfig, error) {
199
- var result rcmgr.BasicLimitConfig
196
+func NetLimit(mgr network.ResourceManager, scope string) (rcmgr.BaseLimit, error) {
197
+ var result rcmgr.BaseLimit
198
getLimit := func(s network.ResourceScope) error {
199
limiter, ok := s.(rcmgr.ResourceScopeLimiter)
200
if !ok { // NullResourceManager
@@ -204,30 +202,15 @@ func NetLimit(mgr network.ResourceManager, scope string) (rcmgr.BasicLimitConfig
202
}
203
limit := limiter.Limit()
204
switch l := limit.(type) {
207
- case *rcmgr.StaticLimit:
208
- result.Dynamic = false
205
+ case *rcmgr.BaseLimit:
206
result.Memory = l.Memory
210
- result.Streams = l.BaseLimit.Streams
211
- result.StreamsInbound = l.BaseLimit.StreamsInbound
212
- result.StreamsOutbound = l.BaseLimit.StreamsOutbound
213
- result.Conns = l.BaseLimit.Conns
214
- result.ConnsInbound = l.BaseLimit.ConnsInbound
215
- result.ConnsOutbound = l.BaseLimit.ConnsOutbound
216
- result.FD = l.BaseLimit.FD
217
-
218
- case *rcmgr.DynamicLimit:
219
- result.Dynamic = true
220
- result.MemoryFraction = l.MemoryLimit.MemoryFraction
221
- result.MinMemory = l.MemoryLimit.MinMemory
222
- result.MaxMemory = l.MemoryLimit.MaxMemory
223
- result.Streams = l.BaseLimit.Streams
224
- result.StreamsInbound = l.BaseLimit.StreamsInbound
225
- result.StreamsOutbound = l.BaseLimit.StreamsOutbound
226
- result.Conns = l.BaseLimit.Conns
227
- result.ConnsInbound = l.BaseLimit.ConnsInbound
228
- result.ConnsOutbound = l.BaseLimit.ConnsOutbound
229
- result.FD = l.BaseLimit.FD
230
-
207
+ result.Streams = l.Streams
208
+ result.StreamsInbound = l.StreamsInbound
209
+ result.StreamsOutbound = l.StreamsOutbound
210
+ result.Conns = l.Conns
211
+ result.ConnsInbound = l.ConnsInbound
212
+ result.ConnsOutbound = l.ConnsOutbound
213
+ result.FD = l.FD
214
default:
215
return fmt.Errorf("unknown limit type %T", limit)
216
}
@@ -237,89 +220,36 @@ func NetLimit(mgr network.ResourceManager, scope string) (rcmgr.BasicLimitConfig
220
221
switch {
222
case scope == config.ResourceMgrSystemScope:
240
- err := mgr.ViewSystem(func(s network.ResourceScope) error {
241
- return getLimit(s)
242
- })
243
- return result, err
244
-
223
+ return result, mgr.ViewSystem(func(s network.ResourceScope) error { return getLimit(s) })
224
case scope == config.ResourceMgrTransientScope:
246
- err := mgr.ViewTransient(func(s network.ResourceScope) error {
247
- return getLimit(s)
248
- })
249
- return result, err
250
-
225
+ return result, mgr.ViewTransient(func(s network.ResourceScope) error { return getLimit(s) })
226
case strings.HasPrefix(scope, config.ResourceMgrServiceScopePrefix):
227
svc := strings.TrimPrefix(scope, config.ResourceMgrServiceScopePrefix)
253
- err := mgr.ViewService(svc, func(s network.ServiceScope) error {
254
- return getLimit(s)
255
- })
256
- return result, err
257
-
228
+ return result, mgr.ViewService(svc, func(s network.ServiceScope) error { return getLimit(s) })
229
case strings.HasPrefix(scope, config.ResourceMgrProtocolScopePrefix):
230
proto := strings.TrimPrefix(scope, config.ResourceMgrProtocolScopePrefix)
260
- err := mgr.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error {
261
- return getLimit(s)
262
- })
263
- return result, err
264
-
231
+ return result, mgr.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { return getLimit(s) })
232
case strings.HasPrefix(scope, config.ResourceMgrPeerScopePrefix):
233
p := strings.TrimPrefix(scope, config.ResourceMgrPeerScopePrefix)
234
pid, err := peer.Decode(p)
235
if err != nil {
236
return result, fmt.Errorf("invalid peer ID: %q: %w", p, err)
237
}
271
- err = mgr.ViewPeer(pid, func(s network.PeerScope) error {
272
- return getLimit(s)
273
- })
274
- return result, err
275
-
238
+ return result, mgr.ViewPeer(pid, func(s network.PeerScope) error { return getLimit(s) })
239
default:
240
return result, fmt.Errorf("invalid scope %q", scope)
241
}
242
}
243
244
// NetSetLimit sets new ResourceManager limits for the given scope. The limits take effect immediately, and are also persisted to the repo config.
282
-func NetSetLimit(mgr network.ResourceManager, repo repo.Repo, scope string, limit rcmgr.BasicLimitConfig) error {
245
+func NetSetLimit(mgr network.ResourceManager, repo repo.Repo, scope string, limit rcmgr.BaseLimit) error {
246
setLimit := func(s network.ResourceScope) error {
247
limiter, ok := s.(rcmgr.ResourceScopeLimiter)
248
if !ok { // NullResourceManager
249
return NoResourceMgrError
250
}
251
289
- var newLimit rcmgr.Limit
290
- if limit.Dynamic {
291
- newLimit = &rcmgr.DynamicLimit{
292
- MemoryLimit: rcmgr.MemoryLimit{
293
- MemoryFraction: limit.MemoryFraction,
294
- MinMemory: limit.MinMemory,
295
- MaxMemory: limit.MaxMemory,
296
- },
297
- BaseLimit: rcmgr.BaseLimit{
298
- Streams: limit.Streams,
299
- StreamsInbound: limit.StreamsInbound,
300
- StreamsOutbound: limit.StreamsOutbound,
301
- Conns: limit.Conns,
302
- ConnsInbound: limit.ConnsInbound,
303
- ConnsOutbound: limit.ConnsOutbound,
304
- FD: limit.FD,
305
- },
306
- }
307
- } else {
308
- newLimit = &rcmgr.StaticLimit{
309
- Memory: limit.Memory,
310
- BaseLimit: rcmgr.BaseLimit{
311
- Streams: limit.Streams,
312
- StreamsInbound: limit.StreamsInbound,
313
- StreamsOutbound: limit.StreamsOutbound,
314
- Conns: limit.Conns,
315
- ConnsInbound: limit.ConnsInbound,
316
- ConnsOutbound: limit.ConnsOutbound,
317
- FD: limit.FD,
318
- },
319
- }
320
- }
321
-
322
- limiter.SetLimit(newLimit)
252
+ limiter.SetLimit(&limit)
253
return nil
254
}
255
@@ -329,48 +259,36 @@ func NetSetLimit(mgr network.ResourceManager, repo repo.Repo, scope string, limi
259
}
260
261
if cfg.Swarm.ResourceMgr.Limits == nil {
332
- cfg.Swarm.ResourceMgr.Limits = &rcmgr.BasicLimiterConfig{}
262
+ cfg.Swarm.ResourceMgr.Limits = &rcmgr.LimitConfig{}
263
}
264
configLimits := cfg.Swarm.ResourceMgr.Limits
265
266
var setConfigFunc func()
267
switch {
268
case scope == config.ResourceMgrSystemScope:
339
- err = mgr.ViewSystem(func(s network.ResourceScope) error {
340
- return setLimit(s)
341
- })
342
- setConfigFunc = func() { configLimits.System = &limit }
343
-
269
+ err = mgr.ViewSystem(func(s network.ResourceScope) error { return setLimit(s) })
270
+ setConfigFunc = func() { configLimits.System = limit }
271
case scope == config.ResourceMgrTransientScope:
345
- err = mgr.ViewTransient(func(s network.ResourceScope) error {
346
- return setLimit(s)
347
- })
348
- setConfigFunc = func() { configLimits.Transient = &limit }
349
-
272
+ err = mgr.ViewTransient(func(s network.ResourceScope) error { return setLimit(s) })
273
+ setConfigFunc = func() { configLimits.Transient = limit }
274
case strings.HasPrefix(scope, config.ResourceMgrServiceScopePrefix):
275
svc := strings.TrimPrefix(scope, config.ResourceMgrServiceScopePrefix)
352
- err = mgr.ViewService(svc, func(s network.ServiceScope) error {
353
- return setLimit(s)
354
- })
276
+ err = mgr.ViewService(svc, func(s network.ServiceScope) error { return setLimit(s) })
277
setConfigFunc = func() {
278
if configLimits.Service == nil {
357
- configLimits.Service = map[string]rcmgr.BasicLimitConfig{}
279
+ configLimits.Service = map[string]rcmgr.BaseLimit{}
280
}
281
configLimits.Service[svc] = limit
282
}
361
-
283
case strings.HasPrefix(scope, config.ResourceMgrProtocolScopePrefix):
284
proto := strings.TrimPrefix(scope, config.ResourceMgrProtocolScopePrefix)
364
- err = mgr.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error {
365
- return setLimit(s)
366
- })
285
+ err = mgr.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { return setLimit(s) })
286
setConfigFunc = func() {
287
if configLimits.Protocol == nil {
369
- configLimits.Protocol = map[string]rcmgr.BasicLimitConfig{}
288
+ configLimits.Protocol = map[protocol.ID]rcmgr.BaseLimit{}
289
}
371
- configLimits.Protocol[proto] = limit
290
+ configLimits.Protocol[protocol.ID(proto)] = limit
291
}
373
-
292
case strings.HasPrefix(scope, config.ResourceMgrPeerScopePrefix):
293
p := strings.TrimPrefix(scope, config.ResourceMgrPeerScopePrefix)
294
var pid peer.ID
@@ -378,16 +296,13 @@ func NetSetLimit(mgr network.ResourceManager, repo repo.Repo, scope string, limi
296
if err != nil {
297
return fmt.Errorf("invalid peer ID: %q: %w", p, err)
298
}
381
- err = mgr.ViewPeer(pid, func(s network.PeerScope) error {
382
- return setLimit(s)
383
- })
299
+ err = mgr.ViewPeer(pid, func(s network.PeerScope) error { return setLimit(s) })
300
setConfigFunc = func() {
301
if configLimits.Peer == nil {
386
- configLimits.Peer = map[string]rcmgr.BasicLimitConfig{}
302
+ configLimits.Peer = map[peer.ID]rcmgr.BaseLimit{}
303
}
388
- configLimits.Peer[p] = limit
304
+ configLimits.Peer[pid] = limit
305
}
390
-
306
default:
307
return fmt.Errorf("invalid scope %q", scope)
308
}
@@ -397,7 +312,7 @@ func NetSetLimit(mgr network.ResourceManager, repo repo.Repo, scope string, limi
312
}
313
314
if cfg.Swarm.ResourceMgr.Limits == nil {
400
- cfg.Swarm.ResourceMgr.Limits = &rcmgr.BasicLimiterConfig{}
315
+ cfg.Swarm.ResourceMgr.Limits = &rcmgr.LimitConfig{}
316
}
317
setConfigFunc()
318
core/node/libp2p/rcmgr_defaults.go
+56
-53
@@ -7,7 +7,7 @@ import (
7
"os"
8
"strings"
9
10
- config "github.com/ipfs/kubo/config"
10
+ "github.com/ipfs/kubo/config"
11
"github.com/libp2p/go-libp2p"
12
rcmgr "github.com/libp2p/go-libp2p-resource-manager"
13
@@ -18,63 +18,64 @@ import (
18
19
// adjustedDefaultLimits allows for tweaking defaults based on external factors,
20
// such as values in Swarm.ConnMgr.HiWater config.
21
-func adjustedDefaultLimits(cfg config.SwarmConfig) rcmgr.DefaultLimitConfig {
21
+func adjustedDefaultLimits(cfg config.SwarmConfig) *rcmgr.ScalingLimitConfig {
22
// Run checks to avoid introducing regressions
23
if os.Getenv("IPFS_CHECK_RCMGR_DEFAULTS") != "" {
24
// FIXME: Broken. Being tracked in https://github.com/ipfs/go-ipfs/issues/8949.
25
checkImplicitDefaults()
26
}
27
+ return &rcmgr.DefaultLimits
28
28
- // Adjust limits
29
- // (based on https://github.com/filecoin-project/lotus/pull/8318/files)
30
- // - give it more memory, up to 4G, min of 1G
31
- // - if Swarm.ConnMgr.HighWater is too high, adjust Conn/FD/Stream limits
32
- defaultLimits := rcmgr.DefaultLimits.WithSystemMemory(.125, 1<<30, 4<<30)
33
-
34
- // Outbound conns and FDs are set very high to allow for the accelerated DHT client to (re)load its routing table.
35
- // Currently it doesn't gracefully handle RM throttling--once it does we can lower these.
36
- // High outbound conn limits are considered less of a DoS risk than high inbound conn limits.
37
- // Also note that, due to the behavior of the accelerated DHT client, we don't need many streams, just conns.
38
- if minOutbound := 65536; defaultLimits.SystemBaseLimit.ConnsOutbound < minOutbound {
39
- defaultLimits.SystemBaseLimit.ConnsOutbound = minOutbound
40
- }
41
- if minFD := 4096; defaultLimits.SystemBaseLimit.FD < minFD {
42
- defaultLimits.SystemBaseLimit.FD = minFD
43
- }
44
-
29
+ // // Adjust limits
30
+ // // (based on https://github.com/filecoin-project/lotus/pull/8318/files)
31
+ // // - give it more memory, up to 4G, min of 1G
32
+ // // - if Swarm.ConnMgr.HighWater is too high, adjust Conn/FD/Stream limits
33
+ // defaultLimits := rcmgr.DefaultLimits.WithSystemMemory(.125, 1<<30, 4<<30)
34
+ //
35
+ // // Outbound conns and FDs are set very high to allow for the accelerated DHT client to (re)load its routing table.
36
+ // // Currently it doesn't gracefully handle RM throttling--once it does we can lower these.
37
+ // // High outbound conn limits are considered less of a DoS risk than high inbound conn limits.
38
+ // // Also note that, due to the behavior of the accelerated DHT client, we don't need many streams, just conns.
39
+ // if minOutbound := 65536; defaultLimits.SystemBaseLimit.ConnsOutbound < minOutbound {
40
+ // defaultLimits.SystemBaseLimit.ConnsOutbound = minOutbound
41
+ // }
42
+ // if minFD := 4096; defaultLimits.SystemBaseLimit.FD < minFD {
43
+ // defaultLimits.SystemBaseLimit.FD = minFD
44
+ // }
45
+ //
46
// Do we need to adjust due to Swarm.ConnMgr.HighWater?
46
- if cfg.ConnMgr.Type == "basic" {
47
- maxconns := cfg.ConnMgr.HighWater
48
- if 2*maxconns > defaultLimits.SystemBaseLimit.ConnsInbound {
49
- // Conns should be at least 2x larger than the high water to allow for two conns per peer (TCP+QUIC).
50
- defaultLimits.SystemBaseLimit.ConnsInbound = logScale(2 * maxconns)
51
-
52
- // We want the floor of minOutbound conns to be no less than what was set above.
53
- if minOutbound := logScale(2 * maxconns); minOutbound > defaultLimits.SystemBaseLimit.ConnsOutbound {
54
- defaultLimits.SystemBaseLimit.ConnsOutbound = minOutbound
55
- }
56
-
57
- if 2*maxconns > defaultLimits.SystemBaseLimit.FD {
58
- defaultLimits.SystemBaseLimit.FD = logScale(2 * maxconns)
59
- }
60
-
61
- defaultLimits.SystemBaseLimit.StreamsInbound = logScale(16 * maxconns)
62
- defaultLimits.SystemBaseLimit.StreamsOutbound = logScale(64 * maxconns)
63
- defaultLimits.SystemBaseLimit.Streams = logScale(64 * maxconns)
64
-
65
- defaultLimits.ServiceBaseLimit.StreamsInbound = logScale(8 * maxconns)
66
- defaultLimits.ServiceBaseLimit.StreamsOutbound = logScale(32 * maxconns)
67
- defaultLimits.ServiceBaseLimit.Streams = logScale(32 * maxconns)
68
-
69
- defaultLimits.ProtocolBaseLimit.StreamsInbound = logScale(8 * maxconns)
70
- defaultLimits.ProtocolBaseLimit.StreamsOutbound = logScale(32 * maxconns)
71
- defaultLimits.ProtocolBaseLimit.Streams = logScale(32 * maxconns)
72
- }
73
- }
74
-
75
- defaultLimits.SystemBaseLimit.Conns = defaultLimits.SystemBaseLimit.ConnsOutbound + defaultLimits.SystemBaseLimit.ConnsInbound
76
-
77
- return defaultLimits
47
+ // if cfg.ConnMgr.Type == "basic" {
48
+ // maxconns := cfg.ConnMgr.HighWater
49
+ // if 2*maxconns > defaultLimits.SystemBaseLimit.ConnsInbound {
50
+ // // Conns should be at least 2x larger than the high water to allow for two conns per peer (TCP+QUIC).
51
+ // defaultLimits.SystemBaseLimit.ConnsInbound = logScale(2 * maxconns)
52
+ //
53
+ // // We want the floor of minOutbound conns to be no less than what was set above.
54
+ // if minOutbound := logScale(2 * maxconns); minOutbound > defaultLimits.SystemBaseLimit.ConnsOutbound {
55
+ // defaultLimits.SystemBaseLimit.ConnsOutbound = minOutbound
56
+ // }
57
+ //
58
+ // if 2*maxconns > defaultLimits.SystemBaseLimit.FD {
59
+ // defaultLimits.SystemBaseLimit.FD = logScale(2 * maxconns)
60
+ // }
61
+ //
62
+ // defaultLimits.SystemBaseLimit.StreamsInbound = logScale(16 * maxconns)
63
+ // defaultLimits.SystemBaseLimit.StreamsOutbound = logScale(64 * maxconns)
64
+ // defaultLimits.SystemBaseLimit.Streams = logScale(64 * maxconns)
65
+ //
66
+ // defaultLimits.ServiceBaseLimit.StreamsInbound = logScale(8 * maxconns)
67
+ // defaultLimits.ServiceBaseLimit.StreamsOutbound = logScale(32 * maxconns)
68
+ // defaultLimits.ServiceBaseLimit.Streams = logScale(32 * maxconns)
69
+ //
70
+ // defaultLimits.ProtocolBaseLimit.StreamsInbound = logScale(8 * maxconns)
71
+ // defaultLimits.ProtocolBaseLimit.StreamsOutbound = logScale(32 * maxconns)
72
+ // defaultLimits.ProtocolBaseLimit.Streams = logScale(32 * maxconns)
73
+ // }
74
+ // }
75
+ //
76
+ // defaultLimits.SystemBaseLimit.Conns = defaultLimits.SystemBaseLimit.ConnsOutbound + defaultLimits.SystemBaseLimit.ConnsInbound
77
+ //
78
+ // return defaultLimits
79
}
80
81
func logScale(val int) int {
@@ -108,8 +109,10 @@ func checkImplicitDefaults() {
109
}
110
111
// Check 2: did go-libp2p's SetDefaultServiceLimits change?
111
- testLimiter := rcmgr.NewStaticLimiter(rcmgr.DefaultLimits)
112
- libp2p.SetDefaultServiceLimits(testLimiter)
112
+ l := rcmgr.DefaultLimits
113
+ libp2p.SetDefaultServiceLimits(&l)
114
+ limits := l.AutoScale()
115
+ testLimiter := rcmgr.NewFixedLimiter(limits)
116
117
serviceDefaults, err := json.Marshal(testLimiter)
118
if err != nil {
core/node/libp2p/rcmgr_logging.go
+3
-2
@@ -11,6 +11,7 @@ import (
11
"github.com/libp2p/go-libp2p-core/peer"
12
"github.com/libp2p/go-libp2p-core/protocol"
13
rcmgr "github.com/libp2p/go-libp2p-resource-manager"
14
+ ma "github.com/multiformats/go-multiaddr"
15
"go.uber.org/zap"
16
)
17
@@ -88,8 +89,8 @@ func (n *loggingResourceManager) ViewPeer(p peer.ID, f func(network.PeerScope) e
89
return f(&loggingScope{logger: n.logger, delegate: s, countErrs: n.countErrs})
90
})
91
}
91
-func (n *loggingResourceManager) OpenConnection(dir network.Direction, usefd bool) (network.ConnManagementScope, error) {
92
- connMgmtScope, err := n.delegate.OpenConnection(dir, usefd)
92
+func (n *loggingResourceManager) OpenConnection(dir network.Direction, usefd bool, remote ma.Multiaddr) (network.ConnManagementScope, error) {
93
+ connMgmtScope, err := n.delegate.OpenConnection(dir, usefd, remote)
94
n.countErrs(err)
95
return connMgmtScope, err
96
}
core/node/libp2p/rcmgr_logging_test.go
+7
-3
@@ -8,6 +8,7 @@ import (
8
"github.com/benbjohnson/clock"
9
"github.com/libp2p/go-libp2p-core/network"
10
rcmgr "github.com/libp2p/go-libp2p-resource-manager"
11
+ ma "github.com/multiformats/go-multiaddr"
12
"github.com/stretchr/testify/require"
13
"go.uber.org/zap"
14
"go.uber.org/zap/zaptest/observer"
@@ -15,8 +16,11 @@ import (
16
17
func TestLoggingResourceManager(t *testing.T) {
18
clock := clock.NewMock()
18
- limiter := rcmgr.NewDefaultLimiter()
19
- limiter.SystemLimits = limiter.SystemLimits.WithConnLimit(1, 1, 1)
19
+ limits := rcmgr.DefaultLimits.AutoScale()
20
+ limits.System.Conns = 1
21
+ limits.System.ConnsInbound = 1
22
+ limits.System.ConnsOutbound = 1
23
+ limiter := rcmgr.NewFixedLimiter(limits)
24
rm, err := rcmgr.NewResourceManager(limiter)
25
if err != nil {
26
t.Fatal(err)
@@ -33,7 +37,7 @@ func TestLoggingResourceManager(t *testing.T) {
37
38
// 2 of these should result in resource limit exceeded errors and subsequent log messages
39
for i := 0; i < 3; i++ {
36
- _, _ = lrm.OpenConnection(network.DirInbound, false)
40
+ _, _ = lrm.OpenConnection(network.DirInbound, false, ma.StringCast("/ip4/127.0.0.1/tcp/1234"))
41
}
42
43
// run the logger which will write an entry for those errors
go.mod
+28
-27
@@ -68,33 +68,33 @@ require (
68
github.com/jbenet/go-temp-err-catcher v0.1.0
69
github.com/jbenet/goprocess v0.1.4
70
github.com/libp2p/go-doh-resolver v0.4.0
71
- github.com/libp2p/go-libp2p v0.20.3
72
- github.com/libp2p/go-libp2p-core v0.16.1
71
+ github.com/libp2p/go-libp2p v0.20.1-0.20220702110402-59d643acf30f
72
+ github.com/libp2p/go-libp2p-core v0.19.0
73
github.com/libp2p/go-libp2p-http v0.2.1
74
- github.com/libp2p/go-libp2p-kad-dht v0.16.0
74
+ github.com/libp2p/go-libp2p-kad-dht v0.16.1-0.20220702124207-e5a723647953
75
github.com/libp2p/go-libp2p-kbucket v0.4.7
76
github.com/libp2p/go-libp2p-loggables v0.1.0
77
- github.com/libp2p/go-libp2p-peerstore v0.6.0
77
+ github.com/libp2p/go-libp2p-peerstore v0.7.1
78
github.com/libp2p/go-libp2p-pubsub v0.6.1
79
github.com/libp2p/go-libp2p-pubsub-router v0.5.0
80
github.com/libp2p/go-libp2p-record v0.1.3
81
- github.com/libp2p/go-libp2p-resource-manager v0.3.0
81
+ github.com/libp2p/go-libp2p-resource-manager v0.4.1-0.20220702093928-7ceb0b850c67
82
github.com/libp2p/go-libp2p-routing-helpers v0.2.3
83
- github.com/libp2p/go-libp2p-testing v0.9.2
83
+ github.com/libp2p/go-libp2p-testing v0.10.0
84
github.com/libp2p/go-socket-activation v0.1.0
85
- github.com/miekg/dns v1.1.48
85
+ github.com/miekg/dns v1.1.50
86
github.com/mitchellh/go-homedir v1.1.0
87
github.com/multiformats/go-multiaddr v0.6.0
88
github.com/multiformats/go-multiaddr-dns v0.3.1
89
- github.com/multiformats/go-multibase v0.1.0
89
+ github.com/multiformats/go-multibase v0.1.1
90
github.com/multiformats/go-multicodec v0.5.0
91
github.com/multiformats/go-multihash v0.2.1
92
github.com/opentracing/opentracing-go v1.2.0
93
github.com/pkg/errors v0.9.1
94
github.com/prometheus/client_golang v1.12.1
95
- github.com/prometheus/common v0.33.0 // indirect
96
- github.com/stretchr/testify v1.7.1
97
- github.com/syndtr/goleveldb v1.0.0
95
+ github.com/prometheus/common v0.35.0 // indirect
96
+ github.com/stretchr/testify v1.8.0
97
+ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
98
github.com/wI2L/jsondiff v0.2.0
99
github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1
100
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
@@ -129,13 +129,13 @@ require (
129
github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect
130
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect
131
github.com/beorn7/perks v1.0.1 // indirect
132
- github.com/btcsuite/btcd v0.22.1 // indirect
133
- github.com/btcsuite/btcd/btcec/v2 v2.1.3 // indirect
132
+ github.com/btcsuite/btcd v0.23.1 // indirect
133
+ github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
134
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
135
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
136
github.com/cespare/xxhash/v2 v2.1.2 // indirect
137
github.com/cheekybits/genny v1.0.0 // indirect
138
- github.com/containerd/cgroups v1.0.3 // indirect
138
+ github.com/containerd/cgroups v1.0.4 // indirect
139
github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
140
github.com/cskr/pubsub v1.0.2 // indirect
141
github.com/davecgh/go-spew v1.1.1 // indirect
@@ -175,9 +175,9 @@ require (
175
github.com/ipld/edelweiss v0.1.4 // indirect
176
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
177
github.com/klauspost/compress v1.15.1 // indirect
178
- github.com/klauspost/cpuid/v2 v2.0.12 // indirect
179
- github.com/koron/go-ssdp v0.0.2 // indirect
180
- github.com/libp2p/go-buffer-pool v0.0.2 // indirect
178
+ github.com/klauspost/cpuid/v2 v2.0.14 // indirect
179
+ github.com/koron/go-ssdp v0.0.3 // indirect
180
+ github.com/libp2p/go-buffer-pool v0.1.0 // indirect
181
github.com/libp2p/go-cidranger v1.1.0 // indirect
182
github.com/libp2p/go-eventbus v0.2.1 // indirect
183
github.com/libp2p/go-flow-metrics v0.0.3 // indirect
@@ -194,10 +194,11 @@ require (
194
github.com/libp2p/go-reuseport v0.2.0 // indirect
195
github.com/libp2p/go-yamux/v3 v3.1.2 // indirect
196
github.com/libp2p/zeroconf/v2 v2.1.1 // indirect
197
- github.com/lucas-clemente/quic-go v0.27.1 // indirect
197
+ github.com/lucas-clemente/quic-go v0.28.0 // indirect
198
github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect
199
- github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect
200
- github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect
199
+ github.com/marten-seemann/qtls-go1-17 v0.1.2 // indirect
200
+ github.com/marten-seemann/qtls-go1-18 v0.1.2 // indirect
201
+ github.com/marten-seemann/qtls-go1-19 v0.1.0-beta.1 // indirect
202
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
203
github.com/mattn/go-colorable v0.1.4 // indirect
204
github.com/mattn/go-isatty v0.0.14 // indirect
@@ -244,22 +245,22 @@ require (
245
go.uber.org/atomic v1.9.0 // indirect
246
go.uber.org/multierr v1.8.0 // indirect
247
go4.org v0.0.0-20200411211856-f5505b9728dd // indirect
247
- golang.org/x/exp v0.0.0-20210615023648-acb5c1269671 // indirect
248
- golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect
249
- golang.org/x/net v0.0.0-20220517181318-183a9ca12b87 // indirect
248
+ golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 // indirect
249
+ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
250
+ golang.org/x/net v0.0.0-20220630215102-69896b714898 // indirect
251
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
252
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
253
golang.org/x/text v0.3.7 // indirect
253
- golang.org/x/tools v0.1.10 // indirect
254
- golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
254
+ golang.org/x/tools v0.1.11 // indirect
255
+ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect
256
google.golang.org/appengine v1.6.6 // indirect
257
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 // indirect
257
- google.golang.org/grpc v1.46.0 // indirect
258
+ google.golang.org/grpc v1.47.0 // indirect
259
google.golang.org/protobuf v1.28.0 // indirect
260
gopkg.in/square/go-jose.v2 v2.5.1 // indirect
261
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
262
gopkg.in/yaml.v2 v2.4.0 // indirect
262
- gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
263
+ gopkg.in/yaml.v3 v3.0.1 // indirect
264
lukechampine.com/blake3 v1.1.7 // indirect
265
)
266
go.sum
+71
-42
@@ -104,10 +104,16 @@ github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcug
104
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
105
github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94=
106
github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA=
107
-github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c=
107
+github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
108
github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y=
109
-github.com/btcsuite/btcd/btcec/v2 v2.1.3 h1:xM/n3yIhHAhHy04z4i43C8p4ehixJZMsnrVJkgl+MTE=
109
+github.com/btcsuite/btcd v0.23.1 h1:IB8cVQcC2X5mHbnfirLG5IZnkWYNTPlLZVrxUYSotbE=
110
+github.com/btcsuite/btcd v0.23.1/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
111
+github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
112
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
113
+github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
114
+github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
115
+github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
116
+github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE=
117
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
118
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
119
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
@@ -159,8 +165,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH
165
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
166
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
167
github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
162
-github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4=
163
-github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8=
168
+github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA=
169
+github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA=
170
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
171
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
172
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@@ -740,14 +746,15 @@ github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e
746
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
747
github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
748
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
743
-github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE=
744
-github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
749
+github.com/klauspost/cpuid/v2 v2.0.14 h1:QRqdp6bb9M9S5yyKeYteXKuoKE4p0tGlra81fKOpWH8=
750
+github.com/klauspost/cpuid/v2 v2.0.14/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
751
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
752
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
753
github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
754
github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk=
749
-github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o=
755
github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs=
756
+github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8=
757
+github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA=
758
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
759
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
760
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -763,8 +770,9 @@ github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpz
770
github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E=
771
github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw=
772
github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ=
766
-github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs=
773
github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM=
774
+github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
775
+github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
776
github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c=
777
github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic=
778
github.com/libp2p/go-conn-security v0.0.1/go.mod h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk=
@@ -796,8 +804,9 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m
804
github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4=
805
github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4cggO11ETmw=
806
github.com/libp2p/go-libp2p v0.20.0/go.mod h1:g0C5Fu+aXXbCXkusCzLycuBowEih3ElmDqtbo61Em7k=
799
-github.com/libp2p/go-libp2p v0.20.3 h1:tjjDNfp7FqdI/7v1rXtB/BtELaPlAThL2uzlj18kcrw=
800
-github.com/libp2p/go-libp2p v0.20.3/go.mod h1:I+vndVanE/p/SjFbnA+BEmmfAUEpWxrdXZeyQ1Dus5c=
807
+github.com/libp2p/go-libp2p v0.20.1-0.20220702080325-0d7f192a0b2b/go.mod h1:/V/lQvlr89XZv5MKTyl1yb0bPr5rb71m6EZB/j8CUfE=
808
+github.com/libp2p/go-libp2p v0.20.1-0.20220702110402-59d643acf30f h1:5kOxq8Xdt7U+3RFa1KKzeTnFx5BqxqtAp5T1ieDW7cQ=
809
+github.com/libp2p/go-libp2p v0.20.1-0.20220702110402-59d643acf30f/go.mod h1:DcdrxWL9mUmXApMoj4bQh95WiZPT7Uzr7JbfK1lgscI=
810
github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo=
811
github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I=
812
github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
@@ -822,7 +831,6 @@ github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFk
831
github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU=
832
github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo=
833
github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA=
825
-github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w=
834
github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M=
835
github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF++G5Jkl/w=
836
github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0=
@@ -857,9 +865,9 @@ github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQR
865
github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg=
866
github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg=
867
github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8=
860
-github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs=
861
-github.com/libp2p/go-libp2p-core v0.16.1 h1:bWoiEBqVkpJ13hbv/f69tHODp86t6mvc4fBN4DkK73M=
868
github.com/libp2p/go-libp2p-core v0.16.1/go.mod h1:O3i/7y+LqUb0N+qhzXjBjjpchgptWAVMG1Voegk7b4c=
869
+github.com/libp2p/go-libp2p-core v0.19.0 h1:KDw7hanmh0EuVdZqsHCAzmkdiYMk5uR5h0UGSCVTxSU=
870
+github.com/libp2p/go-libp2p-core v0.19.0/go.mod h1:AkA+FUKQfYt1FLNef5fOPlo/naAWjKy/RCjkcPjqzYg=
871
github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
872
github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
873
github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI=
@@ -882,8 +890,8 @@ github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM
890
github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
891
github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
892
github.com/libp2p/go-libp2p-kad-dht v0.15.0/go.mod h1:rZtPxYu1TnHHz6n1RggdGrxUX/tA1C2/Wiw3ZMUDrU0=
885
-github.com/libp2p/go-libp2p-kad-dht v0.16.0 h1:epVRYl3O8dn47uV3wVD2+IobEvBPapEMVj4sWlvwQHU=
886
-github.com/libp2p/go-libp2p-kad-dht v0.16.0/go.mod h1:YYLlG8AbpWVGbI/zFeSbiGT0n0lluH7IG0sHeounyWA=
893
+github.com/libp2p/go-libp2p-kad-dht v0.16.1-0.20220702124207-e5a723647953 h1:OODUMM0krnTSgVSLNICQ4TCW8UfPKgomg0eOiUwA3Eo=
894
+github.com/libp2p/go-libp2p-kad-dht v0.16.1-0.20220702124207-e5a723647953/go.mod h1:vtMxbammvMR5iyLL1tWMDjOgyax7cg24UNYO5MUIuRw=
895
github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio=
896
github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70=
897
github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk=
@@ -928,8 +936,9 @@ github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuD
936
github.com/libp2p/go-libp2p-peerstore v0.2.7/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s=
937
github.com/libp2p/go-libp2p-peerstore v0.2.8/go.mod h1:gGiPlXdz7mIHd2vfAsHzBNAMqSDkt2UBFwgcITgw1lA=
938
github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0=
931
-github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A=
939
github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc=
940
+github.com/libp2p/go-libp2p-peerstore v0.7.1 h1:7FpALlqR+3+oOBXdzm3AVt0vjMYLW1b7jM03E4iEHlw=
941
+github.com/libp2p/go-libp2p-peerstore v0.7.1/go.mod h1:cdUWTHro83vpg6unCpGUr8qJoX3e93Vy8o97u5ppIM0=
942
github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA=
943
github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s=
944
github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk=
@@ -950,8 +959,10 @@ github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGd
959
github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0=
960
github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4=
961
github.com/libp2p/go-libp2p-resource-manager v0.1.5/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y=
953
-github.com/libp2p/go-libp2p-resource-manager v0.3.0 h1:2+cYxUNi33tcydsVLt6K5Fv2E3OTiVeafltecAj15E0=
962
github.com/libp2p/go-libp2p-resource-manager v0.3.0/go.mod h1:K+eCkiapf+ey/LADO4TaMpMTP9/Qde/uLlrnRqV4PLQ=
963
+github.com/libp2p/go-libp2p-resource-manager v0.4.0/go.mod h1:+5QPxFLRXYlRDZ0P1bPKE7zyZDvex5TLVOqePwRmwfc=
964
+github.com/libp2p/go-libp2p-resource-manager v0.4.1-0.20220702093928-7ceb0b850c67 h1:LEikdvzrVWpCC+ZiV1nA5xidrWR9w4QJDN0Lk3lJfH4=
965
+github.com/libp2p/go-libp2p-resource-manager v0.4.1-0.20220702093928-7ceb0b850c67/go.mod h1:CggtV6EZb+Y0dGh41q5ezO4udcVKyhcEFpydHD8EMe0=
966
github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys=
967
github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY=
968
github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw=
@@ -988,8 +999,9 @@ github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotl
999
github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A=
1000
github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E=
1001
github.com/libp2p/go-libp2p-testing v0.8.0/go.mod h1:gRdsNxQSxAZowTgcLY7CC33xPmleZzoBpqSYbWenqPc=
991
-github.com/libp2p/go-libp2p-testing v0.9.2 h1:dCpODRtRaDZKF8HXT9qqqgON+OMEB423Knrgeod8j84=
1002
github.com/libp2p/go-libp2p-testing v0.9.2/go.mod h1:Td7kbdkWqYTJYQGTwzlgXwaqldraIanyjuRiAbK/XQU=
1003
+github.com/libp2p/go-libp2p-testing v0.10.0 h1:LO7wuUPPNAe1D1s0HZ+9WoROaGIn/MEl1wtugXuTRzg=
1004
+github.com/libp2p/go-libp2p-testing v0.10.0/go.mod h1:jJ4fiJwyZ3UlPTLcnz/sEmPPSviQ79Q0MVD/CykzrP0=
1005
github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M=
1006
github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY=
1007
github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY=
@@ -1133,8 +1145,9 @@ github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0
1145
github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
1146
github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
1147
github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg=
1136
-github.com/lucas-clemente/quic-go v0.27.1 h1:sOw+4kFSVrdWOYmUjufQ9GBVPqZ+tu+jMtXxXNmRJyk=
1148
github.com/lucas-clemente/quic-go v0.27.1/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI=
1149
+github.com/lucas-clemente/quic-go v0.28.0 h1:9eXVRgIkMQQyiyorz/dAaOYIx3TFzXsIFkNFz4cxuJM=
1150
+github.com/lucas-clemente/quic-go v0.28.0/go.mod h1:oGz5DKK41cJt5+773+BSO9BXDsREY4HLf7+0odGAPO0=
1151
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
1152
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
1153
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
@@ -1150,11 +1163,15 @@ github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtU
1163
github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk=
1164
github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8=
1165
github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8=
1153
-github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc=
1166
github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
1167
+github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ=
1168
+github.com/marten-seemann/qtls-go1-17 v0.1.2/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s=
1169
github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI=
1156
-github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y=
1170
github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
1171
+github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM=
1172
+github.com/marten-seemann/qtls-go1-18 v0.1.2/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4=
1173
+github.com/marten-seemann/qtls-go1-19 v0.1.0-beta.1 h1:7m/WlWcSROrcK5NxuXaxYD32BZqe/LEEnBrWcH/cOqQ=
1174
+github.com/marten-seemann/qtls-go1-19 v0.1.0-beta.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI=
1175
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
1176
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
1177
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@@ -1184,8 +1201,8 @@ github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7
1201
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
1202
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
1203
github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
1187
-github.com/miekg/dns v1.1.48 h1:Ucfr7IIVyMBz4lRE8qmGUuZ4Wt3/ZGu9hmcMT3Uu4tQ=
1188
-github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
1204
+github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
1205
+github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
1206
github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8=
1207
github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms=
1208
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc=
@@ -1260,8 +1277,8 @@ github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysj
1277
github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA=
1278
github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs=
1279
github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc=
1263
-github.com/multiformats/go-multibase v0.1.0 h1:+cr9718eEwFIUxPP7sQmixYYhD4sRrU9aMXqYb+0diE=
1264
-github.com/multiformats/go-multibase v0.1.0/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8=
1280
+github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI=
1281
+github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8=
1282
github.com/multiformats/go-multicodec v0.2.0/go.mod h1:/y4YVwkfMyry5kFbMTbLJKErhycTIftytRV+llXdyS4=
1283
github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ=
1284
github.com/multiformats/go-multicodec v0.3.1-0.20210902112759-1539a079fd61/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ=
@@ -1404,8 +1421,8 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9
1421
github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
1422
github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
1423
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
1407
-github.com/prometheus/common v0.33.0 h1:rHgav/0a6+uYgGdNt3jwz8FNSesO/Hsang3O0T9A5SE=
1408
-github.com/prometheus/common v0.33.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE=
1424
+github.com/prometheus/common v0.35.0 h1:Eyr+Pw2VymWejHqCugNaQXkAi6KayVNxaHeu6khmFBE=
1425
+github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
1426
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
1427
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
1428
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -1501,18 +1518,21 @@ github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3
1518
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
1519
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
1520
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
1504
-github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
1521
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
1522
+github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4=
1523
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
1524
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
1525
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
1526
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
1527
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
1528
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
1529
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
1512
-github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
1530
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
1514
-github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
1531
+github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
1532
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
1533
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
1534
+github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
1535
+github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
1536
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
1537
github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e h1:T5PdfK/M1xyrHwynxMIVMWLS7f/qHwfslZphxtGnw7s=
1538
github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g=
@@ -1720,8 +1740,9 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
1740
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
1741
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
1742
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
1723
-golang.org/x/exp v0.0.0-20210615023648-acb5c1269671 h1:ddvpKwqE7dm58PoWjRCmaCiA3DANEW0zWGfNYQD212Y=
1743
golang.org/x/exp v0.0.0-20210615023648-acb5c1269671/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc=
1744
+golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5 h1:rxKZ2gOnYxjfmakvUUqh9Gyb6KXfrj7JWTxORTYqb0E=
1745
+golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
1746
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
1747
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
1748
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1746,8 +1767,10 @@ golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hM
1767
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
1768
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
1769
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
1749
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o=
1750
-golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
1770
+golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
1771
+golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
1772
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
1773
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
1774
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
1775
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
1776
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1791,6 +1814,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/
1814
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
1815
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
1816
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
1817
+golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
1818
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
1819
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
1820
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
@@ -1810,8 +1834,10 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx
1834
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
1835
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
1836
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
1813
-golang.org/x/net v0.0.0-20220517181318-183a9ca12b87 h1:cCR+9mKLOGyX4Zx+uBZDXEDAQsvKQ/XbW4vreG5v1jU=
1814
-golang.org/x/net v0.0.0-20220517181318-183a9ca12b87/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
1837
+golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
1838
+golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
1839
+golang.org/x/net v0.0.0-20220630215102-69896b714898 h1:K7wO6V1IrczY9QOQ2WkVpw4JQSwCd52UsxVEirZUfiw=
1840
+golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
1841
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
1842
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
1843
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -1899,6 +1925,7 @@ golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7w
1925
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1926
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1927
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1928
+golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1929
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1930
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1931
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1926,7 +1953,6 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
1953
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1954
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1955
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1929
-golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1956
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
1957
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1958
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -2005,14 +2031,15 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
2031
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
2032
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
2033
golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
2008
-golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20=
2009
-golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
2034
+golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
2035
+golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY=
2036
+golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
2037
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
2038
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
2039
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
2040
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
2014
-golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U=
2015
-golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
2041
+golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f h1:uF6paiQQebLeSXkrTqHqz0MXhXXS1KgF41eUdBNvxK0=
2042
+golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
2043
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
2044
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
2045
google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y=
@@ -2106,8 +2133,9 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
2133
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
2134
google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
2135
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
2109
-google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8=
2136
google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
2137
+google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8=
2138
+google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
2139
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
2140
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
2141
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -2153,8 +2181,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
2181
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
2182
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
2183
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
2156
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
2184
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
2185
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
2186
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
2187
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o=
2188
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
2189
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=