diff options
author | James Fargher <jfargher@gitlab.com> | 2023-09-18 01:33:27 +0300 |
---|---|---|
committer | James Fargher <jfargher@gitlab.com> | 2023-09-18 01:33:27 +0300 |
commit | c7099d645d162a8760f7f84e9f3e0c45229240c1 (patch) | |
tree | 26dee75855c637593415c14ab3cfd066751d9501 | |
parent | 971fb9142d495e10b571d4a16d75c6baba0c615e (diff) | |
parent | 214d0ff9641c85d71de337f1f2f58d5c6c2dce7b (diff) |
Merge branch 'pks-log-wrap-logrus' into 'master'
log: Wrap the logrus logger
See merge request https://gitlab.com/gitlab-org/gitaly/-/merge_requests/6364
Merged-by: James Fargher <jfargher@gitlab.com>
Approved-by: James Fargher <jfargher@gitlab.com>
Reviewed-by: Patrick Steinhardt <psteinhardt@gitlab.com>
Reviewed-by: James Liu <jliu@gitlab.com>
Co-authored-by: Patrick Steinhardt <psteinhardt@gitlab.com>
147 files changed, 625 insertions, 586 deletions
@@ -201,9 +201,9 @@ event. When logging an error, use the `WithError(err)` method. -### Use the `logrus.FieldLogger` interface +### Use the `log.Logger` interface -In case you want to pass around the logger, use the `logrus.FieldLogger` +In case you want to pass around the logger, use the `log.Logger` interface instead of either `*logrus.Entry` or `*logrus.Logger`. ### Use snake case for fields @@ -239,7 +239,7 @@ package transaction type Manager struct {} func (m Manager) StartTransaction(ctx context.Context) { - ctxlogrus.Extract(ctx).WithFields(logrus.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "component": "transaction.Manager", }).Debug("StartTransaction") } diff --git a/cmd/gitaly-backup/create.go b/cmd/gitaly-backup/create.go index f2fb543af..6a62940b6 100644 --- a/cmd/gitaly-backup/create.go +++ b/cmd/gitaly-backup/create.go @@ -9,10 +9,10 @@ import ( "runtime" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/backup" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -43,7 +43,7 @@ func (cmd *createSubcommand) Flags(fs *flag.FlagSet) { fs.BoolVar(&cmd.serverSide, "server-side", false, "use server-side backups. Note: The feature is not ready for production use.") } -func (cmd *createSubcommand) Run(ctx context.Context, logger logrus.FieldLogger, stdin io.Reader, stdout io.Writer) error { +func (cmd *createSubcommand) Run(ctx context.Context, logger log.Logger, stdin io.Reader, stdout io.Writer) error { pool := client.NewPool(client.WithDialOptions(client.UnaryInterceptor(), client.StreamInterceptor())) defer func() { _ = pool.Close() diff --git a/cmd/gitaly-backup/main.go b/cmd/gitaly-backup/main.go index a37121a3e..f663be660 100644 --- a/cmd/gitaly-backup/main.go +++ b/cmd/gitaly-backup/main.go @@ -7,14 +7,13 @@ import ( "io" "os" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) type subcmd interface { Flags(*flag.FlagSet) - Run(ctx context.Context, logger logrus.FieldLogger, stdin io.Reader, stdout io.Writer) error + Run(ctx context.Context, logger log.Logger, stdin io.Reader, stdout io.Writer) error } var subcommands = map[string]subcmd{ diff --git a/cmd/gitaly-backup/restore.go b/cmd/gitaly-backup/restore.go index d2d0670fc..91cd398da 100644 --- a/cmd/gitaly-backup/restore.go +++ b/cmd/gitaly-backup/restore.go @@ -10,10 +10,10 @@ import ( "runtime" "strings" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/backup" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -48,7 +48,7 @@ func (cmd *restoreSubcommand) Flags(fs *flag.FlagSet) { fs.BoolVar(&cmd.serverSide, "server-side", false, "use server-side backups. Note: The feature is not ready for production use.") } -func (cmd *restoreSubcommand) Run(ctx context.Context, logger logrus.FieldLogger, stdin io.Reader, stdout io.Writer) error { +func (cmd *restoreSubcommand) Run(ctx context.Context, logger log.Logger, stdin io.Reader, stdout io.Writer) error { pool := client.NewPool(client.WithDialOptions(client.UnaryInterceptor(), client.StreamInterceptor())) defer func() { _ = pool.Close() diff --git a/cmd/gitaly-hooks/hooks.go b/cmd/gitaly-hooks/hooks.go index d8bd931fb..b900260a5 100644 --- a/cmd/gitaly-hooks/hooks.go +++ b/cmd/gitaly-hooks/hooks.go @@ -104,7 +104,7 @@ func main() { // configureLogger configures the logger used by gitaly-hooks. As both stdout and stderr might be interpreted by Git, we // need to log to a file instead. If the `log.GitalyLogDirEnvKey` environment variable is set, we thus log to a file // contained in the directory pointed to by it, otherwise we discard any log messages. -func configureLogger(ctx context.Context) (logrus.FieldLogger, error) { +func configureLogger(ctx context.Context) (log.Logger, error) { writer := io.Discard if logDir := os.Getenv(log.GitalyLogDirEnvKey); logDir != "" { diff --git a/cmd/gitaly-lfs-smudge/main.go b/cmd/gitaly-lfs-smudge/main.go index ac62e6c31..846d94a68 100644 --- a/cmd/gitaly-lfs-smudge/main.go +++ b/cmd/gitaly-lfs-smudge/main.go @@ -7,7 +7,6 @@ import ( "os" "path/filepath" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/smudge" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/env" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" @@ -59,7 +58,7 @@ func (nopCloser) Close() error { return nil } -func configureLogging(ctx context.Context, environment []string) (logrus.FieldLogger, io.Closer, error) { +func configureLogging(ctx context.Context, environment []string) (log.Logger, io.Closer, error) { var closer io.Closer = nopCloser{} writer := io.Discard @@ -82,7 +81,7 @@ func configureLogging(ctx context.Context, environment []string) (logrus.FieldLo return logger.WithField(correlation.FieldName, correlation.ExtractFromContext(ctx)), closer, nil } -func run(ctx context.Context, environment []string, out io.Writer, in io.Reader, logger logrus.FieldLogger) error { +func run(ctx context.Context, environment []string, out io.Writer, in io.Reader, logger log.Logger) error { cfg, err := smudge.ConfigFromEnvironment(environment) if err != nil { return fmt.Errorf("loading configuration: %w", err) diff --git a/cmd/gitaly-lfs-smudge/smudge.go b/cmd/gitaly-lfs-smudge/smudge.go index 17d8a9f16..3b5481acd 100644 --- a/cmd/gitaly-lfs-smudge/smudge.go +++ b/cmd/gitaly-lfs-smudge/smudge.go @@ -10,14 +10,14 @@ import ( "net/url" "github.com/git-lfs/git-lfs/v3/lfs" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/pktline" "gitlab.com/gitlab-org/gitaly/v16/internal/git/smudge" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/prometheus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitlab" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) -func filter(ctx context.Context, cfg smudge.Config, to io.Writer, from io.Reader, logger logrus.FieldLogger) (returnedErr error) { +func filter(ctx context.Context, cfg smudge.Config, to io.Writer, from io.Reader, logger log.Logger) (returnedErr error) { client, err := gitlab.NewHTTPClient(logger, cfg.Gitlab, cfg.TLS, prometheus.Config{}) if err != nil { return fmt.Errorf("creating HTTP client: %w", err) @@ -63,7 +63,7 @@ const ( processStateSmudgeContent ) -func process(ctx context.Context, cfg smudge.Config, to io.Writer, from io.Reader, logger logrus.FieldLogger) error { +func process(ctx context.Context, cfg smudge.Config, to io.Writer, from io.Reader, logger log.Logger) error { client, err := gitlab.NewHTTPClient(logger, cfg.Gitlab, cfg.TLS, prometheus.Config{}) if err != nil { return fmt.Errorf("creating HTTP client: %w", err) @@ -287,7 +287,7 @@ func process(ctx context.Context, cfg smudge.Config, to io.Writer, from io.Reade return nil } -func smudgeOneObject(ctx context.Context, cfg smudge.Config, gitlabClient *gitlab.HTTPClient, from io.Reader, logger logrus.FieldLogger) (io.ReadCloser, error) { +func smudgeOneObject(ctx context.Context, cfg smudge.Config, gitlabClient *gitlab.HTTPClient, from io.Reader, logger log.Logger) (io.ReadCloser, error) { ptr, contents, err := lfs.DecodeFrom(from) if err != nil { // This isn't a valid LFS pointer. Just copy the existing pointer data. diff --git a/cmd/gitaly-ssh/main.go b/cmd/gitaly-ssh/main.go index 5b1bf262f..b34e99f32 100644 --- a/cmd/gitaly-ssh/main.go +++ b/cmd/gitaly-ssh/main.go @@ -7,7 +7,6 @@ import ( "strconv" "strings" - "github.com/sirupsen/logrus" gitalyauth "gitlab.com/gitlab-org/gitaly/v16/auth" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" @@ -87,7 +86,7 @@ func main() { os.Exit(code) } -func (cmd gitalySSHCommand) run(logger logrus.FieldLogger) (int, error) { +func (cmd gitalySSHCommand) run(logger log.Logger) (int, error) { // Configure distributed tracing closer := tracing.Initialize(tracing.WithServiceName("gitaly-ssh")) defer closer.Close() @@ -132,7 +131,7 @@ func (cmd gitalySSHCommand) run(logger logrus.FieldLogger) (int, error) { return int(code), nil } -func getConnection(ctx context.Context, url string, registry *sidechannel.Registry, logger logrus.FieldLogger) (*grpc.ClientConn, error) { +func getConnection(ctx context.Context, url string, registry *sidechannel.Registry, logger log.Logger) (*grpc.ClientConn, error) { if url == "" { return nil, fmt.Errorf("gitaly address can not be empty") } diff --git a/cmd/gitaly-wrapper/main.go b/cmd/gitaly-wrapper/main.go index b83af7bb9..c1ab2bc3b 100644 --- a/cmd/gitaly-wrapper/main.go +++ b/cmd/gitaly-wrapper/main.go @@ -11,7 +11,6 @@ import ( "syscall" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/bootstrap" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/env" "gitlab.com/gitlab-org/gitaly/v16/internal/log" @@ -107,7 +106,7 @@ func findProcess(pidFilePath string) (*os.Process, error) { return nil, nil } -func spawnProcess(logger logrus.FieldLogger, bin string, args []string) (*os.Process, error) { +func spawnProcess(logger log.Logger, bin string, args []string) (*os.Process, error) { cmd := exec.Command(bin, args...) cmd.Env = append(os.Environ(), fmt.Sprintf("%s=true", bootstrap.EnvUpgradesEnabled)) @@ -133,7 +132,7 @@ func isRuntimeSig(s os.Signal) bool { return s == unix.SIGURG } -func forwardSignals(gitaly *os.Process, log logrus.FieldLogger) { +func forwardSignals(gitaly *os.Process, log log.Logger) { sigs := make(chan os.Signal, 1) go func() { for sig := range sigs { diff --git a/internal/backup/pipeline.go b/internal/backup/pipeline.go index c8585553f..e42553969 100644 --- a/internal/backup/pipeline.go +++ b/internal/backup/pipeline.go @@ -9,6 +9,7 @@ import ( "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -155,14 +156,14 @@ func (e PipelineErrors) Error() string { // LoggingPipeline outputs logging for each command executed type LoggingPipeline struct { - log logrus.FieldLogger + log log.Logger mu sync.Mutex errs PipelineErrors } // NewLoggingPipeline creates a new logging pipeline -func NewLoggingPipeline(log logrus.FieldLogger) *LoggingPipeline { +func NewLoggingPipeline(log log.Logger) *LoggingPipeline { return &LoggingPipeline{ log: log, } @@ -201,7 +202,7 @@ func (p *LoggingPipeline) Done() error { return nil } -func (p *LoggingPipeline) cmdLogger(cmd Command) logrus.FieldLogger { +func (p *LoggingPipeline) cmdLogger(cmd Command) log.Logger { return p.log.WithFields(logrus.Fields{ "command": cmd.Name(), "storage_name": cmd.Repository().StorageName, diff --git a/internal/blackbox/blackbox.go b/internal/blackbox/blackbox.go index 35b63b2af..6321f75d2 100644 --- a/internal/blackbox/blackbox.go +++ b/internal/blackbox/blackbox.go @@ -9,9 +9,9 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/stats" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/labkit/monitoring" ) @@ -75,7 +75,7 @@ func (m httpPostMetrics) Collect(metrics chan<- prometheus.Metric) { // Blackbox encapsulates all details required to run the blackbox prober. type Blackbox struct { cfg Config - logger logrus.FieldLogger + logger log.Logger fetchReferenceDiscoveryMetrics httpReferenceDiscoveryMetrics httpPostMetrics httpPostMetrics @@ -83,7 +83,7 @@ type Blackbox struct { } // New creates a new Blackbox structure. -func New(cfg Config, logger logrus.FieldLogger) Blackbox { +func New(cfg Config, logger log.Logger) Blackbox { return Blackbox{ cfg: cfg, logger: logger, diff --git a/internal/bootstrap/bootstrap.go b/internal/bootstrap/bootstrap.go index 7c05511c0..d2d2976ec 100644 --- a/internal/bootstrap/bootstrap.go +++ b/internal/bootstrap/bootstrap.go @@ -9,9 +9,9 @@ import ( "github.com/cloudflare/tableflip" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/env" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "golang.org/x/sys/unix" ) @@ -35,7 +35,7 @@ type Listener interface { // Bootstrap handles graceful upgrades type Bootstrap struct { - logger logrus.FieldLogger + logger log.Logger upgrader upgrader listenFunc ListenFunc errChan chan error @@ -77,7 +77,7 @@ type upgrader interface { // freezes during a graceful shutdown // // gitaly-wrapper is supposed to set EnvUpgradesEnabled in order to enable graceful upgrades -func New(logger logrus.FieldLogger, totalConn *prometheus.CounterVec) (*Bootstrap, error) { +func New(logger log.Logger, totalConn *prometheus.CounterVec) (*Bootstrap, error) { pidFile := os.Getenv(EnvPidFile) upgradesEnabled, _ := env.GetBool(EnvUpgradesEnabled, false) @@ -107,7 +107,7 @@ func New(logger logrus.FieldLogger, totalConn *prometheus.CounterVec) (*Bootstra return _new(logger, upg, upg.Fds.Listen, upgradesEnabled, totalConn) } -func _new(logger logrus.FieldLogger, upg upgrader, listenFunc ListenFunc, upgradesEnabled bool, totalConn *prometheus.CounterVec) (*Bootstrap, error) { +func _new(logger log.Logger, upg upgrader, listenFunc ListenFunc, upgradesEnabled bool, totalConn *prometheus.CounterVec) (*Bootstrap, error) { if upgradesEnabled { go func() { sig := make(chan os.Signal, 1) diff --git a/internal/bootstrap/starter/starter.go b/internal/bootstrap/starter/starter.go index ead1a998a..643413833 100644 --- a/internal/bootstrap/starter/starter.go +++ b/internal/bootstrap/starter/starter.go @@ -8,8 +8,8 @@ import ( "strings" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/bootstrap" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) const ( @@ -110,7 +110,7 @@ type Server interface { } // New creates a new bootstrap.Starter from a config and a GracefulStoppableServer -func New(cfg Config, server Server, logger logrus.FieldLogger) bootstrap.Starter { +func New(cfg Config, server Server, logger log.Logger) bootstrap.Starter { return func(listenWithHandover bootstrap.ListenFunc, errCh chan<- error, connTotal *prometheus.CounterVec) error { listen := listenWithHandover if !cfg.HandoverOnUpgrade { diff --git a/internal/cache/diskcache.go b/internal/cache/diskcache.go index 84e75f49f..a1b2da590 100644 --- a/internal/cache/diskcache.go +++ b/internal/cache/diskcache.go @@ -8,13 +8,12 @@ import ( "path/filepath" "sync" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/dontpanic" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "google.golang.org/protobuf/proto" @@ -76,7 +75,7 @@ func withDisabledWalker() Option { // DiskCache stores and retrieves byte streams for repository related RPCs type DiskCache struct { - logger logrus.FieldLogger + logger log.Logger locator storage.Locator storages []config.Storage keyer leaseKeyer @@ -100,7 +99,7 @@ type DiskCache struct { } // New will create a new DiskCache with the given Keyer. -func New(cfg config.Cfg, locator storage.Locator, logger logrus.FieldLogger, opts ...Option) *DiskCache { +func New(cfg config.Cfg, locator storage.Locator, logger log.Logger, opts ...Option) *DiskCache { var cacheConfig cacheConfig for _, opt := range opts { opt(&cacheConfig) @@ -243,7 +242,7 @@ func (c *DiskCache) GetStream(ctx context.Context, repo *gitalypb.Repository, re return nil, err } - ctxlogrus.Extract(ctx). + log.FromContext(ctx). WithField("stream_path", respPath). Info("getting stream") @@ -282,7 +281,7 @@ func (c *DiskCache) PutStream(ctx context.Context, repo *gitalypb.Repository, re return err } - ctxlogrus.Extract(ctx). + log.FromContext(ctx). WithField("stream_path", reqPath). Info("putting stream") diff --git a/internal/cache/keyer.go b/internal/cache/keyer.go index db9620b23..13588ebb9 100644 --- a/internal/cache/keyer.go +++ b/internal/cache/keyer.go @@ -14,10 +14,10 @@ import ( "time" "github.com/google/uuid" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/version" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -92,7 +92,7 @@ func (keyer leaseKeyer) updateLatest(ctx context.Context, repo *gitalypb.Reposit return "", err } - ctxlogrus.Extract(ctx). + log.FromContext(ctx). WithField("diskcache", nextGenID). Infof("diskcache state change") diff --git a/internal/cgroups/cgroups.go b/internal/cgroups/cgroups.go index fe2015069..2d77c732f 100644 --- a/internal/cgroups/cgroups.go +++ b/internal/cgroups/cgroups.go @@ -4,8 +4,8 @@ import ( "os/exec" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/cgroups" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) type addCommandCfg struct { @@ -78,7 +78,7 @@ type Manager interface { } // NewManager returns the appropriate Cgroups manager -func NewManager(cfg cgroups.Config, logger logrus.FieldLogger, pid int) Manager { +func NewManager(cfg cgroups.Config, logger log.Logger, pid int) Manager { if cfg.Repositories.Count > 0 { if manager := newCgroupManager(cfg, logger, pid); manager != nil { return manager @@ -89,6 +89,6 @@ func NewManager(cfg cgroups.Config, logger logrus.FieldLogger, pid int) Manager } // PruneOldCgroups prunes old cgroups for both the memory and cpu subsystems -func PruneOldCgroups(cfg cgroups.Config, logger logrus.FieldLogger) { +func PruneOldCgroups(cfg cgroups.Config, logger log.Logger) { pruneOldCgroups(cfg, logger) } diff --git a/internal/cgroups/manager.go b/internal/cgroups/manager.go index 5f6a685c0..64af69bf5 100644 --- a/internal/cgroups/manager.go +++ b/internal/cgroups/manager.go @@ -3,13 +3,14 @@ package cgroups import ( - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" + "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/cgroups" ) -func newCgroupManager(cgroups.Config, logrus.FieldLogger, int) Manager { +func newCgroupManager(cgroups.Config, log.Logger, int) Manager { return &NoopManager{} } // No-op. The actual pruning operations are implemented in Cgroup V1/V2 managers. -func pruneOldCgroups(cgroups.Config, logrus.FieldLogger) {} +func pruneOldCgroups(cgroups.Config, log.Logger) {} diff --git a/internal/cgroups/manager_linux.go b/internal/cgroups/manager_linux.go index 13e742db2..12dc01988 100644 --- a/internal/cgroups/manager_linux.go +++ b/internal/cgroups/manager_linux.go @@ -11,8 +11,8 @@ import ( cgrps "github.com/containerd/cgroups/v3" "github.com/opencontainers/runtime-spec/specs-go" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" cgroupscfg "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/cgroups" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // cfs_period_us hardcoded to be 100ms. @@ -38,11 +38,11 @@ type CGroupManager struct { handler cgroupHandler } -func newCgroupManager(cfg cgroupscfg.Config, logger logrus.FieldLogger, pid int) *CGroupManager { +func newCgroupManager(cfg cgroupscfg.Config, logger log.Logger, pid int) *CGroupManager { return newCgroupManagerWithMode(cfg, logger, pid, cgrps.Mode()) } -func newCgroupManagerWithMode(cfg cgroupscfg.Config, logger logrus.FieldLogger, pid int, mode cgrps.CGMode) *CGroupManager { +func newCgroupManagerWithMode(cfg cgroupscfg.Config, logger log.Logger, pid int, mode cgrps.CGMode) *CGroupManager { var handler cgroupHandler switch mode { case cgrps.Legacy, cgrps.Hybrid: @@ -173,11 +173,11 @@ func (cgm *CGroupManager) configRepositoryResources() *specs.LinuxResources { return &reposResources } -func pruneOldCgroups(cfg cgroupscfg.Config, logger logrus.FieldLogger) { +func pruneOldCgroups(cfg cgroupscfg.Config, logger log.Logger) { pruneOldCgroupsWithMode(cfg, logger, cgrps.Mode()) } -func pruneOldCgroupsWithMode(cfg cgroupscfg.Config, logger logrus.FieldLogger, mode cgrps.CGMode) { +func pruneOldCgroupsWithMode(cfg cgroupscfg.Config, logger log.Logger, mode cgrps.CGMode) { if cfg.HierarchyRoot == "" { return } diff --git a/internal/cgroups/mock_linux_test.go b/internal/cgroups/mock_linux_test.go index 1bf57e4a2..2662f75d8 100644 --- a/internal/cgroups/mock_linux_test.go +++ b/internal/cgroups/mock_linux_test.go @@ -28,10 +28,10 @@ import ( cgrps "github.com/containerd/cgroups/v3" "github.com/containerd/cgroups/v3/cgroup1" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" cgroupscfg "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/cgroups" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" ) @@ -141,11 +141,11 @@ func (m *mockCgroup) setupMockCgroupFiles( } } -func (m *mockCgroup) newCgroupManager(cfg cgroupscfg.Config, logger logrus.FieldLogger, pid int) *CGroupManager { +func (m *mockCgroup) newCgroupManager(cfg cgroupscfg.Config, logger log.Logger, pid int) *CGroupManager { return newCgroupManagerWithMode(cfg, logger, pid, cgrps.Legacy) } -func (m *mockCgroup) pruneOldCgroups(cfg cgroupscfg.Config, logger logrus.FieldLogger) { +func (m *mockCgroup) pruneOldCgroups(cfg cgroupscfg.Config, logger log.Logger) { pruneOldCgroupsWithMode(cfg, logger, cgrps.Legacy) } @@ -212,10 +212,10 @@ func (m *mockCgroupV2) setupMockCgroupFiles( } } -func (m *mockCgroupV2) newCgroupManager(cfg cgroupscfg.Config, logger logrus.FieldLogger, pid int) *CGroupManager { +func (m *mockCgroupV2) newCgroupManager(cfg cgroupscfg.Config, logger log.Logger, pid int) *CGroupManager { return newCgroupManagerWithMode(cfg, logger, pid, cgrps.Unified) } -func (m *mockCgroupV2) pruneOldCgroups(cfg cgroupscfg.Config, logger logrus.FieldLogger) { +func (m *mockCgroupV2) pruneOldCgroups(cfg cgroupscfg.Config, logger log.Logger) { pruneOldCgroupsWithMode(cfg, logger, cgrps.Unified) } diff --git a/internal/cgroups/v1_linux.go b/internal/cgroups/v1_linux.go index b533b5ad1..8de8d283f 100644 --- a/internal/cgroups/v1_linux.go +++ b/internal/cgroups/v1_linux.go @@ -11,21 +11,21 @@ import ( "github.com/containerd/cgroups/v3/cgroup1" specs "github.com/opencontainers/runtime-spec/specs-go" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" cgroupscfg "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/cgroups" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) type cgroupV1Handler struct { cfg cgroupscfg.Config - logger logrus.FieldLogger + logger log.Logger hierarchy func() ([]cgroup1.Subsystem, error) *cgroupsMetrics pid int } -func newV1Handler(cfg cgroupscfg.Config, logger logrus.FieldLogger, pid int) *cgroupV1Handler { +func newV1Handler(cfg cgroupscfg.Config, logger log.Logger, pid int) *cgroupV1Handler { return &cgroupV1Handler{ cfg: cfg, logger: logger, @@ -219,7 +219,7 @@ func defaultSubsystems(root string) ([]cgroup1.Subsystem, error) { return subsystems, nil } -func pruneOldCgroupsV1(cfg cgroupscfg.Config, logger logrus.FieldLogger) { +func pruneOldCgroupsV1(cfg cgroupscfg.Config, logger log.Logger) { if err := config.PruneOldGitalyProcessDirectories( logger, filepath.Join(cfg.Mountpoint, "memory", diff --git a/internal/cgroups/v2_linux.go b/internal/cgroups/v2_linux.go index 8990358d2..f8970dbf7 100644 --- a/internal/cgroups/v2_linux.go +++ b/internal/cgroups/v2_linux.go @@ -13,20 +13,20 @@ import ( "github.com/containerd/cgroups/v3/cgroup2" "github.com/opencontainers/runtime-spec/specs-go" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" cgroupscfg "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/cgroups" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) type cgroupV2Handler struct { cfg cgroupscfg.Config - logger logrus.FieldLogger + logger log.Logger *cgroupsMetrics pid int } -func newV2Handler(cfg cgroupscfg.Config, logger logrus.FieldLogger, pid int) *cgroupV2Handler { +func newV2Handler(cfg cgroupscfg.Config, logger log.Logger, pid int) *cgroupV2Handler { return &cgroupV2Handler{ cfg: cfg, logger: logger, @@ -190,7 +190,7 @@ func (cvh *cgroupV2Handler) stats() (Stats, error) { return stats, nil } -func pruneOldCgroupsV2(cfg cgroupscfg.Config, logger logrus.FieldLogger) { +func pruneOldCgroupsV2(cfg cgroupscfg.Config, logger log.Logger) { if err := config.PruneOldGitalyProcessDirectories( logger, filepath.Join(cfg.Mountpoint, cfg.HierarchyRoot), diff --git a/internal/cli/gitaly/serve.go b/internal/cli/gitaly/serve.go index 1fa46a3d5..1d09d1d93 100644 --- a/internal/cli/gitaly/serve.go +++ b/internal/cli/gitaly/serve.go @@ -10,7 +10,6 @@ import ( "github.com/go-enry/go-license-detector/v4/licensedb" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" - "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" "gitlab.com/gitlab-org/gitaly/v16" "gitlab.com/gitlab-org/gitaly/v16/internal/backup" @@ -109,7 +108,7 @@ func serveAction(ctx *cli.Context) error { return nil } -func configure(configPath string) (config.Cfg, logrus.FieldLogger, error) { +func configure(configPath string) (config.Cfg, log.Logger, error) { cfg, err := loadConfig(configPath) if err != nil { return config.Cfg{}, nil, fmt.Errorf("load config: config_path %q: %w", configPath, err) @@ -135,7 +134,7 @@ func configure(configPath string) (config.Cfg, logrus.FieldLogger, error) { return cfg, logger, nil } -func preloadLicenseDatabase(logger logrus.FieldLogger) { +func preloadLicenseDatabase(logger log.Logger) { // the first call to `licensedb.Detect` could be too long // https://github.com/go-enry/go-license-detector/issues/13 // this is why we're calling it here to preload license database @@ -145,7 +144,7 @@ func preloadLicenseDatabase(logger logrus.FieldLogger) { logger.Info("License database preloaded") } -func run(cfg config.Cfg, logger logrus.FieldLogger) error { +func run(cfg config.Cfg, logger log.Logger) error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -422,7 +421,7 @@ func run(cfg config.Cfg, logger logrus.FieldLogger) error { shutdownWorkers, err := maintenance.StartWorkers( ctx, logger, - maintenance.DailyOptimizationWorker(cfg, maintenance.OptimizerFunc(func(ctx context.Context, logger logrus.FieldLogger, repo storage.Repository) error { + maintenance.DailyOptimizationWorker(cfg, maintenance.OptimizerFunc(func(ctx context.Context, logger log.Logger, repo storage.Repository) error { return housekeepingManager.OptimizeRepository(ctx, logger, localrepo.New(locator, gitCmdFactory, catfileCache, repo)) })), ) diff --git a/internal/cli/gitaly/subcmd_check.go b/internal/cli/gitaly/subcmd_check.go index 3ff312851..36385cc2b 100644 --- a/internal/cli/gitaly/subcmd_check.go +++ b/internal/cli/gitaly/subcmd_check.go @@ -4,7 +4,6 @@ import ( "context" "fmt" - "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" @@ -62,7 +61,7 @@ func checkAction(ctx *cli.Context) error { return nil } -func checkAPI(cfg config.Cfg, logger logrus.FieldLogger) (*gitlab.CheckInfo, error) { +func checkAPI(cfg config.Cfg, logger log.Logger) (*gitlab.CheckInfo, error) { gitlabAPI, err := gitlab.NewHTTPClient(logger, cfg.Gitlab, cfg.TLS, prometheus.Config{}) if err != nil { return nil, err diff --git a/internal/cli/praefect/serve.go b/internal/cli/praefect/serve.go index 86d7a03ce..ad9200035 100644 --- a/internal/cli/praefect/serve.go +++ b/internal/cli/praefect/serve.go @@ -95,7 +95,7 @@ func serveAction(ctx *cli.Context) error { return nil } -func run(conf config.Config, appName string, logger logrus.FieldLogger) error { +func run(conf config.Config, appName string, logger log.Logger) error { configure(logger, appName, conf) starterConfigs, err := getStarterConfigs(conf) @@ -141,7 +141,7 @@ func readConfig(path string) (config.Config, error) { return conf, nil } -func configure(logger logrus.FieldLogger, appName string, conf config.Config) { +func configure(logger log.Logger, appName string, conf config.Config) { tracing.Initialize(tracing.WithServiceName(appName)) if conf.PrometheusListenAddr != "" { @@ -154,7 +154,7 @@ func configure(logger logrus.FieldLogger, appName string, conf config.Config) { func server( cfgs []starter.Config, conf config.Config, - logger logrus.FieldLogger, + logger log.Logger, b bootstrap.Listener, promreg prometheus.Registerer, dbPromRegistry interface { @@ -572,7 +572,7 @@ func getStarterConfigs(conf config.Config) ([]starter.Config, error) { return cfgs, nil } -func initDatabase(ctx context.Context, logger logrus.FieldLogger, conf config.Config) (*sql.DB, func(), error) { +func initDatabase(ctx context.Context, logger log.Logger, conf config.Config) (*sql.DB, func(), error) { openDBCtx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() db, err := glsql.OpenDB(openDBCtx, conf.DB) diff --git a/internal/cli/praefect/subcmd_remove_repository.go b/internal/cli/praefect/subcmd_remove_repository.go index 032676dbd..dbbe176ab 100644 --- a/internal/cli/praefect/subcmd_remove_repository.go +++ b/internal/cli/praefect/subcmd_remove_repository.go @@ -116,7 +116,7 @@ func (w *writer) Write(b []byte) (int, error) { } type removeRepository struct { - logger logrus.FieldLogger + logger log.Logger virtualStorage string relativePath string apply bool @@ -125,7 +125,7 @@ type removeRepository struct { w io.Writer } -func (cmd *removeRepository) exec(ctx context.Context, logger logrus.FieldLogger, db *sql.DB, cfg config.Config) error { +func (cmd *removeRepository) exec(ctx context.Context, logger log.Logger, db *sql.DB, cfg config.Config) error { // Remove repository explicitly from all storages and clean up database info. // This prevents creation of the new replication events. logger.WithFields(logrus.Fields{ @@ -208,7 +208,7 @@ func (cmd *removeRepository) removeRepository(ctx context.Context, repo *gitalyp return true, nil } -func (cmd *removeRepository) removeReplicationEvents(ctx context.Context, logger logrus.FieldLogger, db *sql.DB, ticker helper.Ticker) error { +func (cmd *removeRepository) removeReplicationEvents(ctx context.Context, logger log.Logger, db *sql.DB, ticker helper.Ticker) error { // Wait for the completion of the repository replication jobs. // As some of them could be a repository creation jobs we need to remove those newly created // repositories after replication finished. diff --git a/internal/cli/praefect/subcmd_track_repository.go b/internal/cli/praefect/subcmd_track_repository.go index fbd34c7db..5e140733d 100644 --- a/internal/cli/praefect/subcmd_track_repository.go +++ b/internal/cli/praefect/subcmd_track_repository.go @@ -132,7 +132,7 @@ func (req *trackRepositoryRequest) execRequest(ctx context.Context, db *sql.DB, cfg config.Config, w io.Writer, - logger logrus.FieldLogger, + logger log.Logger, replicateImmediately bool, ) error { logger.WithFields(logrus.Fields{ @@ -329,7 +329,7 @@ func repositoryExists(ctx context.Context, repo *gitalypb.Repository, addr, toke return res.GetExists(), nil } -func (req *trackRepositoryRequest) authoritativeRepositoryExists(ctx context.Context, cfg config.Config, logger logrus.FieldLogger, w io.Writer, nodeName string) (bool, error) { +func (req *trackRepositoryRequest) authoritativeRepositoryExists(ctx context.Context, cfg config.Config, logger log.Logger, w io.Writer, nodeName string) (bool, error) { for _, vs := range cfg.VirtualStorages { if vs.Name != req.VirtualStorage { continue diff --git a/internal/command/command.go b/internal/command/command.go index 53bf24298..edcaa3c8b 100644 --- a/internal/command/command.go +++ b/internal/command/command.go @@ -13,7 +13,6 @@ import ( "syscall" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" grpcmwtags "github.com/grpc-ecosystem/go-grpc-middleware/tags" "github.com/opentracing/opentracing-go" "github.com/prometheus/client_golang/prometheus" @@ -208,7 +207,7 @@ func New(ctx context.Context, nameAndArgs []string, opts ...Option) (*Command, e logPid := -1 defer func() { - ctxlogrus.Extract(ctx).WithFields(logrus.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "pid": logPid, "path": nameAndArgs[0], "args": nameAndArgs[1:], @@ -470,7 +469,7 @@ func (c *Command) logProcessComplete() { fields["command.cgroup_path"] = c.cgroupPath } - entry := ctxlogrus.Extract(ctx).WithFields(fields) + entry := log.FromContext(ctx).WithFields(fields) rusage, ok := cmd.ProcessState.SysUsage().(*syscall.Rusage) if ok { diff --git a/internal/command/command_test.go b/internal/command/command_test.go index ce26ed88b..081e5ab1a 100644 --- a/internal/command/command_test.go +++ b/internal/command/command_test.go @@ -16,13 +16,13 @@ import ( "testing" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/cgroups" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -352,7 +352,7 @@ func TestCommand_stderrLogging(t *testing.T) { logger, hook := test.NewNullLogger() ctx := testhelper.Context(t) - ctx = ctxlogrus.ToContext(ctx, logrus.NewEntry(logger)) + ctx = log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(ctx) var stdout bytes.Buffer cmd, err := New(ctx, []string{binaryPath}, WithStdout(&stdout)) @@ -376,7 +376,7 @@ func TestCommand_stderrLoggingTruncation(t *testing.T) { logger, hook := test.NewNullLogger() ctx := testhelper.Context(t) - ctx = ctxlogrus.ToContext(ctx, logrus.NewEntry(logger)) + ctx = log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(ctx) var stdout bytes.Buffer cmd, err := New(ctx, []string{binaryPath}, WithStdout(&stdout)) @@ -397,7 +397,7 @@ func TestCommand_stderrLoggingWithNulBytes(t *testing.T) { logger, hook := test.NewNullLogger() ctx := testhelper.Context(t) - ctx = ctxlogrus.ToContext(ctx, logrus.NewEntry(logger)) + ctx = log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(ctx) var stdout bytes.Buffer cmd, err := New(ctx, []string{binaryPath}, WithStdout(&stdout)) @@ -420,7 +420,7 @@ func TestCommand_stderrLoggingLongLine(t *testing.T) { logger, hook := test.NewNullLogger() ctx := testhelper.Context(t) - ctx = ctxlogrus.ToContext(ctx, logrus.NewEntry(logger)) + ctx = log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(ctx) var stdout bytes.Buffer cmd, err := New(ctx, []string{binaryPath}, WithStdout(&stdout)) @@ -467,7 +467,7 @@ func TestCommand_stderrLoggingMaxBytes(t *testing.T) { logger, hook := test.NewNullLogger() ctx := testhelper.Context(t) - ctx = ctxlogrus.ToContext(ctx, logrus.NewEntry(logger)) + ctx = log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(ctx) var stdout bytes.Buffer cmd, err := New(ctx, []string{binaryPath}, WithStdout(&stdout)) @@ -493,7 +493,7 @@ func TestCommand_logMessage(t *testing.T) { logger, hook := test.NewNullLogger() logger.SetLevel(logrus.DebugLevel) - ctx := ctxlogrus.ToContext(testhelper.Context(t), logrus.NewEntry(logger)) + ctx := log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(testhelper.Context(t)) cmd, err := New(ctx, []string{"echo", "hello world"}, WithCgroup(mockCgroupManager{ diff --git a/internal/dontpanic/retry.go b/internal/dontpanic/retry.go index f61f59bb0..0bf438c1c 100644 --- a/internal/dontpanic/retry.go +++ b/internal/dontpanic/retry.go @@ -12,21 +12,21 @@ import ( "time" sentry "github.com/getsentry/sentry-go" - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // Try will wrap the provided function with a panic recovery. If a panic occurs, // the recovered panic will be sent to Sentry and logged as an error. // Returns `true` if no panic and `false` otherwise. -func Try(logger logrus.FieldLogger, fn func()) bool { return catchAndLog(logger, fn) } +func Try(logger log.Logger, fn func()) bool { return catchAndLog(logger, fn) } // Go will run the provided function in a goroutine and recover from any // panics. If a panic occurs, the recovered panic will be sent to Sentry // and logged as an error. Go is best used in fire-and-forget goroutines where // observability is lost. -func Go(logger logrus.FieldLogger, fn func()) { go Try(logger, fn) } +func Go(logger log.Logger, fn func()) { go Try(logger, fn) } -func catchAndLog(logger logrus.FieldLogger, fn func()) bool { +func catchAndLog(logger log.Logger, fn func()) bool { var id *sentry.EventID var recovered interface{} normal := true @@ -57,7 +57,7 @@ func catchAndLog(logger logrus.FieldLogger, fn func()) bool { // Forever encapsulates logic to run a function forever. type Forever struct { - logger logrus.FieldLogger + logger log.Logger backoff time.Duration cancelOnce sync.Once @@ -67,7 +67,7 @@ type Forever struct { // NewForever creates a new Forever struct. The given duration controls how long retry of a // function should be delayed if the function were to thrown an error. -func NewForever(logger logrus.FieldLogger, backoff time.Duration) *Forever { +func NewForever(logger log.Logger, backoff time.Duration) *Forever { return &Forever{ logger: logger, backoff: backoff, diff --git a/internal/git/bitmap.go b/internal/git/bitmap.go index d467422dd..2a78a1bde 100644 --- a/internal/git/bitmap.go +++ b/internal/git/bitmap.go @@ -6,12 +6,12 @@ import ( "strconv" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" grpcmwtags "github.com/grpc-ecosystem/go-grpc-middleware/tags" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "gitlab.com/gitlab-org/gitaly/v16/internal/git/packfile" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) var badBitmapRequestCount = promauto.NewCounterVec( @@ -26,7 +26,7 @@ var badBitmapRequestCount = promauto.NewCounterVec( // repoPath, and if it finds any, it logs a warning. This is to help us // investigate https://gitlab.com/gitlab-org/gitaly/issues/1728. func WarnIfTooManyBitmaps(ctx context.Context, locator storage.Locator, storageName, repoPath string) { - logEntry := ctxlogrus.Extract(ctx) + logEntry := log.FromContext(ctx) storageRoot, err := locator.GetStorageByName(storageName) if err != nil { diff --git a/internal/git/command_factory.go b/internal/git/command_factory.go index c7e6b1036..78ace470d 100644 --- a/internal/git/command_factory.go +++ b/internal/git/command_factory.go @@ -125,7 +125,7 @@ type ExecCommandFactory struct { locator storage.Locator cfg config.Cfg execEnvs []ExecutionEnvironment - logger logrus.FieldLogger + logger log.Logger cgroupsManager cgroups.Manager trace2Hooks []trace2.Hook invalidCommandsMetric *prometheus.CounterVec @@ -137,7 +137,7 @@ type ExecCommandFactory struct { // NewExecCommandFactory returns a new instance of initialized ExecCommandFactory. The returned // cleanup function shall be executed when the server shuts down. -func NewExecCommandFactory(cfg config.Cfg, logger logrus.FieldLogger, opts ...ExecCommandFactoryOption) (_ *ExecCommandFactory, _ func(), returnedErr error) { +func NewExecCommandFactory(cfg config.Cfg, logger log.Logger, opts ...ExecCommandFactoryOption) (_ *ExecCommandFactory, _ func(), returnedErr error) { var factoryCfg execCommandFactoryConfig for _, opt := range opts { opt(&factoryCfg) @@ -196,7 +196,7 @@ func NewExecCommandFactory(cfg config.Cfg, logger logrus.FieldLogger, opts ...Ex // setupGitExecutionEnvironments assembles a Git execution environment that can be used to run Git // commands. It warns if no path was specified in the configuration. -func setupGitExecutionEnvironments(cfg config.Cfg, factoryCfg execCommandFactoryConfig, logger logrus.FieldLogger) ([]ExecutionEnvironment, func(), error) { +func setupGitExecutionEnvironments(cfg config.Cfg, factoryCfg execCommandFactoryConfig, logger log.Logger) ([]ExecutionEnvironment, func(), error) { sharedEnvironment := []string{ // Force English locale for consistency on output messages and to help us debug in // case we get bug reports from customers whose system-locale would be different. @@ -309,7 +309,7 @@ func (cf *ExecCommandFactory) HooksPath(ctx context.Context) string { return cf.hookDirs.tempHooksPath } -func setupHookDirectories(cfg config.Cfg, factoryCfg execCommandFactoryConfig, logger logrus.FieldLogger) (hookDirectories, func(), error) { +func setupHookDirectories(cfg config.Cfg, factoryCfg execCommandFactoryConfig, logger log.Logger) (hookDirectories, func(), error) { if factoryCfg.hooksPath != "" { return hookDirectories{ tempHooksPath: factoryCfg.hooksPath, diff --git a/internal/git/dirs.go b/internal/git/dirs.go index 16444ed5a..e50f9f999 100644 --- a/internal/git/dirs.go +++ b/internal/git/dirs.go @@ -7,7 +7,7 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // alternateOutsideStorageError is returned when an alternates file contains an @@ -43,7 +43,7 @@ func AlternateObjectDirectories(ctx context.Context, storageRoot, repoPath strin } func altObjectDirs(ctx context.Context, storagePrefix, objDir string, depth int) ([]string, error) { - logEntry := ctxlogrus.Extract(ctx) + logEntry := log.FromContext(ctx) const maxAlternatesDepth = 5 // Taken from https://github.com/git/git/blob/v2.23.0/sha1-file.c#L575 if depth > maxAlternatesDepth { logEntry.WithField("objdir", objDir).Warn("ignoring deeply nested alternate object directory") diff --git a/internal/git/housekeeping/clean_stale_data.go b/internal/git/housekeeping/clean_stale_data.go index d8436b3d7..58c5c821c 100644 --- a/internal/git/housekeeping/clean_stale_data.go +++ b/internal/git/housekeeping/clean_stale_data.go @@ -11,10 +11,10 @@ import ( "strings" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/tracing" @@ -90,7 +90,7 @@ func DefaultStaleDataCleanup() CleanStaleDataConfig { } // CleanStaleData removes any stale data in the repository as per the provided configuration. -func (m *RepositoryManager) CleanStaleData(ctx context.Context, logger logrus.FieldLogger, repo *localrepo.Repo, cfg CleanStaleDataConfig) error { +func (m *RepositoryManager) CleanStaleData(ctx context.Context, logger log.Logger, repo *localrepo.Repo, cfg CleanStaleDataConfig) error { span, ctx := tracing.StartSpanIfHasParent(ctx, "housekeeping.CleanStaleData", nil) defer span.Finish() @@ -656,6 +656,6 @@ func removeEmptyDirs(ctx context.Context, target string) (int, error) { return prunedDirsTotal + 1, nil } -func myLogger(logger logrus.FieldLogger) logrus.FieldLogger { +func myLogger(logger log.Logger) log.Logger { return logger.WithField("system", "housekeeping") } diff --git a/internal/git/housekeeping/manager.go b/internal/git/housekeeping/manager.go index c92d0c297..f07cbe393 100644 --- a/internal/git/housekeeping/manager.go +++ b/internal/git/housekeeping/manager.go @@ -6,20 +6,20 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" gitalycfgprom "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/prometheus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // Manager is a housekeeping manager. It is supposed to handle housekeeping tasks for repositories // such as the cleanup of unneeded files and optimizations for the repository's data structures. type Manager interface { // CleanStaleData removes any stale data in the repository as per the provided configuration. - CleanStaleData(context.Context, logrus.FieldLogger, *localrepo.Repo, CleanStaleDataConfig) error + CleanStaleData(context.Context, log.Logger, *localrepo.Repo, CleanStaleDataConfig) error // OptimizeRepository optimizes the repository's data structures such that it can be more // efficiently served. - OptimizeRepository(context.Context, logrus.FieldLogger, *localrepo.Repo, ...OptimizeRepositoryOption) error + OptimizeRepository(context.Context, log.Logger, *localrepo.Repo, ...OptimizeRepositoryOption) error // AddPackRefsInhibitor allows clients to block housekeeping from running git-pack-refs(1). AddPackRefsInhibitor(ctx context.Context, repoPath string) (bool, func(), error) } @@ -214,7 +214,7 @@ type RepositoryManager struct { dataStructureCount *prometheus.HistogramVec dataStructureSize *prometheus.HistogramVec dataStructureTimeSinceLastOptimization *prometheus.HistogramVec - optimizeFunc func(context.Context, *RepositoryManager, logrus.FieldLogger, *localrepo.Repo, OptimizationStrategy) error + optimizeFunc func(context.Context, *RepositoryManager, log.Logger, *localrepo.Repo, OptimizationStrategy) error repositoryStates repositoryStates } diff --git a/internal/git/housekeeping/optimize_repository.go b/internal/git/housekeeping/optimize_repository.go index 8fe65f594..999ea6629 100644 --- a/internal/git/housekeeping/optimize_repository.go +++ b/internal/git/housekeeping/optimize_repository.go @@ -8,10 +8,10 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/git/stats" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/tracing" ) @@ -41,7 +41,7 @@ func WithOptimizationStrategyConstructor(strategyConstructor OptimizationStrateg // or not depends on a set of heuristics. func (m *RepositoryManager) OptimizeRepository( ctx context.Context, - logger logrus.FieldLogger, + logger log.Logger, repo *localrepo.Repo, opts ...OptimizeRepositoryOption, ) error { @@ -140,7 +140,7 @@ func (m *RepositoryManager) reportDataStructureSize(dataStructure string, size u func optimizeRepository( ctx context.Context, m *RepositoryManager, - logger logrus.FieldLogger, + logger log.Logger, repo *localrepo.Repo, strategy OptimizationStrategy, ) error { diff --git a/internal/git/housekeeping/optimize_repository_test.go b/internal/git/housekeeping/optimize_repository_test.go index a1173334f..740a01490 100644 --- a/internal/git/housekeeping/optimize_repository_test.go +++ b/internal/git/housekeeping/optimize_repository_test.go @@ -12,7 +12,6 @@ import ( "time" "github.com/prometheus/client_golang/prometheus/testutil" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/command" @@ -26,6 +25,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/backchannel" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testcfg" ) @@ -1076,7 +1076,7 @@ func TestOptimizeRepository_ConcurrencyLimit(t *testing.T) { repo := localrepo.NewTestRepo(t, cfg, repoProto) manager := NewManager(gitalycfgprom.Config{}, nil) - manager.optimizeFunc = func(context.Context, *RepositoryManager, logrus.FieldLogger, *localrepo.Repo, OptimizationStrategy) error { + manager.optimizeFunc = func(context.Context, *RepositoryManager, log.Logger, *localrepo.Repo, OptimizationStrategy) error { reqReceivedCh <- struct{}{} ch <- struct{}{} @@ -1108,7 +1108,7 @@ func TestOptimizeRepository_ConcurrencyLimit(t *testing.T) { repo := localrepo.NewTestRepo(t, cfg, repoProto) manager := NewManager(gitalycfgprom.Config{}, nil) - manager.optimizeFunc = func(context.Context, *RepositoryManager, logrus.FieldLogger, *localrepo.Repo, OptimizationStrategy) error { + manager.optimizeFunc = func(context.Context, *RepositoryManager, log.Logger, *localrepo.Repo, OptimizationStrategy) error { // This should only happen if housekeeping is running successfully. // So by sending data on this channel we can notify the test that this // function ran successfully. @@ -1142,7 +1142,7 @@ func TestOptimizeRepository_ConcurrencyLimit(t *testing.T) { repo := localrepo.NewTestRepo(t, cfg, repoProto) manager := NewManager(gitalycfgprom.Config{}, nil) - manager.optimizeFunc = func(context.Context, *RepositoryManager, logrus.FieldLogger, *localrepo.Repo, OptimizationStrategy) error { + manager.optimizeFunc = func(context.Context, *RepositoryManager, log.Logger, *localrepo.Repo, OptimizationStrategy) error { require.FailNow(t, "housekeeping run should have been skipped") return nil } @@ -1175,7 +1175,7 @@ func TestOptimizeRepository_ConcurrencyLimit(t *testing.T) { reposOptimized := make(map[string]struct{}) manager := NewManager(gitalycfgprom.Config{}, nil) - manager.optimizeFunc = func(_ context.Context, _ *RepositoryManager, _ logrus.FieldLogger, repo *localrepo.Repo, _ OptimizationStrategy) error { + manager.optimizeFunc = func(_ context.Context, _ *RepositoryManager, _ log.Logger, repo *localrepo.Repo, _ OptimizationStrategy) error { reposOptimized[repo.GetRelativePath()] = struct{}{} if repo.GetRelativePath() == repoFirst.GetRelativePath() { @@ -1212,7 +1212,7 @@ func TestOptimizeRepository_ConcurrencyLimit(t *testing.T) { var optimizations int manager := NewManager(gitalycfgprom.Config{}, nil) - manager.optimizeFunc = func(context.Context, *RepositoryManager, logrus.FieldLogger, *localrepo.Repo, OptimizationStrategy) error { + manager.optimizeFunc = func(context.Context, *RepositoryManager, log.Logger, *localrepo.Repo, OptimizationStrategy) error { optimizations++ if optimizations == 1 { diff --git a/internal/git/localrepo/refs.go b/internal/git/localrepo/refs.go index 9fb4c5aa6..fe38e93c3 100644 --- a/internal/git/localrepo/refs.go +++ b/internal/git/localrepo/refs.go @@ -10,10 +10,10 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" ) @@ -164,7 +164,7 @@ func (repo *Repo) setDefaultBranchWithTransaction(ctx context.Context, txManager } defer func() { if err := lockingFileWriter.Close(); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("closing locked HEAD: %w", err) + log.FromContext(ctx).WithError(err).Error("closing locked HEAD: %w", err) } }() diff --git a/internal/git/objectpool/disconnect.go b/internal/git/objectpool/disconnect.go index 9ea36b966..1f1fcb9ea 100644 --- a/internal/git/objectpool/disconnect.go +++ b/internal/git/objectpool/disconnect.go @@ -10,13 +10,13 @@ import ( "strings" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/git/stats" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/text" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/voting" ) @@ -210,7 +210,7 @@ func removeAlternatesIfOk(ctx context.Context, repo *localrepo.Repo, altFile, ba return } - logger := ctxlogrus.Extract(ctx) + logger := log.FromContext(ctx) // If we would do a os.Rename, and then someone else comes and clobbers // our file, it's gone forever. This trick with os.Link and os.Rename diff --git a/internal/git/objectpool/fetch.go b/internal/git/objectpool/fetch.go index 82f452b39..8470ec44d 100644 --- a/internal/git/objectpool/fetch.go +++ b/internal/git/objectpool/fetch.go @@ -8,7 +8,6 @@ import ( "io" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping" @@ -16,6 +15,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/git/stats" "gitlab.com/gitlab-org/gitaly/v16/internal/git/updateref" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/voting" ) @@ -24,7 +24,7 @@ var objectPoolRefspec = fmt.Sprintf("+refs/*:%s/*", git.ObjectPoolRefNamespace) // FetchFromOrigin initializes the pool and fetches the objects from its origin repository func (o *ObjectPool) FetchFromOrigin(ctx context.Context, origin *localrepo.Repo) error { - logger := ctxlogrus.Extract(ctx) + logger := log.FromContext(ctx) if !o.Exists() { return structerr.NewInvalidArgument("object pool does not exist") @@ -320,7 +320,7 @@ type referencedObjectTypes struct { Trees uint64 `json:"trees"` } -func (o *ObjectPool) logStats(ctx context.Context, logger *logrus.Entry) error { +func (o *ObjectPool) logStats(ctx context.Context, logger log.Logger) error { fields := logrus.Fields{} repoInfo, err := stats.RepositoryInfoForRepository(o.Repo) diff --git a/internal/git/protocol.go b/internal/git/protocol.go index e72053aa6..d03a3a5a8 100644 --- a/internal/git/protocol.go +++ b/internal/git/protocol.go @@ -5,11 +5,11 @@ import ( "fmt" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" grpcmwtags "github.com/grpc-ecosystem/go-grpc-middleware/tags" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) const ( @@ -50,7 +50,7 @@ func gitProtocolEnv(ctx context.Context, req RequestWithGitProtocol) []string { case "": protocol = "v0" default: - ctxlogrus.Extract(ctx).WithField("git_protocol", gp).Warn("invalid git protocol requested") + log.FromContext(ctx).WithField("git_protocol", gp).Warn("invalid git protocol requested") protocol = "invalid" } diff --git a/internal/git/ssh.go b/internal/git/ssh.go index fc7ac31f0..25077b634 100644 --- a/internal/git/ssh.go +++ b/internal/git/ssh.go @@ -7,8 +7,8 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // BuildSSHInvocation builds a command line to invoke SSH with the provided key and known hosts. @@ -26,7 +26,7 @@ func BuildSSHInvocation(ctx context.Context, sshKey, knownHosts string) (string, cleanup := func() { if err := os.RemoveAll(tmpDir); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed to remove tmp directory with ssh key/config") + log.FromContext(ctx).WithError(err).Error("failed to remove tmp directory with ssh key/config") } } diff --git a/internal/git/stats/repository_info.go b/internal/git/stats/repository_info.go index 159b31b00..c507514c0 100644 --- a/internal/git/stats/repository_info.go +++ b/internal/git/stats/repository_info.go @@ -14,9 +14,9 @@ import ( "strings" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) const ( @@ -120,7 +120,7 @@ func LooseObjects(repo *localrepo.Repo) (uint64, error) { func LogRepositoryInfo(ctx context.Context, repo *localrepo.Repo) { repoInfo, err := RepositoryInfoForRepository(repo) if err != nil { - ctxlogrus.Extract(ctx).WithError(err).Warn("failed reading repository info") + log.FromContext(ctx).WithError(err).Warn("failed reading repository info") } else { repoInfo.Log(ctx) } @@ -184,7 +184,7 @@ func RepositoryInfoForRepository(repo *localrepo.Repo) (RepositoryInfo, error) { // Log logs the repository information as a structured entry under the `repository_info` field. func (i RepositoryInfo) Log(ctx context.Context) { - ctxlogrus.Extract(ctx).WithField("repository_info", i).Info("repository info") + log.FromContext(ctx).WithField("repository_info", i).Info("repository info") } // ReferencesInfo contains information about references. diff --git a/internal/git/stats/repository_info_test.go b/internal/git/stats/repository_info_test.go index 81285cdc1..82f69ccb9 100644 --- a/internal/git/stats/repository_info_test.go +++ b/internal/git/stats/repository_info_test.go @@ -11,7 +11,6 @@ import ( "testing" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/require" @@ -19,6 +18,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testcfg" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -103,7 +103,7 @@ func TestLogObjectInfo(t *testing.T) { t.Parallel() logger, hook := test.NewNullLogger() - ctx := ctxlogrus.ToContext(ctx, logger.WithField("test", "logging")) + ctx := log.FromLogrusEntry(logger.WithField("test", "logging")).ToContext(ctx) _, repoPath1 := gittest.CreateRepository(t, ctx, cfg, gittest.CreateRepositoryConfig{ SkipCreationViaService: true, @@ -152,7 +152,7 @@ func TestLogObjectInfo(t *testing.T) { t.Parallel() logger, hook := test.NewNullLogger() - ctx := ctxlogrus.ToContext(ctx, logger.WithField("test", "logging")) + ctx := log.FromLogrusEntry(logger.WithField("test", "logging")).ToContext(ctx) repo, repoPath := gittest.CreateRepository(t, ctx, cfg, gittest.CreateRepositoryConfig{ SkipCreationViaService: true, diff --git a/internal/gitaly/config/prometheus/config.go b/internal/gitaly/config/prometheus/config.go index f3b8f9287..1c5b9d7bb 100644 --- a/internal/gitaly/config/prometheus/config.go +++ b/internal/gitaly/config/prometheus/config.go @@ -7,9 +7,9 @@ import ( grpcprometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/errors/cfgerror" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/duration" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // Config contains additional configuration data for prometheus @@ -30,7 +30,7 @@ func DefaultConfig() Config { } // Configure configures latency buckets for prometheus timing histograms -func (c *Config) Configure(logger logrus.FieldLogger) { +func (c *Config) Configure(logger log.Logger) { if len(c.GRPCLatencyBuckets) == 0 { return } diff --git a/internal/gitaly/config/sentry/sentry.go b/internal/gitaly/config/sentry/sentry.go index 908725ec1..d6e148b8b 100644 --- a/internal/gitaly/config/sentry/sentry.go +++ b/internal/gitaly/config/sentry/sentry.go @@ -4,8 +4,8 @@ import ( "fmt" sentry "github.com/getsentry/sentry-go" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/middleware/panichandler" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // Config contains configuration for sentry @@ -15,7 +15,7 @@ type Config struct { } // ConfigureSentry configures the sentry DSN -func ConfigureSentry(logger logrus.FieldLogger, version string, sentryConf Config) { +func ConfigureSentry(logger log.Logger, version string, sentryConf Config) { if sentryConf.DSN == "" { return } diff --git a/internal/gitaly/hook/postreceive.go b/internal/gitaly/hook/postreceive.go index f1d11f13d..6429c3329 100644 --- a/internal/gitaly/hook/postreceive.go +++ b/internal/gitaly/hook/postreceive.go @@ -9,9 +9,9 @@ import ( "math" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitlab" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -119,12 +119,12 @@ func (m *GitLabHookManager) PostReceiveHook(ctx context.Context, repo *gitalypb. if isPrimary(payload) { if err := m.postReceiveHook(ctx, payload, repo, pushOptions, env, changes, stdout, stderr); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Warn("stopping transaction because post-receive hook failed") + log.FromContext(ctx).WithError(err).Warn("stopping transaction because post-receive hook failed") // If the post-receive hook declines the push, then we need to stop any // secondaries voting on the transaction. if err := m.stopTransaction(ctx, payload); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed stopping transaction in post-receive hook") + log.FromContext(ctx).WithError(err).Error("failed stopping transaction in post-receive hook") } return err diff --git a/internal/gitaly/hook/prereceive.go b/internal/gitaly/hook/prereceive.go index 46cd18ada..cf63e95d0 100644 --- a/internal/gitaly/hook/prereceive.go +++ b/internal/gitaly/hook/prereceive.go @@ -9,10 +9,10 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitlab" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/env" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -76,12 +76,12 @@ func (m *GitLabHookManager) PreReceiveHook(ctx context.Context, repo *gitalypb.R // Only the primary should execute hooks and increment reference counters. if isPrimary(payload) { if err := m.preReceiveHook(ctx, payload, repo, pushOptions, env, changes, stdout, stderr); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Warn("stopping transaction because pre-receive hook failed") + log.FromContext(ctx).WithError(err).Warn("stopping transaction because pre-receive hook failed") // If the pre-receive hook declines the push, then we need to stop any // secondaries voting on the transaction. if err := m.stopTransaction(ctx, payload); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed stopping transaction in pre-receive hook") + log.FromContext(ctx).WithError(err).Error("failed stopping transaction in pre-receive hook") } return err diff --git a/internal/gitaly/hook/update.go b/internal/gitaly/hook/update.go index be5e38188..64b337ce1 100644 --- a/internal/gitaly/hook/update.go +++ b/internal/gitaly/hook/update.go @@ -5,8 +5,8 @@ import ( "fmt" "io" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -20,12 +20,12 @@ func (m *GitLabHookManager) UpdateHook(ctx context.Context, repo *gitalypb.Repos if isPrimary(payload) { if err := m.updateHook(ctx, payload, repo, ref, oldValue, newValue, env, stdout, stderr); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Warn("stopping transaction because update hook failed") + log.FromContext(ctx).WithError(err).Warn("stopping transaction because update hook failed") // If the update hook declines the push, then we need // to stop any secondaries voting on the transaction. if err := m.stopTransaction(ctx, payload); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed stopping transaction in update hook") + log.FromContext(ctx).WithError(err).Error("failed stopping transaction in update hook") } return err diff --git a/internal/gitaly/hook/updateref/update_with_hooks.go b/internal/gitaly/hook/updateref/update_with_hooks.go index 796f042f8..a1fb7175a 100644 --- a/internal/gitaly/hook/updateref/update_with_hooks.go +++ b/internal/gitaly/hook/updateref/update_with_hooks.go @@ -7,7 +7,6 @@ import ( "fmt" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" @@ -17,6 +16,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/hook" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/txinfo" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -303,7 +303,7 @@ func (u *UpdaterWithHooks) UpdateReference( if errors.As(err, &customHookErr) { // Only log the error when we've got a custom-hook error, but otherwise // ignore it and continue with whatever we have been doing. - ctxlogrus.Extract(ctx).WithError(err).Error("custom post-receive hook returned an error") + log.FromContext(ctx).WithError(err).Error("custom post-receive hook returned an error") } else { return fmt.Errorf("running post-receive hooks: %w", wrapHookError(err, git.PostReceiveHook, stdout.String(), stderr.String())) } diff --git a/internal/gitaly/linguist/linguist.go b/internal/gitaly/linguist/linguist.go index e5219b1e0..e5a8ee52e 100644 --- a/internal/gitaly/linguist/linguist.go +++ b/internal/gitaly/linguist/linguist.go @@ -7,7 +7,6 @@ import ( "io" "github.com/go-enry/go-enry/v2" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" @@ -15,6 +14,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/git/gitpipe" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // ByteCountPerLanguage represents a counter value (bytes) per language. @@ -51,7 +51,7 @@ func Color(language string) string { func (inst *Instance) Stats(ctx context.Context, commitID string) (ByteCountPerLanguage, error) { stats, err := initLanguageStats(inst.repo) if err != nil { - ctxlogrus.Extract(ctx).WithError(err).Info("linguist load from cache") + log.FromContext(ctx).WithError(err).Info("linguist load from cache") } if stats.CommitID == commitID { return stats.Totals, nil diff --git a/internal/gitaly/maintenance/daily.go b/internal/gitaly/maintenance/daily.go index 359de3919..fdf3ced82 100644 --- a/internal/gitaly/maintenance/daily.go +++ b/internal/gitaly/maintenance/daily.go @@ -4,14 +4,14 @@ import ( "context" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/dontpanic" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // StoragesJob runs a job on storages. The string slice param indicates which // storages are currently enabled for the feature. -type StoragesJob func(context.Context, logrus.FieldLogger, []string) error +type StoragesJob func(context.Context, log.Logger, []string) error // DailyWorker allows for a storage job to be executed on a daily schedule type DailyWorker struct { @@ -40,7 +40,7 @@ func (dw DailyWorker) nextTime(hour, minute int) time.Time { // StartDaily will run the provided job every day at the specified time for the // specified duration. Only the specified storages wil be worked on. -func (dw DailyWorker) StartDaily(ctx context.Context, l logrus.FieldLogger, schedule config.DailyJob, job StoragesJob) error { +func (dw DailyWorker) StartDaily(ctx context.Context, l log.Logger, schedule config.DailyJob, job StoragesJob) error { if schedule.Duration == 0 || len(schedule.Storages) == 0 || schedule.Disabled { return nil } diff --git a/internal/gitaly/maintenance/daily_test.go b/internal/gitaly/maintenance/daily_test.go index 1b4f0a21d..6ae906c57 100644 --- a/internal/gitaly/maintenance/daily_test.go +++ b/internal/gitaly/maintenance/daily_test.go @@ -5,10 +5,10 @@ import ( "testing" "time" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/duration" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" ) @@ -28,7 +28,7 @@ func TestStartDaily(t *testing.T) { } storagesQ := make(chan []string) - fn := func(_ context.Context, _ logrus.FieldLogger, s []string) error { + fn := func(_ context.Context, _ log.Logger, s []string) error { storagesQ <- s return nil } diff --git a/internal/gitaly/maintenance/optimize.go b/internal/gitaly/maintenance/optimize.go index 6233b9aa4..2873e3e47 100644 --- a/internal/gitaly/maintenance/optimize.go +++ b/internal/gitaly/maintenance/optimize.go @@ -9,21 +9,21 @@ import ( "path/filepath" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) // WorkerFunc is a function that does a unit of work meant to run in the background -type WorkerFunc func(context.Context, logrus.FieldLogger) error +type WorkerFunc func(context.Context, log.Logger) error // StartWorkers will start any background workers and returns a function that // can be used to shut down the background workers. func StartWorkers( ctx context.Context, - l logrus.FieldLogger, + l log.Logger, workers ...WorkerFunc, ) (func(), error) { errQ := make(chan error) @@ -67,20 +67,20 @@ func shuffledStoragesCopy(randSrc *rand.Rand, storages []config.Storage) []confi // Optimizer knows how to optimize a repository type Optimizer interface { - OptimizeRepository(context.Context, logrus.FieldLogger, storage.Repository) error + OptimizeRepository(context.Context, log.Logger, storage.Repository) error } // OptimizerFunc is an adapter to allow the use of an ordinary function as an Optimizer -type OptimizerFunc func(context.Context, logrus.FieldLogger, storage.Repository) error +type OptimizerFunc func(context.Context, log.Logger, storage.Repository) error // OptimizeRepository calls o(ctx, repo) -func (o OptimizerFunc) OptimizeRepository(ctx context.Context, logger logrus.FieldLogger, repo storage.Repository) error { +func (o OptimizerFunc) OptimizeRepository(ctx context.Context, logger log.Logger, repo storage.Repository) error { return o(ctx, logger, repo) } // DailyOptimizationWorker creates a worker that runs repository maintenance daily func DailyOptimizationWorker(cfg config.Cfg, optimizer Optimizer) WorkerFunc { - return func(ctx context.Context, l logrus.FieldLogger) error { + return func(ctx context.Context, l log.Logger) error { return NewDailyWorker().StartDaily( ctx, l, @@ -97,7 +97,7 @@ func DailyOptimizationWorker(cfg config.Cfg, optimizer Optimizer) WorkerFunc { func optimizeRepo( ctx context.Context, - l logrus.FieldLogger, + l log.Logger, o Optimizer, repo *gitalypb.Repository, ) error { @@ -125,7 +125,7 @@ func walkReposShuffled( ctx context.Context, locator storage.Locator, walker *randomWalker, - l logrus.FieldLogger, + l log.Logger, s config.Storage, o Optimizer, ticker helper.Ticker, @@ -187,7 +187,7 @@ func walkReposShuffled( // Any errors during the optimization will be logged. Any other errors will be returned and cause // the walk to end prematurely. func OptimizeReposRandomly(cfg config.Cfg, optimizer Optimizer, ticker helper.Ticker, rand *rand.Rand) StoragesJob { - return func(ctx context.Context, l logrus.FieldLogger, enabledStorageNames []string) error { + return func(ctx context.Context, l log.Logger, enabledStorageNames []string) error { enabledNames := map[string]struct{}{} for _, sName := range enabledStorageNames { enabledNames[sName] = struct{}{} diff --git a/internal/gitaly/maintenance/optimize_test.go b/internal/gitaly/maintenance/optimize_test.go index 7ead8cd01..a44c9d5bd 100644 --- a/internal/gitaly/maintenance/optimize_test.go +++ b/internal/gitaly/maintenance/optimize_test.go @@ -5,7 +5,6 @@ import ( "math/rand" "testing" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v16/internal/git/gittest" @@ -16,6 +15,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/backchannel" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testcfg" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -27,7 +27,7 @@ type mockOptimizer struct { cfg config.Cfg } -func (mo *mockOptimizer) OptimizeRepository(ctx context.Context, logger logrus.FieldLogger, repository storage.Repository) error { +func (mo *mockOptimizer) OptimizeRepository(ctx context.Context, logger log.Logger, repository storage.Repository) error { mo.actual = append(mo.actual, repository) l := config.NewLocator(mo.cfg) gitCmdFactory := gittest.NewCommandFactory(mo.t, mo.cfg) diff --git a/internal/gitaly/repoutil/custom_hooks.go b/internal/gitaly/repoutil/custom_hooks.go index b355ff924..eb26cadfe 100644 --- a/internal/gitaly/repoutil/custom_hooks.go +++ b/internal/gitaly/repoutil/custom_hooks.go @@ -12,12 +12,12 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/archive" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/tempdir" @@ -123,7 +123,7 @@ func SetCustomHooks( // future modifications to the repository's hooks will be prevented. If // this occurs, the `.lock` file will have to be manually removed. if err := hooksLock.Unlock(); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed to unlock hooks") + log.FromContext(ctx).WithError(err).Error("failed to unlock hooks") } }() @@ -138,7 +138,7 @@ func SetCustomHooks( defer func() { if err := os.RemoveAll(tmpDir.Path()); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Warn("failed to remove temporary directory") + log.FromContext(ctx).WithError(err).Warn("failed to remove temporary directory") } }() diff --git a/internal/gitaly/repoutil/lock.go b/internal/gitaly/repoutil/lock.go index 097374e61..3bbf30716 100644 --- a/internal/gitaly/repoutil/lock.go +++ b/internal/gitaly/repoutil/lock.go @@ -5,9 +5,9 @@ import ( "os" "path/filepath" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" ) @@ -41,7 +41,7 @@ func Lock(ctx context.Context, locator storage.Locator, repository storage.Repos unlock := func() { if err := locker.Close(); err != nil { - ctxlogrus.Extract(ctx).Error("closing repository locker: %w", err) + log.FromContext(ctx).Error("closing repository locker: %w", err) } } diff --git a/internal/gitaly/repoutil/remove.go b/internal/gitaly/repoutil/remove.go index eb702d742..721be1ff4 100644 --- a/internal/gitaly/repoutil/remove.go +++ b/internal/gitaly/repoutil/remove.go @@ -7,11 +7,11 @@ import ( "os" "path/filepath" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage/counter" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/txinfo" @@ -100,7 +100,7 @@ func remove( defer func() { if err := removeAll(destDir); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed removing repository from temporary directory") + log.FromContext(ctx).WithError(err).Error("failed removing repository from temporary directory") } }() diff --git a/internal/gitaly/server/server_factory.go b/internal/gitaly/server/server_factory.go index 8639a8e0e..075adc9a3 100644 --- a/internal/gitaly/server/server_factory.go +++ b/internal/gitaly/server/server_factory.go @@ -3,11 +3,11 @@ package server import ( "sync" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/cache" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/backchannel" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/middleware/limithandler" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc" ) @@ -17,7 +17,7 @@ type GitalyServerFactory struct { cacheInvalidator cache.Invalidator limitHandlers []*limithandler.LimiterMiddleware cfg config.Cfg - logger logrus.FieldLogger + logger log.Logger externalServers []*grpc.Server internalServers []*grpc.Server } @@ -25,7 +25,7 @@ type GitalyServerFactory struct { // NewGitalyServerFactory allows to create and start secure/insecure 'grpc.Server's. func NewGitalyServerFactory( cfg config.Cfg, - logger logrus.FieldLogger, + logger log.Logger, registry *backchannel.Registry, cacheInvalidator cache.Invalidator, limitHandlers []*limithandler.LimiterMiddleware, diff --git a/internal/gitaly/service/cleanup/cleaner.go b/internal/gitaly/service/cleanup/cleaner.go index 994cf80cc..744a8fe4a 100644 --- a/internal/gitaly/service/cleanup/cleaner.go +++ b/internal/gitaly/service/cleanup/cleaner.go @@ -7,10 +7,10 @@ import ( "io" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/updateref" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // forEachFunc can be called for every entry in the filter-repo or BFG object @@ -120,7 +120,7 @@ func (c *cleaner) processEntry(ctx context.Context, updater *updateref.Updater, return nil } - ctxlogrus.Extract(c.ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "sha": oldSHA, "refs": refs, }).Info("removing internal references") @@ -162,7 +162,7 @@ func buildLookupTable(ctx context.Context, repo git.RepositoryExecutor) (map[str return nil, err } - logger := ctxlogrus.Extract(ctx) + logger := log.FromContext(ctx) out := make(map[string][]git.ReferenceName) scanner := bufio.NewScanner(cmd) @@ -171,7 +171,7 @@ func buildLookupTable(ctx context.Context, repo git.RepositoryExecutor) (map[str objectName, refName, ok := strings.Cut(line, " ") if !ok { - logger.WithFields(log.Fields{"line": line}).Warn("failed to parse git refs") + logger.WithFields(logrus.Fields{"line": line}).Warn("failed to parse git refs") return nil, fmt.Errorf("failed to parse git refs") } diff --git a/internal/gitaly/service/commit/commits_helper.go b/internal/gitaly/service/commit/commits_helper.go index c0ec26d78..50587337c 100644 --- a/internal/gitaly/service/commit/commits_helper.go +++ b/internal/gitaly/service/commit/commits_helper.go @@ -3,10 +3,10 @@ package commit import ( "context" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" - "gitlab.com/gitlab-org/gitaly/v16/internal/git/log" + gitlog "gitlab.com/gitlab-org/gitaly/v16/internal/git/log" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/chunk" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -24,12 +24,12 @@ func (s *server) sendCommits( revisions[i] = git.Revision(revision) } - cmd, err := log.GitLogCommand(ctx, s.gitCmdFactory, repo, revisions, paths, options, extraArgs...) + cmd, err := gitlog.GitLogCommand(ctx, s.gitCmdFactory, repo, revisions, paths, options, extraArgs...) if err != nil { return err } - logParser, cancel, err := log.NewParser(ctx, s.catfileCache, repo, cmd) + logParser, cancel, err := gitlog.NewParser(ctx, s.catfileCache, repo, cmd) if err != nil { return err } @@ -53,7 +53,7 @@ func (s *server) sendCommits( if err := cmd.Wait(); err != nil { // We expect this error to be caused by non-existing references. In that // case, we just log the error and send no commits to the `sender`. - ctxlogrus.Extract(ctx).WithError(err).Info("ignoring git-log error") + log.FromContext(ctx).WithError(err).Info("ignoring git-log error") } return nil diff --git a/internal/gitaly/service/commit/count_commits.go b/internal/gitaly/service/commit/count_commits.go index 7332df2d8..629a811ff 100644 --- a/internal/gitaly/service/commit/count_commits.go +++ b/internal/gitaly/service/commit/count_commits.go @@ -8,9 +8,9 @@ import ( "strconv" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -53,11 +53,11 @@ func (s *server) CountCommits(ctx context.Context, in *gitalypb.CountCommitsRequ var count int64 countStr, readAllErr := io.ReadAll(cmd) if readAllErr != nil { - ctxlogrus.Extract(ctx).WithError(err).Info("ignoring git rev-list error") + log.FromContext(ctx).WithError(err).Info("ignoring git rev-list error") } if err := cmd.Wait(); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Info("ignoring git rev-list error") + log.FromContext(ctx).WithError(err).Info("ignoring git rev-list error") count = 0 } else if readAllErr == nil { var err error diff --git a/internal/gitaly/service/commit/get_tree_entries.go b/internal/gitaly/service/commit/get_tree_entries.go index 13bcadcce..5338764ec 100644 --- a/internal/gitaly/service/commit/get_tree_entries.go +++ b/internal/gitaly/service/commit/get_tree_entries.go @@ -9,13 +9,13 @@ import ( "path/filepath" "sort" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/chunk" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "google.golang.org/protobuf/proto" @@ -329,7 +329,7 @@ func (c *treeEntriesSender) SetPaginationCursor(cursor string) { } func (s *server) GetTreeEntries(in *gitalypb.GetTreeEntriesRequest, stream gitalypb.CommitService_GetTreeEntriesServer) error { - ctxlogrus.Extract(stream.Context()).WithFields(log.Fields{ + log.FromContext(stream.Context()).WithFields(logrus.Fields{ "Revision": in.Revision, "Path": in.Path, }).Debug("GetTreeEntries") diff --git a/internal/gitaly/service/commit/isancestor.go b/internal/gitaly/service/commit/isancestor.go index 9b2fc2fa9..fa87fe653 100644 --- a/internal/gitaly/service/commit/isancestor.go +++ b/internal/gitaly/service/commit/isancestor.go @@ -4,10 +4,10 @@ import ( "context" "errors" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -36,7 +36,7 @@ func (s *server) CommitIsAncestor(ctx context.Context, in *gitalypb.CommitIsAnce // Assumes that `path`, `ancestorID` and `childID` are populated :trollface: func (s *server) commitIsAncestorName(ctx context.Context, repo *gitalypb.Repository, ancestorID, childID string) (bool, error) { - ctxlogrus.Extract(ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "ancestorSha": ancestorID, "childSha": childID, }).Debug("commitIsAncestor") diff --git a/internal/gitaly/service/commit/list_files.go b/internal/gitaly/service/commit/list_files.go index aba98f4e7..09402659d 100644 --- a/internal/gitaly/service/commit/list_files.go +++ b/internal/gitaly/service/commit/list_files.go @@ -4,19 +4,19 @@ import ( "fmt" "io" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/chunk" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "google.golang.org/protobuf/proto" ) func (s *server) ListFiles(in *gitalypb.ListFilesRequest, stream gitalypb.CommitService_ListFilesServer) error { - ctxlogrus.Extract(stream.Context()).WithFields(log.Fields{ + log.FromContext(stream.Context()).WithFields(logrus.Fields{ "Revision": in.GetRevision(), }).Debug("ListFiles") diff --git a/internal/gitaly/service/conflicts/resolve_conflicts.go b/internal/gitaly/service/conflicts/resolve_conflicts.go index 493a2a24e..57e7fdd06 100644 --- a/internal/gitaly/service/conflicts/resolve_conflicts.go +++ b/internal/gitaly/service/conflicts/resolve_conflicts.go @@ -12,12 +12,12 @@ import ( "strings" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/conflict" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/git/remoterepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -57,8 +57,7 @@ func handleResolveConflictsErr(err error, stream gitalypb.ConflictsService_Resol // log the error since the interceptor won't catch this // error due to the unique way the RPC is defined to // handle resolution errors - ctxlogrus. - Extract(stream.Context()). + log.FromContext(stream.Context()). WithError(err). Error("ResolveConflicts: unable to resolve conflict") return stream.SendAndClose(&gitalypb.ResolveConflictsResponse{ diff --git a/internal/gitaly/service/diff/commit_delta.go b/internal/gitaly/service/diff/commit_delta.go index 131ec5798..1672854d7 100644 --- a/internal/gitaly/service/diff/commit_delta.go +++ b/internal/gitaly/service/diff/commit_delta.go @@ -3,10 +3,10 @@ package diff import ( "fmt" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/diff" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -14,7 +14,7 @@ import ( func (s *server) CommitDelta(in *gitalypb.CommitDeltaRequest, stream gitalypb.DiffService_CommitDeltaServer) error { ctx := stream.Context() - ctxlogrus.Extract(ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "LeftCommitId": in.LeftCommitId, "RightCommitId": in.RightCommitId, "Paths": logPaths(in.Paths), diff --git a/internal/gitaly/service/diff/commit_diff.go b/internal/gitaly/service/diff/commit_diff.go index a5ae472d8..c80876462 100644 --- a/internal/gitaly/service/diff/commit_diff.go +++ b/internal/gitaly/service/diff/commit_diff.go @@ -3,10 +3,10 @@ package diff import ( "fmt" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/diff" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -14,7 +14,7 @@ import ( func (s *server) CommitDiff(in *gitalypb.CommitDiffRequest, stream gitalypb.DiffService_CommitDiffServer) error { ctx := stream.Context() - ctxlogrus.Extract(ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "LeftCommitId": in.LeftCommitId, "RightCommitId": in.RightCommitId, "Paths": logPaths(in.Paths), diff --git a/internal/gitaly/service/objectpool/get.go b/internal/gitaly/service/objectpool/get.go index 2aa1bf90c..158e09368 100644 --- a/internal/gitaly/service/objectpool/get.go +++ b/internal/gitaly/service/objectpool/get.go @@ -3,8 +3,8 @@ package objectpool import ( "context" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/objectpool" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -19,7 +19,7 @@ func (s *server) GetObjectPool(ctx context.Context, in *gitalypb.GetObjectPoolRe objectPool, err := objectpool.FromRepo(s.locator, s.gitCmdFactory, s.catfileCache, s.txManager, s.housekeepingManager, repo) if err != nil { - ctxlogrus.Extract(ctx). + log.FromContext(ctx). WithError(err). WithField("storage", repository.GetStorageName()). WithField("relative_path", repository.GetRelativePath()). diff --git a/internal/gitaly/service/objectpool/testhelper_test.go b/internal/gitaly/service/objectpool/testhelper_test.go index a20c28ed1..cb51df425 100644 --- a/internal/gitaly/service/objectpool/testhelper_test.go +++ b/internal/gitaly/service/objectpool/testhelper_test.go @@ -4,7 +4,6 @@ import ( "context" "testing" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v16/internal/git/gittest" @@ -16,6 +15,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/service/repository" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testcfg" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testserver" @@ -61,7 +61,7 @@ func setupWithConfig(t *testing.T, ctx context.Context, cfg config.Cfg, opts ... return cfg, repo, repoPath, locator, clientWithConn{ObjectPoolServiceClient: gitalypb.NewObjectPoolServiceClient(conn), conn: conn} } -func runObjectPoolServer(t *testing.T, cfg config.Cfg, locator storage.Locator, logger *logrus.Logger, opts ...testserver.GitalyServerOpt) string { +func runObjectPoolServer(t *testing.T, cfg config.Cfg, locator storage.Locator, logger log.Logger, opts ...testserver.GitalyServerOpt) string { return testserver.RunGitalyServer(t, cfg, func(srv *grpc.Server, deps *service.Dependencies) { gitalypb.RegisterObjectPoolServiceServer(srv, NewServer( deps.GetLocator(), diff --git a/internal/gitaly/service/operations/apply_patch.go b/internal/gitaly/service/operations/apply_patch.go index aa38e378d..e81daa98a 100644 --- a/internal/gitaly/service/operations/apply_patch.go +++ b/internal/gitaly/service/operations/apply_patch.go @@ -9,12 +9,12 @@ import ( "path/filepath" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/text" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "gitlab.com/gitlab-org/gitaly/v16/streamio" @@ -109,7 +109,7 @@ func (s *Server) userApplyPatch(ctx context.Context, header *gitalypb.UserApplyP worktreeName := filepath.Base(worktreePath) if err := s.removeWorktree(ctx, header.Repository, worktreeName); err != nil { - ctxlogrus.Extract(ctx).WithField("worktree_name", worktreeName).WithError(err).Error("failed to remove worktree") + log.FromContext(ctx).WithField("worktree_name", worktreeName).WithError(err).Error("failed to remove worktree") } }() diff --git a/internal/gitaly/service/operations/commit_files.go b/internal/gitaly/service/operations/commit_files.go index c6ed6f5dc..b14a6b9cc 100644 --- a/internal/gitaly/service/operations/commit_files.go +++ b/internal/gitaly/service/operations/commit_files.go @@ -10,13 +10,13 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/git/remoterepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/hook/updateref" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -144,7 +144,7 @@ func (s *Server) UserCommitFiles(stream gitalypb.OperationService_UserCommitFile } if err := s.userCommitFiles(ctx, header, stream, objectHash); err != nil { - ctxlogrus.AddFields(ctx, logrus.Fields{ + log.AddFields(ctx, logrus.Fields{ "repository_storage": header.Repository.StorageName, "repository_relative_path": header.Repository.RelativePath, "branch_name": header.BranchName, @@ -154,7 +154,7 @@ func (s *Server) UserCommitFiles(stream gitalypb.OperationService_UserCommitFile }) if startRepo := header.GetStartRepository(); startRepo != nil { - ctxlogrus.AddFields(ctx, logrus.Fields{ + log.AddFields(ctx, logrus.Fields{ "start_repository_storage": startRepo.StorageName, "start_repository_relative_path": startRepo.RelativePath, }) diff --git a/internal/gitaly/service/operations/merge_to_ref.go b/internal/gitaly/service/operations/merge_to_ref.go index d04566c39..3a5e98780 100644 --- a/internal/gitaly/service/operations/merge_to_ref.go +++ b/internal/gitaly/service/operations/merge_to_ref.go @@ -6,10 +6,10 @@ import ( "fmt" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -105,7 +105,7 @@ func (s *Server) UserMergeToRef(ctx context.Context, request *gitalypb.UserMerge false, ) if err != nil { - ctxlogrus.Extract(ctx).WithError(err).WithFields( + log.FromContext(ctx).WithError(err).WithFields( logrus.Fields{ "source_sha": sourceOID, "target_sha": oid, diff --git a/internal/gitaly/service/operations/submodules.go b/internal/gitaly/service/operations/submodules.go index 6ba4911bf..e999e7693 100644 --- a/internal/gitaly/service/operations/submodules.go +++ b/internal/gitaly/service/operations/submodules.go @@ -6,11 +6,11 @@ import ( "fmt" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/hook/updateref" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -88,8 +88,7 @@ func (s *Server) UserUpdateSubmodule(ctx context.Context, req *gitalypb.UserUpda resp = &gitalypb.UserUpdateSubmoduleResponse{ CommitError: legacyErrPrefixInvalidSubmodulePath, } - ctxlogrus. - Extract(ctx). + log.FromContext(ctx). WithError(err). Error("UserUpdateSubmodule: git2go subcommand failure") } diff --git a/internal/gitaly/service/repository/apply_gitattributes.go b/internal/gitaly/service/repository/apply_gitattributes.go index 131d961ee..e0095678e 100644 --- a/internal/gitaly/service/repository/apply_gitattributes.go +++ b/internal/gitaly/service/repository/apply_gitattributes.go @@ -8,12 +8,12 @@ import ( "os" "path/filepath" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/txinfo" @@ -55,7 +55,7 @@ func (s *server) applyGitattributes(ctx context.Context, repo *localrepo.Repo, o } defer func() { if err := locker.Close(); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("unlocking gitattributes") + log.FromContext(ctx).WithError(err).Error("unlocking gitattributes") } }() diff --git a/internal/gitaly/service/repository/archive.go b/internal/gitaly/service/repository/archive.go index 7254abd79..8992d0b42 100644 --- a/internal/gitaly/service/repository/archive.go +++ b/internal/gitaly/service/repository/archive.go @@ -9,7 +9,6 @@ import ( "os" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/catfile" @@ -83,7 +82,7 @@ func (s *server) GetArchive(in *gitalypb.GetArchiveRequest, stream gitalypb.Repo return stream.Send(&gitalypb.GetArchiveResponse{Data: p}) }) - ctxlogrus.Extract(ctx).WithField("request_hash", requestHash(in)).Info("request details") + log.FromContext(ctx).WithField("request_hash", requestHash(in)).Info("request details") return s.handleArchive(ctx, archiveParams{ writer: writer, diff --git a/internal/gitaly/service/repository/fetch.go b/internal/gitaly/service/repository/fetch.go index f449f9a4f..143c67006 100644 --- a/internal/gitaly/service/repository/fetch.go +++ b/internal/gitaly/service/repository/fetch.go @@ -4,11 +4,11 @@ import ( "context" "errors" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/git/remoterepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -91,7 +91,7 @@ func (s *server) FetchSourceBranch(ctx context.Context, req *gitalypb.FetchSourc ); err != nil { // Design quirk: if the fetch fails, this RPC returns Result: false, but no error. if errors.As(err, &localrepo.FetchFailedError{}) { - ctxlogrus.Extract(ctx). + log.FromContext(ctx). WithField("oid", sourceOid.String()). WithError(err).Warn("git fetch failed") return &gitalypb.FetchSourceBranchResponse{Result: false}, nil diff --git a/internal/gitaly/service/repository/optimize_test.go b/internal/gitaly/service/repository/optimize_test.go index c05086c23..02006ee52 100644 --- a/internal/gitaly/service/repository/optimize_test.go +++ b/internal/gitaly/service/repository/optimize_test.go @@ -10,7 +10,6 @@ import ( "testing" "time" - "github.com/sirupsen/logrus" "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/git/gittest" @@ -20,6 +19,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/text" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testserver" @@ -259,7 +259,7 @@ type mockHousekeepingManager struct { strategyCh chan housekeeping.OptimizationStrategy } -func (m mockHousekeepingManager) OptimizeRepository(_ context.Context, _ logrus.FieldLogger, _ *localrepo.Repo, opts ...housekeeping.OptimizeRepositoryOption) error { +func (m mockHousekeepingManager) OptimizeRepository(_ context.Context, _ log.Logger, _ *localrepo.Repo, opts ...housekeeping.OptimizeRepositoryOption) error { var cfg housekeeping.OptimizeRepositoryConfig for _, opt := range opts { opt(&cfg) diff --git a/internal/gitaly/service/repository/rename.go b/internal/gitaly/service/repository/rename.go index 51343e681..296d59e5c 100644 --- a/internal/gitaly/service/repository/rename.go +++ b/internal/gitaly/service/repository/rename.go @@ -7,9 +7,9 @@ import ( "os" "path/filepath" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -62,7 +62,7 @@ func (s *server) renameRepository(ctx context.Context, sourceRepo, targetRepo *g } defer func() { if err := sourceLocker.Close(); err != nil { - ctxlogrus.Extract(ctx).Error("closing source repo locker: %w", err) + log.FromContext(ctx).Error("closing source repo locker: %w", err) } }() @@ -72,7 +72,7 @@ func (s *server) renameRepository(ctx context.Context, sourceRepo, targetRepo *g } defer func() { if err := targetLocker.Close(); err != nil { - ctxlogrus.Extract(ctx).Error("closing target repo locker: %w", err) + log.FromContext(ctx).Error("closing target repo locker: %w", err) } }() diff --git a/internal/gitaly/service/repository/replicate.go b/internal/gitaly/service/repository/replicate.go index 233dd9bdf..d7aaac44b 100644 --- a/internal/gitaly/service/repository/replicate.go +++ b/internal/gitaly/service/repository/replicate.go @@ -10,7 +10,6 @@ import ( "path/filepath" "strings" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" "gitlab.com/gitlab-org/gitaly/v16/internal/git" @@ -23,6 +22,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/metadata" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/tempdir" @@ -151,7 +151,7 @@ func (s *server) create(ctx context.Context, in *gitalypb.ReplicateRepositoryReq return fmt.Errorf("error deleting invalid repo: %w", err) } - ctxlogrus.Extract(ctx).WithField("repo_path", repoPath).Warn("removed invalid repository") + log.FromContext(ctx).WithField("repo_path", repoPath).Warn("removed invalid repository") } if err := s.createFromSnapshot(ctx, in.GetSource(), in.GetRepository()); err != nil { diff --git a/internal/gitaly/service/repository/snapshot.go b/internal/gitaly/service/repository/snapshot.go index 4d67fd8e6..1530013f4 100644 --- a/internal/gitaly/service/repository/snapshot.go +++ b/internal/gitaly/service/repository/snapshot.go @@ -7,9 +7,9 @@ import ( "path/filepath" "regexp" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/archive" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "gitlab.com/gitlab-org/gitaly/v16/streamio" @@ -98,7 +98,7 @@ func (s *server) addAlternateFiles(ctx context.Context, repository *gitalypb.Rep altObjDirs, err := git.AlternateObjectDirectories(ctx, storageRoot, repoPath) if err != nil { - ctxlogrus.Extract(ctx).WithField("error", err).Warn("error getting alternate object directories") + log.FromContext(ctx).WithField("error", err).Warn("error getting alternate object directories") return nil } diff --git a/internal/gitaly/service/server/disk_stats.go b/internal/gitaly/service/server/disk_stats.go index f278357a4..2abcf251f 100644 --- a/internal/gitaly/service/server/disk_stats.go +++ b/internal/gitaly/service/server/disk_stats.go @@ -3,7 +3,7 @@ package server import ( "context" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -12,7 +12,7 @@ func (s *server) DiskStatistics(ctx context.Context, _ *gitalypb.DiskStatisticsR for _, shard := range s.storages { shardInfo, err := getStorageStatus(shard) if err != nil { - ctxlogrus.Extract(ctx).WithField("storage", shard).WithError(err).Error("to retrieve shard disk statistics") + log.FromContext(ctx).WithField("storage", shard).WithError(err).Error("to retrieve shard disk statistics") results = append(results, &gitalypb.DiskStatisticsResponse_StorageStatus{StorageName: shard.Name}) continue } diff --git a/internal/gitaly/service/server/info.go b/internal/gitaly/service/server/info.go index 0e3d9fa0f..f1580bc47 100644 --- a/internal/gitaly/service/server/info.go +++ b/internal/gitaly/service/server/info.go @@ -5,10 +5,10 @@ import ( "os" "path/filepath" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/fstype" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/version" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -27,7 +27,7 @@ func (s *server) ServerInfo(ctx context.Context, in *gitalypb.ServerInfoRequest) gitalyMetadata, err := storage.ReadMetadataFile(shard.Path) if err != nil { - ctxlogrus.Extract(ctx).WithField("storage", shard).WithError(err).Error("reading gitaly metadata file") + log.FromContext(ctx).WithField("storage", shard).WithError(err).Error("reading gitaly metadata file") } storageStatuses = append(storageStatuses, &gitalypb.ServerInfoResponse_StorageStatus{ diff --git a/internal/gitaly/service/smarthttp/cache.go b/internal/gitaly/service/smarthttp/cache.go index b5ca72969..37add5bad 100644 --- a/internal/gitaly/service/smarthttp/cache.go +++ b/internal/gitaly/service/smarthttp/cache.go @@ -5,11 +5,11 @@ import ( "io" "sync" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/cache" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -53,7 +53,7 @@ func (c infoRefCache) tryCache(ctx context.Context, in *gitalypb.InfoRefsRequest return missFn(w) } - logger := ctxlogrus.Extract(ctx).WithFields(log.Fields{"service": uploadPackSvc}) + logger := log.FromContext(ctx).WithFields(logrus.Fields{"service": uploadPackSvc}) logger.Debug("Attempting to fetch cached response") countAttempt() diff --git a/internal/gitaly/service/smarthttp/inforefs.go b/internal/gitaly/service/smarthttp/inforefs.go index 97b50bbdc..b384f6142 100644 --- a/internal/gitaly/service/smarthttp/inforefs.go +++ b/internal/gitaly/service/smarthttp/inforefs.go @@ -5,10 +5,10 @@ import ( "fmt" "io" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/pktline" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "gitlab.com/gitlab-org/gitaly/v16/streamio" @@ -54,7 +54,7 @@ func (s *server) InfoRefsReceivePack(in *gitalypb.InfoRefsRequest, stream gitaly } func (s *server) handleInfoRefs(ctx context.Context, service, repoPath string, req *gitalypb.InfoRefsRequest, w io.Writer) error { - ctxlogrus.Extract(ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "service": service, }).Debug("handleInfoRefs") diff --git a/internal/gitaly/service/smarthttp/receive_pack.go b/internal/gitaly/service/smarthttp/receive_pack.go index d440bc8db..561c5ce49 100644 --- a/internal/gitaly/service/smarthttp/receive_pack.go +++ b/internal/gitaly/service/smarthttp/receive_pack.go @@ -3,11 +3,11 @@ package smarthttp import ( "errors" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/voting" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -21,7 +21,7 @@ func (s *server) PostReceivePack(stream gitalypb.SmartHTTPService_PostReceivePac return err } - ctxlogrus.Extract(ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "GlID": req.GlId, "GlRepository": req.GlRepository, "GlUsername": req.GlUsername, diff --git a/internal/gitaly/service/smarthttp/upload_pack.go b/internal/gitaly/service/smarthttp/upload_pack.go index f39a21af2..aaca1417f 100644 --- a/internal/gitaly/service/smarthttp/upload_pack.go +++ b/internal/gitaly/service/smarthttp/upload_pack.go @@ -6,11 +6,11 @@ import ( "fmt" "io" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/stats" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/sidechannel" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -64,7 +64,7 @@ func (s *server) runStatsCollector(ctx context.Context, r io.Reader) (io.Reader, stats, err := stats.ParsePackfileNegotiation(pr) if err != nil { - ctxlogrus.Extract(ctx).WithError(err).Debug("failed parsing packfile negotiation") + log.FromContext(ctx).WithError(err).Debug("failed parsing packfile negotiation") return } stats.UpdateMetrics(s.packfileNegotiationMetrics) @@ -141,6 +141,6 @@ func (s *server) runUploadPack(ctx context.Context, req *gitalypb.PostUploadPack return nil, structerr.NewFailedPrecondition("waiting for upload-pack: %w", err) } - ctxlogrus.Extract(ctx).WithField("request_sha", fmt.Sprintf("%x", h.Sum(nil))).WithField("response_bytes", respBytes).Info("request details") + log.FromContext(ctx).WithField("request_sha", fmt.Sprintf("%x", h.Sum(nil))).WithField("response_bytes", respBytes).Info("request details") return nil, nil } diff --git a/internal/gitaly/service/ssh/receive_pack.go b/internal/gitaly/service/ssh/receive_pack.go index ac8f03d7d..302d1dc0c 100644 --- a/internal/gitaly/service/ssh/receive_pack.go +++ b/internal/gitaly/service/ssh/receive_pack.go @@ -8,12 +8,12 @@ import ( "strings" "sync" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/transaction" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/voting" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -26,7 +26,7 @@ func (s *server) SSHReceivePack(stream gitalypb.SSHService_SSHReceivePackServer) return structerr.NewInternal("%w", err) } - ctxlogrus.Extract(stream.Context()).WithFields(log.Fields{ + log.FromContext(stream.Context()).WithFields(logrus.Fields{ "GlID": req.GlId, "GlRepository": req.GlRepository, "GlUsername": req.GlUsername, @@ -128,7 +128,7 @@ func (s *server) sshReceivePack(stream gitalypb.SSHService_SSHReceivePackServer, if errSend := stream.Send(&gitalypb.SSHReceivePackResponse{ ExitStatus: &gitalypb.ExitStatus{Value: int32(status)}, }); errSend != nil { - ctxlogrus.Extract(ctx).WithError(errSend).Error("send final status code") + log.FromContext(ctx).WithError(errSend).Error("send final status code") } // Detect the case where the user has cancelled the push and log it with a proper diff --git a/internal/gitaly/service/ssh/upload_pack.go b/internal/gitaly/service/ssh/upload_pack.go index c5815536a..f798a71e0 100644 --- a/internal/gitaly/service/ssh/upload_pack.go +++ b/internal/gitaly/service/ssh/upload_pack.go @@ -8,8 +8,7 @@ import ( "strings" "sync" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/command" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/pktline" @@ -17,6 +16,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/sidechannel" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/stream" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -31,7 +31,7 @@ func (s *server) SSHUploadPack(stream gitalypb.SSHService_SSHUploadPackServer) e return structerr.NewInternal("%w", err) } - ctxlogrus.Extract(ctx).WithFields(log.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "GlRepository": req.GetRepository().GetGlRepository(), "GitConfigOptions": req.GitConfigOptions, "GitProtocol": req.GitProtocol, @@ -60,7 +60,7 @@ func (s *server) SSHUploadPack(stream gitalypb.SSHService_SSHUploadPackServer) e if errSend := stream.Send(&gitalypb.SSHUploadPackResponse{ ExitStatus: &gitalypb.ExitStatus{Value: int32(status)}, }); errSend != nil { - ctxlogrus.Extract(ctx).WithError(errSend).Error("send final status code") + log.FromContext(ctx).WithError(errSend).Error("send final status code") } return structerr.NewInternal("%w", err) @@ -115,7 +115,7 @@ func (s *server) sshUploadPack(rpcContext context.Context, req sshUploadPackRequ stats, errIgnore := stats.ParsePackfileNegotiation(pr) negotiation = &stats if errIgnore != nil { - ctxlogrus.Extract(ctx).WithError(errIgnore).Debug("failed parsing packfile negotiation") + log.FromContext(ctx).WithError(errIgnore).Debug("failed parsing packfile negotiation") return } stats.UpdateMetrics(s.packfileNegotiationMetrics) @@ -179,7 +179,7 @@ func (s *server) sshUploadPack(rpcContext context.Context, req sshUploadPackRequ return nil, status, fmt.Errorf("cmd wait: %w, stderr: %q", err, stderrBuilder.String()) } - ctxlogrus.Extract(ctx).WithField("response_bytes", stdoutCounter.N).Info("request details") + log.FromContext(ctx).WithField("response_bytes", stdoutCounter.N).Info("request details") return nil, 0, nil } diff --git a/internal/gitaly/storage/counter/counter.go b/internal/gitaly/storage/counter/counter.go index 6fd0dc694..66a19b054 100644 --- a/internal/gitaly/storage/counter/counter.go +++ b/internal/gitaly/storage/counter/counter.go @@ -10,11 +10,11 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/dontpanic" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage/walk" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // RepositoryCounter provides metrics with a count of repositories present @@ -61,7 +61,7 @@ func (c *RepositoryCounter) Collect(metrics chan<- prometheus.Metric) { func (c *RepositoryCounter) StartCountingRepositories( ctx context.Context, locator storage.Locator, - logger logrus.FieldLogger, + logger log.Logger, ) { dontpanic.Go(logger, func() { c.countRepositories(ctx, locator, logger) @@ -71,7 +71,7 @@ func (c *RepositoryCounter) StartCountingRepositories( func (c *RepositoryCounter) countRepositories( ctx context.Context, locator storage.Locator, - logger logrus.FieldLogger, + logger log.Logger, ) { defer func() { c.suppressMetric.Store(false) diff --git a/internal/gitaly/storage/storagemgr/partition_manager.go b/internal/gitaly/storage/storagemgr/partition_manager.go index 9ff3e2f72..ccf5e368e 100644 --- a/internal/gitaly/storage/storagemgr/partition_manager.go +++ b/internal/gitaly/storage/storagemgr/partition_manager.go @@ -12,13 +12,13 @@ import ( "sync" "github.com/dgraph-io/badger/v4" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" ) @@ -51,7 +51,7 @@ type storageManager struct { // mu synchronizes access to the fields of storageManager. mu sync.Mutex // logger handles all logging for storageManager. - logger logrus.FieldLogger + logger log.Logger // path is the absolute path to the storage's root. path string // repoFactory is a factory type that builds localrepo instances for this storage. @@ -180,7 +180,7 @@ func NewPartitionManager( cmdFactory git.CommandFactory, housekeepingManager housekeeping.Manager, localRepoFactory localrepo.Factory, - logger logrus.FieldLogger, + logger log.Logger, ) (*PartitionManager, error) { storages := make(map[string]*storageManager, len(configuredStorages)) for _, storage := range configuredStorages { diff --git a/internal/gitaly/storage/storagemgr/transaction_manager.go b/internal/gitaly/storage/storagemgr/transaction_manager.go index 6e480b692..af0174b1f 100644 --- a/internal/gitaly/storage/storagemgr/transaction_manager.go +++ b/internal/gitaly/storage/storagemgr/transaction_manager.go @@ -18,13 +18,13 @@ import ( "sync" "github.com/dgraph-io/badger/v4" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git" "gitlab.com/gitlab-org/gitaly/v16/internal/git/housekeeping" "gitlab.com/gitlab-org/gitaly/v16/internal/git/localrepo" "gitlab.com/gitlab-org/gitaly/v16/internal/git/updateref" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/repoutil" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/safe" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -263,7 +263,7 @@ func (mgr *TransactionManager) Begin(ctx context.Context, opts TransactionOption defer func() { if returnedErr != nil { if err := txn.finish(); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Error("failed finishing unsuccessful transaction begin") + log.FromContext(ctx).WithError(err).Error("failed finishing unsuccessful transaction begin") } } }() @@ -1363,7 +1363,7 @@ func (mgr *TransactionManager) prepareReferenceTransaction(ctx context.Context, // We ask housekeeping to cleanup stale reference locks. We don't add a grace period, because // transaction manager is the only process which writes into the repository, so it is safe // to delete these locks. - if err := mgr.housekeepingManager.CleanStaleData(ctx, ctxlogrus.Extract(ctx), mgr.repository, housekeeping.OnlyStaleReferenceLockCleanup(0)); err != nil { + if err := mgr.housekeepingManager.CleanStaleData(ctx, log.FromContext(ctx), mgr.repository, housekeeping.OnlyStaleReferenceLockCleanup(0)); err != nil { return nil, fmt.Errorf("running reflock cleanup: %w", err) } diff --git a/internal/gitaly/transaction/manager.go b/internal/gitaly/transaction/manager.go index 6ce6e05e2..0ba4312aa 100644 --- a/internal/gitaly/transaction/manager.go +++ b/internal/gitaly/transaction/manager.go @@ -6,12 +6,12 @@ import ( "fmt" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/backchannel" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/txinfo" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/voting" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -175,6 +175,6 @@ func (m *PoolManager) Stop(ctx context.Context, tx txinfo.Transaction) error { return nil } -func (m *PoolManager) log(ctx context.Context) logrus.FieldLogger { - return ctxlogrus.Extract(ctx).WithField("component", "transaction.PoolManager") +func (m *PoolManager) log(ctx context.Context) log.Logger { + return log.FromContext(ctx).WithField("component", "transaction.PoolManager") } diff --git a/internal/gitlab/client/gitlabnet.go b/internal/gitlab/client/gitlabnet.go index 127797d94..bde1a6f8f 100644 --- a/internal/gitlab/client/gitlabnet.go +++ b/internal/gitlab/client/gitlabnet.go @@ -12,6 +12,7 @@ import ( "github.com/golang-jwt/jwt/v5" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) const ( @@ -29,7 +30,7 @@ type ErrorResponse struct { //nolint:revive // This is unintentionally missing documentation. type GitlabNetClient struct { - logger logrus.FieldLogger + logger log.Logger httpClient *HTTPClient user string password string @@ -52,7 +53,7 @@ func (e *APIError) Error() string { //nolint:revive // This is unintentionally missing documentation. func NewGitlabNetClient( - logger logrus.FieldLogger, + logger log.Logger, user, password, secret string, diff --git a/internal/gitlab/http_client.go b/internal/gitlab/http_client.go index c00efca85..99bbb88f8 100644 --- a/internal/gitlab/http_client.go +++ b/internal/gitlab/http_client.go @@ -13,10 +13,10 @@ import ( "strings" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" gitalycfgprom "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config/prometheus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitlab/client" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/prometheus/metrics" "gitlab.com/gitlab-org/gitaly/v16/internal/version" ) @@ -27,12 +27,12 @@ var glIDRegex = regexp.MustCompile(`\A[0-9]+\z`) type HTTPClient struct { *client.GitlabNetClient latencyMetric metrics.HistogramVec - logger logrus.FieldLogger + logger log.Logger } // NewHTTPClient creates an HTTP client to talk to the Rails internal API func NewHTTPClient( - logger logrus.FieldLogger, + logger log.Logger, gitlabCfg config.Gitlab, tlsCfg config.TLS, promCfg gitalycfgprom.Config, diff --git a/internal/grpc/backchannel/backchannel.go b/internal/grpc/backchannel/backchannel.go index 627a492d2..f5cbe05bf 100644 --- a/internal/grpc/backchannel/backchannel.go +++ b/internal/grpc/backchannel/backchannel.go @@ -33,14 +33,14 @@ import ( "sync" "github.com/hashicorp/yamux" - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // magicBytes are sent by the client to server to identify as a multiplexing aware client. var magicBytes = []byte("backchannel") // muxConfig returns a new config to use with the multiplexing session. -func muxConfig(logger logrus.FieldLogger, cfg Configuration) *yamux.Config { +func muxConfig(logger log.Logger, cfg Configuration) *yamux.Config { yamuxCfg := yamux.DefaultConfig() yamuxCfg.Logger = logger yamuxCfg.LogOutput = nil diff --git a/internal/grpc/backchannel/backchannel_example_test.go b/internal/grpc/backchannel/backchannel_example_test.go index 0bc341e6e..23d2adb68 100644 --- a/internal/grpc/backchannel/backchannel_example_test.go +++ b/internal/grpc/backchannel/backchannel_example_test.go @@ -8,6 +8,7 @@ import ( "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/backchannel" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/listenmux" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" @@ -106,7 +107,7 @@ func Example() { // Gitaly responding to a non-multiplexed client } -func invokeWithMuxedClient(logger *logrus.Entry, address string) error { +func invokeWithMuxedClient(logger log.Logger, address string) error { // clientHandshaker's ClientHandshake gets called on each established connection. The Server returned by the // ServerFactory is started on Praefect's end of the connection, which Gitaly can call. clientHandshaker := backchannel.NewClientHandshaker(logger, func() backchannel.Server { diff --git a/internal/grpc/backchannel/client.go b/internal/grpc/backchannel/client.go index f6f3d0663..d3c5c7fc2 100644 --- a/internal/grpc/backchannel/client.go +++ b/internal/grpc/backchannel/client.go @@ -7,7 +7,7 @@ import ( "time" "github.com/hashicorp/yamux" - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc/credentials" ) @@ -50,14 +50,14 @@ func DefaultConfiguration() Configuration { // ClientHandshaker implements the client side handshake of the multiplexed connection. type ClientHandshaker struct { - logger logrus.FieldLogger + logger log.Logger serverFactory ServerFactory cfg Configuration } // NewClientHandshaker returns a new client side implementation of the backchannel. The provided // logger is used to log multiplexing errors. -func NewClientHandshaker(logger logrus.FieldLogger, serverFactory ServerFactory, cfg Configuration) ClientHandshaker { +func NewClientHandshaker(logger log.Logger, serverFactory ServerFactory, cfg Configuration) ClientHandshaker { return ClientHandshaker{logger: logger, serverFactory: serverFactory, cfg: cfg} } @@ -71,7 +71,7 @@ func (ch ClientHandshaker) ClientHandshake(tc credentials.TransportCredentials) type clientHandshake struct { credentials.TransportCredentials serverFactory ServerFactory - logger logrus.FieldLogger + logger log.Logger cfg Configuration } diff --git a/internal/grpc/backchannel/server.go b/internal/grpc/backchannel/server.go index 4e815e07f..4eeb99701 100644 --- a/internal/grpc/backchannel/server.go +++ b/internal/grpc/backchannel/server.go @@ -8,7 +8,7 @@ import ( "net" "github.com/hashicorp/yamux" - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" @@ -73,7 +73,7 @@ func withSessionInfo(authInfo credentials.AuthInfo, id ID, muxSession *yamux.Ses // ServerHandshaker implements the server side handshake of the multiplexed connection. type ServerHandshaker struct { registry *Registry - logger logrus.FieldLogger + logger log.Logger dialOpts []grpc.DialOption } @@ -85,7 +85,7 @@ func (s *ServerHandshaker) Magic() string { return string(magicBytes) } // are handshaked prior to initializing the multiplexing session. The Registry is used to store the backchannel connections. // DialOptions can be used to set custom dial options for the backchannel connections. They must not contain a dialer or // transport credentials as those set by the handshaker. -func NewServerHandshaker(logger logrus.FieldLogger, reg *Registry, dialOpts []grpc.DialOption) *ServerHandshaker { +func NewServerHandshaker(logger log.Logger, reg *Registry, dialOpts []grpc.DialOption) *ServerHandshaker { return &ServerHandshaker{registry: reg, logger: logger, dialOpts: dialOpts} } diff --git a/internal/grpc/dnsresolver/builder.go b/internal/grpc/dnsresolver/builder.go index 810a68ab8..69a7d2346 100644 --- a/internal/grpc/dnsresolver/builder.go +++ b/internal/grpc/dnsresolver/builder.go @@ -5,8 +5,8 @@ import ( "strings" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/backoff" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "google.golang.org/grpc/resolver" ) @@ -31,7 +31,7 @@ type BuilderConfig struct { // LookupTimeout determines the timeout of underlying DNS query. LookupTimeout time.Duration // Logger defines a logger for logging internal activities - Logger logrus.FieldLogger + Logger log.Logger // Backoff defines the backoff strategy when the resolver fails to resolve or pushes new // state to client connection Backoff backoff.Strategy diff --git a/internal/grpc/dnsresolver/resolver.go b/internal/grpc/dnsresolver/resolver.go index 01faa1f81..28396582b 100644 --- a/internal/grpc/dnsresolver/resolver.go +++ b/internal/grpc/dnsresolver/resolver.go @@ -6,14 +6,14 @@ import ( "sync" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/backoff" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "google.golang.org/grpc/resolver" ) type dnsResolver struct { - logger *logrus.Entry + logger log.Logger retry backoff.Strategy ctx context.Context diff --git a/internal/grpc/middleware/cache/cache.go b/internal/grpc/middleware/cache/cache.go index ad06647a7..b9d5474ba 100644 --- a/internal/grpc/middleware/cache/cache.go +++ b/internal/grpc/middleware/cache/cache.go @@ -6,14 +6,14 @@ import ( "strings" "sync" - "github.com/sirupsen/logrus" diskcache "gitlab.com/gitlab-org/gitaly/v16/internal/cache" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc" "google.golang.org/protobuf/proto" ) -func methodErrLogger(logger logrus.FieldLogger, method string) func(error) { +func methodErrLogger(logger log.Logger, method string) func(error) { return func(err error) { countMethodErr(method) logger.WithField("full_method_name", method).Error(err) @@ -42,7 +42,7 @@ func shouldInvalidate(mi protoregistry.MethodInfo) bool { // StreamInvalidator will invalidate any mutating RPC that targets a // repository in a gRPC stream based RPC -func StreamInvalidator(ci diskcache.Invalidator, reg *protoregistry.Registry, logger logrus.FieldLogger) grpc.StreamServerInterceptor { +func StreamInvalidator(ci diskcache.Invalidator, reg *protoregistry.Registry, logger log.Logger) grpc.StreamServerInterceptor { return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { if shouldIgnore(reg, info.FullMethod) { return handler(srv, ss) @@ -69,7 +69,7 @@ func StreamInvalidator(ci diskcache.Invalidator, reg *protoregistry.Registry, lo // UnaryInvalidator will invalidate any mutating RPC that targets a // repository in a gRPC unary RPC -func UnaryInvalidator(ci diskcache.Invalidator, reg *protoregistry.Registry, logger logrus.FieldLogger) grpc.UnaryServerInterceptor { +func UnaryInvalidator(ci diskcache.Invalidator, reg *protoregistry.Registry, logger log.Logger) grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { if shouldIgnore(reg, info.FullMethod) { return handler(ctx, req) diff --git a/internal/grpc/middleware/customfieldshandler/customfields_handler_test.go b/internal/grpc/middleware/customfieldshandler/customfields_handler_test.go index 60adabe47..f1a02b859 100644 --- a/internal/grpc/middleware/customfieldshandler/customfields_handler_test.go +++ b/internal/grpc/middleware/customfieldshandler/customfields_handler_test.go @@ -25,10 +25,10 @@ import ( "google.golang.org/grpc/test/bufconn" ) -func createNewServer(t *testing.T, cfg config.Cfg, logger *logrus.Logger) *grpc.Server { +func createNewServer(t *testing.T, cfg config.Cfg, logger log.Logger) *grpc.Server { t.Helper() - logrusEntry := logrus.NewEntry(logger).WithField("test", t.Name()) + logrusEntry := logger.WithField("test", t.Name()) opts := []grpc.ServerOption{ grpc.ChainStreamInterceptor( diff --git a/internal/grpc/middleware/panichandler/panic_handler.go b/internal/grpc/middleware/panichandler/panic_handler.go index 089dfcc79..de5e56249 100644 --- a/internal/grpc/middleware/panichandler/panic_handler.go +++ b/internal/grpc/middleware/panichandler/panic_handler.go @@ -4,6 +4,7 @@ import ( "context" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -17,7 +18,7 @@ func toPanicError(grpcMethodName string, r interface{}) error { } // UnaryPanicHandler creates a new unary server interceptor that handles panics. -func UnaryPanicHandler(logger logrus.FieldLogger) grpc.UnaryServerInterceptor { +func UnaryPanicHandler(logger log.Logger) 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) @@ -28,7 +29,7 @@ func UnaryPanicHandler(logger logrus.FieldLogger) grpc.UnaryServerInterceptor { } // StreamPanicHandler creates a new stream server interceptor that handles panics. -func StreamPanicHandler(logger logrus.FieldLogger) grpc.StreamServerInterceptor { +func StreamPanicHandler(logger log.Logger) 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) @@ -45,7 +46,7 @@ func InstallPanicHandler(handler PanicHandler) { additionalHandlers = append(additionalHandlers, handler) } -func handleCrash(logger logrus.FieldLogger, grpcMethodName string, handler PanicHandler) { +func handleCrash(logger log.Logger, grpcMethodName string, handler PanicHandler) { if r := recover(); r != nil { logger.WithFields(logrus.Fields{ "error": r, diff --git a/internal/grpc/sidechannel/conn.go b/internal/grpc/sidechannel/conn.go index e76496ea9..7e8830bd8 100644 --- a/internal/grpc/sidechannel/conn.go +++ b/internal/grpc/sidechannel/conn.go @@ -6,9 +6,9 @@ import ( "io" "net" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/git/pktline" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/streamio" "google.golang.org/grpc" ) @@ -186,7 +186,7 @@ func (cc *ClientConn) CloseWrite() error { // Dial configures the dialer to establish a Gitaly backchannel connection instead of a regular gRPC connection. It // also injects sr as a sidechannel registry, so that Gitaly can establish sidechannels back to the client. -func Dial(ctx context.Context, registry *Registry, logger logrus.FieldLogger, rawAddress string, connOpts []grpc.DialOption) (*grpc.ClientConn, error) { +func Dial(ctx context.Context, registry *Registry, logger log.Logger, rawAddress string, connOpts []grpc.DialOption) (*grpc.ClientConn, error) { clientHandshaker := NewClientHandshaker(logger, registry) return client.Dial(ctx, rawAddress, client.WithGrpcOptions(connOpts), client.WithHandshaker(clientHandshaker)) } diff --git a/internal/grpc/sidechannel/proxy.go b/internal/grpc/sidechannel/proxy.go index 68632a334..f8ca329ff 100644 --- a/internal/grpc/sidechannel/proxy.go +++ b/internal/grpc/sidechannel/proxy.go @@ -5,14 +5,14 @@ import ( "fmt" "io" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/metadata" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc" grpcMetadata "google.golang.org/grpc/metadata" ) // NewUnaryProxy creates a gRPC client middleware that proxies sidechannels. -func NewUnaryProxy(registry *Registry, log logrus.FieldLogger) grpc.UnaryClientInterceptor { +func NewUnaryProxy(registry *Registry, log log.Logger) grpc.UnaryClientInterceptor { return func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) (err error) { if !hasSidechannelMetadata(ctx) { return invoker(ctx, method, req, reply, cc, opts...) @@ -37,7 +37,7 @@ func NewUnaryProxy(registry *Registry, log logrus.FieldLogger) grpc.UnaryClientI } // NewStreamProxy creates a gRPC client middleware that proxies sidechannels. -func NewStreamProxy(registry *Registry, log logrus.FieldLogger) grpc.StreamClientInterceptor { +func NewStreamProxy(registry *Registry, log log.Logger) grpc.StreamClientInterceptor { return func(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { if !hasSidechannelMetadata(ctx) { return streamer(ctx, desc, cc, method, opts...) @@ -63,7 +63,7 @@ func NewStreamProxy(registry *Registry, log logrus.FieldLogger) grpc.StreamClien type streamWrapper struct { grpc.ClientStream waiter *Waiter - log logrus.FieldLogger + log log.Logger } func (sw *streamWrapper) RecvMsg(m interface{}) (err error) { diff --git a/internal/grpc/sidechannel/sidechannel.go b/internal/grpc/sidechannel/sidechannel.go index aff38728c..dee78044f 100644 --- a/internal/grpc/sidechannel/sidechannel.go +++ b/internal/grpc/sidechannel/sidechannel.go @@ -9,10 +9,10 @@ import ( "strconv" "time" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/backchannel" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/listenmux" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/tracing" "google.golang.org/grpc" "google.golang.org/grpc/credentials" @@ -136,7 +136,7 @@ func NewServerHandshaker(registry *Registry) *ServerHandshaker { // NewClientHandshaker is used to enable sidechannel support on outbound // gRPC connections. -func NewClientHandshaker(logger logrus.FieldLogger, registry *Registry) client.Handshaker { +func NewClientHandshaker(logger log.Logger, registry *Registry) client.Handshaker { cfg := backchannel.DefaultConfiguration() // If a client hangs up while the server is writing data to it then the // server will block for 5 minutes by default before erroring out. This diff --git a/internal/helper/perm/fix_permissions.go b/internal/helper/perm/fix_permissions.go index 330ee84ee..d80abd4ca 100644 --- a/internal/helper/perm/fix_permissions.go +++ b/internal/helper/perm/fix_permissions.go @@ -5,8 +5,8 @@ import ( "os" "path/filepath" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // FixDirectoryPermissions does a recursive directory walk to look for @@ -20,7 +20,7 @@ func FixDirectoryPermissions(ctx context.Context, path string) error { func fixDirectoryPermissions(ctx context.Context, path string, retriedPaths map[string]struct{}) error { return filepath.Walk(path, func(path string, info os.FileInfo, errIncoming error) error { if info == nil { - ctxlogrus.Extract(ctx).WithFields(logrus.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "path": path, }).WithError(errIncoming).Error("nil FileInfo in perm.fixDirectoryPermissions") diff --git a/internal/limiter/adaptive_calculator.go b/internal/limiter/adaptive_calculator.go index 94e9dc9a6..bb7088527 100644 --- a/internal/limiter/adaptive_calculator.go +++ b/internal/limiter/adaptive_calculator.go @@ -9,8 +9,8 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) const ( @@ -52,7 +52,7 @@ type ResourceWatcher interface { type AdaptiveCalculator struct { sync.Mutex - logger logrus.FieldLogger + logger log.Logger // started tells whether the calculator already starts. One calculator is allowed to be used once. started bool // calibration is the time duration until the next calibration event. @@ -79,7 +79,7 @@ type AdaptiveCalculator struct { // NewAdaptiveCalculator constructs a AdaptiveCalculator object. It's the responsibility of the caller to validate // the correctness of input AdaptiveLimiter and ResourceWatcher. -func NewAdaptiveCalculator(calibration time.Duration, logger logrus.FieldLogger, limits []AdaptiveLimiter, watchers []ResourceWatcher) *AdaptiveCalculator { +func NewAdaptiveCalculator(calibration time.Duration, logger log.Logger, limits []AdaptiveLimiter, watchers []ResourceWatcher) *AdaptiveCalculator { watcherTimeouts := map[ResourceWatcher]*atomic.Int32{} for _, watcher := range watchers { watcherTimeouts[watcher] = &atomic.Int32{} diff --git a/internal/log/configure.go b/internal/log/configure.go new file mode 100644 index 000000000..691ffa7b3 --- /dev/null +++ b/internal/log/configure.go @@ -0,0 +1,135 @@ +package log //nolint:gitaly-linters // Importing testhelper creates a cyclic dependency. + +import ( + "fmt" + "io" + "os" + + grpcmwlogrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" + "github.com/sirupsen/logrus" +) + +const ( + // GitalyLogDirEnvKey defines the environment variable used to specify the Gitaly log directory + GitalyLogDirEnvKey = "GITALY_LOG_DIR" +) + +// SkipReplacingGlobalLoggers will cause `Configure()` to skip replacing global loggers. This is mostly a hack: command +// line applications are expected to call `log.Configure()` in their subcommand actions, and that should indeed always +// replace global loggers, as well. But when running tests, we invoke the subcommand actions multiple times, which is +// thus re-configuring the logger repeatedly. Because global logger are per definition a global shared resource, the +// consequence is that we might end up replacing the global loggers while tests are using them, and this race rightfully +// gets detected by Go's race detector. +// +// This variable should thus only be set in the testhelper's setup routines such that we configure the global logger a +// single time for all of our tests, only. +var SkipReplacingGlobalLoggers bool + +// Config contains logging configuration values +type Config struct { + Dir string `toml:"dir,omitempty" json:"dir"` + Format string `toml:"format,omitempty" json:"format"` + Level string `toml:"level,omitempty" json:"level"` +} + +// Configure configures the default and gRPC loggers. The gRPC logger's log level will be mapped in order to decrease +// its default verbosity. Returns the configured default logger that would also be returned by `Default()`. +func Configure(out io.Writer, format string, level string, hooks ...logrus.Hook) (Logger, error) { + l := logrus.New() //nolint:forbidigo + + if err := configure(l, out, format, level, hooks...); err != nil { + return nil, fmt.Errorf("configuring logger: %w", err) + } + + if !SkipReplacingGlobalLoggers { + // Replace the logrus standar logger. While we shouldn't ever be using it in our own codebase, there + // will very likely be cases where dependencies use it. + // + //nolint:forbidigo + if err := configure(logrus.StandardLogger(), out, format, level, hooks...); err != nil { + return nil, fmt.Errorf("configuring global logrus logger: %w", err) + } + + // We replace the gRPC logger with a custom one because the default one is too chatty. + grpcLogger := logrus.New() //nolint:forbidigo + + if err := configure(grpcLogger, out, format, mapGRPCLogLevel(level), hooks...); err != nil { + return nil, fmt.Errorf("configuring global gRPC logger: %w", err) + } + + grpcmwlogrus.ReplaceGrpcLogger(grpcLogger.WithField("pid", os.Getpid())) + } + + return FromLogrusEntry(l.WithField("pid", os.Getpid())), nil +} + +// ConfigureCommand configures the logging infrastructure such that it can be used with simple one-off commands. This +// configuration is supposed to be opinionated and ensures that all one-off commands behave in a sane way: +// +// - The server configuration does not influence logs generated by the command. This is done intentionally as you don't +// want to force administrators to adapt the server configuration to influence normal commands. +// +// - The output always goes to stderr such that output that is supposed to be consumed can be separated from log +// messages. +// +// - The output uses text format as it is supposed to be human-readable, not machine-readable. +// +// - The default log level is set to "error" such that we don't generate tons of log messages that are ultimately +// uninteresting. +// +// Servers and commands with special requirements should instead use `Configure()`. +func ConfigureCommand() Logger { + logger, err := Configure(os.Stderr, "text", "error") + if err != nil { + // The configuration can't really return an error as we invoke it with known-good parameters. + panic(err) + } + + return logger +} + +func configure(logger *logrus.Logger, out io.Writer, format, level string, hooks ...logrus.Hook) error { + var formatter logrus.Formatter + switch format { + case "json": + formatter = UTCJsonFormatter() + case "", "text": + formatter = UTCTextFormatter() + default: + return fmt.Errorf("invalid logger format %q", format) + } + + logrusLevel, err := logrus.ParseLevel(level) + if err != nil { + logrusLevel = logrus.InfoLevel + } + + logger.Out = out + logger.SetLevel(logrusLevel) + logger.Formatter = formatter + for _, hook := range hooks { + logger.Hooks.Add(hook) + } + + return nil +} + +func mapGRPCLogLevel(level string) string { + // Honor grpc-go's debug settings: https://github.com/grpc/grpc-go#how-to-turn-on-logging + switch os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL") { + case "ERROR", "error": + return "error" + case "WARNING", "warning": + return "warning" + case "INFO", "info": + return "info" + } + + // grpc-go is too verbose at level 'info'. So when config.toml requests + // level info, we tell grpc-go to log at 'warn' instead. + if level == "info" { + return "warning" + } + + return level +} diff --git a/internal/log/logger_test.go b/internal/log/configure_test.go index db2f0fe2e..db2f0fe2e 100644 --- a/internal/log/logger_test.go +++ b/internal/log/configure_test.go diff --git a/internal/log/customfields.go b/internal/log/customfields.go index 64bb59566..38874e15c 100644 --- a/internal/log/customfields.go +++ b/internal/log/customfields.go @@ -1,4 +1,4 @@ -package log //nolint:gitaly-linters // Importing testhelper creates a cyclic dependency. +package log import ( "context" diff --git a/internal/log/formatter.go b/internal/log/formatter.go new file mode 100644 index 000000000..bb45cf601 --- /dev/null +++ b/internal/log/formatter.go @@ -0,0 +1,31 @@ +package log + +import "github.com/sirupsen/logrus" + +const ( + // LogTimestampFormat defines the timestamp format in log files + LogTimestampFormat = "2006-01-02T15:04:05.000" + // LogTimestampFormatUTC defines the utc timestamp format in log files + LogTimestampFormatUTC = "2006-01-02T15:04:05.000Z" +) + +type utcFormatter struct { + logrus.Formatter +} + +func (u utcFormatter) Format(e *logrus.Entry) ([]byte, error) { + e.Time = e.Time.UTC() + return u.Formatter.Format(e) +} + +// UTCJsonFormatter returns a Formatter that formats a logrus Entry's as json and converts the time +// field into UTC +func UTCJsonFormatter() logrus.Formatter { + return &utcFormatter{Formatter: &logrus.JSONFormatter{TimestampFormat: LogTimestampFormatUTC}} +} + +// UTCTextFormatter returns a Formatter that formats a logrus Entry's as text and converts the time +// field into UTC +func UTCTextFormatter() logrus.Formatter { + return &utcFormatter{Formatter: &logrus.TextFormatter{TimestampFormat: LogTimestampFormatUTC}} +} diff --git a/internal/log/logger.go b/internal/log/logger.go index d7a60946d..49411c7a7 100644 --- a/internal/log/logger.go +++ b/internal/log/logger.go @@ -1,160 +1,42 @@ package log import ( - "fmt" - "io" - "os" + "context" - grpcmwlogrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" + "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" ) -const ( - // GitalyLogDirEnvKey defines the environment variable used to specify the Gitaly log directory - GitalyLogDirEnvKey = "GITALY_LOG_DIR" - // LogTimestampFormat defines the timestamp format in log files - LogTimestampFormat = "2006-01-02T15:04:05.000" - // LogTimestampFormatUTC defines the utc timestamp format in log files - LogTimestampFormatUTC = "2006-01-02T15:04:05.000Z" -) - -type utcFormatter struct { - logrus.Formatter -} - -func (u utcFormatter) Format(e *logrus.Entry) ([]byte, error) { - e.Time = e.Time.UTC() - return u.Formatter.Format(e) -} - -// UTCJsonFormatter returns a Formatter that formats a logrus Entry's as json and converts the time -// field into UTC -func UTCJsonFormatter() logrus.Formatter { - return &utcFormatter{Formatter: &logrus.JSONFormatter{TimestampFormat: LogTimestampFormatUTC}} -} - -// UTCTextFormatter returns a Formatter that formats a logrus Entry's as text and converts the time -// field into UTC -func UTCTextFormatter() logrus.Formatter { - return &utcFormatter{Formatter: &logrus.TextFormatter{TimestampFormat: LogTimestampFormatUTC}} +// Logger is the logging type used by Gitaly. +type Logger interface { + logrus.FieldLogger } -// SkipReplacingGlobalLoggers will cause `Configure()` to skip replacing global loggers. This is mostly a hack: command -// line applications are expected to call `log.Configure()` in their subcommand actions, and that should indeed always -// replace global loggers, as well. But when running tests, we invoke the subcommand actions multiple times, which is -// thus re-configuring the logger repeatedly. Because global logger are per definition a global shared resource, the -// consequence is that we might end up replacing the global loggers while tests are using them, and this race rightfully -// gets detected by Go's race detector. -// -// This variable should thus only be set in the testhelper's setup routines such that we configure the global logger a -// single time for all of our tests, only. -var SkipReplacingGlobalLoggers bool - -// Config contains logging configuration values -type Config struct { - Dir string `toml:"dir,omitempty" json:"dir"` - Format string `toml:"format,omitempty" json:"format"` - Level string `toml:"level,omitempty" json:"level"` +// LogrusLogger is an implementation of the Logger interface that is implemented via a `logrus.FieldLogger`. +type LogrusLogger struct { + *logrus.Entry } -// Configure configures the default and gRPC loggers. The gRPC logger's log level will be mapped in order to decrease -// its default verbosity. Returns the configured default logger that would also be returned by `Default()`. -func Configure(out io.Writer, format string, level string, hooks ...logrus.Hook) (logrus.FieldLogger, error) { - logger := logrus.New() //nolint:forbidigo - - if err := configure(logger, out, format, level, hooks...); err != nil { - return nil, fmt.Errorf("configuring logger: %w", err) - } - - if !SkipReplacingGlobalLoggers { - // Replace the logrus standar logger. While we shouldn't ever be using it in our own codebase, there - // will very likely be cases where dependencies use it. - // - //nolint:forbidigo - if err := configure(logrus.StandardLogger(), out, format, level, hooks...); err != nil { - return nil, fmt.Errorf("configuring global logrus logger: %w", err) - } - - // We replace the gRPC logger with a custom one because the default one is too chatty. - grpcLogger := logrus.New() //nolint:forbidigo - - if err := configure(grpcLogger, out, format, mapGRPCLogLevel(level), hooks...); err != nil { - return nil, fmt.Errorf("configuring global gRPC logger: %w", err) - } - - grpcmwlogrus.ReplaceGrpcLogger(grpcLogger.WithField("pid", os.Getpid())) - } - - return logger.WithField("pid", os.Getpid()), nil +// FromLogrusEntry constructs a new Gitaly-specific logger from a `logrus.Logger`. +func FromLogrusEntry(entry *logrus.Entry) LogrusLogger { + return LogrusLogger{Entry: entry} } -// ConfigureCommand configures the logging infrastructure such that it can be used with simple one-off commands. This -// configuration is supposed to be opinionated and ensures that all one-off commands behave in a sane way: -// -// - The server configuration does not influence logs generated by the command. This is done intentionally as you don't -// want to force administrators to adapt the server configuration to influence normal commands. -// -// - The output always goes to stderr such that output that is supposed to be consumed can be separated from log -// messages. -// -// - The output uses text format as it is supposed to be human-readable, not machine-readable. -// -// - The default log level is set to "error" such that we don't generate tons of log messages that are ultimately -// uninteresting. -// -// Servers and commands with special requirements should instead use `Configure()`. -func ConfigureCommand() logrus.FieldLogger { - logger, err := Configure(os.Stderr, "text", "error") - if err != nil { - // The configuration can't really return an error as we invoke it with known-good parameters. - panic(err) - } - - return logger +// ToContext injects the logger into the given context so that it can be retrieved via `FromContext()`. +func (l LogrusLogger) ToContext(ctx context.Context) context.Context { + return ctxlogrus.ToContext(ctx, l.Entry) } -func configure(logger *logrus.Logger, out io.Writer, format, level string, hooks ...logrus.Hook) error { - var formatter logrus.Formatter - switch format { - case "json": - formatter = UTCJsonFormatter() - case "", "text": - formatter = UTCTextFormatter() - default: - return fmt.Errorf("invalid logger format %q", format) - } - - logrusLevel, err := logrus.ParseLevel(level) - if err != nil { - logrusLevel = logrus.InfoLevel +// FromContext extracts the logger from the context. If no logger has been injected then this will return a discarding +// logger. +func FromContext(ctx context.Context) LogrusLogger { + return LogrusLogger{ + Entry: ctxlogrus.Extract(ctx), } - - logger.Out = out - logger.SetLevel(logrusLevel) - logger.Formatter = formatter - for _, hook := range hooks { - logger.Hooks.Add(hook) - } - - return nil } -func mapGRPCLogLevel(level string) string { - // Honor grpc-go's debug settings: https://github.com/grpc/grpc-go#how-to-turn-on-logging - switch os.Getenv("GRPC_GO_LOG_SEVERITY_LEVEL") { - case "ERROR", "error": - return "error" - case "WARNING", "warning": - return "warning" - case "INFO", "info": - return "info" - } - - // grpc-go is too verbose at level 'info'. So when config.toml requests - // level info, we tell grpc-go to log at 'warn' instead. - if level == "info" { - return "warning" - } - - return level +// AddFields adds the given log fields to the context so that it will be used by any context logger extracted via +// `FromContext()`. +func AddFields(ctx context.Context, fields logrus.Fields) { + ctxlogrus.AddFields(ctx, fields) } diff --git a/internal/log/middleware.go b/internal/log/middleware.go index c258d5c83..cab888e87 100644 --- a/internal/log/middleware.go +++ b/internal/log/middleware.go @@ -6,7 +6,6 @@ import ( grpcmwlogging "github.com/grpc-ecosystem/go-grpc-middleware/logging" grpcmwlogrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/env" "google.golang.org/grpc" @@ -81,7 +80,7 @@ func MessageProducer(mp grpcmwlogrus.MessageProducer, fieldsProducers ...FieldsP } type messageProducerHolder struct { - logger *logrus.Entry + logger LogrusLogger actual grpcmwlogrus.MessageProducer format string level logrus.Level @@ -113,7 +112,7 @@ func PropagationMessageProducer(actual grpcmwlogrus.MessageProducer) grpcmwlogru return } *mpp = messageProducerHolder{ - logger: ctxlogrus.Extract(ctx), + logger: FromContext(ctx), actual: actual, format: format, level: level, @@ -170,7 +169,7 @@ func (lh PerRPCLogHandler) HandleRPC(ctx context.Context, rs stats.RPCStats) { // a logger we need to set logger manually into the context. // It's needed because github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus.DefaultMessageProducer // extracts logger from the context and use it to write the logs. - ctx = ctxlogrus.ToContext(ctx, mpp.logger) + ctx = mpp.logger.ToContext(ctx) mpp.actual(ctx, mpp.format, mpp.level, mpp.code, mpp.err, mpp.fields) return } @@ -191,7 +190,7 @@ func UnaryLogDataCatcherServerInterceptor() grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { mpp := messageProducerPropagationFrom(ctx) if mpp != nil { - mpp.fields = ctxlogrus.Extract(ctx).Data + mpp.fields = FromContext(ctx).Entry.Data } return handler(ctx, req) } @@ -204,7 +203,7 @@ func StreamLogDataCatcherServerInterceptor() grpc.StreamServerInterceptor { ctx := ss.Context() mpp := messageProducerPropagationFrom(ctx) if mpp != nil { - mpp.fields = ctxlogrus.Extract(ctx).Data + mpp.fields = FromContext(ctx).Entry.Data } return handler(srv, ss) } diff --git a/internal/praefect/coordinator.go b/internal/praefect/coordinator.go index 58c30c469..4f1583ede 100644 --- a/internal/praefect/coordinator.go +++ b/internal/praefect/coordinator.go @@ -7,7 +7,6 @@ import ( "sync" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" @@ -17,6 +16,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/proxy" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/metrics" @@ -252,7 +252,7 @@ func (c *Coordinator) Collect(metrics chan<- prometheus.Metric) { } func (c *Coordinator) directRepositoryScopedMessage(ctx context.Context, call grpcCall) (*proxy.StreamParameters, error) { - ctxlogrus.AddFields(ctx, logrus.Fields{ + log.AddFields(ctx, logrus.Fields{ "virtual_storage": call.targetRepo.StorageName, "relative_path": call.targetRepo.RelativePath, }) @@ -491,14 +491,14 @@ func (c *Coordinator) mutatorStreamParameters(ctx context.Context, call grpcCall defer nodeErrors.Unlock() nodeErrors.errByNode[secondary.Storage] = err - ctxlogrus.Extract(ctx).WithError(err). + log.FromContext(ctx).WithError(err). Error("proxying to secondary failed") // Cancels failed node's voter in its current subtransaction. // Also updates internal state of subtransaction to fail and // release blocked voters if quorum becomes impossible. if err := c.txMgr.CancelTransactionNodeVoter(transaction.ID(), secondary.Storage); err != nil { - ctxlogrus.Extract(ctx).WithError(err). + log.FromContext(ctx).WithError(err). Error("canceling secondary voter failed") } @@ -544,8 +544,7 @@ func (c *Coordinator) mutatorStreamParameters(ctx context.Context, call grpcCall continue } - ctxlogrus. - Extract(ctx). + log.FromContext(ctx). WithError(err). Error("coordinator proxy stream finalizer failure") } @@ -590,7 +589,7 @@ func (c *Coordinator) maintenanceStreamParameters(ctx context.Context, call grpc defer nodeErrors.Unlock() nodeErrors.errByNode[node.Storage] = err - ctxlogrus.Extract(ctx).WithField("gitaly_storage", node.Storage).WithError(err).Error("proxying maintenance RPC to node failed") + log.FromContext(ctx).WithField("gitaly_storage", node.Storage).WithError(err).Error("proxying maintenance RPC to node failed") // We ignore any errors returned by nodes such that they all have a // chance to finish their maintenance RPC in a best-effort strategy. @@ -667,7 +666,7 @@ func streamParametersContext(ctx context.Context) context.Context { func (c *Coordinator) StreamDirector(ctx context.Context, fullMethodName string, peeker proxy.StreamPeeker) (*proxy.StreamParameters, error) { // For phase 1, we need to route messages based on the storage location // to the appropriate Gitaly node. - ctxlogrus.Extract(ctx).Debugf("Stream director received method %s", fullMethodName) + log.FromContext(ctx).Debugf("Stream director received method %s", fullMethodName) mi, err := c.registry.LookupMethod(fullMethodName) if err != nil { @@ -952,7 +951,7 @@ func getUpdatedAndOutdatedSecondaries( nodesByState := make(map[string][]string) defer func() { - ctxlogrus.Extract(ctx). + log.FromContext(ctx). WithField("transaction.primary", route.Primary.Storage). WithField("transaction.secondaries", nodesByState). Info("transactional node states") @@ -1071,18 +1070,18 @@ func (c *Coordinator) newRequestFinalizer( ctx, cancel := context.WithTimeout(helper.SuppressCancellation(originalCtx), 30*time.Second) defer cancel() - log := ctxlogrus.Extract(ctx).WithFields(logrus.Fields{ + logEntry := log.FromContext(ctx).WithFields(logrus.Fields{ "replication.cause": cause, "replication.change": change, "replication.primary": primary, }) if len(updatedSecondaries) > 0 { - log = log.WithField("replication.updated", updatedSecondaries) + logEntry = logEntry.WithField("replication.updated", updatedSecondaries) } if len(outdatedSecondaries) > 0 { - log = log.WithField("replication.outdated", outdatedSecondaries) + logEntry = logEntry.WithField("replication.outdated", outdatedSecondaries) } - log.Info("queueing replication jobs") + logEntry.Info("queueing replication jobs") switch change { case datastore.UpdateRepo: @@ -1101,7 +1100,7 @@ func (c *Coordinator) newRequestFinalizer( return fmt.Errorf("rename repository: %w", err) } - ctxlogrus.Extract(ctx).WithError(err).Info("renamed repository does not have a store entry") + log.FromContext(ctx).WithError(err).Info("renamed repository does not have a store entry") } case datastore.CreateRepo: repositorySpecificPrimariesEnabled := c.conf.Failover.ElectionStrategy == config.ElectionStrategyPerRepository @@ -1148,7 +1147,7 @@ func (c *Coordinator) newRequestFinalizer( g.Go(func() error { if _, err := c.queue.Enqueue(ctx, event); err != nil { if errors.As(err, &datastore.ReplicationEventExistsError{}) { - ctxlogrus.Extract(ctx).WithError(err).Info("replication event queue already has similar entry") + log.FromContext(ctx).WithError(err).Info("replication event queue already has similar entry") return nil } diff --git a/internal/praefect/datastore/collector.go b/internal/praefect/datastore/collector.go index 5a33744b1..328ce8960 100644 --- a/internal/praefect/datastore/collector.go +++ b/internal/praefect/datastore/collector.go @@ -6,7 +6,7 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" ) @@ -28,7 +28,7 @@ var ( // RepositoryStoreCollector collects metrics from the RepositoryStore. type RepositoryStoreCollector struct { - log logrus.FieldLogger + log log.Logger db glsql.Querier virtualStorages []string timeout time.Duration @@ -36,7 +36,7 @@ type RepositoryStoreCollector struct { // NewRepositoryStoreCollector returns a new collector. func NewRepositoryStoreCollector( - log logrus.FieldLogger, + log log.Logger, virtualStorages []string, db glsql.Querier, timeout time.Duration, @@ -105,7 +105,7 @@ GROUP BY virtual_storage // QueueDepthCollector collects metrics describing replication queue depths type QueueDepthCollector struct { - log logrus.FieldLogger + log log.Logger timeout time.Duration db glsql.Querier } @@ -116,7 +116,7 @@ func (q *QueueDepthCollector) Describe(ch chan<- *prometheus.Desc) { } // NewQueueDepthCollector returns a new QueueDepthCollector -func NewQueueDepthCollector(log logrus.FieldLogger, db glsql.Querier, timeout time.Duration) *QueueDepthCollector { +func NewQueueDepthCollector(log log.Logger, db glsql.Querier, timeout time.Duration) *QueueDepthCollector { return &QueueDepthCollector{ log: log.WithField("component", "queue_depth_collector"), timeout: timeout, @@ -168,7 +168,7 @@ const ( // VerificationQueueDepthCollector collects the verification queue depth metric from the database. type VerificationQueueDepthCollector struct { - log logrus.FieldLogger + log log.Logger timeout time.Duration db glsql.Querier verificationInterval time.Duration @@ -176,7 +176,7 @@ type VerificationQueueDepthCollector struct { } // NewVerificationQueueDepthCollector returns a new VerificationQueueDepthCollector -func NewVerificationQueueDepthCollector(log logrus.FieldLogger, db glsql.Querier, timeout, verificationInterval time.Duration, configuredStorages map[string][]string) *VerificationQueueDepthCollector { +func NewVerificationQueueDepthCollector(log log.Logger, db glsql.Querier, timeout, verificationInterval time.Duration, configuredStorages map[string][]string) *VerificationQueueDepthCollector { v := &VerificationQueueDepthCollector{ log: log.WithField("component", "verification_queue_depth_collector"), timeout: timeout, diff --git a/internal/praefect/datastore/listener.go b/internal/praefect/datastore/listener.go index bf65f7c7e..54b9fa586 100644 --- a/internal/praefect/datastore/listener.go +++ b/internal/praefect/datastore/listener.go @@ -9,8 +9,8 @@ import ( "github.com/jackc/pgx/v5" promclient "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" ) @@ -106,12 +106,12 @@ func (mh metricsHandlerMiddleware) Disconnect(err error) { type ResilientListener struct { conf config.DB ticker helper.Ticker - logger logrus.FieldLogger + logger log.Logger reconnectTotal *promclient.CounterVec } // NewResilientListener returns instance of the *ResilientListener. -func NewResilientListener(conf config.DB, ticker helper.Ticker, logger logrus.FieldLogger) *ResilientListener { +func NewResilientListener(conf config.DB, ticker helper.Ticker, logger log.Logger) *ResilientListener { return &ResilientListener{ conf: conf, ticker: ticker, diff --git a/internal/praefect/datastore/storage_provider.go b/internal/praefect/datastore/storage_provider.go index e61c5f822..bc6ffad43 100644 --- a/internal/praefect/datastore/storage_provider.go +++ b/internal/praefect/datastore/storage_provider.go @@ -10,8 +10,8 @@ import ( lru "github.com/hashicorp/golang-lru/v2" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/datastructure" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" ) @@ -44,12 +44,12 @@ type CachingConsistentStoragesGetter struct { // access is access method to use: 0 - without caching; 1 - with caching. access int32 // callbackLogger should be used only inside of the methods used as callbacks. - callbackLogger logrus.FieldLogger + callbackLogger log.Logger cacheAccessTotal *prometheus.CounterVec } // NewCachingConsistentStoragesGetter returns a ConsistentStoragesGetter that uses caching. -func NewCachingConsistentStoragesGetter(logger logrus.FieldLogger, csg ConsistentStoragesGetter, virtualStorages []string) (*CachingConsistentStoragesGetter, error) { +func NewCachingConsistentStoragesGetter(logger log.Logger, csg ConsistentStoragesGetter, virtualStorages []string) (*CachingConsistentStoragesGetter, error) { cached := &CachingConsistentStoragesGetter{ csg: csg, caches: make(map[string]*virtualStorageCache, len(virtualStorages)), diff --git a/internal/praefect/datastore/storage_provider_test.go b/internal/praefect/datastore/storage_provider_test.go index 4a907c5c1..17b1c0e52 100644 --- a/internal/praefect/datastore/storage_provider_test.go +++ b/internal/praefect/datastore/storage_provider_test.go @@ -9,13 +9,13 @@ import ( "sync" "testing" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/prometheus/client_golang/prometheus/testutil" "github.com/sirupsen/logrus" "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/datastructure" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testdb" @@ -32,7 +32,7 @@ func TestCachingStorageProvider_GetSyncedNodes(t *testing.T) { require.NoError(t, rs.CreateRepository(ctx, 1, "unknown", "/repo/path", "replica-path", "g1", []string{"g2", "g3"}, nil, true, false)) - cache, err := NewCachingConsistentStoragesGetter(ctxlogrus.Extract(ctx), rs, []string{"vs"}) + cache, err := NewCachingConsistentStoragesGetter(log.FromContext(ctx), rs, []string{"vs"}) require.NoError(t, err) cache.Connected() @@ -56,7 +56,7 @@ func TestCachingStorageProvider_GetSyncedNodes(t *testing.T) { require.NoError(t, rs.CreateRepository(ctx, 1, "vs", "/repo/path", "replica-path", "g1", []string{"g2", "g3"}, nil, true, false)) - cache, err := NewCachingConsistentStoragesGetter(ctxlogrus.Extract(ctx), rs, []string{"vs"}) + cache, err := NewCachingConsistentStoragesGetter(log.FromContext(ctx), rs, []string{"vs"}) require.NoError(t, err) cache.Connected() @@ -180,7 +180,7 @@ func TestCachingStorageProvider_GetSyncedNodes(t *testing.T) { require.NoError(t, rs.CreateRepository(ctx, 1, "vs", "/repo/path/1", "replica-path-1", "g1", []string{"g2", "g3"}, nil, true, false)) require.NoError(t, rs.CreateRepository(ctx, 2, "vs", "/repo/path/2", "replica-path-2", "g1", []string{"g2"}, nil, true, false)) - cache, err := NewCachingConsistentStoragesGetter(ctxlogrus.Extract(ctx), rs, []string{"vs"}) + cache, err := NewCachingConsistentStoragesGetter(log.FromContext(ctx), rs, []string{"vs"}) require.NoError(t, err) cache.Connected() @@ -230,7 +230,7 @@ func TestCachingStorageProvider_GetSyncedNodes(t *testing.T) { require.NoError(t, rs.CreateRepository(ctx, 1, "vs", "/repo/path", "replica-path", "g1", []string{"g2", "g3"}, nil, true, false)) - cache, err := NewCachingConsistentStoragesGetter(ctxlogrus.Extract(ctx), rs, []string{"vs"}) + cache, err := NewCachingConsistentStoragesGetter(log.FromContext(ctx), rs, []string{"vs"}) require.NoError(t, err) cache.Connected() @@ -266,7 +266,7 @@ func TestCachingStorageProvider_GetSyncedNodes(t *testing.T) { require.NoError(t, rs.CreateRepository(ctx, 1, "vs", "/repo/path/1", "replica-path-1", "g1", nil, nil, true, false)) require.NoError(t, rs.CreateRepository(ctx, 2, "vs", "/repo/path/2", "replica-path-2", "g1", nil, nil, true, false)) - cache, err := NewCachingConsistentStoragesGetter(ctxlogrus.Extract(ctx), rs, []string{"vs"}) + cache, err := NewCachingConsistentStoragesGetter(log.FromContext(ctx), rs, []string{"vs"}) require.NoError(t, err) cache.Connected() @@ -331,7 +331,7 @@ func TestCachingStorageProvider_GetSyncedNodes(t *testing.T) { }, } - cache, err := NewCachingConsistentStoragesGetter(ctxlogrus.Extract(ctx), mockRepositoryStore, []string{"storage-1", "storage-2"}) + cache, err := NewCachingConsistentStoragesGetter(log.FromContext(ctx), mockRepositoryStore, []string{"storage-1", "storage-2"}) require.NoError(t, err) cache.Connected() diff --git a/internal/praefect/dependencies.go b/internal/praefect/dependencies.go index 9184ab466..4dd0091bc 100644 --- a/internal/praefect/dependencies.go +++ b/internal/praefect/dependencies.go @@ -1,9 +1,9 @@ package praefect import ( - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/proxy" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/nodes" @@ -14,7 +14,7 @@ import ( // Dependencies consolidates Praefect service dependencies for injection. type Dependencies struct { Config config.Config - Logger logrus.FieldLogger + Logger log.Logger Coordinator *Coordinator Director proxy.StreamDirector NodeMgr nodes.Manager diff --git a/internal/praefect/middleware/methodtype.go b/internal/praefect/middleware/methodtype.go index bd0d4b11a..78c9637b7 100644 --- a/internal/praefect/middleware/methodtype.go +++ b/internal/praefect/middleware/methodtype.go @@ -3,14 +3,14 @@ package middleware import ( "context" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/metrics" "google.golang.org/grpc" ) // MethodTypeUnaryInterceptor returns a Unary Interceptor that records the method type of incoming RPC requests -func MethodTypeUnaryInterceptor(r *protoregistry.Registry, logger logrus.FieldLogger) grpc.UnaryServerInterceptor { +func MethodTypeUnaryInterceptor(r *protoregistry.Registry, logger log.Logger) grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { observeMethodType(r, logger, info.FullMethod) @@ -21,7 +21,7 @@ func MethodTypeUnaryInterceptor(r *protoregistry.Registry, logger logrus.FieldLo } // MethodTypeStreamInterceptor returns a Stream Interceptor that records the method type of incoming RPC requests -func MethodTypeStreamInterceptor(r *protoregistry.Registry, logger logrus.FieldLogger) grpc.StreamServerInterceptor { +func MethodTypeStreamInterceptor(r *protoregistry.Registry, logger log.Logger) grpc.StreamServerInterceptor { return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { observeMethodType(r, logger, info.FullMethod) @@ -31,7 +31,7 @@ func MethodTypeStreamInterceptor(r *protoregistry.Registry, logger logrus.FieldL } } -func observeMethodType(registry *protoregistry.Registry, logger logrus.FieldLogger, fullMethod string) { +func observeMethodType(registry *protoregistry.Registry, logger log.Logger, fullMethod string) { if registry.IsInterceptedMethod(fullMethod) { return } diff --git a/internal/praefect/node.go b/internal/praefect/node.go index cc60de11c..6a91b4aa7 100644 --- a/internal/praefect/node.go +++ b/internal/praefect/node.go @@ -4,10 +4,10 @@ import ( "context" "fmt" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/sidechannel" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/nodes" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/nodes/tracker" @@ -99,7 +99,7 @@ func DialNodes( errorTracker tracker.ErrorTracker, handshaker client.Handshaker, sidechannelRegistry *sidechannel.Registry, - log logrus.FieldLogger, + log log.Logger, ) (NodeSet, error) { set := make(NodeSet, len(virtualStorages)) for _, virtualStorage := range virtualStorages { diff --git a/internal/praefect/nodes/health_manager.go b/internal/praefect/nodes/health_manager.go index 94d929bc5..1e4d9ba28 100644 --- a/internal/praefect/nodes/health_manager.go +++ b/internal/praefect/nodes/health_manager.go @@ -9,6 +9,7 @@ import ( "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" "gitlab.com/gitlab-org/labkit/correlation" "google.golang.org/grpc/health/grpc_health_v1" @@ -33,7 +34,7 @@ type HealthClients map[string]map[string]grpc_health_v1.HealthClient // `node_status` table. Each Praefect node is identified by their host name and the provided // stable ID. The stable ID should uniquely identify a Praefect instance on the host. type HealthManager struct { - log logrus.FieldLogger + log log.Logger db glsql.Querier handleError func(error) error // clients contains connections to the configured physical storages within each @@ -59,7 +60,7 @@ type HealthManager struct { // NewHealthManager returns a new health manager that monitors which nodes in the cluster // are healthy. func NewHealthManager( - log logrus.FieldLogger, + log log.Logger, db glsql.Querier, praefectName string, clients HealthClients, diff --git a/internal/praefect/nodes/local_elector.go b/internal/praefect/nodes/local_elector.go index 57afcb9d6..ca8636e10 100644 --- a/internal/praefect/nodes/local_elector.go +++ b/internal/praefect/nodes/local_elector.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/metrics" ) @@ -18,12 +18,12 @@ type localElector struct { shardName string nodes []Node primaryNode Node - log logrus.FieldLogger + log log.Logger doneCh chan struct{} } -func newLocalElector(name string, log logrus.FieldLogger, ns []*nodeStatus) *localElector { +func newLocalElector(name string, log log.Logger, ns []*nodeStatus) *localElector { nodes := make([]Node, len(ns)) for i, n := range ns { nodes[i] = n diff --git a/internal/praefect/nodes/manager.go b/internal/praefect/nodes/manager.go index 83ab7fede..25cf8dab5 100644 --- a/internal/praefect/nodes/manager.go +++ b/internal/praefect/nodes/manager.go @@ -17,6 +17,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/proxy" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/sidechannel" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/metrics" @@ -131,7 +132,7 @@ func Dial( errorTracker tracker.ErrorTracker, handshaker client.Handshaker, sidechannelRegistry *sidechannel.Registry, - log logrus.FieldLogger, + log log.Logger, ) (*grpc.ClientConn, error) { streamInterceptors := []grpc.StreamClientInterceptor{ grpcprometheus.StreamClientInterceptor, @@ -165,7 +166,7 @@ func Dial( // NewManager creates a new NodeMgr based on virtual storage configs func NewManager( - log logrus.FieldLogger, + log log.Logger, c config.Config, db *sql.DB, csg datastore.ConsistentStoragesGetter, @@ -335,7 +336,7 @@ func (n *Mgr) HealthyNodes() map[string][]string { //nolint:revive // This is unintentionally missing documentation. func (n *Mgr) Nodes() map[string][]Node { return n.nodes } -func newConnectionStatus(node config.Node, cc *grpc.ClientConn, l logrus.FieldLogger, latencyHist prommetrics.HistogramVec, errorTracker tracker.ErrorTracker) *nodeStatus { +func newConnectionStatus(node config.Node, cc *grpc.ClientConn, l log.Logger, latencyHist prommetrics.HistogramVec, errorTracker tracker.ErrorTracker) *nodeStatus { return &nodeStatus{ node: node, clientConn: cc, @@ -348,7 +349,7 @@ func newConnectionStatus(node config.Node, cc *grpc.ClientConn, l logrus.FieldLo type nodeStatus struct { node config.Node clientConn *grpc.ClientConn - log logrus.FieldLogger + log log.Logger latencyHist prommetrics.HistogramVec mtx sync.RWMutex statuses []bool diff --git a/internal/praefect/nodes/per_repository.go b/internal/praefect/nodes/per_repository.go index cd457d3a5..9c53ef184 100644 --- a/internal/praefect/nodes/per_repository.go +++ b/internal/praefect/nodes/per_repository.go @@ -6,8 +6,8 @@ import ( "errors" "fmt" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" ) @@ -110,7 +110,7 @@ WHERE snapshot.repository_id = $1 } if current != previous { - ctxlogrus.Extract(ctx).WithFields(logrus.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "repository_id": repositoryID, "current_primary": current.String, "previous_primary": previous.String, diff --git a/internal/praefect/nodes/per_repository_test.go b/internal/praefect/nodes/per_repository_test.go index 673c2a9a0..19b73bd25 100644 --- a/internal/praefect/nodes/per_repository_test.go +++ b/internal/praefect/nodes/per_repository_test.go @@ -3,11 +3,11 @@ package nodes import ( "testing" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper/testdb" @@ -533,7 +533,7 @@ func TestPerRepositoryElector(t *testing.T) { logger, hook := test.NewNullLogger() elector := NewPerRepositoryElector(tx) - primary, err := elector.GetPrimary(ctxlogrus.ToContext(ctx, logrus.NewEntry(logger)), "", repositoryID) + primary, err := elector.GetPrimary(log.FromLogrusEntry(logrus.NewEntry(logger)).ToContext(ctx), "", repositoryID) assert.Equal(t, step.error, err) assert.Less(t, len(hook.Entries), 2) diff --git a/internal/praefect/nodes/sql_elector.go b/internal/praefect/nodes/sql_elector.go index f66cad8f7..c72e889a3 100644 --- a/internal/praefect/nodes/sql_elector.go +++ b/internal/praefect/nodes/sql_elector.go @@ -12,6 +12,7 @@ import ( "github.com/google/uuid" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/metrics" @@ -83,12 +84,12 @@ type sqlElector struct { nodes []*sqlCandidate primaryNode *sqlCandidate db *sql.DB - log logrus.FieldLogger + log log.Logger failoverTimeout time.Duration doneCh chan struct{} } -func newSQLElector(name string, c config.Config, db *sql.DB, log logrus.FieldLogger, ns []*nodeStatus) *sqlElector { +func newSQLElector(name string, c config.Config, db *sql.DB, log log.Logger, ns []*nodeStatus) *sqlElector { log = log.WithField("virtual_storage", name) praefectName := GeneratePraefectName(c, log) @@ -118,7 +119,7 @@ func newSQLElector(name string, c config.Config, db *sql.DB, log logrus.FieldLog // doesn't change across restarts since that may temporarily make it // look like there are more Praefect processes active for // determining a quorum. -func GeneratePraefectName(c config.Config, log logrus.FieldLogger) string { +func GeneratePraefectName(c config.Config, log log.Logger) string { name, err := os.Hostname() if err != nil { name = uuid.New().String() diff --git a/internal/praefect/reconciler/reconciler.go b/internal/praefect/reconciler/reconciler.go index d4ddecc36..b91cc2c98 100644 --- a/internal/praefect/reconciler/reconciler.go +++ b/internal/praefect/reconciler/reconciler.go @@ -5,8 +5,8 @@ import ( "fmt" "github.com/prometheus/client_golang/prometheus" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/advisorylock" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" @@ -16,7 +16,7 @@ const logBatchSize = 25 // Reconciler implements reconciliation logic for repairing outdated repository replicas. type Reconciler struct { - log logrus.FieldLogger + log log.Logger db glsql.Querier hc praefect.HealthChecker storages map[string][]string @@ -27,7 +27,7 @@ type Reconciler struct { } // NewReconciler returns a new Reconciler for repairing outdated repositories. -func NewReconciler(log logrus.FieldLogger, db glsql.Querier, hc praefect.HealthChecker, storages map[string][]string, buckets []float64) *Reconciler { +func NewReconciler(log log.Logger, db glsql.Querier, hc praefect.HealthChecker, storages map[string][]string, buckets []float64) *Reconciler { log = log.WithField("component", "reconciler") r := &Reconciler{ diff --git a/internal/praefect/remove_repository.go b/internal/praefect/remove_repository.go index 58401d682..83c9cbb83 100644 --- a/internal/praefect/remove_repository.go +++ b/internal/praefect/remove_repository.go @@ -7,9 +7,9 @@ import ( "sync" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/structerr" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -99,7 +99,7 @@ func removeRepositoryHandler(rs datastore.RepositoryStore, conns Connections, pa rewritten.RelativePath = replicaPath if err := proxyRequest(ctx, conn, rewritten); err != nil { - ctxlogrus.Extract(ctx).WithFields(logrus.Fields{ + log.FromContext(ctx).WithFields(logrus.Fields{ "virtual_storage": virtualStorage, "relative_path": repo.RelativePath, "storage": rewrittenStorage, diff --git a/internal/praefect/replicator.go b/internal/praefect/replicator.go index 5dbb8baac..5fd0ac1dd 100644 --- a/internal/praefect/replicator.go +++ b/internal/praefect/replicator.go @@ -13,6 +13,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/middleware/metadatahandler" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" prommetrics "gitlab.com/gitlab-org/gitaly/v16/internal/prometheus/metrics" @@ -34,7 +35,7 @@ type Replicator interface { type defaultReplicator struct { rs datastore.RepositoryStore - log logrus.FieldLogger + log log.Logger } func (dr defaultReplicator) Replicate(ctx context.Context, event datastore.ReplicationEvent, sourceCC, targetCC *grpc.ClientConn) error { @@ -200,7 +201,7 @@ func (dr defaultReplicator) Rename(ctx context.Context, event datastore.Replicat // ReplMgr is a replication manager for handling replication jobs type ReplMgr struct { - log *logrus.Entry + log log.Logger queue datastore.ReplicationEventQueue hc HealthChecker nodes NodeSet @@ -249,7 +250,7 @@ func WithParallelStorageProcessingWorkers(n uint) func(*ReplMgr) { // NewReplMgr initializes a replication manager with the provided dependencies // and options -func NewReplMgr(log logrus.FieldLogger, storageNames map[string][]string, queue datastore.ReplicationEventQueue, rs datastore.RepositoryStore, hc HealthChecker, nodes NodeSet, opts ...ReplMgrOpt) ReplMgr { +func NewReplMgr(log log.Logger, storageNames map[string][]string, queue datastore.ReplicationEventQueue, rs datastore.RepositoryStore, hc HealthChecker, nodes NodeSet, opts ...ReplMgrOpt) ReplMgr { r := ReplMgr{ log: log.WithField("component", "replication_manager"), queue: queue, @@ -514,7 +515,7 @@ func (r ReplMgr) handleNode(ctx context.Context, virtualStorage string, target N return len(events) } -func (r ReplMgr) startHealthUpdate(ctx context.Context, logger logrus.FieldLogger, events []datastore.ReplicationEvent) context.CancelFunc { +func (r ReplMgr) startHealthUpdate(ctx context.Context, logger log.Logger, events []datastore.ReplicationEvent) context.CancelFunc { healthUpdateCtx, healthUpdateCancel := context.WithCancel(ctx) go func() { ticker := time.NewTicker(5 * time.Second) @@ -533,7 +534,7 @@ func (r ReplMgr) startHealthUpdate(ctx context.Context, logger logrus.FieldLogge return healthUpdateCancel } -func (r ReplMgr) handleNodeEvent(ctx context.Context, logger logrus.FieldLogger, targetConnection *grpc.ClientConn, event datastore.ReplicationEvent) datastore.JobState { +func (r ReplMgr) handleNodeEvent(ctx context.Context, logger log.Logger, targetConnection *grpc.ClientConn, event datastore.ReplicationEvent) datastore.JobState { cid := getCorrelationID(event.Meta) ctx = correlation.ContextWithCorrelation(ctx, cid) diff --git a/internal/praefect/replicator_test.go b/internal/praefect/replicator_test.go index 716cc5227..c38d5b32e 100644 --- a/internal/praefect/replicator_test.go +++ b/internal/praefect/replicator_test.go @@ -22,6 +22,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/middleware/metadatahandler" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/nodes" @@ -290,7 +291,7 @@ func TestConfirmReplication(t *testing.T) { require.False(t, equal) } -func confirmChecksums(ctx context.Context, logger logrus.FieldLogger, primaryClient, replicaClient gitalypb.RepositoryServiceClient, primary, replica *gitalypb.Repository) (bool, error) { +func confirmChecksums(ctx context.Context, logger log.Logger, primaryClient, replicaClient gitalypb.RepositoryServiceClient, primary, replica *gitalypb.Repository) (bool, error) { g, gCtx := errgroup.WithContext(ctx) var primaryChecksum, replicaChecksum string diff --git a/internal/praefect/repocleaner/action_log.go b/internal/praefect/repocleaner/action_log.go index 4aed3403c..b2ec5588c 100644 --- a/internal/praefect/repocleaner/action_log.go +++ b/internal/praefect/repocleaner/action_log.go @@ -4,16 +4,17 @@ import ( "context" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) // LogWarnAction is an implementation of the Action interface that allows to log a warning message // for the repositories that are not known for the praefect. type LogWarnAction struct { - logger logrus.FieldLogger + logger log.Logger } // NewLogWarnAction return new instance of the LogWarnAction. -func NewLogWarnAction(logger logrus.FieldLogger) *LogWarnAction { +func NewLogWarnAction(logger log.Logger) *LogWarnAction { return &LogWarnAction{ logger: logger.WithField("component", "repocleaner.log_warn_action"), } diff --git a/internal/praefect/repocleaner/repository.go b/internal/praefect/repocleaner/repository.go index 784d8ec77..adc0e62f9 100644 --- a/internal/praefect/repocleaner/repository.go +++ b/internal/praefect/repocleaner/repository.go @@ -9,6 +9,7 @@ import ( "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" @@ -39,7 +40,7 @@ type Action interface { // found repositories are known by praefect and runs a special action. type Runner struct { cfg Cfg - logger logrus.FieldLogger + logger log.Logger healthChecker praefect.HealthChecker conns praefect.Connections walker *Walker @@ -59,7 +60,7 @@ type Cfg struct { } // NewRunner returns instance of the Runner. -func NewRunner(cfg Cfg, logger logrus.FieldLogger, healthChecker praefect.HealthChecker, conns praefect.Connections, stateOwner StateOwner, acquirer Acquirer, action Action) *Runner { +func NewRunner(cfg Cfg, logger log.Logger, healthChecker praefect.HealthChecker, conns praefect.Connections, stateOwner StateOwner, acquirer Acquirer, action Action) *Runner { return &Runner{ cfg: cfg, logger: logger.WithField("component", "repocleaner.repository_existence"), @@ -149,7 +150,7 @@ func (gs *Runner) run(ctx context.Context) { } } -func (gs *Runner) loggerWith(virtualStorage, storage string) logrus.FieldLogger { +func (gs *Runner) loggerWith(virtualStorage, storage string) log.Logger { return gs.logger.WithFields(logrus.Fields{"virtual_storage": virtualStorage, "storage": storage}) } diff --git a/internal/praefect/router.go b/internal/praefect/router.go index 36fe9b179..9abdce830 100644 --- a/internal/praefect/router.go +++ b/internal/praefect/router.go @@ -3,8 +3,8 @@ package praefect import ( "context" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "google.golang.org/grpc" ) @@ -27,7 +27,7 @@ func (e additionalRepositoryNotFoundError) Error() string { } func addRouteLogField(ctx context.Context, fields logrus.Fields) { - ctxlogrus.AddFields(ctx, logrus.Fields{"route": fields}) + log.AddFields(ctx, logrus.Fields{"route": fields}) } func routerNodeStorages(secondaries []RouterNode) []string { diff --git a/internal/praefect/server.go b/internal/praefect/server.go index 84e75eb66..efcd781ff 100644 --- a/internal/praefect/server.go +++ b/internal/praefect/server.go @@ -45,7 +45,7 @@ import ( // NewBackchannelServerFactory returns a ServerFactory that serves the RefTransactionServer on the backchannel // connection. -func NewBackchannelServerFactory(logger logrus.FieldLogger, refSvc gitalypb.RefTransactionServer, registry *sidechannel.Registry) backchannel.ServerFactory { +func NewBackchannelServerFactory(logger log.Logger, refSvc gitalypb.RefTransactionServer, registry *sidechannel.Registry) backchannel.ServerFactory { logMsgProducer := log.MessageProducer( log.PropagationMessageProducer(grpcmwlogrus.DefaultMessageProducer), structerr.FieldsProducer, @@ -236,7 +236,7 @@ func registerServices( grpcprometheus.Register(srv) } -func warnDupeAddrs(logger logrus.FieldLogger, conf config.Config) { +func warnDupeAddrs(logger log.Logger, conf config.Config) { var fishy bool for _, virtualStorage := range conf.VirtualStorages { diff --git a/internal/praefect/service/server/info.go b/internal/praefect/service/server/info.go index 9481ecb8d..644007a37 100644 --- a/internal/praefect/service/server/info.go +++ b/internal/praefect/service/server/info.go @@ -5,8 +5,8 @@ import ( "sync" "github.com/google/uuid" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/metadata" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" "google.golang.org/grpc" ) @@ -52,7 +52,7 @@ func (s *Server) ServerInfo(ctx context.Context, in *gitalypb.ServerInfoRequest) client := gitalypb.NewServerServiceClient(conn) resp, err := client.ServerInfo(ctx, &gitalypb.ServerInfoRequest{}) if err != nil { - ctxlogrus.Extract(ctx).WithField("storage", storage).WithError(err).Error("error getting server info") + log.FromContext(ctx).WithField("storage", storage).WithError(err).Error("error getting server info") return } diff --git a/internal/praefect/testserver.go b/internal/praefect/testserver.go index f3954667d..291d890f3 100644 --- a/internal/praefect/testserver.go +++ b/internal/praefect/testserver.go @@ -14,6 +14,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/client" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/protoregistry" "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/proxy" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/nodes" @@ -40,7 +41,7 @@ type BuildOptions struct { // WithAnnotations sets a proto-registry to use by praefect service. WithAnnotations *protoregistry.Registry // WithLogger sets a logger to use by praefect service. - WithLogger *logrus.Entry + WithLogger log.Logger // WithNodeMgr sets an implementation of the node manager to use by praefect service. WithNodeMgr nodes.Manager // WithRepoStore sets an implementation of the repositories store to use by praefect service. diff --git a/internal/praefect/transactions/manager.go b/internal/praefect/transactions/manager.go index 7622df3d4..2d56d82e7 100644 --- a/internal/praefect/transactions/manager.go +++ b/internal/praefect/transactions/manager.go @@ -8,9 +8,9 @@ import ( "sync/atomic" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/transaction/voting" ) @@ -75,8 +75,8 @@ func (mgr *Manager) Collect(metrics chan<- prometheus.Metric) { mgr.subtransactionsMetric.Collect(metrics) } -func (mgr *Manager) log(ctx context.Context) logrus.FieldLogger { - return ctxlogrus.Extract(ctx).WithField("component", "transactions.Manager") +func (mgr *Manager) log(ctx context.Context) log.Logger { + return log.FromContext(ctx).WithField("component", "transactions.Manager") } // CancelFunc is the transaction cancellation function returned by diff --git a/internal/praefect/verifier.go b/internal/praefect/verifier.go index b68e0b1e9..5c6684e70 100644 --- a/internal/praefect/verifier.go +++ b/internal/praefect/verifier.go @@ -10,6 +10,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/datastore/glsql" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -21,7 +22,7 @@ import ( // is still left in place even if all of the replicas are lost to ensure the data loss doesn't // go unnoticed. type MetadataVerifier struct { - log logrus.FieldLogger + log log.Logger db glsql.Querier conns Connections batchSize int @@ -48,7 +49,7 @@ const ( // NewMetadataVerifier creates a new MetadataVerifier. func NewMetadataVerifier( - log logrus.FieldLogger, + log log.Logger, db glsql.Querier, conns Connections, healthChecker HealthChecker, diff --git a/internal/streamcache/cache.go b/internal/streamcache/cache.go index be16f923a..ad365c2f6 100644 --- a/internal/streamcache/cache.go +++ b/internal/streamcache/cache.go @@ -35,10 +35,10 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/dontpanic" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/helper" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) var ( @@ -132,7 +132,7 @@ type cache struct { createFile func() (namedWriteCloser, error) stop chan struct{} stopOnce sync.Once - logger logrus.FieldLogger + logger log.Logger dir string sleepLoop *dontpanic.Forever @@ -142,7 +142,7 @@ type cache struct { } // New returns a new cache instance. -func New(cfg config.StreamCacheConfig, logger logrus.FieldLogger) Cache { +func New(cfg config.StreamCacheConfig, logger log.Logger) Cache { if cfg.Enabled { packObjectsCacheEnabled.WithLabelValues( cfg.Dir, @@ -165,7 +165,7 @@ func newCacheWithSleep( maxAge time.Duration, filestoreSleep func(time.Duration) <-chan time.Time, cleanSleep func(time.Duration) <-chan time.Time, - logger logrus.FieldLogger, + logger log.Logger, ) *cache { fs := newFilestore(dir, maxAge, filestoreSleep, logger) diff --git a/internal/streamcache/filestore.go b/internal/streamcache/filestore.go index bf9b1b318..4d01e377e 100644 --- a/internal/streamcache/filestore.go +++ b/internal/streamcache/filestore.go @@ -12,9 +12,9 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/dontpanic" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) var ( @@ -60,7 +60,7 @@ type filestore struct { sleepLoop *dontpanic.Forever } -func newFilestore(dir string, maxAge time.Duration, sleep func(time.Duration) <-chan time.Time, logger logrus.FieldLogger) *filestore { +func newFilestore(dir string, maxAge time.Duration, sleep func(time.Duration) <-chan time.Time, logger log.Logger) *filestore { fs := &filestore{ dir: dir, maxAge: maxAge, diff --git a/internal/tempdir/clean.go b/internal/tempdir/clean.go index 31dea0618..ee28ec331 100644 --- a/internal/tempdir/clean.go +++ b/internal/tempdir/clean.go @@ -15,6 +15,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/config" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) const ( @@ -28,7 +29,7 @@ const ( ) // StartCleaning starts tempdir cleanup in a goroutine. -func StartCleaning(logger logrus.FieldLogger, locator storage.Locator, storages []config.Storage, d time.Duration) { +func StartCleaning(logger log.Logger, locator storage.Locator, storages []config.Storage, d time.Duration) { dontpanic.Go(logger, func() { for { cleanTempDir(logger, locator, storages) @@ -37,7 +38,7 @@ func StartCleaning(logger logrus.FieldLogger, locator storage.Locator, storages }) } -func cleanTempDir(logger logrus.FieldLogger, locator storage.Locator, storages []config.Storage) { +func cleanTempDir(logger log.Logger, locator storage.Locator, storages []config.Storage) { for _, storage := range storages { start := time.Now() err := clean(logger, locator, storage) @@ -55,7 +56,7 @@ func cleanTempDir(logger logrus.FieldLogger, locator storage.Locator, storages [ type invalidCleanRoot string -func clean(logger logrus.FieldLogger, locator storage.Locator, storage config.Storage) error { +func clean(logger log.Logger, locator storage.Locator, storage config.Storage) error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/internal/tempdir/tempdir.go b/internal/tempdir/tempdir.go index 01bdd5eee..15e9b5484 100644 --- a/internal/tempdir/tempdir.go +++ b/internal/tempdir/tempdir.go @@ -7,9 +7,9 @@ import ( "path/filepath" "time" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/storage" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" ) @@ -98,7 +98,7 @@ func newDirectory(ctx context.Context, storageName string, prefix string, loc st func (d Dir) cleanupOnDone(ctx context.Context) { <-ctx.Done() if err := os.RemoveAll(d.Path()); err != nil { - ctxlogrus.Extract(ctx).WithError(err).Errorf("failed to cleanup temp dir %q", d.path) + log.FromContext(ctx).WithError(err).Errorf("failed to cleanup temp dir %q", d.path) } close(d.doneCh) } diff --git a/internal/testhelper/configure.go b/internal/testhelper/configure.go index 6dc326057..2f8162af1 100644 --- a/internal/testhelper/configure.go +++ b/internal/testhelper/configure.go @@ -8,7 +8,6 @@ import ( "runtime" "testing" - "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" "gitlab.com/gitlab-org/gitaly/v16/internal/log" ) @@ -150,7 +149,7 @@ func configure() (_ func(), returnedErr error) { return cleanup, nil } -func configureTestDirectory(logger logrus.FieldLogger) (_ func(), returnedErr error) { +func configureTestDirectory(logger log.Logger) (_ func(), returnedErr error) { if testDirectory != "" { return nil, errors.New("test directory has already been configured") } diff --git a/internal/testhelper/testhelper.go b/internal/testhelper/testhelper.go index 6b92eade3..4ee0e5f19 100644 --- a/internal/testhelper/testhelper.go +++ b/internal/testhelper/testhelper.go @@ -17,8 +17,6 @@ import ( "syscall" "testing" - "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" - log "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gitlab.com/gitlab-org/gitaly/v16/internal/featureflag" @@ -208,13 +206,6 @@ func GetLocalhostListener(tb testing.TB) (net.Listener, string) { // ContextOpt returns a new context instance with the new additions to it. type ContextOpt func(context.Context) context.Context -// ContextWithLogger allows to inject provided logger into the context. -func ContextWithLogger(logger *log.Entry) ContextOpt { - return func(ctx context.Context) context.Context { - return ctxlogrus.ToContext(ctx, logger) - } -} - // Context returns that gets canceled at the end of the test. func Context(tb testing.TB, opts ...ContextOpt) context.Context { ctx, cancel := context.WithCancel(ContextWithoutCancel(opts...)) diff --git a/internal/testhelper/testserver/gitaly.go b/internal/testhelper/testserver/gitaly.go index 30778d13c..2d91de675 100644 --- a/internal/testhelper/testserver/gitaly.go +++ b/internal/testhelper/testserver/gitaly.go @@ -6,7 +6,6 @@ import ( "os" "testing" - "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" gitalyauth "gitlab.com/gitlab-org/gitaly/v16/auth" @@ -33,7 +32,7 @@ import ( "gitlab.com/gitlab-org/gitaly/v16/internal/grpc/middleware/limithandler" "gitlab.com/gitlab-org/gitaly/v16/internal/helper/perm" "gitlab.com/gitlab-org/gitaly/v16/internal/limiter" - gitalylog "gitlab.com/gitlab-org/gitaly/v16/internal/log" + "gitlab.com/gitlab-org/gitaly/v16/internal/log" praefectconfig "gitlab.com/gitlab-org/gitaly/v16/internal/praefect/config" "gitlab.com/gitlab-org/gitaly/v16/internal/streamcache" "gitlab.com/gitlab-org/gitaly/v16/internal/testhelper" @@ -108,7 +107,7 @@ func runPraefectProxy(tb testing.TB, gitalyCfg config.Cfg, gitalyAddr string) Pr VerificationInterval: -1, }, Replication: praefectconfig.DefaultReplicationConfig(), - Logging: gitalylog.Config{ + Logging: log.Config{ Format: "json", Level: "info", }, @@ -252,7 +251,7 @@ func registerHealthServerIfNotRegistered(srv *grpc.Server) { type gitalyServerDeps struct { disablePraefect bool - logger *logrus.Logger + logger log.Logger conns *client.Pool locator storage.Locator txMgr transaction.Manager @@ -392,8 +391,8 @@ func (gsd *gitalyServerDeps) createDependencies(tb testing.TB, cfg config.Cfg) * // GitalyServerOpt is a helper type to shorten declarations. type GitalyServerOpt func(gitalyServerDeps) gitalyServerDeps -// WithLogger sets a logrus.Logger instance that will be used for gitaly services initialisation. -func WithLogger(logger *logrus.Logger) GitalyServerOpt { +// WithLogger sets a log.Logger instance that will be used for gitaly services initialisation. +func WithLogger(logger log.Logger) GitalyServerOpt { return func(deps gitalyServerDeps) gitalyServerDeps { deps.logger = logger return deps |