mirror of
https://github.com/netbirdio/netbird.git
synced 2025-06-20 17:58:02 +02:00
[client] Fix error handling case of flow grpc error (#3727)
When a gRPC error occurs in the Flow package, it will be propagated to the upper layers and handled similarly to a Management gRPC error. Always report a disconnected state in the event of any error Hide the underlying gRPC errors Force close the gRPC connection in the event of any error
This commit is contained in:
parent
4a9049566a
commit
2817f62c13
@ -128,7 +128,13 @@ func (c *GrpcClient) Sync(ctx context.Context, sysInfo *system.Info, msgHandler
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.handleStream(ctx, *serverPubKey, sysInfo, msgHandler)
|
streamErr := c.handleStream(ctx, *serverPubKey, sysInfo, msgHandler)
|
||||||
|
if c.conn.GetState() != connectivity.Shutdown {
|
||||||
|
if err := c.conn.Close(); err != nil {
|
||||||
|
log.Warnf("failed closing connection to Management service: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return streamErr
|
||||||
}
|
}
|
||||||
|
|
||||||
err := backoff.Retry(operation, defaultBackoff(ctx))
|
err := backoff.Retry(operation, defaultBackoff(ctx))
|
||||||
@ -159,6 +165,7 @@ func (c *GrpcClient) handleStream(ctx context.Context, serverPubKey wgtypes.Key,
|
|||||||
// blocking until error
|
// blocking until error
|
||||||
err = c.receiveEvents(stream, serverPubKey, msgHandler)
|
err = c.receiveEvents(stream, serverPubKey, msgHandler)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
c.notifyDisconnected(err)
|
||||||
s, _ := gstatus.FromError(err)
|
s, _ := gstatus.FromError(err)
|
||||||
switch s.Code() {
|
switch s.Code() {
|
||||||
case codes.PermissionDenied:
|
case codes.PermissionDenied:
|
||||||
@ -167,7 +174,6 @@ func (c *GrpcClient) handleStream(ctx context.Context, serverPubKey wgtypes.Key,
|
|||||||
log.Debugf("management connection context has been canceled, this usually indicates shutdown")
|
log.Debugf("management connection context has been canceled, this usually indicates shutdown")
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
c.notifyDisconnected(err)
|
|
||||||
log.Warnf("disconnected from the Management service but will retry silently. Reason: %v", err)
|
log.Warnf("disconnected from the Management service but will retry silently. Reason: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -258,10 +264,10 @@ func (c *GrpcClient) receiveEvents(stream proto.ManagementService_SyncClient, se
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = msgHandler(decryptedResp)
|
if err := msgHandler(decryptedResp); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Errorf("failed handling an update message received from Management Service: %v", err.Error())
|
log.Errorf("failed handling an update message received from Management Service: %v", err.Error())
|
||||||
return err
|
// hide any grpc error code that is not relevant for management
|
||||||
|
return fmt.Errorf("msg handler error: %v", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user