Throw exception "cannot read properties of null" when using `xReadGroup`
emptizen opened this issue · 1 comments
emptizen commented
Description
Here is the exception:
"TypeError: Cannot read properties of null (reading 'length')\n at transformTuplesReply ***
at transformStreamMessageReply (*** )\n at Array.map (<anonymous>)\n at transformStreamMessagesReply (***)\n at ***@redis/client/dist/lib/commands/generic-transformers.js:95:19\n at Array.map (<anonymous>)\n at Object.transformStreamsMessagesReply
The function transformTuplesReply of generic-transform.js didn't handle the null raw reply from the stream api.
// in generic-transform.js
function transformTuplesReply(reply) {
const message = Object.create(null);
for (let i = 0; i < reply.length; i += 2) {
message[reply[i].toString()] = reply[i + 1];
}
return message;
}Node.js Version
v20.16.0
Redis Server Version
6.2.6
Node Redis Version
redis@4.7.0
Platform
MacOS, Linux
Logs
"TypeError: Cannot read properties of null (reading 'length')\n at transformTuplesReply ***
at transformStreamMessageReply (*** )\n at Array.map (<anonymous>)\n at transformStreamMessagesReply (***)\n at ***@redis/client/dist/lib/commands/generic-transformers.js:95:19\n at Array.map (<anonymous>)\n at Object.transformStreamsMessagesReplyemptizen commented
Additional, I found another situation that stream read will return null.
By design, Redis doesn't prevent the deletion of entries that are present in the stream's PELs. When this happens, the PELs retain the deleted entries' IDs, but the actual entry payload is no longer available. Therefore, when reading such PEL entries, Redis will return a null value in place of their respective data.
https://redis.io/docs/latest/commands/xreadgroup/