diff --git a/proxy/grpcproxy/watch.go b/proxy/grpcproxy/watch.go index 3a1c26b33..d17d3fa36 100644 --- a/proxy/grpcproxy/watch.go +++ b/proxy/grpcproxy/watch.go @@ -213,6 +213,10 @@ func (wps *watchProxyStream) recvLoop() error { progress: cr.ProgressNotify, filters: v3rpc.FiltersFromRequest(cr), } + if !w.wr.valid() { + w.post(&pb.WatchResponse{WatchId: -1, Created: true, Canceled: true}) + continue + } wps.nextWatcherID++ w.nextrev = cr.StartRevision wps.watchers[w.id] = w diff --git a/proxy/grpcproxy/watcher.go b/proxy/grpcproxy/watcher.go index 761daa9f4..96ff08420 100644 --- a/proxy/grpcproxy/watcher.go +++ b/proxy/grpcproxy/watcher.go @@ -27,6 +27,10 @@ type watchRange struct { key, end string } +func (wr *watchRange) valid() bool { + return len(wr.end) == 0 || wr.end > wr.key || (wr.end[0] == 0 && len(wr.end) == 1) +} + type watcher struct { // user configuration