Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2023-08-18 08:49:19 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2023-08-18 11:21:12 +0300
commit88a518f6d908398cfae9c2a6c77a556bc0bb5607 (patch)
treee3b55f5c4dcb8374b16ec3ab2b20ec35d7a75026
parentc921427ad6c1c1be0bbd75d0c2aba80ca0dc7c4a (diff)
middleware/panichandler: Inject logger instead of using global one
We're using the global logging instance provided by the logrus package, which is discouraged. Inject a logger such that we can use a properly configured logger instead.
-rw-r--r--internal/gitaly/server/server.go4
-rw-r--r--internal/grpc/middleware/panichandler/panic_handler.go39
-rw-r--r--internal/praefect/server.go4
3 files changed, 23 insertions, 24 deletions
diff --git a/internal/gitaly/server/server.go b/internal/gitaly/server/server.go
index 2b1127d97..d8b873238 100644
--- a/internal/gitaly/server/server.go
+++ b/internal/gitaly/server/server.go
@@ -148,7 +148,7 @@ func (s *GitalyServerFactory) New(secure bool, opts ...Option) (*grpc.Server, er
cache.StreamInvalidator(s.cacheInvalidator, protoregistry.GitalyProtoPreregistered),
// Panic handler should remain last so that application panics will be
// converted to errors and logged
- panichandler.StreamPanicHandler,
+ panichandler.StreamPanicHandler(s.logger),
)
unaryServerInterceptors = append(unaryServerInterceptors,
@@ -156,7 +156,7 @@ func (s *GitalyServerFactory) New(secure bool, opts ...Option) (*grpc.Server, er
cache.UnaryInvalidator(s.cacheInvalidator, protoregistry.GitalyProtoPreregistered),
// Panic handler should remain last so that application panics will be
// converted to errors and logged
- panichandler.UnaryPanicHandler,
+ panichandler.UnaryPanicHandler(s.logger),
)
streamServerInterceptors = append(streamServerInterceptors, cfg.streamInterceptors...)
diff --git a/internal/grpc/middleware/panichandler/panic_handler.go b/internal/grpc/middleware/panichandler/panic_handler.go
index e91269d5f..089dfcc79 100644
--- a/internal/grpc/middleware/panichandler/panic_handler.go
+++ b/internal/grpc/middleware/panichandler/panic_handler.go
@@ -3,17 +3,12 @@ package panichandler
import (
"context"
- log "github.com/sirupsen/logrus"
+ "github.com/sirupsen/logrus"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
-var (
- _ grpc.UnaryServerInterceptor = UnaryPanicHandler
- _ grpc.StreamServerInterceptor = StreamPanicHandler
-)
-
// PanicHandler is a handler that will be called on a grpc panic
type PanicHandler func(methodName string, error interface{})
@@ -21,22 +16,26 @@ func toPanicError(grpcMethodName string, r interface{}) error {
return status.Errorf(codes.Internal, "panic: %v", r)
}
-// UnaryPanicHandler handles request-response panics
-func UnaryPanicHandler(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
- defer handleCrash(info.FullMethod, func(grpcMethodName string, r interface{}) {
- err = toPanicError(grpcMethodName, r)
- })
+// UnaryPanicHandler creates a new unary server interceptor that handles panics.
+func UnaryPanicHandler(logger logrus.FieldLogger) grpc.UnaryServerInterceptor {
+ return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
+ defer handleCrash(logger, info.FullMethod, func(grpcMethodName string, r interface{}) {
+ err = toPanicError(grpcMethodName, r)
+ })
- return handler(ctx, req)
+ return handler(ctx, req)
+ }
}
-// StreamPanicHandler handles stream panics
-func StreamPanicHandler(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) {
- defer handleCrash(info.FullMethod, func(grpcMethodName string, r interface{}) {
- err = toPanicError(grpcMethodName, r)
- })
+// StreamPanicHandler creates a new stream server interceptor that handles panics.
+func StreamPanicHandler(logger logrus.FieldLogger) grpc.StreamServerInterceptor {
+ return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) {
+ defer handleCrash(logger, info.FullMethod, func(grpcMethodName string, r interface{}) {
+ err = toPanicError(grpcMethodName, r)
+ })
- return handler(srv, stream)
+ return handler(srv, stream)
+ }
}
var additionalHandlers []PanicHandler
@@ -46,9 +45,9 @@ func InstallPanicHandler(handler PanicHandler) {
additionalHandlers = append(additionalHandlers, handler)
}
-func handleCrash(grpcMethodName string, handler PanicHandler) {
+func handleCrash(logger logrus.FieldLogger, grpcMethodName string, handler PanicHandler) {
if r := recover(); r != nil {
- log.WithFields(log.Fields{
+ logger.WithFields(logrus.Fields{
"error": r,
"method": grpcMethodName,
}).Error("grpc panic")
diff --git a/internal/praefect/server.go b/internal/praefect/server.go
index 3084a62bd..0b4a5e2f3 100644
--- a/internal/praefect/server.go
+++ b/internal/praefect/server.go
@@ -82,7 +82,7 @@ func commonUnaryServerInterceptors(logger *logrus.Entry, messageProducer grpcmwl
grpctracing.UnaryServerTracingInterceptor(),
// Panic handler should remain last so that application panics will be
// converted to errors and logged
- panichandler.UnaryPanicHandler,
+ panichandler.UnaryPanicHandler(logger),
}
}
@@ -153,7 +153,7 @@ func NewGRPCServer(
auth.StreamServerInterceptor(deps.Config.Auth),
// Panic handler should remain last so that application panics will be
// converted to errors and logged
- panichandler.StreamPanicHandler,
+ panichandler.StreamPanicHandler(deps.Logger),
}
streamInterceptors = append(streamInterceptors, serverCfg.streamInterceptors...)