delayqueue icon indicating copy to clipboard operation
delayqueue copied to clipboard

consume error: pending2ReadyScript failed: ERR Error running script

Open tic8 opened this issue 2 years ago • 8 comments

当key比较多的时候会报如下错误 consume error: pending2ReadyScript failed: ERR Error running script (call to f_7450a9e992a62833484b2567e7d1b1f70c56eb20): @user_script:8: user_script:8: too many results to unpack 好像是需要限制unpack接收的参数数量?

tic8 avatar Sep 28 '22 09:09 tic8

ZRangeByScore 需要加个 limit, ZRemRangeByScore 改成 ZRem 就可以了。 请问一下,测试了多少 msg 会出现这个报错呢?

HDT3213 avatar Sep 29 '22 10:09 HDT3213

ZRangeByScore 需要加个 limit, ZRemRangeByScore 改成 ZRem 就可以了。 请问一下,测试了多少 msg 会出现这个报错呢?

ZRemRangeByScore这个是没问题的。我测试的msg上万了。我查了资料这个应该是lua中unpack默认接收参数数量是8000,超过了就会报错。所以当有超过这个数的时候分批unpack就没问题了。你可以进一步验证一下。

tic8 avatar Sep 29 '22 16:09 tic8

同样,unack2Retry方法里也有如下错误 consume error: unack to retry script failed: ERR Error running script (call to f_6fbfacbaa1c854d463ee989905d1cd1b4f04cb14): @user_script:4: user_script:4: too many results to unpack

tic8 avatar Sep 30 '22 04:09 tic8

试试 02aed25。 没什么问题我 release 一下

HDT3213 avatar Sep 30 '22 08:09 HDT3213

试试 02aed25。 没什么问题我 release 一下

我试过了,这个问题解决了。不过引发了一个新的报错。报错内容如下: consume error: unack to retry script failed: ERR Error running script (call to f_5ab54748521e20054673e7eb91d6980a89cb1b5b): @user_script:6: user_script:6: attempt to compare number with nil

tic8 avatar Oct 01 '22 11:10 tic8

这个错误应该是 unack2RetryScript 第 5 行的 tonumber(v) > 0 报的,触发原因是 retryCountKey 中找不到某条消息的重试次数。我对这里的脚本做了保护但是无法复现这个异常。

您在测试时是否保留了 redis 中的数据? 能否清除一下 redis 中的数据再试试? 或者您有没有办法复现这个问题?

HDT3213 avatar Oct 02 '22 07:10 HDT3213

还有个我不理解的地方是 5ab54748521e20054673e7eb91d6980a89cb1b5b 这个版本的 unack2RetryScript 里第 6 行是 redis.call("HIncrBy", KEYS[2], k, -1) -- reduce retry count 它不应该产生 attempt to compare number with nil 错误的

HDT3213 avatar Oct 02 '22 07:10 HDT3213

还有个我不理解的地方是 5ab54748521e20054673e7eb91d6980a89cb1b5b 这个版本的 unack2RetryScript 里第 6 行是 redis.call("HIncrBy", KEYS[2], k, -1) -- reduce retry count 它不应该产生 attempt to compare number with nil 错误的

应该是把定义脚本代码的第一行空行也算上了。从空行开始算第6行应该是if tonumber(v) > 0 then这个代码。另外retryCountKey 中找不到某条消息的重试次数触发原因这块我再测试测试。

tic8 avatar Oct 02 '22 08:10 tic8