diff --git a/management/server/grpcserver.go b/management/server/grpcserver.go index 43d35f643..65f095bd2 100644 --- a/management/server/grpcserver.go +++ b/management/server/grpcserver.go @@ -444,6 +444,16 @@ func (s *GRPCServer) Login(ctx context.Context, req *proto.EncryptedMessage) (*p //nolint ctx = context.WithValue(ctx, nbContext.AccountIDKey, accountID) + err = TryAcquire(loginReq.GetPeerKeys().String()) + if err != nil { + log.WithContext(ctx).Debugf("error while acquiring grpc semaphore for %s: %v", loginReq.GetPeerKeys().String(), err) + return nil, err + } + + defer func() { + Release(loginReq.GetPeerKeys().String()) + }() + if loginReq.GetMeta() == nil { msg := status.Errorf(codes.FailedPrecondition, "peer system meta has to be provided to log in. Peer %s, remote addr %s", peerKey.String(), realIP) diff --git a/management/server/peer.go b/management/server/peer.go index df528e295..e7d14dd3b 100644 --- a/management/server/peer.go +++ b/management/server/peer.go @@ -463,7 +463,6 @@ func TryAcquire(key string) error { return nil } -// Release marks a worker key as free. func Release(key string) { mu.Lock() defer mu.Unlock()