@@ -9,91 +9,20 @@ import (
9
9
"context"
10
10
"crypto/tls"
11
11
"math"
12
- "net"
13
12
"time"
14
13
15
- "github.com/cockroachdb/cockroach/pkg/util/log"
16
- "github.com/cockroachdb/errors"
17
14
"storj.io/drpc"
18
15
"storj.io/drpc/drpcconn"
19
16
"storj.io/drpc/drpcmanager"
20
17
"storj.io/drpc/drpcmigrate"
21
- "storj.io/drpc/drpcmux"
22
18
"storj.io/drpc/drpcpool"
23
- "storj.io/drpc/drpcserver"
24
19
"storj.io/drpc/drpcstream"
25
20
"storj.io/drpc/drpcwire"
26
21
)
27
22
28
- // ErrDRPCDisabled is returned from hosts that in principle could but do not
29
- // have the DRPC server enabled.
30
- var ErrDRPCDisabled = errors .New ("DRPC is not enabled" )
31
-
32
23
// Default idle connection timeout for DRPC connections in the pool.
33
24
var defaultDRPCConnIdleTimeout = 5 * time .Minute
34
25
35
- type drpcServerI interface {
36
- Serve (ctx context.Context , lis net.Listener ) error
37
- }
38
-
39
- type drpcMuxI interface {
40
- Register (srv interface {}, desc drpc.Description ) error
41
- }
42
-
43
- type DRPCServer struct {
44
- Srv drpcServerI
45
- Mux drpcMuxI
46
- TLSCfg * tls.Config
47
- }
48
-
49
- var _ drpcServerI = (* drpcserver .Server )(nil )
50
- var _ drpcServerI = (* drpcOffServer )(nil )
51
-
52
- func newDRPCServer (_ context.Context , rpcCtx * Context ) (* DRPCServer , error ) {
53
- var dmux drpcMuxI = & drpcOffServer {}
54
- var dsrv drpcServerI = & drpcOffServer {}
55
- var tlsCfg * tls.Config
56
-
57
- if ExperimentalDRPCEnabled .Get (& rpcCtx .Settings .SV ) {
58
- mux := drpcmux .New ()
59
- dsrv = drpcserver .NewWithOptions (mux , drpcserver.Options {
60
- Log : func (err error ) {
61
- log .Warningf (context .Background (), "drpc server error %v" , err )
62
- },
63
- // The reader's max buffer size defaults to 4mb, and if it is exceeded (such
64
- // as happens with AddSSTable) the RPCs fail.
65
- Manager : drpcmanager.Options {Reader : drpcwire.ReaderOptions {MaximumBufferSize : math .MaxInt }},
66
- })
67
- dmux = mux
68
-
69
- var err error
70
- tlsCfg , err = rpcCtx .GetServerTLSConfig ()
71
- if err != nil {
72
- return nil , err
73
- }
74
-
75
- // NB: any server middleware (server interceptors in gRPC parlance) would go
76
- // here:
77
- // dmux = whateverMiddleware1(dmux)
78
- // dmux = whateverMiddleware2(dmux)
79
- // ...
80
- //
81
- // Each middleware must implement the Handler interface:
82
- //
83
- // HandleRPC(stream Stream, rpc string) error
84
- //
85
- // where Stream
86
- // See here for an example:
87
- // https://github.com/bryk-io/pkg/blob/4da5fbfef47770be376e4022eab5c6c324984bf7/net/drpc/server.go#L91-L101
88
- }
89
-
90
- return & DRPCServer {
91
- Srv : dsrv ,
92
- Mux : dmux ,
93
- TLSCfg : tlsCfg ,
94
- }, nil
95
- }
96
-
97
26
func dialDRPC (
98
27
rpcCtx * Context ,
99
28
) func (ctx context.Context , target string , _ ConnectionClass ) (drpc.Conn , error ) {
@@ -162,22 +91,4 @@ func (c *closeEntirePoolConn) Close() error {
162
91
return c .pool .Close ()
163
92
}
164
93
165
- // drpcOffServer is used for drpcServerI and drpcMuxI if the DRPC server is
166
- // disabled. It immediately closes accepted connections and returns
167
- // ErrDRPCDisabled.
168
- type drpcOffServer struct {}
169
-
170
- func (srv * drpcOffServer ) Serve (_ context.Context , lis net.Listener ) error {
171
- conn , err := lis .Accept ()
172
- if err != nil {
173
- return err
174
- }
175
- _ = conn .Close ()
176
- return ErrDRPCDisabled
177
- }
178
-
179
- func (srv * drpcOffServer ) Register (interface {}, drpc.Description ) error {
180
- return nil
181
- }
182
-
183
94
type DRPCConnection = Connection [drpc.Conn ]
0 commit comments