Skip to content

Commit 6b9c4ac

Browse files
authored
Merge ff1b7d5 into blathers/backport-release-24.3-146267
2 parents 496d5c6 + ff1b7d5 commit 6b9c4ac

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

pkg/kv/kvserver/raft_transport_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/cockroachdb/cockroach/pkg/rpc/nodedialer"
2727
"github.com/cockroachdb/cockroach/pkg/settings/cluster"
2828
"github.com/cockroachdb/cockroach/pkg/testutils"
29+
"github.com/cockroachdb/cockroach/pkg/testutils/skip"
2930
"github.com/cockroachdb/cockroach/pkg/util"
3031
"github.com/cockroachdb/cockroach/pkg/util/hlc"
3132
"github.com/cockroachdb/cockroach/pkg/util/leaktest"
@@ -111,6 +112,8 @@ type raftTransportTestContext struct {
111112
nodeRPCContext *rpc.Context
112113
gossip *gossip.Gossip
113114
st *cluster.Settings
115+
116+
skipOnListenErr bool // if true, calls Skip on error from net.Listen
114117
}
115118

116119
// clockWithManualSource is a pair of clocks: a manual clock and a clock that
@@ -202,8 +205,12 @@ func (rttc *raftTransportTestContext) AddNodeWithoutGossip(
202205
knobs,
203206
)
204207
rttc.transports[nodeID] = transport
205-
ln, err := netutil.ListenAndServeGRPC(stopper, grpcServer, addr)
208+
ln, err := net.Listen(addr.Network(), addr.String())
209+
if err != nil && rttc.skipOnListenErr {
210+
skip.IgnoreLintf(rttc.t, "skipping test due to listen error: %s", err)
211+
}
206212
require.NoError(rttc.t, err)
213+
require.NoError(rttc.t, netutil.ServeGRPC(stopper, grpcServer, ln))
207214
return transport, ln.Addr()
208215
}
209216

@@ -577,6 +584,11 @@ func TestReopenConnection(t *testing.T) {
577584
StoreID: 2,
578585
ReplicaID: 2,
579586
}
587+
588+
// We're re-listening on an old address here, but the port may be
589+
// in use. In the very rare case of this happening, skip the test.
590+
// See: https://github.com/cockroachdb/cockroach/issues/146175.
591+
rttc.skipOnListenErr = true
580592
serverTransport, serverAddr :=
581593
rttc.AddNodeWithoutGossip(
582594
serverReplica.NodeID,

pkg/util/netutil/net.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ func ListenAndServeGRPC(
3434
if err != nil {
3535
return ln, err
3636
}
37+
if err := ServeGRPC(stopper, server, ln); err != nil {
38+
return nil, err
39+
}
40+
return ln, nil
41+
}
3742

43+
func ServeGRPC(stopper *stop.Stopper, server *grpc.Server, ln net.Listener) error {
3844
ctx := context.TODO()
3945

4046
stopper.AddCloser(stop.CloserFn(server.Stop))
@@ -44,15 +50,12 @@ func ListenAndServeGRPC(
4450
}
4551
if err := stopper.RunAsyncTask(ctx, "listen-quiesce", waitQuiesce); err != nil {
4652
waitQuiesce(ctx)
47-
return nil, err
53+
return err
4854
}
4955

50-
if err := stopper.RunAsyncTask(ctx, "serve", func(context.Context) {
56+
return stopper.RunAsyncTask(ctx, "serve", func(context.Context) {
5157
FatalIfUnexpected(server.Serve(ln))
52-
}); err != nil {
53-
return nil, err
54-
}
55-
return ln, nil
58+
})
5659
}
5760

5861
var httpLogger = log.NewStdLogger(severity.ERROR, "net/http")

0 commit comments

Comments
 (0)