diff --git a/CHANGELOG.md b/CHANGELOG.md index 659fc737..95cc57a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Fixed + +- Fix to check error of etcd watch response in [#267](https://github.com/cybozu-go/sabakan/pull/267) + ## [2.13.2] - 2023-02-24 ### Changed diff --git a/models/etcd/watch_stateful.go b/models/etcd/watch_stateful.go index 170c5cea..6b1b1572 100644 --- a/models/etcd/watch_stateful.go +++ b/models/etcd/watch_stateful.go @@ -139,7 +139,12 @@ RETRY: env.Stop() for resp := range rch { - if resp.CompactRevision != 0 { + err := resp.Err() + if err != nil { + if resp.CompactRevision == 0 { + return err + } + log.Warn("database has been compacted; re-initializing", map[string]interface{}{ "compactedrev": resp.CompactRevision, }) diff --git a/models/etcd/watch_stateless.go b/models/etcd/watch_stateless.go index 7b53e0ec..7096fdf0 100644 --- a/models/etcd/watch_stateless.go +++ b/models/etcd/watch_stateless.go @@ -94,6 +94,9 @@ func (d *driver) startStatelessWatcher(ctx context.Context, ch, indexCh chan<- s clientv3.WithRev(rev+1), ) for wresp := range rch { + if err := wresp.Err(); err != nil { + return err + } for _, ev := range wresp.Events { var err error key := string(ev.Kv.Key)