【发布时间】:2019-10-28 07:14:56
【问题描述】:
当我使用 etcd 客户端 go.etcd.io/etcd/clientv3 观看 etcd 事件时,我发现我会收到许多带有空事件的响应。
在下面登录:
ime="2019-10-27T20:39:13+08:00" level=debug msg="ETCD 观察响应: {Header:{ClusterId:0 MemberId:0 Revision:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false 创建:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD 观察响应:{Header:{ClusterId:0 MemberId:0 修订:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false Created:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD watch response: {Header:{ClusterId:0 MemberId:0 Revision:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false 创建:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD 观察响应:{Header:{ClusterId:0 MemberId:0 修订:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false Created:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD watch response: {Header:{ClusterId:0 MemberId:0 Revision:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false 创建:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD 观察响应:{Header:{ClusterId:0 MemberId:0 修订:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false Created:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD watch response: {Header:{ClusterId:0 MemberId:0 Revision:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false 创建:false closeErr: cancelReason:}" file="backend.go:135" time="2019-10-27T20:39:13+08:00" level=debug msg="ETCD 观察响应:{Header:{ClusterId:0 MemberId:0 修订:0 RaftTerm:0} 事件:[] CompactRevision:0 已取消:false Created:false closeErr: cancelReason:}" file="backend.go:135"
提示:backend.go:135 是: fmt.Printf("%v", resp),resp是从watchChan收到的
func (e *EtcdClient) watchWithOptions(ctx context.Context, key string, opts ...clientv3.OpOption) clientv3.WatchChan {
if e.client == nil {
return nil
}
key = e.withPrefix(key)
return e.client.Watch(ctx, key, opts...)
}
// WatchPrefix watch the kvs change with same prefix
func (e *EtcdClient) WatchPrefix(ctx context.Context, prefix string) clientv3.WatchChan {
return e.watchWithOptions(ctx, prefix, clientv3.WithPrefix(), clientv3.WithPrevKV())
}
除了put、delete事件,实际输出的是无效的空事件
【问题讨论】: