[12.x] Fix delayed Redis queue jobs with phpredis serialization enabled #58235
+85
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes #58214.
Problem
When using phpredis with serialization or compression enabled, delayed queue jobs don't work correctly. The
laterRaw()method useszadd()directly, which triggers phpredis serialization on the payload. However, when the Lua scriptmigrateExpiredJobsmigrates these jobs, it reads the raw bytes which are now serialized/compressed and cannot be properly decoded.In contrast,
pushRaw()uses a Lua script viaeval()which bypasses phpredis serialization, storing the payload RAW in Redis.Solution
Changed
laterRaw()to use a Lua script (likepushRawdoes) instead of callingzadddirectly. This ensures the payload bypasses phpredis serialization and is stored consistently with other queue operations.Changes
later()Lua script inLuaScripts.phpfor pushing delayed jobslaterRaw()inRedisQueue.phpto use the new Lua scriptevalinstead ofzaddBenefits
push) and delayed (later) job dispatch