From 135a40751ea9cb090b49da8fbb15f476861cf983 Mon Sep 17 00:00:00 2001 From: Anthony Romano Date: Thu, 30 Mar 2017 18:13:24 -0700 Subject: [PATCH] v3rpc: force RangeEnd=nil if length is 0 gRPC will replace empty strings with nil, but for the embedded case it's possible for []byte{} to slip in and confuse the single key / >= key watch logic. --- etcdserver/api/v3rpc/watch.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/etcdserver/api/v3rpc/watch.go b/etcdserver/api/v3rpc/watch.go index f0215531d..e27c1f374 100644 --- a/etcdserver/api/v3rpc/watch.go +++ b/etcdserver/api/v3rpc/watch.go @@ -171,6 +171,11 @@ func (sws *serverWatchStream) recvLoop() error { // \x00 is the smallest key creq.Key = []byte{0} } + if len(creq.RangeEnd) == 0 { + // force nil since watchstream.Watch distinguishes + // between nil and []byte{} for single key / >= + creq.RangeEnd = nil + } if len(creq.RangeEnd) == 1 && creq.RangeEnd[0] == 0 { // support >= key queries creq.RangeEnd = []byte{}