Add grpc keep alive for management service

This commit is contained in:
Zoltan Papp
2023-06-23 13:01:31 +02:00
parent 774d8e955c
commit e376541745
3 changed files with 191 additions and 1 deletions
+14
View File
@@ -9,6 +9,7 @@ import (
"time"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
gstatus "google.golang.org/grpc/status"
log "github.com/sirupsen/logrus"
@@ -24,6 +25,7 @@ import (
"github.com/netbirdio/netbird/client/system"
"github.com/netbirdio/netbird/encryption"
"github.com/netbirdio/netbird/management/proto"
"github.com/netbirdio/netbird/version"
)
// ConnStateNotifier is a wrapper interface of the status recorders
@@ -67,6 +69,9 @@ func NewClient(ctx context.Context, addr string, ourPrivateKey wgtypes.Key, tlsE
realClient := proto.NewManagementServiceClient(conn)
md := metadata.Pairs("version", version.NetbirdVersion())
ctx = metadata.NewOutgoingContext(ctx, md)
return &GrpcClient{
key: ourPrivateKey,
realClient: realClient,
@@ -131,6 +136,7 @@ func (c *GrpcClient) Sync(msgHandler func(msg *proto.SyncResponse) error) error
ctx, cancelStream := context.WithCancel(c.ctx)
defer cancelStream()
stream, err := c.connectToStream(ctx, *serverPubKey)
if err != nil {
log.Debugf("failed to open Management Service stream: %s", err)
@@ -246,6 +252,10 @@ func (c *GrpcClient) receiveEvents(stream proto.ManagementService_SyncClient, se
return err
}
if c.isKeepAliveMsg(update.Body) {
continue
}
log.Debugf("got an update message from Management Service")
decryptedResp := &proto.SyncResponse{}
err = encryption.DecryptMessage(serverPubKey, c.key, update.Body, decryptedResp)
@@ -386,6 +396,10 @@ func (c *GrpcClient) notifyConnected() {
c.connStateCallback.MarkManagementConnected()
}
func (c *GrpcClient) isKeepAliveMsg(body []byte) bool {
return len(body) == 0
}
func infoToMetaData(info *system.Info) *proto.PeerSystemMeta {
if info == nil {
return nil