为了解决保证不出现死锁,每个分布式锁都有一个超时时间,解锁由一个 task 来执行。
最近发现无法解锁,也就是解锁task挂了,pending 了。
我们调试发现到查询 PostgreSQL 数据库的时候 pending 了,就在哪里停住了。
我们调试了非常的久,打印了些日志。
发现print count 会pending。
最后我们找到了问题所在,我们使用了不安全的 maximum 函数。
由于 haskell 是惰性语言,所以在在执行出没有挂,在 使用的时候挂了。
maximum [] 会使得task直接挂掉,进而没有执行。
我们只要简单的修复一下,问题便解决了。
网友评论