From 9d3db68805513b44141310481656732bdf284439 Mon Sep 17 00:00:00 2001 From: Maycon Santos Date: Thu, 23 May 2024 14:59:09 +0200 Subject: [PATCH] Return the proper error when a peer is deleted (#2035) this fixes an issue causing peers to keep retrying the connection after a peer is removed from the management system --- management/server/account.go | 6 ++++++ management/server/grpcserver.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/management/server/account.go b/management/server/account.go index f08c8c5c2db..132dbc73474 100644 --- a/management/server/account.go +++ b/management/server/account.go @@ -1840,6 +1840,9 @@ func (am *DefaultAccountManager) getAccountWithAuthorizationClaims(claims jwtcla func (am *DefaultAccountManager) SyncAndMarkPeer(peerPubKey string, realIP net.IP) (*nbpeer.Peer, *NetworkMap, error) { accountID, err := am.Store.GetAccountIDByPeerPubKey(peerPubKey) if err != nil { + if errStatus, ok := status.FromError(err); ok && errStatus.Type() == status.NotFound { + return nil, nil, status.Errorf(status.Unauthenticated, "peer not registered") + } return nil, nil, err } @@ -1867,6 +1870,9 @@ func (am *DefaultAccountManager) SyncAndMarkPeer(peerPubKey string, realIP net.I func (am *DefaultAccountManager) CancelPeerRoutines(peer *nbpeer.Peer) error { accountID, err := am.Store.GetAccountIDByPeerPubKey(peer.Key) if err != nil { + if errStatus, ok := status.FromError(err); ok && errStatus.Type() == status.NotFound { + return status.Errorf(status.Unauthenticated, "peer not registered") + } return err } diff --git a/management/server/grpcserver.go b/management/server/grpcserver.go index e6504611720..a30c12feae5 100644 --- a/management/server/grpcserver.go +++ b/management/server/grpcserver.go @@ -136,7 +136,7 @@ func (s *GRPCServer) Sync(req *proto.EncryptedMessage, srv proto.ManagementServi peer, netMap, err := s.accountManager.SyncAndMarkPeer(peerKey.String(), realIP) if err != nil { - return err + return mapError(err) } err = s.sendInitialSync(peerKey, peer, netMap, srv)