遇到问题的场景
pod重启的时候会遇到
怀疑的方向
第一步: pod1 下线
第二步: pod2 发现node数变更,触发zk的watch,当去判断时,自己也被close了(也被下线了);然后checkState异常
这么怀疑的原因:
org.apache.curator.framework.imps.CuratorFrameworkImpl#close 先把state给改成了stopped;
并发场景,watcher线程org.apache.curator.framework.state.ConnectionStateListener#stateChanged 发现节点变更了,进行了 client.checkExists()
13:57:38.947 [][main-EventThread][NodeCache][] ERROR -
java.lang.IllegalStateException: Expected state [STARTED] was [STOPPED]
at org.apache.curator.shaded.com.google.common.base.Preconditions.checkState(Preconditions.java:823)
at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkState(CuratorFrameworkImpl.java:432)
at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkExists(CuratorFrameworkImpl.java:459)
at org.apache.curator.framework.recipes.cache.NodeCache.reset(NodeCache.java:258)
at org.apache.curator.framework.recipes.cache.NodeCache.access$100(NodeCache.java:57)
at org.apache.curator.framework.recipes.cache.NodeCache$2.process(NodeCache.java:101)
at org.apache.curator.framework.imps.NamespaceWatcher.process(NamespaceWatcher.java:77)
at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:535)
at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:510)
讨论的点
- 有没有解决方案,解决这个error日志;我在做error日志处理(优雅关机),不期望重启的时候有ERROR日志