mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
grpcproxy: do not resend create event after leader loss
Only set CreateNotify if no watch responses have been received.
This commit is contained in:
parent
e40da39143
commit
90ea3fbadc
@ -54,13 +54,20 @@ func newWatchBroadcast(wp *watchProxy, w *watcher, update func(*watchBroadcast))
|
||||
defer close(wb.donec)
|
||||
// loop because leader loss will close channel
|
||||
for cctx.Err() == nil {
|
||||
wch := wp.cw.Watch(cctx, w.wr.key,
|
||||
opts := []clientv3.OpOption{
|
||||
clientv3.WithRange(w.wr.end),
|
||||
clientv3.WithProgressNotify(),
|
||||
clientv3.WithCreatedNotify(),
|
||||
clientv3.WithRev(wb.nextrev),
|
||||
clientv3.WithPrevKV(),
|
||||
)
|
||||
}
|
||||
// The create notification should be the first response;
|
||||
// if the watch is recreated following leader loss, it
|
||||
// shouldn't post a second create response to the client.
|
||||
if wb.responses == 0 {
|
||||
opts = append(opts, clientv3.WithCreatedNotify())
|
||||
}
|
||||
wch := wp.cw.Watch(cctx, w.wr.key, opts...)
|
||||
|
||||
for wr := range wch {
|
||||
wb.bcast(wr)
|
||||
update(wb)
|
||||
|
Loading…
x
Reference in New Issue
Block a user