@@ -2,9 +2,7 @@ package p2p
2
2
3
3
import (
4
4
"context"
5
- "fmt"
6
5
"path/filepath"
7
- "time"
8
6
9
7
"github.com/libp2p/go-libp2p"
10
8
"github.com/libp2p/go-libp2p/core/crypto"
@@ -21,11 +19,8 @@ import (
21
19
"github.com/iotaledger/hive.go/ierrors"
22
20
"github.com/iotaledger/hive.go/kvstore"
23
21
hivedb "github.com/iotaledger/hive.go/kvstore/database"
24
- "github.com/iotaledger/hive.go/runtime/event"
25
22
"github.com/iotaledger/iota-core/pkg/daemon"
26
23
"github.com/iotaledger/iota-core/pkg/network"
27
- "github.com/iotaledger/iota-core/pkg/network/autopeering"
28
- "github.com/iotaledger/iota-core/pkg/network/manualpeering"
29
24
"github.com/iotaledger/iota-core/pkg/network/p2p"
30
25
"github.com/iotaledger/iota-core/pkg/protocol"
31
26
)
@@ -51,9 +46,7 @@ type dependencies struct {
51
46
dig.In
52
47
PeeringConfig * configuration.Configuration `name:"peeringConfig"`
53
48
PeeringConfigManager * p2p.ConfigManager
54
- ManualPeeringMgr * manualpeering.Manager
55
- AutoPeeringMgr * autopeering.Manager
56
- P2PManager * p2p.Manager
49
+ NetworkManager network.Manager
57
50
PeerDB * network.DB
58
51
Protocol * protocol.Protocol
59
52
PeerDBKVSTore kvstore.KVStore `name:"peerDBKVStore"`
@@ -79,49 +72,6 @@ func initConfigParams(c *dig.Container) error {
79
72
}
80
73
81
74
func provide (c * dig.Container ) error {
82
- type manualPeeringDeps struct {
83
- dig.In
84
-
85
- P2PManager * p2p.Manager
86
- }
87
-
88
- if err := c .Provide (func (deps manualPeeringDeps ) * manualpeering.Manager {
89
- return manualpeering .NewManager (deps .P2PManager , Component .WorkerPool , Component .Logger )
90
- }); err != nil {
91
- return err
92
- }
93
-
94
- type autoPeeringDeps struct {
95
- dig.In
96
-
97
- Protocol * protocol.Protocol
98
- P2PManager * p2p.Manager
99
- Host host.Host
100
- PeerDB * network.DB
101
- }
102
-
103
- if err := c .Provide (func (deps autoPeeringDeps ) * autopeering.Manager {
104
- peersMultiAddresses , err := getMultiAddrsFromString (ParamsPeers .BootstrapPeers )
105
- if err != nil {
106
- Component .LogFatalf ("Failed to parse bootstrapPeers param: %s" , err )
107
- }
108
-
109
- for _ , multiAddr := range peersMultiAddresses {
110
- bootstrapPeer , err := network .NewPeerFromMultiAddr (multiAddr )
111
- if err != nil {
112
- Component .LogFatalf ("Failed to parse bootstrap peer multiaddress: %s" , err )
113
- }
114
-
115
- if err := deps .PeerDB .UpdatePeer (bootstrapPeer ); err != nil {
116
- Component .LogErrorf ("Failed to update bootstrap peer: %s" , err )
117
- }
118
- }
119
-
120
- return autopeering .NewManager (deps .Protocol .LatestAPI ().ProtocolParameters ().NetworkName (), deps .P2PManager , deps .Host , deps .PeerDB , Component .Logger )
121
- }); err != nil {
122
- return err
123
- }
124
-
125
75
type peerDatabaseResult struct {
126
76
dig.Out
127
77
@@ -251,7 +201,7 @@ func provide(c *dig.Container) error {
251
201
connManager , err := connmgr .NewConnManager (
252
202
ParamsP2P .ConnectionManager .LowWatermark ,
253
203
ParamsP2P .ConnectionManager .HighWatermark ,
254
- connmgr .WithGracePeriod ( time . Minute ),
204
+ connmgr .WithEmergencyTrim ( true ),
255
205
)
256
206
if err != nil {
257
207
Component .LogPanicf ("unable to initialize connection manager: %s" , err )
@@ -263,6 +213,7 @@ func provide(c *dig.Container) error {
263
213
libp2p .Transport (tcp .NewTCPTransport ),
264
214
libp2p .ConnectionManager (connManager ),
265
215
libp2p .NATPortMap (),
216
+ libp2p .DisableRelay (),
266
217
// Define a custom address factory to inject external addresses to the DHT advertisements.
267
218
libp2p .AddrsFactory (func () func (addrs []multiaddr.Multiaddr ) []multiaddr.Multiaddr {
268
219
var externalMultiAddrs []multiaddr.Multiaddr
@@ -294,8 +245,31 @@ func provide(c *dig.Container) error {
294
245
Component .LogPanic (err .Error ())
295
246
}
296
247
297
- return c .Provide (func (host host.Host , peerDB * network.DB ) * p2p.Manager {
298
- return p2p .NewManager (host , peerDB , Component .Logger )
248
+ type p2pManagerDeps struct {
249
+ dig.In
250
+ Host host.Host
251
+ PeerDB * network.DB
252
+ }
253
+
254
+ return c .Provide (func (inDeps p2pManagerDeps ) network.Manager {
255
+
256
+ peersMultiAddresses , err := getMultiAddrsFromString (ParamsPeers .BootstrapPeers )
257
+ if err != nil {
258
+ Component .LogFatalf ("Failed to parse bootstrapPeers param: %s" , err )
259
+ }
260
+
261
+ for _ , multiAddr := range peersMultiAddresses {
262
+ bootstrapPeer , err := network .NewPeerFromMultiAddr (multiAddr )
263
+ if err != nil {
264
+ Component .LogFatalf ("Failed to parse bootstrap peer multiaddress: %s" , err )
265
+ }
266
+
267
+ if err := inDeps .PeerDB .UpdatePeer (bootstrapPeer ); err != nil {
268
+ Component .LogErrorf ("Failed to update bootstrap peer: %s" , err )
269
+ }
270
+ }
271
+
272
+ return p2p .NewManager (inDeps .Host , inDeps .PeerDB , ParamsP2P .Autopeering .MaxPeers , Component .Logger )
299
273
})
300
274
}
301
275
@@ -321,43 +295,27 @@ func configure() error {
321
295
}
322
296
323
297
// log the p2p events
324
- deps .P2PManager . Events . NeighborAdded . Hook (func (neighbor * p2p .Neighbor ) {
325
- Component .LogInfof ("Neighbor added: %s / %s" , neighbor .PeerAddresses , neighbor .ID )
326
- }, event . WithWorkerPool ( Component . WorkerPool ) )
298
+ deps .NetworkManager . OnNeighborAdded (func (neighbor network .Neighbor ) {
299
+ Component .LogInfof ("neighbor added: %s / %s" , neighbor .Peer (). PeerAddresses , neighbor . Peer () .ID )
300
+ })
327
301
328
- deps .P2PManager . Events . NeighborRemoved . Hook (func (neighbor * p2p .Neighbor ) {
329
- Component .LogInfof ("Neighbor removed: %s / %s" , neighbor .PeerAddresses , neighbor .ID )
330
- }, event . WithWorkerPool ( Component . WorkerPool ) )
302
+ deps .NetworkManager . OnNeighborRemoved (func (neighbor network .Neighbor ) {
303
+ Component .LogInfof ("neighbor removed: %s / %s" , neighbor .Peer (). PeerAddresses , neighbor . Peer () .ID )
304
+ })
331
305
332
306
return nil
333
307
}
334
308
335
309
func run () error {
336
310
if err := Component .Daemon ().BackgroundWorker (Component .Name , func (ctx context.Context ) {
337
- deps .ManualPeeringMgr .Start ()
338
- if err := deps .AutoPeeringMgr .Start (ctx ); err != nil {
339
- Component .LogFatalf ("Failed to start autopeering manager: %s" , err )
311
+ defer deps .NetworkManager .Shutdown ()
312
+
313
+ if err := deps .NetworkManager .Start (ctx , deps .Protocol .LatestAPI ().ProtocolParameters ().NetworkName ()); err != nil {
314
+ Component .LogFatalf ("Failed to start p2p manager: %s" , err )
340
315
}
341
316
342
- defer func () {
343
- if err := deps .ManualPeeringMgr .Stop (); err != nil {
344
- Component .LogErrorf ("Failed to stop the manager" , "err" , err )
345
- }
346
- }()
347
317
//nolint:contextcheck // false positive
348
318
connectConfigKnownPeers ()
349
- <- ctx .Done ()
350
- }, daemon .PriorityManualPeering ); err != nil {
351
- Component .LogFatalf ("Failed to start as daemon: %s" , err )
352
- }
353
-
354
- if err := Component .Daemon ().BackgroundWorker (fmt .Sprintf ("%s-P2PManager" , Component .Name ), func (ctx context.Context ) {
355
- defer deps .P2PManager .Shutdown ()
356
- defer func () {
357
- if err := deps .P2PManager .P2PHost ().Close (); err != nil {
358
- Component .LogWarnf ("Failed to close libp2p host: %+v" , err )
359
- }
360
- }()
361
319
362
320
<- ctx .Done ()
363
321
}, daemon .PriorityP2P ); err != nil {
@@ -395,7 +353,7 @@ func connectConfigKnownPeers() {
395
353
Component .LogPanicf ("invalid peer address info: %s" , err )
396
354
}
397
355
398
- if err := deps .ManualPeeringMgr . AddPeers (multiAddr ); err != nil {
356
+ if err := deps .NetworkManager . AddManualPeers (multiAddr ); err != nil {
399
357
Component .LogInfof ("failed to add peer: %s, error: %s" , multiAddr .String (), err )
400
358
}
401
359
}
0 commit comments