From 32a59fde655b29f8184fb2882863a04999440e1b Mon Sep 17 00:00:00 2001 From: Chandra Thumuluru Date: Wed, 6 May 2026 18:38:38 +0530 Subject: [PATCH 1/2] rpc: add DRPC Logger integration routing to DEV channel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement a `drpcLogger` that satisfies the new `drpc.Logger` interface (added upstream in cockroachdb/drpc) and routes DRPC library log messages to CockroachDB's DEV logging channel — the same channel used for gRPC library logs. `Debugf` is routed through `log.Dev.VEventfDepth` at verbosity level 2, so debug messages (buffer flushes, stream lifecycle, pool operations) are suppressed by default and only appear when an operator enables verbose logging via `--verbosity` or `--vmodule`. `Infof`, `Errorf`, and `Fatalf` are routed to their standard `log.Dev` counterparts with proper call depth so that file:line metadata points to the DRPC callsite. The logger is injected into both `NewDRPCServer` (server-side) and `DialDRPC` (client-side pool), and propagated through the entire DRPC stack (manager, stream, wire writer, pool) via DRPC's new options plumbing. Epic: none Release note: None Co-Authored-By: roachdev-claude --- DEPS.bzl | 9 ++-- build/bazelutil/distdir_files.bzl | 1 - go.mod | 2 +- go.sum | 4 +- pkg/rpc/BUILD.bazel | 1 + pkg/rpc/drpc.go | 7 +++- pkg/rpc/drpc_logger.go | 41 +++++++++++++++++++ .../lint/passes/fmtsafe/functions.go | 4 ++ 8 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 pkg/rpc/drpc_logger.go diff --git a/DEPS.bzl b/DEPS.bzl index 3bd4b1326c79..720f98e09db4 100644 --- a/DEPS.bzl +++ b/DEPS.bzl @@ -11080,11 +11080,10 @@ def go_deps(): name = "io_storj_drpc", build_file_proto_mode = "disable_global", importpath = "storj.io/drpc", - sha256 = "089481375939240f2fd5c2caa87ecde398bb2a9fb7d7998a2cee8ad0624a7ea1", - strip_prefix = "github.com/cockroachdb/drpc@v0.0.0-20260406142218-6c77a9e470d3", - urls = [ - "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/drpc/com_github_cockroachdb_drpc-v0.0.0-20260406142218-6c77a9e470d3.zip", - ], + replace = "github.com/cthumuluru-crdb/drpc", + # TODO: mirror this repo (to fix, run `./dev generate bazel --mirror`) + sum = "h1:fjs828Q5HXRl8UlR3rdQhD+R1S2vciNRwwQed1Qd0lU=", + version = "v0.0.0-20260506121721-e3afd627388d", ) go_repository( name = "org_bazil_fuse", diff --git a/build/bazelutil/distdir_files.bzl b/build/bazelutil/distdir_files.bzl index 026957f1aaa2..326a2aca2e96 100644 --- a/build/bazelutil/distdir_files.bzl +++ b/build/bazelutil/distdir_files.bzl @@ -349,7 +349,6 @@ DISTDIR_FILES = { "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlfmt/com_github_cockroachdb_crlfmt-v0.0.0-20221214225007-b2fc5c302548.zip": "fedc01bdd6d964da0425d5eaac8efadc951e78e13f102292cc0774197f09ab63", "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/crlib/com_github_cockroachdb_crlib-v0.0.0-20251122031428-fe658a2dbda1.zip": "fa361e52b072ce18ac1d103e2556851906477361b5fe688745d29b1efabff3cb", "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/datadriven/com_github_cockroachdb_datadriven-v1.0.3-0.20251123150250-ddff6747b112.zip": "6c1ae8a9550d3a92f85d7371e5c0caf922dc0ff1425e299359814b6a9a587f14", - "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/drpc/com_github_cockroachdb_drpc-v0.0.0-20260406142218-6c77a9e470d3.zip": "089481375939240f2fd5c2caa87ecde398bb2a9fb7d7998a2cee8ad0624a7ea1", "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/errors/com_github_cockroachdb_errors-v1.12.1-0.20251010171200-64801262cd6f.zip": "4df66cc44791d4290071696abf179dc6df7b94b4cb5d29a20f39c6bf522c60ee", "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/go-test-teamcity/com_github_cockroachdb_go_test_teamcity-v0.0.0-20191211140407-cff980ad0a55.zip": "bac30148e525b79d004da84d16453ddd2d5cd20528e9187f1d7dac708335674b", "https://storage.googleapis.com/cockroach-godeps/gomod/github.com/cockroachdb/gogoproto/com_github_cockroachdb_gogoproto-v1.3.3-0.20241216150617-2358cdb156a1.zip": "bf052c9a7f9e23fb3ec7e9f3b7201cfc264c18ed6da0d662952d276dbc339003", diff --git a/go.mod b/go.mod index 7f4084038235..a530de935c77 100644 --- a/go.mod +++ b/go.mod @@ -561,7 +561,7 @@ replace github.com/docker/docker => github.com/moby/moby v25.0.14+incompatible replace github.com/gogo/protobuf => github.com/cockroachdb/gogoproto v1.3.3-0.20241216150617-2358cdb156a1 -replace storj.io/drpc => github.com/cockroachdb/drpc v0.0.0-20260406142218-6c77a9e470d3 +replace storj.io/drpc => github.com/cthumuluru-crdb/drpc v0.0.0-20260506121721-e3afd627388d // Note: This forked dependency adds a commit that opens up some // private APIs to enable us to make some perf improvements to diff --git a/go.sum b/go.sum index e173da048d5e..a5be3879fca6 100644 --- a/go.sum +++ b/go.sum @@ -571,8 +571,6 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/datadriven v1.0.3-0.20251123150250-ddff6747b112 h1:T1++5Vt0/4/IWZ1mHmUYl7fhQnz50QhNWIY+ITvLLIM= github.com/cockroachdb/datadriven v1.0.3-0.20251123150250-ddff6747b112/go.mod h1:jsaKMvD3RBCATk1/jbUZM8C9idWBJME9+VRZ5+Liq1g= -github.com/cockroachdb/drpc v0.0.0-20260406142218-6c77a9e470d3 h1:Tn7JOQhDXUACzk732VOFSlh9jOlTYEcpZS23MHwyorI= -github.com/cockroachdb/drpc v0.0.0-20260406142218-6c77a9e470d3/go.mod h1:jeOpcnHh3/TvQ7K2kYXyLUMOMoMpuxp5vtdmtNPVW+8= github.com/cockroachdb/errors v1.12.1-0.20251010171200-64801262cd6f h1:lUmJxzb2/ukuRIvKTaNkvuj5LwlX4u/KxnI3zmx1SSw= github.com/cockroachdb/errors v1.12.1-0.20251010171200-64801262cd6f/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= github.com/cockroachdb/go-test-teamcity v0.0.0-20191211140407-cff980ad0a55 h1:YqzBA7tf8Gv8Oz0BbBsPenqkyjiohS7EUIwi7p1QJCU= @@ -730,6 +728,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= +github.com/cthumuluru-crdb/drpc v0.0.0-20260506121721-e3afd627388d h1:fjs828Q5HXRl8UlR3rdQhD+R1S2vciNRwwQed1Qd0lU= +github.com/cthumuluru-crdb/drpc v0.0.0-20260506121721-e3afd627388d/go.mod h1:jeOpcnHh3/TvQ7K2kYXyLUMOMoMpuxp5vtdmtNPVW+8= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= diff --git a/pkg/rpc/BUILD.bazel b/pkg/rpc/BUILD.bazel index 7c045e0fc69f..1eb2ad7d675c 100644 --- a/pkg/rpc/BUILD.bazel +++ b/pkg/rpc/BUILD.bazel @@ -14,6 +14,7 @@ go_library( "context.go", "context_testutils.go", "drpc.go", + "drpc_logger.go", "errors.go", "grpc.go", "heartbeat.go", diff --git a/pkg/rpc/drpc.go b/pkg/rpc/drpc.go index 5d6c8ce74db7..e7d66de964cb 100644 --- a/pkg/rpc/drpc.go +++ b/pkg/rpc/drpc.go @@ -65,12 +65,14 @@ func DialDRPC( drpcclient.WithShouldRecordFunc(shouldRecordFunc)) drpcPoolMetrics := rpcCtx.DRPCPoolMetrics() + logger := drpcLogger{ctx: ctx, depth: 1} // TODO(server): could use connection class instead of empty key here. pool := drpcpool.New[struct{}, drpcpool.Conn](drpcpool.Options{ Expiration: defaultDRPCConnIdleTimeout, Metrics: drpcPoolMetrics, Labels: map[string]string{"target": target, "class": class.String()}, ShouldRecord: shouldRecordFunc, + Logger: logger, }) pooledConn := pool.Get(ctx /* unused */, struct{}{}, func(ctx context.Context, @@ -327,7 +329,7 @@ func makeStopperInterceptors( } // NewDRPCServer creates a new DRPCServer with the provided rpc context. -func NewDRPCServer(_ context.Context, rpcCtx *Context, opts ...ServerOption) (DRPCServer, error) { +func NewDRPCServer(ctx context.Context, rpcCtx *Context, opts ...ServerOption) (DRPCServer, error) { d := &drpcServer{} var o serverOpts @@ -403,7 +405,10 @@ func NewDRPCServer(_ context.Context, rpcCtx *Context, opts ...ServerOption) (DR mux := drpcmux.NewWithInterceptors(unaryInterceptors, streamInterceptors) + logger := drpcLogger{ctx: ctx, depth: 1} + d.Server = drpcserver.NewWithOptions(mux, drpcserver.Options{ + Logger: logger, // The reader's max buffer size defaults to 4mb, and if it is exceeded (such // as happens with AddSSTable) the RPCs fail. Manager: drpcmanager.Options{ diff --git a/pkg/rpc/drpc_logger.go b/pkg/rpc/drpc_logger.go new file mode 100644 index 000000000000..4d322fbe5ae6 --- /dev/null +++ b/pkg/rpc/drpc_logger.go @@ -0,0 +1,41 @@ +// Copyright 2026 The Cockroach Authors. +// +// Use of this software is governed by the CockroachDB Software License +// included in the /LICENSE file. + +package rpc + +import ( + "context" + + "github.com/cockroachdb/cockroach/pkg/util/log" + "storj.io/drpc" +) + +// drpcLogger implements the drpc.Logger interface, routing DRPC log messages +// to CockroachDB's DEV logging channel, the same channel used for gRPC +// library logs. Debugf is routed through verbose logging (VEventfDepth) at +// verbosity level 2, so debug messages are suppressed by default and only +// appear when an operator enables verbose logging (--vmodule or --verbosity). +type drpcLogger struct { + ctx context.Context + depth int +} + +var _ drpc.Logger = drpcLogger{} + +func (l drpcLogger) Debugf(format string, args ...interface{}) { + log.Dev.VEventfDepth(l.ctx, l.depth+1, 2, format, args...) +} + +func (l drpcLogger) Infof(format string, args ...interface{}) { + log.Dev.InfofDepth(l.ctx, l.depth+1, format, args...) +} + +func (l drpcLogger) Errorf(format string, args ...interface{}) { + log.Dev.ErrorfDepth(l.ctx, l.depth+1, format, args...) +} + +func (l drpcLogger) Fatalf(format string, args ...interface{}) { + log.Dev.FatalfDepth(l.ctx, l.depth+1, format, args...) +} diff --git a/pkg/testutils/lint/passes/fmtsafe/functions.go b/pkg/testutils/lint/passes/fmtsafe/functions.go index bb3167dffdd7..a78ca6710738 100644 --- a/pkg/testutils/lint/passes/fmtsafe/functions.go +++ b/pkg/testutils/lint/passes/fmtsafe/functions.go @@ -80,6 +80,10 @@ var requireConstFmt = map[string]bool{ "(github.com/cockroachdb/cockroach/pkg/rpc.breakerLogger).Debugf": true, "(github.com/cockroachdb/cockroach/pkg/rpc.breakerLogger).Infof": true, + "(github.com/cockroachdb/cockroach/pkg/rpc.drpcLogger).Debugf": true, + "(github.com/cockroachdb/cockroach/pkg/rpc.drpcLogger).Infof": true, + "(github.com/cockroachdb/cockroach/pkg/rpc.drpcLogger).Errorf": true, + "(github.com/cockroachdb/cockroach/pkg/rpc.drpcLogger).Fatalf": true, "(*github.com/cockroachdb/cockroach/pkg/internal/rsg/yacc.Tree).errorf": true, From 653856fe5b50659e91422377296493b705e80694 Mon Sep 17 00:00:00 2001 From: Chandra Thumuluru Date: Thu, 7 May 2026 12:14:37 +0530 Subject: [PATCH 2/2] go.mod: update DRPC to latest drpc-logging commit Pick up the squashed commit that removes redundant logger fields from Manager, Stream, and Pool (opts.Logger used directly). Co-Authored-By: roachdev-claude --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a530de935c77..883eff55e4cd 100644 --- a/go.mod +++ b/go.mod @@ -561,7 +561,7 @@ replace github.com/docker/docker => github.com/moby/moby v25.0.14+incompatible replace github.com/gogo/protobuf => github.com/cockroachdb/gogoproto v1.3.3-0.20241216150617-2358cdb156a1 -replace storj.io/drpc => github.com/cthumuluru-crdb/drpc v0.0.0-20260506121721-e3afd627388d +replace storj.io/drpc => github.com/cthumuluru-crdb/drpc v0.0.0-20260507064232-7bab1561ac48 // Note: This forked dependency adds a commit that opens up some // private APIs to enable us to make some perf improvements to diff --git a/go.sum b/go.sum index a5be3879fca6..8555c7164b7b 100644 --- a/go.sum +++ b/go.sum @@ -728,8 +728,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= -github.com/cthumuluru-crdb/drpc v0.0.0-20260506121721-e3afd627388d h1:fjs828Q5HXRl8UlR3rdQhD+R1S2vciNRwwQed1Qd0lU= -github.com/cthumuluru-crdb/drpc v0.0.0-20260506121721-e3afd627388d/go.mod h1:jeOpcnHh3/TvQ7K2kYXyLUMOMoMpuxp5vtdmtNPVW+8= +github.com/cthumuluru-crdb/drpc v0.0.0-20260507064232-7bab1561ac48 h1:3FIjzlW0frfJEd+HSLKLyIPYZKti8a+3Fz5Fw0Egl8U= +github.com/cthumuluru-crdb/drpc v0.0.0-20260507064232-7bab1561ac48/go.mod h1:jeOpcnHh3/TvQ7K2kYXyLUMOMoMpuxp5vtdmtNPVW+8= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=