Node-redis: TypeError : impossible d'attribuer à la propriété 'callback' en lecture seule de decr

Créé le 23 juin 2016  ·  6Commentaires  ·  Source: NodeRedis/node-redis

  • Version : nœud redis 2.6.2
  • Plateforme : Node 4.4.5 sur Ubuntu 14.04
  • Descriptif :
    J'obtiens toujours cette erreur en essayant de décrémenter un simple compteur en ligne dans redis :
    TypeError: Cannot assign to read only property 'callback' of decr
    at RedisClient.internalSendCommandWrapper (/home/alex/node_modules/newrelic/lib/instrumentation/redis.js:76:22)
    at RedisClient.wrappedFunction [as internal_send_command] (/home/alex/node_modules/newrelic/lib/transaction/tracer/index.js:354:24)
    at RedisClient.(anonymous function).RedisClient.(anonymous function) (/home/alex/node_modules/redis/lib/commands.js:45:25)
    at Socket.eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2456:12)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.emit (/home/alex/node_modules/socket.io/lib/socket.js:128:10)
    at Socket.onclose (/home/alex/node_modules/socket.io/lib/socket.js:425:8)
    at Client.onclose (/home/alex/node_modules/socket.io/lib/client.js:232:24)
    at Client.onerror (/home/alex/node_modules/socket.io/lib/client.js:213:8)

Le code est :

    db.decr('online',function(err){
        if(err){
            console.log('DECREMENTING ONLINE NUMBER FAILED:');
            console.log(err);
        }
        console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
    });

Je n'arrive pas à le reproduire, mais cela n'arrive que lorsque beaucoup de gens sont sur le site. Quand il n'y a que moi et quelques amis qui le testent, cela semble très bien faire le travail en incrémentant et en décrémentant la valeur.

Au fait, cela se produit même sans la fonction de rappel (juste db.decr('online')), j'ai seulement ajouté le rappel pour voir si cela générerait des erreurs.

Je le répète, le code fonctionne bien jusqu'à ce que plus de personnes commencent à l'utiliser. Peut-être qu'il essaie de faire .decr en même temps et qu'il ne peut pas le gérer ou?

question

Commentaire le plus utile

Je viens de rencontrer ce problème avec [email protected] et [email protected] . Remettre newrelic à 1.28.0 a supprimé le problème.

Cependant, l'utilisation de redis 2.6.2 et newrelic 1.28.3 fonctionne correctement.

Tous les 6 commentaires

Je viens de le remarquer dans les journaux que les appels db.get() renvoient parfois une erreur similaire :

    TypeError: Cannot assign to read only property 'callback' of get
    at RedisClient.internalSendCommandWrapper (/home/alex/node_modules/newrelic/lib/instrumentation/redis.js:76:22)
    at RedisClient.wrappedFunction [as internal_send_command] (/home/alex/node_modules/newrelic/lib/transaction/tracer/index.js:354:24)
    at RedisClient.(anonymous function).RedisClient.(anonymous function) (/home/alex/node_modules/redis/lib/commands.js:45:25)
    at eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2384:16)
    at checkLogin (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:572:13)
    at Socket.eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2001:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.onevent (/home/alex/node_modules/socket.io/lib/socket.js:335:8)
    at Socket.onpacket (/home/alex/node_modules/socket.io/lib/socket.js:295:12)

Code:

            db.get('triviaAnswer',function(err,dbAnswer){
                if(err){
                    console.log('Error getting triviaAnswer from redis: '+err);
                    return;
                }

De plus, les champs 'en ligne' et 'triviaAnswer' sont déjà définis, et le code ci-dessus fonctionne jusqu'à ce que... Ce n'est pas non plus un "nouveau" code, il fonctionne sur un serveur différent depuis des semaines maintenant, donc je doute qu'il y ait un problème avec cela.

Cela semble être un problème avec newrelic, je vous recommande donc de les contacter à ce sujet. Je suis désolé de ne plus pouvoir vous aider, car je n'utilise pas newrelic tout seul.

C'était ça, merci.

@Alchemystic voudriez-vous entrer dans les détails du correctif? J'ai également trouvé cela localement avec NR, mais la mise à niveau

Je viens d'arrêter d'utiliser newrelic. Je ne l'ai eu que pour diagnostiquer un problème de réseau, mais après avoir découvert qu'il causait des problèmes, je l'ai supprimé.

Je viens de rencontrer ce problème avec [email protected] et [email protected] . Remettre newrelic à 1.28.0 a supprimé le problème.

Cependant, l'utilisation de redis 2.6.2 et newrelic 1.28.3 fonctionne correctement.

Cette page vous a été utile?
0 / 5 - 0 notes