Skip to content

Commit c7e8c9f

Browse files
committed
loopd: make RPC listener configurable
Allows to use external listener, such as in-memory.
1 parent 0f0573c commit c7e8c9f

File tree

3 files changed

+50
-17
lines changed

3 files changed

+50
-17
lines changed

cmd/loopd/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
)
88

99
func main() {
10-
err := loopd.Start()
10+
cfg := loopd.RPCConfig{}
11+
err := loopd.Start(cfg)
1112
if err != nil {
1213
fmt.Println(err)
1314
}

loopd/daemon.go

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,30 @@ func daemon(config *config, lisCfg *listenerCfg) error {
104104
return err
105105
}
106106

107-
log.Infof("Starting REST proxy listener")
108107
restListener, err := lisCfg.restListener()
109108
if err != nil {
110109
return fmt.Errorf("REST proxy unable to listen on %s",
111110
config.RESTListen)
112111
}
113-
defer restListener.Close()
114-
proxy := &http.Server{Handler: mux}
115112

116-
go func() {
117-
err := proxy.Serve(restListener)
118-
// ErrServerClosed is always returned when the proxy is shut
119-
// down, so don't log it.
120-
if err != nil && err != http.ErrServerClosed {
121-
log.Error(err)
122-
}
123-
}()
113+
// A nil listener indicates REST is disabled.
114+
if restListener != nil {
115+
log.Infof("Starting REST proxy listener")
116+
117+
defer restListener.Close()
118+
proxy := &http.Server{Handler: mux}
119+
120+
go func() {
121+
err := proxy.Serve(restListener)
122+
// ErrServerClosed is always returned when the proxy is
123+
// shut down, so don't log it.
124+
if err != nil && err != http.ErrServerClosed {
125+
log.Error(err)
126+
}
127+
}()
128+
} else {
129+
log.Infof("REST proxy disabled")
130+
}
124131

125132
statusChan := make(chan loop.SwapInfo)
126133

@@ -178,7 +185,10 @@ func daemon(config *config, lisCfg *listenerCfg) error {
178185
defer wg.Done()
179186

180187
log.Infof("RPC server listening on %s", grpcListener.Addr())
181-
log.Infof("REST proxy listening on %s", restListener.Addr())
188+
189+
if restListener != nil {
190+
log.Infof("REST proxy listening on %s", restListener.Addr())
191+
}
182192

183193
err = grpcServer.Serve(grpcListener)
184194
if err != nil {

loopd/start.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,41 @@ var (
2727
swapsLock sync.Mutex
2828
)
2929

30-
// newListenerCfg creates and returns a new listenerCfg from the passed config.
31-
func newListenerCfg(config *config) *listenerCfg {
30+
// RPCConfig holds optional options that can be used to make the loop daemon
31+
// communicate on custom connections.
32+
type RPCConfig struct {
33+
// RPCListener is an optional listener that if set will override the
34+
// daemon's gRPC settings, and make the gRPC server listen on this
35+
// listener.
36+
// Note that setting this will also disable REST.
37+
RPCListener net.Listener
38+
}
39+
40+
// newListenerCfg creates and returns a new listenerCfg from the passed config
41+
// and RPCConfig.
42+
func newListenerCfg(config *config, rpcCfg RPCConfig) *listenerCfg {
3243
return &listenerCfg{
3344
grpcListener: func() (net.Listener, error) {
45+
// If a custom RPC listener is set, we will listen on
46+
// it instead of the regular tcp socket.
47+
if rpcCfg.RPCListener != nil {
48+
return rpcCfg.RPCListener, nil
49+
}
50+
3451
return net.Listen("tcp", config.RPCListen)
3552
},
3653
restListener: func() (net.Listener, error) {
54+
// If a custom RPC listener is set, we disable REST.
55+
if rpcCfg.RPCListener != nil {
56+
return nil, nil
57+
}
58+
3759
return net.Listen("tcp", config.RESTListen)
3860
},
3961
}
4062
}
4163

42-
func Start() error {
64+
func Start(rpcCfg RPCConfig) error {
4365
config := defaultConfig
4466

4567
// Parse command line flags.
@@ -112,7 +134,7 @@ func Start() error {
112134
// Print the version before executing either primary directive.
113135
log.Infof("Version: %v", loop.Version())
114136

115-
lisCfg := newListenerCfg(&config)
137+
lisCfg := newListenerCfg(&config, rpcCfg)
116138

117139
// Execute command.
118140
if parser.Active == nil {

0 commit comments

Comments
 (0)