mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #6842 from heyitsanthony/watch-prevkv
grpcproxy: support prevKV watcher
This commit is contained in:
commit
a2e86c1371
@ -211,6 +211,7 @@ func (wps *watchProxyStream) recvLoop() error {
|
||||
|
||||
nextrev: cr.StartRevision,
|
||||
progress: cr.ProgressNotify,
|
||||
prevKV: cr.PrevKv,
|
||||
filters: v3rpc.FiltersFromRequest(cr),
|
||||
}
|
||||
if !w.wr.valid() {
|
||||
|
@ -59,6 +59,7 @@ func newWatchBroadcast(wp *watchProxy, w *watcher, update func(*watchBroadcast))
|
||||
clientv3.WithProgressNotify(),
|
||||
clientv3.WithCreatedNotify(),
|
||||
clientv3.WithRev(wb.nextrev),
|
||||
clientv3.WithPrevKV(),
|
||||
)
|
||||
for wr := range wch {
|
||||
wb.bcast(wr)
|
||||
|
@ -37,6 +37,7 @@ type watcher struct {
|
||||
wr watchRange
|
||||
filters []mvcc.FilterFunc
|
||||
progress bool
|
||||
prevKV bool
|
||||
|
||||
// id is the id returned to the client on its watch stream.
|
||||
id int64
|
||||
@ -78,18 +79,22 @@ func (w *watcher) send(wr clientv3.WatchResponse) {
|
||||
}
|
||||
|
||||
filtered := false
|
||||
if len(w.filters) != 0 {
|
||||
for _, filter := range w.filters {
|
||||
if filter(*ev) {
|
||||
filtered = true
|
||||
break
|
||||
}
|
||||
for _, filter := range w.filters {
|
||||
if filter(*ev) {
|
||||
filtered = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !filtered {
|
||||
events = append(events, ev)
|
||||
if filtered {
|
||||
continue
|
||||
}
|
||||
|
||||
if !w.prevKV {
|
||||
evCopy := *ev
|
||||
evCopy.PrevKv = nil
|
||||
ev = &evCopy
|
||||
}
|
||||
events = append(events, ev)
|
||||
}
|
||||
|
||||
if lastRev >= w.nextrev {
|
||||
|
Loading…
x
Reference in New Issue
Block a user