Skip to content

Commit 9da2d49

Browse files
authored
[*] reset cancelled WATCH, fixes cybertec-postgresql#228 (cybertec-postgresql#229)
* [*] refetch etcd key value if `WATCH` RPC fails, fixes cybertec-postgresql#228 * [*] handle canceled watch --------------- Co-authored by @lukasertl
1 parent 993354e commit 9da2d49

File tree

1 file changed

+8
-10
lines changed

1 file changed

+8
-10
lines changed

checker/etcd_leader_checker.go

+8-10
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ import (
44
"context"
55
"crypto/tls"
66
"crypto/x509"
7-
"errors"
87
"fmt"
98
"log"
109
"os"
1110
"time"
1211

1312
"github.com/cybertec-postgresql/vip-manager/vipconfig"
14-
rpcv3 "go.etcd.io/etcd/api/v3/v3rpc/rpctypes"
1513
clientv3 "go.etcd.io/etcd/client/v3"
1614
)
1715

@@ -80,7 +78,7 @@ func (elc *EtcdLeaderChecker) get(ctx context.Context, out chan<- bool) {
8078
return
8179
}
8280
for _, kv := range resp.Kvs {
83-
log.Printf("Current Leader from DCS: %s", kv.Value)
81+
log.Printf("current leader from DCS: %s", kv.Value)
8482
out <- string(kv.Value) == elc.Nodename
8583
}
8684
}
@@ -94,18 +92,18 @@ func (elc *EtcdLeaderChecker) watch(ctx context.Context, out chan<- bool) error
9492
case <-ctx.Done():
9593
return ctx.Err()
9694
case watchResp := <-watchChan:
95+
if watchResp.Canceled {
96+
watchChan = elc.Watch(ctx, elc.Key)
97+
log.Println("reset cancelled WATCH on " + elc.Key)
98+
continue
99+
}
97100
if err := watchResp.Err(); err != nil {
98-
if errors.Is(err, rpcv3.ErrCompacted) { // revision is compacted, try direct get key
99-
elc.get(ctx, out)
100-
} else {
101-
log.Printf("etcd watcher returned error: %s", err)
102-
out <- false
103-
}
101+
elc.get(ctx, out) // RPC failed, try to get the key directly to be on the safe side
104102
continue
105103
}
106104
for _, event := range watchResp.Events {
107105
out <- string(event.Kv.Value) == elc.Nodename
108-
log.Printf("Current Leader from DCS: %s", event.Kv.Value)
106+
log.Printf("current leader from DCS: %s", event.Kv.Value)
109107
}
110108
}
111109
}

0 commit comments

Comments
 (0)