@@ -26,6 +26,7 @@ import (
26
26
"github.com/cockroachdb/cockroach/pkg/rpc/nodedialer"
27
27
"github.com/cockroachdb/cockroach/pkg/settings/cluster"
28
28
"github.com/cockroachdb/cockroach/pkg/testutils"
29
+ "github.com/cockroachdb/cockroach/pkg/testutils/skip"
29
30
"github.com/cockroachdb/cockroach/pkg/util"
30
31
"github.com/cockroachdb/cockroach/pkg/util/hlc"
31
32
"github.com/cockroachdb/cockroach/pkg/util/leaktest"
@@ -111,6 +112,8 @@ type raftTransportTestContext struct {
111
112
nodeRPCContext * rpc.Context
112
113
gossip * gossip.Gossip
113
114
st * cluster.Settings
115
+
116
+ skipOnListenErr bool // if true, calls Skip on error from net.Listen
114
117
}
115
118
116
119
// clockWithManualSource is a pair of clocks: a manual clock and a clock that
@@ -202,8 +205,12 @@ func (rttc *raftTransportTestContext) AddNodeWithoutGossip(
202
205
knobs ,
203
206
)
204
207
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
+ }
206
212
require .NoError (rttc .t , err )
213
+ require .NoError (rttc .t , netutil .ServeGRPC (stopper , grpcServer , ln ))
207
214
return transport , ln .Addr ()
208
215
}
209
216
@@ -577,6 +584,11 @@ func TestReopenConnection(t *testing.T) {
577
584
StoreID : 2 ,
578
585
ReplicaID : 2 ,
579
586
}
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
580
592
serverTransport , serverAddr :=
581
593
rttc .AddNodeWithoutGossip (
582
594
serverReplica .NodeID ,
0 commit comments