V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kalista
V2EX  ›  Go 编程语言

Etcd 的 watch chan 被 close,不知道应该如何复现

  •  
  •   kalista · 2022-03-25 17:39:37 +08:00 · 1498 次点击
    这是一个创建于 973 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了下 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. 未能成功复现。

    2 条回复    2022-03-25 19:34:43 +08:00
    BlindingDark
        1
    BlindingDark  
       2022-03-25 19:18:26 +08:00 via Android
    用的什么环境,etcd 的版本是多少?
    kalista
        2
    kalista  
    OP
       2022-03-25 19:34:43 +08:00 via Android
    @BlindingDark sry ,忘记说了,etcd 版本是 3.3 。https://github.com/etcd-io/etcd/issues/8668 按这个 issue 的描述,compact 是可能会在这种场景导致 channel 被 close ,最终的复现方法比较另类,先在程序循环内断点断住,写入大量数据后,再执行 compact ,把断点去掉,等待一段时间可以复现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1755 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:32 · PVG 00:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.