领事锁未释放

时间:2019-07-25 05:10:33

标签: consul

我正在尝试从2个进程(每个进程来自不同的pod)建立锁。在第一次试用中,在第一次试用中,1个进程(假设p1进程获得了锁)成功地获得了锁。但是,当我尝试终止并启动p1进程时,只要p5每5s尝试一次,锁就不会转移到其他进程(p2)。这两个进程都没有获得锁定。

在日志中,我在两个过程日志中都看到错误“已经开始”。当我检查使用ps -ef的领事过程时,那里什么都没有。 而且,如果我尝试停止这两个进程并同时重新启动两个进程,那么没人会得到锁。

commad used "/tmp/consul lock -timeout 5s t1 " while :; do sleep 10; done"" FYI, i am tring in golang exec package as
cmd := "/tmp/consul lock -timeout 5s t1 \" while :; do sleep 10; done\""
aa := exec.Command("/bin/sh", "-c", cmd)
aa.Run()

1 个答案:

答案 0 :(得分:0)

  

timeout-等待获取锁的最大时间,指定为1s或3h之类的持续时间。默认值为0。

您似乎将超时指定为5s。一旦第二个进程未能在5秒钟内获得锁,它将停止尝试。此外,一旦进程未能获得锁(因为已经有了锁),我相信它将不会再尝试。在我看来,超时用于等待consul的响应,并且一旦收到响应(是或否),它将继续。

我想不要使用超时,而是要使用try

  

-try-尝试获取到给定超时的锁定。超时是一个正的十进制数字,带有单位后缀,例如“ 500ms”。有效时间单位为“ ns”,“ us”(或“ µs”),“ ms”,“ s”,“ m”,“ h”。

https://www.consul.io/docs/commands/lock.html#try