THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- 凭印象和灵机一动来 debug 是不靠谱的。最不会说慌的还是代码,从流程看起,理清整个流程对于 debug 会有很大的帮助。
- 每个人的关注点不一样,遇到瓶颈时可以向别人讲解自己的 debug 过程,这样一方面有助于理顺自己的 debug 思路(也可能发现自己想错的一些地方),另一方面也便于其他人用另一个视角来帮助 debug。
- 对于资源泄露类 bug,最靠谱的还是直接 dump 内存或者通过 runtime 的形式把对应的值打出来。如果这次 debug 我们早早的去看 ClusterQueryManager 的成员变量,可能就更早的发现实际由注册的 的成员变量,可能就更早的发现实际有协调者节点注册的 queryId 没释放。
拓展:
虽然这个 bug 也解了,但是在更进一步了解了查询流程后,也有了一层隐隐的担忧。因为集群任何一个节点都可能发生宕机,所以这种跨节点管理引用的方式需要多次 rpc 才能释放引用,这是非常危险的,一旦有节点宕机,便可能导致其他节点的部分引用没办法释放。
...