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)
Код такой:
db.decr('online',function(err){
if(err){
console.log('DECREMENTING ONLINE NUMBER FAILED:');
console.log(err);
}
console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
});
Кажется, я не могу воспроизвести это, но это происходит только тогда, когда на сайте много людей. Когда это тестирую только я и пара друзей, кажется, что он отлично выполняет свою работу, увеличивая и уменьшая значение.
Кстати, это происходит даже без функции обратного вызова (просто db.decr ('online')), я только добавил обратный вызов, чтобы посмотреть, не возникнет ли ошибка.
Повторяю, код работает нормально, пока его не начнет использовать больше людей. Может быть, он пытается сделать .decr одновременно и не может с этим справиться или?
Просто заметил в журналах, что вызовы db.get () также иногда вызывают аналогичную ошибку:
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)
Код:
db.get('triviaAnswer',function(err,dbAnswer){
if(err){
console.log('Error getting triviaAnswer from redis: '+err);
return;
}
Кроме того, поля «online» и «triviaAnswer» уже установлены, и приведенный выше код работает до тех пор, пока .. Ну, пока этого не произойдет. Это тоже не «новый» код, он уже несколько недель работает на другом сервере, поэтому я сомневаюсь, что в этом есть проблема.
Похоже, это проблема с newrelic, поэтому я рекомендую связаться с ними по этому поводу. Мне очень жаль, что я больше не могу вам помочь, так как я не использую newrelic самостоятельно.
Вот и все, спасибо.
@Alchemystic, не до 2.6.2 (с 2.6.0-1), похоже, исправило это для меня, поэтому хочу убедиться, что это не просто отвлекающий маневр.
Я просто перестал пользоваться newrelic. Я получил его только для диагностики сетевой проблемы, но, обнаружив, что это вызывает проблемы, я удалил его.
Я просто столкнулся с этой проблемой с помощью [email protected]
и [email protected]
. Установка newrelic обратно на 1.28.0 устранила проблему.
Однако использование redis 2.6.2 и newrelic 1.28.3 работает нормально.
Самый полезный комментарий
Я просто столкнулся с этой проблемой с помощью
[email protected]
и[email protected]
. Установка newrelic обратно на 1.28.0 устранила проблему.Однако использование redis 2.6.2 и newrelic 1.28.3 работает нормально.