看了下 watch 的说明,在指定 watch 的 revision 被 compact 时或者 context 取消或到期,watch chan 会被 close 。 以下是我遇到的一个疑似被 close 的场景,已知问题是(服务存在大量与 etcd 的短连接)。
for {
ach := etcdClientV3.Watch(context.Background(), "/test", clientv3.WithPrefix())
for {
select {
case wch := <- ach {
fmt.Println("recv chan")
}
}
}
}
尝试过往 etcdput 大量数据,再程序运行过程再 compact. 未能成功复现。