Node-redis: TypeError: Não é possível atribuir a propriedade somente leitura 'callback' de decr

Criado em 23 jun. 2016  ·  6Comentários  ·  Fonte: NodeRedis/node-redis

  • Versão : node redis 2.6.2
  • Plataforma : Nó 4.4.5 no Ubuntu 14.04
  • Descrição :
    Continuo recebendo este erro ao tentar diminuir um contador online simples no 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)

O código é:

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

Não consigo replicar, mas isso só acontece quando muitas pessoas estão no site. Quando sou apenas eu e alguns amigos testando, parece que ele funciona perfeitamente incrementando e diminuindo o valor.

A propósito, isso acontece mesmo sem a função de retorno de chamada (apenas db.decr ('online')), eu apenas adicionei o retorno de chamada para ver se geraria algum erro.

Repito, o código funciona bem até que mais pessoas comecem a usá-lo. Talvez ele esteja tentando fazer .decr ao mesmo tempo e não consiga lidar com isso ou?

question

Comentários muito úteis

Acabei de encontrar este problema com [email protected] e [email protected] . Definir newrelic de volta para 1.28.0 removeu o problema.

No entanto, usar redis 2.6.2 e newrelic 1.28.3 funciona bem.

Todos 6 comentários

Acabei de notar nos logs que as chamadas db.get () também geram um erro semelhante às vezes:

    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)

Código:

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

Além disso, os campos 'online' e 'triviaAnswer' já estão definidos, e o código acima funciona até ... Bem, até não funcionar. Não é um código "novo" também, ele está funcionando em um servidor diferente há semanas, então duvido que haja um problema com isso.

Este parece ser um problema com a newrelic, então recomendo contatá-los sobre isso. Lamento não poder ajudá-lo mais, pois não uso o newrelic sozinho.

Foi isso, obrigado.

@Alchemystic , você se importaria de entrar em detalhes sobre a correção? Também encontrei isso localmente com o NR, mas atualizar para 2.6.2 (de 2.6.0-1) pareceu consertar para mim, então quero ter certeza de que isso não é apenas uma pista falsa.

Acabei de parar de usar o newrelic. Só consegui diagnosticar um problema de rede, mas depois de descobrir que estava causando problemas, removi-o.

Acabei de encontrar este problema com [email protected] e [email protected] . Definir newrelic de volta para 1.28.0 removeu o problema.

No entanto, usar redis 2.6.2 e newrelic 1.28.3 funciona bem.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Mickael-van-der-Beek picture Mickael-van-der-Beek  ·  6Comentários

gpascale picture gpascale  ·  4Comentários

jackycchen picture jackycchen  ·  4Comentários

twappworld picture twappworld  ·  7Comentários

shmendo picture shmendo  ·  6Comentários