Detalhe da mensagem de erro:
C:\Users\xxxxx\node_modules\redis\index.js:722
if (typeof command_obj.callback === 'function') {
^
TypeError: Cannot read property 'callback' of undefined
at normal_reply (C:\Users\xxxxx\node_modules\redis\index.js:722:28)
at RedisClient.return_reply (C:\Users\xxxxx\node_modules\redis\index.js:824:9)
at JavascriptRedisParser.returnReply (C:\Users\xxxxx\node_modules\redis\index.js:192:18)
at JavascriptRedisParser.execute (C:\Users\xxxxx\node_modules\redis-parser\lib\parser.js:574:12)
at Socket.<anonymous> (C:\Users\xxxxx\node_modules\redis\index.js:274:27)
at Socket.emit (events.js:189:13)
at addChunk (_stream_readable.js:284:12)
at readableAddChunk (_stream_readable.js:265:11)
at Socket.Readable.push (_stream_readable.js:220:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Código-fonte do cliente redis:
function normal_reply (self, reply) {
var command_obj = self.command_queue.shift();
if (typeof command_obj.callback === 'function') {
if (command_obj.command !== 'exec') {
reply = self.handle_reply(reply, command_obj.command, command_obj.buffer_args);
}
command_obj.callback(null, reply);
} else {
debug('No callback for reply');
}
}
Esse erro ocorre ocasionalmente, não o tempo todo. Eu acho que talvez haja um bug, e deve verificar command_obj quando mudar da fila de comunicação.
Você tem esse código?
const redis = require('redis');
require('bluebird').promisifyAll(redis);
É muito difícil depurar isso. Na verdade, isso nunca deveria acontecer. Isso indica que o estado não está mais correto. Existe alguma maneira confiável de acionar esse erro e você tem mais informações para mim? Como um código mínimo cortado, a versão do node_redis e a versão do analisador, quais comandos você usa e qualquer outra coisa que possa ser útil para depurar isso.
Também estou recebendo esse erro de forma intermitente. No meu caso, parece que às vezes, depois de chamar "client.punsubcribe ()", sou inundado com esses erros até reiniciar o processo.
editar: devo também acrescentar que normalmente existem 4 clientes Redis simultâneos por instância de nó, dois a dois hosts diferentes
Traceback é mais ou menos idêntico aos OPs, mas para integridade:
TypeError: Cannot read property 'callback' of undefined
at normal_reply (/snapshot/stream-node/node_modules/redis/index.js:722:28)
at RedisClient.return_reply (/snapshot/stream-node/node_modules/redis/index.js:824:9)
at JavascriptRedisParser.returnReply (/snapshot/stream-node/node_modules/redis/index.js:192:18)
at JavascriptRedisParser.execute (/snapshot/stream-node/node_modules/redis-parser/lib/parser.js:574:12)
at Socket.<anonymous> (/snapshot/stream-node/node_modules/redis/index.js:274:27)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:287:12)
at readableAddChunk (_stream_readable.js:268:11)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Depois de executar no modo de depuração, percebi que esses erros rastreiam com connection gone from close event
mensagens (ao contrário das connection gone from end event
mais comuns que vejo durante o encerramento normal do processo ocioso do servidor redis)
Também só acontece de forma intermitente e quando o servidor de aplicativos está sob carga notavelmente alta de um cron job
nó redis 3.0.2 14.15.1, redis-parser 3
TypeError: Cannot read property 'callback' of undefined
at normal_reply (/app/node_modules/redis/index.js:650:28)
at RedisClient.return_reply (/app/node_modules/redis/index.js:752:9)
at JavascriptRedisParser.returnReply (/app/node_modules/redis/index.js:137:18)
at JavascriptRedisParser.execute (/app/node_modules/redis-parser/lib/parser.js:544:14)
at Socket.<anonymous> (/app/node_modules/redis/index.js:218:27)
at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:309:12)
at readableAddChunk (_stream_readable.js:284:9)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
at TCP.callbackTrampoline (internal/async_hooks.js:129:14)
Além disso, existem AbortErrors relacionados ao mesmo tempo que não travam o servidor porque são detectados
AbortError: Redis connection lost and command aborted. It might have been processed.
at RedisClient.flush_and_error (/app/node_modules/redis/index.js:297:23)
at RedisClient.connection_gone (/app/node_modules/redis/index.js:602:14)
at Socket.<anonymous> (/app/node_modules/redis/index.js:226:14)
at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
at Object.onceWrapper (events.js:422:26)
at Socket.emit (events.js:315:20)
at TCP.<anonymous> (net.js:673:12)
at TCP.callbackTrampoline (internal/async_hooks.js:129:14)
at new Command (/app/node_modules/redis/lib/command.js:12:22)
at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
at RedisClient.ready_check (/app/node_modules/redis/index.js:469:10)
at RedisClient.on_connect (/app/node_modules/redis/index.js:363:14)
at Socket.<anonymous> (/app/node_modules/redis/index.js:212:14)
at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
at Object.onceWrapper (events.js:421:28)
at Socket.emit (events.js:327:22)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1132:10)
at TCPConnectWrap.callbackTrampoline (internal/async_hooks.js:129:14)
{
code: 'UNCERTAIN_STATE',
command: 'INFO'
}
Comentários muito úteis
Também estou recebendo esse erro de forma intermitente. No meu caso, parece que às vezes, depois de chamar "client.punsubcribe ()", sou inundado com esses erros até reiniciar o processo.
editar: devo também acrescentar que normalmente existem 4 clientes Redis simultâneos por instância de nó, dois a dois hosts diferentes
Traceback é mais ou menos idêntico aos OPs, mas para integridade: