diff --git a/packages/autopeering/peer/local.go b/packages/autopeering/peer/local.go index 65638ae1852f5419afd2fbfaa4d47986298d13cb..32a7a9dfbecf74bccd7a3919f214b964caadd670 100644 --- a/packages/autopeering/peer/local.go +++ b/packages/autopeering/peer/local.go @@ -50,18 +50,9 @@ func NewLocal(network string, address string, db DB) (*Local, error) { if l := len(key); l != ed25519.PrivateKeySize { return nil, fmt.Errorf("invalid key length: %d, need %d", l, ed25519.PublicKeySize) } - services, err := db.LocalServices() - if err != nil { - return nil, err - } - serviceRecord := services.CreateRecord() - - // update the external address used for the peering and store back in DB + // update the external address used for the peering + serviceRecord := service.New() serviceRecord.Update(service.PeeringKey, network, address) - err = db.UpdateLocalServices(serviceRecord) - if err != nil { - return nil, err - } return newLocal(key, serviceRecord, db), nil } @@ -81,12 +72,8 @@ func (l *Local) UpdateService(key service.Key, network string, address string) e l.mu.Lock() defer l.mu.Unlock() - // update the service in the read protected map and store back in DB + // update the service in the read protected map l.serviceRecord.Update(key, network, address) - err := l.db.UpdateLocalServices(l.serviceRecord) - if err != nil { - return err - } // create a new peer with the corresponding services l.Peer = *NewPeer(l.key.Public(), l.serviceRecord) diff --git a/packages/autopeering/peer/mapdb.go b/packages/autopeering/peer/mapdb.go index 03719614deb30a01a8399f94405bfada3d8072e1..df3ead3f55b623bb611b6dc291ea4cd2a3ec57ba 100644 --- a/packages/autopeering/peer/mapdb.go +++ b/packages/autopeering/peer/mapdb.go @@ -4,16 +4,14 @@ import ( "sync" "time" - "github.com/iotaledger/goshimmer/packages/autopeering/peer/service" "github.com/iotaledger/hive.go/logger" ) // mapDB is a simple implementation of DB using a map. type mapDB struct { - mutex sync.RWMutex - m map[string]peerEntry - key PrivateKey - services *service.Record + mutex sync.RWMutex + m map[string]peerEntry + key PrivateKey log *logger.Logger @@ -34,10 +32,9 @@ type peerPropEntry struct { // NewMemoryDB creates a new DB that uses a GO map. func NewMemoryDB(log *logger.Logger) DB { db := &mapDB{ - m: make(map[string]peerEntry), - services: service.New(), - log: log, - closing: make(chan struct{}), + m: make(map[string]peerEntry), + log: log, + closing: make(chan struct{}), } // start the expirer routine @@ -70,24 +67,6 @@ func (db *mapDB) LocalPrivateKey() (PrivateKey, error) { return db.key, nil } -// LocalServices returns the services stored in the database or creates an empty map. -func (db *mapDB) LocalServices() (service.Service, error) { - db.mutex.RLock() - defer db.mutex.RUnlock() - - return db.services, nil -} - -// UpdateLocalServices updates the services stored in the database. -func (db *mapDB) UpdateLocalServices(services service.Service) error { - record := services.CreateRecord() - - db.mutex.Lock() - defer db.mutex.Unlock() - db.services = record - return nil -} - // LastPing returns that property for the given peer ID and address. func (db *mapDB) LastPing(id ID, address string) time.Time { db.mutex.RLock() diff --git a/packages/autopeering/peer/peerdb.go b/packages/autopeering/peer/peerdb.go index b5cfcdfbb8b3ee86e3e5238afe53bc8ddc0df3f9..106517aa56ef0562b3d018529644394e8cd30c8d 100644 --- a/packages/autopeering/peer/peerdb.go +++ b/packages/autopeering/peer/peerdb.go @@ -7,7 +7,6 @@ import ( "sync" "time" - "github.com/iotaledger/goshimmer/packages/autopeering/peer/service" "github.com/iotaledger/goshimmer/packages/database" "github.com/iotaledger/hive.go/logger" ) @@ -29,10 +28,6 @@ const ( type DB interface { // LocalPrivateKey returns the private key stored in the database or creates a new one. LocalPrivateKey() (PrivateKey, error) - // LocalServices returns the services stored in the database or creates an empty services. - LocalServices() (service.Service, error) - // UpdateLocalServices updates the services stored in the database. - UpdateLocalServices(services service.Service) error // Peer retrieves a peer from the database. Peer(id ID) *Peer @@ -72,8 +67,7 @@ const ( dbNodePong = "lastpong" // Local information is keyed by ID only. Use localFieldKey to create those keys. - dbLocalKey = "key" - dbLocalServices = "services" + dbLocalKey = "key" ) // NewPersistentDB creates a new persistent DB. @@ -192,33 +186,6 @@ func (db *persistentDB) LocalPrivateKey() (PrivateKey, error) { return key, nil } -// LocalServices returns the services stored in the database or creates an empty services. -func (db *persistentDB) LocalServices() (service.Service, error) { - key, err := db.db.Get(localFieldKey(dbLocalServices)) - if err == database.ErrKeyNotFound { - return service.New(), nil - } - if err != nil { - return nil, err - } - - services, err := service.Unmarshal(key) - if err != nil { - return nil, err - } - - return services, nil -} - -// UpdateLocalServices updates the services stored in the database. -func (db *persistentDB) UpdateLocalServices(services service.Service) error { - value, err := services.CreateRecord().CreateRecord().Marshal() - if err != nil { - return err - } - return db.db.Set(localFieldKey(dbLocalServices), value) -} - // LastPing returns that property for the given peer ID and address. func (db *persistentDB) LastPing(id ID, address string) time.Time { return time.Unix(db.getInt64(nodeFieldKey(id, address, dbNodePing)), 0) diff --git a/plugins/analysis/client/plugin.go b/plugins/analysis/client/plugin.go index ccec3955a929c7adf3bb9a14ef9204d2dc0bacc0..b9179be1232bcd82a528e8b240dc15c43df7dd30 100644 --- a/plugins/analysis/client/plugin.go +++ b/plugins/analysis/client/plugin.go @@ -94,18 +94,22 @@ func setupHooks(plugin *node.Plugin, conn *network.ManagedConnection, eventDispa eventDispatchers.RemoveNode(ev.Peer.ID().Bytes()) }) + onAddChosenNeighbor := events.NewClosure(func(ev *selection.PeeringEvent) { + if ev.Status { + eventDispatchers.ConnectNodes(local.GetInstance().ID().Bytes(), ev.Peer.ID().Bytes()) + } + }) + onAddAcceptedNeighbor := events.NewClosure(func(ev *selection.PeeringEvent) { - eventDispatchers.ConnectNodes(ev.Peer.ID().Bytes(), local.GetInstance().ID().Bytes()) + if ev.Status { + eventDispatchers.ConnectNodes(ev.Peer.ID().Bytes(), local.GetInstance().ID().Bytes()) + } }) onRemoveNeighbor := events.NewClosure(func(ev *selection.DroppedEvent) { eventDispatchers.DisconnectNodes(ev.DroppedID.Bytes(), local.GetInstance().ID().Bytes()) }) - onAddChosenNeighbor := events.NewClosure(func(ev *selection.PeeringEvent) { - eventDispatchers.ConnectNodes(local.GetInstance().ID().Bytes(), ev.Peer.ID().Bytes()) - }) - // setup hooks ///////////////////////////////////////////////////////////////////////////////////////////////////// discover.Events.PeerDiscovered.Attach(onDiscoverPeer) diff --git a/plugins/autopeering/plugin.go b/plugins/autopeering/plugin.go index f40c3746d80fd1bc48797e88348d2e9e4b3e62d5..4688b6b0d72cde21dbcbdc19947bc4cfef6ec1e8 100644 --- a/plugins/autopeering/plugin.go +++ b/plugins/autopeering/plugin.go @@ -51,10 +51,14 @@ func configureEvents() { log.Infof("Salt updated; expires=%s", ev.Public.GetExpiration().Format(time.RFC822)) })) selection.Events.OutgoingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) { - log.Infof("Peering chosen: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + if ev.Status { + log.Infof("Peering chosen: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + } })) selection.Events.IncomingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) { - log.Infof("Peering accepted: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + if ev.Status { + log.Infof("Peering accepted: %s / %s", ev.Peer.Address(), ev.Peer.ID()) + } })) selection.Events.Dropped.Attach(events.NewClosure(func(ev *selection.DroppedEvent) { log.Infof("Peering dropped: %s", ev.DroppedID) diff --git a/plugins/gossip/plugin.go b/plugins/gossip/plugin.go index 6d84cd4fb1aa8842ab1a4e11ac20cb541db0db79..f6f5717ed0875c20017c13471e2677743126db22 100644 --- a/plugins/gossip/plugin.go +++ b/plugins/gossip/plugin.go @@ -39,6 +39,9 @@ func configureEvents() { }() })) selection.Events.IncomingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) { + if !ev.Status { + return // ignore rejected peering + } go func() { if err := mgr.AddInbound(ev.Peer); err != nil { log.Debugw("error adding inbound", "id", ev.Peer.ID(), "err", err) @@ -46,6 +49,9 @@ func configureEvents() { }() })) selection.Events.OutgoingPeering.Attach(events.NewClosure(func(ev *selection.PeeringEvent) { + if !ev.Status { + return // ignore rejected peering + } go func() { if err := mgr.AddOutbound(ev.Peer); err != nil { log.Debugw("error adding outbound", "id", ev.Peer.ID(), "err", err)