Détail du message d'erreur :
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)
Code source du client 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');
}
}
Cette erreur se produit occasionnellement, pas tout le temps. Je pense qu'il y a peut-être un bogue et que je devrais vérifier command_obj lors du passage de la file d'attente de commandes.
Avez-vous ce code dedans ?
const redis = require('redis');
require('bluebird').promisifyAll(redis);
Il est très difficile de déboguer cela. Cela ne devrait en fait jamais arriver. Cela indique que l'état n'est plus correct. Existe-t-il un moyen de déclencher cette erreur de manière fiable et avez-vous plus d'informations pour moi ? Comme un code minimal extrait, la version node_redis et la version de l'analyseur, les commandes que vous utilisez et tout ce qui pourrait être utile pour déboguer cela.
Je reçois également cette erreur par intermittence. Dans mon cas, il semble que parfois, après avoir appelé "client.punsubcribe()", je sois inondé de ces erreurs jusqu'à ce que je redémarre le processus.
edit : je devrais également ajouter qu'il y a généralement 4 clients Redis simultanés par instance de nœud, deux à deux hôtes différents
Le traçage est plus ou moins identique aux OP, mais pour être complet :
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)
Après avoir exécuté en mode débogage, j'ai remarqué que ces erreurs étaient suivies par les messages connection gone from close event
(par opposition aux connection gone from end event
plus typiques que je vois pendant la fin normale du processus d'inactivité du serveur redis)
Cela ne se produit également que par intermittence et lorsque le serveur d'applications est soumis à une charge particulièrement élevée à partir d'une tâche cron
redis 3.0.2 nœud 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)
Il existe également des AbortErrors associés à peu près au même moment qui ne font pas planter le serveur car ils sont interceptés
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'
}
Commentaire le plus utile
Je reçois également cette erreur par intermittence. Dans mon cas, il semble que parfois, après avoir appelé "client.punsubcribe()", je sois inondé de ces erreurs jusqu'à ce que je redémarre le processus.
edit : je devrais également ajouter qu'il y a généralement 4 clients Redis simultanés par instance de nœud, deux à deux hôtes différents
Le traçage est plus ou moins identique aux OP, mais pour être complet :