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?
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.
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.