Node-redis: TypeError : impossible de lire la propriété 'callback' d'undefined

Créé le 4 avr. 2019  ·  4Commentaires  ·  Source: NodeRedis/node-redis

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.

pending-author-input

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

  • "redis": "2.8.0"
  • nœud 10
  • "redis-parser": "2.6.0"

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)

Tous les 4 commentaires

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

  • "redis": "2.8.0"
  • nœud 10
  • "redis-parser": "2.6.0"

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'
}
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

shmendo picture shmendo  ·  6Commentaires

ghost picture ghost  ·  3Commentaires

juriansluiman picture juriansluiman  ·  3Commentaires

Stono picture Stono  ·  6Commentaires

twappworld picture twappworld  ·  7Commentaires