From 73b0a0ed0e272b9600c602e0a39dad40b42b3543 Mon Sep 17 00:00:00 2001 From: Milos Gajdos Date: Sun, 9 Jun 2019 15:51:27 +0100 Subject: [PATCH] Return registry.ErrWatcherStopped when consul watcher stops. The original code returns "result chan closed" errors.Error which does not carry higher semantics signal to downstream despite go-micro having a clearly defined Error for this behaviour. This commit fixes that and lets the downstream i.e. consumer of this code to act based on different errors. --- registry/consul/watcher.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/registry/consul/watcher.go b/registry/consul/watcher.go index 2fc81886..1bb9d5b7 100644 --- a/registry/consul/watcher.go +++ b/registry/consul/watcher.go @@ -1,7 +1,6 @@ package consul import ( - "errors" "log" "os" "sync" @@ -246,14 +245,16 @@ func (cw *consulWatcher) handle(idx uint64, data interface{}) { func (cw *consulWatcher) Next() (*registry.Result, error) { select { case <-cw.exit: - return nil, errors.New("result chan closed") + return nil, registry.ErrWatcherStopped case r, ok := <-cw.next: if !ok { - return nil, errors.New("result chan closed") + return nil, registry.ErrWatcherStopped } return r, nil } - return nil, errors.New("result chan closed") + // NOTE: This is a dead code path: e.g. it will never be reached + // as we return in all previous code paths never leading to this return + return nil, registry.ErrWatcherStopped } func (cw *consulWatcher) Stop() {