service/rpc: clean irrelevant net/rpc error messages

Fixes #378
This commit is contained in:
aarzilli 2016-01-29 12:37:58 +01:00 committed by Derek Parker
parent b94e2bd0ec
commit fb7210934d
2 changed files with 23 additions and 13 deletions

@ -14,6 +14,10 @@ import (
"github.com/derekparker/delve/service/debugger" "github.com/derekparker/delve/service/debugger"
) )
type ServerImpl struct {
s *RPCServer
}
type RPCServer struct { type RPCServer struct {
// config is all the information necessary to start the debugger and server. // config is all the information necessary to start the debugger and server.
config *service.Config config *service.Config
@ -24,44 +28,46 @@ type RPCServer struct {
} }
// NewServer creates a new RPCServer. // NewServer creates a new RPCServer.
func NewServer(config *service.Config, logEnabled bool) *RPCServer { func NewServer(config *service.Config, logEnabled bool) *ServerImpl {
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
if !logEnabled { if !logEnabled {
log.SetOutput(ioutil.Discard) log.SetOutput(ioutil.Discard)
} }
return &RPCServer{ return &ServerImpl{
config: config, &RPCServer{
listener: config.Listener, config: config,
listener: config.Listener,
},
} }
} }
// Stop detaches from the debugger and waits for it to stop. // Stop detaches from the debugger and waits for it to stop.
func (s *RPCServer) Stop(kill bool) error { func (s *ServerImpl) Stop(kill bool) error {
return s.debugger.Detach(kill) return s.s.debugger.Detach(kill)
} }
// Run starts a debugger and exposes it with an HTTP server. The debugger // Run starts a debugger and exposes it with an HTTP server. The debugger
// itself can be stopped with the `detach` API. Run blocks until the HTTP // itself can be stopped with the `detach` API. Run blocks until the HTTP
// server stops. // server stops.
func (s *RPCServer) Run() error { func (s *ServerImpl) Run() error {
var err error var err error
// Create and start the debugger // Create and start the debugger
if s.debugger, err = debugger.New(&debugger.Config{ if s.s.debugger, err = debugger.New(&debugger.Config{
ProcessArgs: s.config.ProcessArgs, ProcessArgs: s.s.config.ProcessArgs,
AttachPid: s.config.AttachPid, AttachPid: s.s.config.AttachPid,
}); err != nil { }); err != nil {
return err return err
} }
go func() { go func() {
c, err := s.listener.Accept() c, err := s.s.listener.Accept()
if err != nil { if err != nil {
panic(err) panic(err)
} }
rpcs := grpc.NewServer() rpcs := grpc.NewServer()
rpcs.Register(s) rpcs.Register(s.s)
rpcs.ServeCodec(jsonrpc.NewServerCodec(c)) rpcs.ServeCodec(jsonrpc.NewServerCodec(c))
}() }()
return nil return nil
@ -76,6 +82,10 @@ func (s *RPCServer) Detach(kill bool, ret *int) error {
return s.debugger.Detach(kill) return s.debugger.Detach(kill)
} }
func (s *ServerImpl) Restart() error {
return s.s.Restart(nil, nil)
}
func (s *RPCServer) Restart(arg1 interface{}, arg2 *int) error { func (s *RPCServer) Restart(arg1 interface{}, arg2 *int) error {
if s.config.AttachPid != 0 { if s.config.AttachPid != 0 {
return errors.New("cannot restart process Delve did not create") return errors.New("cannot restart process Delve did not create")

@ -122,7 +122,7 @@ func TestRestart_attachPid(t *testing.T) {
Listener: nil, Listener: nil,
AttachPid: 999, AttachPid: 999,
}, false) }, false)
if err := server.Restart(nil, nil); err == nil { if err := server.Restart(); err == nil {
t.Fatal("expected error on restart after attaching to pid but got none") t.Fatal("expected error on restart after attaching to pid but got none")
} }
} }