Skip to content

Error executing DELETE_UNLOCK_SCRIPT on RedisPubSubLock #10751

@nhmarujo

Description

@nhmarujo

In what version(s) of Spring Integration are you seeing this issue?

Between 6.4.9 and 6.5.6

Describe the bug

While releasing a lock, it tried to execute UNLINK_UNLOCK_REDIS_SCRIPT, but it timed out. For that reason, it fallback to execute DELETE_UNLOCK_REDIS_SCRIPT, but looking at that script it seems that a bug was introduced on the PUBLISH, so we are getting the following error:

Caused by: io.lettuce.core.RedisCommandExecutionException: ERR Lua redis lib command arguments must be strings or integers script: 4d7192f70618a620282e427698f9cde890151e58, on @user_script:3.

We believe this is happening because that call is being done like redis.call('PUBLISH', KEYS[2], KEYS[1]), while it should be like redis.call('PUBLISH', ARGV[2], KEYS[1]) (as it is done on UNLINK_UNLOCK_SCRIPT).

Since a failure to call unlink will mark unlinkAvailable = false, all subsequent unlocks will immediately try the DEL and fail on the publish.

We understand that this is fixed on the 7.x baseline (since that fallback got removed), but would be important to release a fix for this bug on the 6.x baseline, as many of us won't be able to bump to Spring Boot 4 in a near future.

To Reproduce

Hard to reproduce, needs to force unlink to fail. Perhaps reducing read timeout drastically?

Expected behavior

Publish would work as expected and application would continue to run normally using the delete.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions