From c940961574358a3ff0ca0d30ba29db1f57691923 Mon Sep 17 00:00:00 2001 From: ben-toogood Date: Wed, 24 Jun 2020 11:09:16 +0100 Subject: [PATCH] router: update interface (#1732) * router: replace Start and Stop with Close * router: update default network to micro * router: update tests --- client/selector/router/router.go | 2 +- go.mod | 2 +- go.sum | 1 + network/default.go | 9 ++------- router/default.go | 28 ++++++++++++++++++++-------- router/default_test.go | 14 +++----------- router/router.go | 8 +++----- router/service/service.go | 11 ++--------- 8 files changed, 33 insertions(+), 42 deletions(-) diff --git a/client/selector/router/router.go b/client/selector/router/router.go index e93fd08b..3988f597 100644 --- a/client/selector/router/router.go +++ b/client/selector/router/router.go @@ -184,7 +184,7 @@ func (r *routerSelector) Reset(service string) { func (r *routerSelector) Close() error { // stop the router advertisements - return r.r.Stop() + return r.r.Close() } func (r *routerSelector) String() string { diff --git a/go.mod b/go.mod index dea31673..48491e5c 100644 --- a/go.mod +++ b/go.mod @@ -68,7 +68,7 @@ require ( golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1 google.golang.org/grpc v1.26.0 - google.golang.org/protobuf v1.22.0 + google.golang.org/protobuf v1.22.0 // indirect gopkg.in/telegram-bot-api.v4 v4.6.4 sigs.k8s.io/yaml v1.1.0 // indirect ) diff --git a/go.sum b/go.sum index 06dc6178..8f86e156 100644 --- a/go.sum +++ b/go.sum @@ -223,6 +223,7 @@ github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51 github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= diff --git a/network/default.go b/network/default.go index f777b8c4..9df4b0c9 100644 --- a/network/default.go +++ b/network/default.go @@ -1746,11 +1746,6 @@ func (n *network) Connect() error { // create closed channel n.closed = make(chan bool) - // start the router - if err := n.options.Router.Start(); err != nil { - return err - } - // start advertising routes advertChan, err := n.options.Router.Advertise() if err != nil { @@ -1785,8 +1780,8 @@ func (n *network) close() error { return err } - // stop the router - if err := n.router.Stop(); err != nil { + // close the router + if err := n.router.Close(); err != nil { return err } diff --git a/router/default.go b/router/default.go index f3b329a4..ca7adc1f 100644 --- a/router/default.go +++ b/router/default.go @@ -45,15 +45,25 @@ func newRouter(opts ...Option) Router { o(&options) } - return &router{ + // construct the router + r := &router{ options: options, table: newTable(), subscribers: make(map[string]chan *Advert), } + + // start the router and return + r.start() + return r } // Init initializes router with given options func (r *router) Init(opts ...Option) error { + // stop the router before we initialize + if err := r.Close(); err != nil { + return err + } + r.Lock() defer r.Unlock() @@ -61,6 +71,11 @@ func (r *router) Init(opts ...Option) error { o(&r.options) } + // restart the router + if err := r.start(); err != nil { + return err + } + return nil } @@ -399,11 +414,8 @@ func (r *router) drain() { } } -// Start starts the router -func (r *router) Start() error { - r.Lock() - defer r.Unlock() - +// start the router. Should be called under lock. +func (r *router) start() error { if r.running { return nil } @@ -615,8 +627,8 @@ func (r *router) Watch(opts ...WatchOption) (Watcher, error) { return r.table.Watch(opts...) } -// Stop stops the router -func (r *router) Stop() error { +// Close the router +func (r *router) Close() error { r.Lock() defer r.Unlock() diff --git a/router/default_test.go b/router/default_test.go index 4ed2f08e..5c2d7845 100644 --- a/router/default_test.go +++ b/router/default_test.go @@ -15,19 +15,15 @@ func routerTestSetup() Router { return newRouter(Registry(r)) } -func TestRouterStartStop(t *testing.T) { +func TestRouterClose(t *testing.T) { r := routerTestSetup() - if err := r.Start(); err != nil { - t.Errorf("failed to start router: %v", err) - } - _, err := r.Advertise() if err != nil { t.Errorf("failed to start advertising: %v", err) } - if err := r.Stop(); err != nil { + if err := r.Close(); err != nil { t.Errorf("failed to stop router: %v", err) } if len(os.Getenv("IN_TRAVIS_CI")) == 0 { @@ -41,10 +37,6 @@ func TestRouterAdvertise(t *testing.T) { // lower the advertise interval AdvertiseEventsTick = 500 * time.Millisecond - if err := r.Start(); err != nil { - t.Errorf("failed to start router: %v", err) - } - ch, err := r.Advertise() if err != nil { t.Errorf("failed to start advertising: %v", err) @@ -134,7 +126,7 @@ func TestRouterAdvertise(t *testing.T) { wg.Wait() - if err := r.Stop(); err != nil { + if err := r.Close(); err != nil { t.Errorf("failed to stop router: %v", err) } } diff --git a/router/router.go b/router/router.go index 20316477..e379b188 100644 --- a/router/router.go +++ b/router/router.go @@ -11,7 +11,7 @@ var ( // DefaultName is default router service name DefaultName = "go.micro.router" // DefaultNetwork is default micro network - DefaultNetwork = "go.micro" + DefaultNetwork = "micro" // DefaultRouter is default network router DefaultRouter = NewRouter() ) @@ -32,10 +32,8 @@ type Router interface { Lookup(...QueryOption) ([]Route, error) // Watch returns a watcher which tracks updates to the routing table Watch(opts ...WatchOption) (Watcher, error) - // Start starts the router - Start() error - // Stop stops the router - Stop() error + // Close the router + Close() error // Returns the router implementation String() string } diff --git a/router/service/service.go b/router/service/service.go index 97b329e7..1f6ce1ea 100644 --- a/router/service/service.go +++ b/router/service/service.go @@ -85,13 +85,6 @@ func (s *svc) Table() router.Table { return s.table } -// Start starts the service -func (s *svc) Start() error { - s.Lock() - defer s.Unlock() - return nil -} - func (s *svc) advertiseEvents(advertChan chan *router.Advert, stream pb.Router_AdvertiseService) error { go func() { <-s.exit @@ -202,8 +195,8 @@ func (s *svc) Process(advert *router.Advert) error { return nil } -// Remote router cannot be stopped -func (s *svc) Stop() error { +// Remote router cannot be closed +func (s *svc) Close() error { s.Lock() defer s.Unlock()