Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keyspace notifications are lost after reconnection #2155

Open
abarre opened this issue Jun 9, 2022 · 1 comment
Open

Keyspace notifications are lost after reconnection #2155

abarre opened this issue Jun 9, 2022 · 1 comment
Labels

Comments

@abarre
Copy link

abarre commented Jun 9, 2022

I notice that on nore-redis 3.1.2 and node-redis 4.1.0, there is no notification on keyspace (via psubscribe) after a reconnection.

node-Redis 4.1.0

Here is a script to reproduce the issue that show the issue on redis 4.1.0 :

var redis = require('redis');

var subscriber = redis.createClient({
  host: '127.0.0.1',
  port: '6379',
});

subscriber.on('reconnecting', async () => {
  console.log('subscriber reconnect again');
});

subscriber.on('error', (error) => {
  console.log('subscriber error', error);
});

subscriber.connect().then(async () => {
  console.log('subscriber connected');
  await subscriber.sendCommand(['CONFIG', 'SET', 'notify-keyspace-events', 'KEA']);

  await subscriber.pSubscribe(['__keyspace@*__:test'], async (message) => {
    console.log('*  subscriber receive event', message);
  });
});

var publisher = redis.createClient({
  host: '127.0.0.1',
  port: '6379',
});

publisher.on('reconnecting', () => {
  console.log('publisher reconnect');
});

publisher.on('error', () => {
  console.log('publisher error');
});

publisher.connect().then(async () => {
  console.log('publisher connected');
  setInterval(async function () {
    try {
      console.log('-> publisher modifies key');
      await publisher.set('test', Date.now().toString());
    } catch (err) {
      console.log(err);
    }
  }, 1000);
});

I launch the script in a terminal and in the other, I restart the redis server.

In the following logs, you can see that after the reconnection (at the end), the log subscriber receive event set is not submit anymore.

Logs 4.1.0

subscriber connected
publisher connected
-> publisher modifies key

  • subscriber receive event set
    -> publisher modifies key
  • subscriber receive event set
    -> publisher modifies key
  • subscriber receive event set
    -> publisher modifies key
  • subscriber receive event set
    -> publisher modifies key
  • subscriber receive event set
    -> publisher modifies key
  • subscriber receive event set

////// Redis server is stopped and restarted after 3 sec

subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
publisher error
publisher reconnect
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
publisher error
publisher reconnect
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
publisher error
publisher reconnect
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
publisher reconnect
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
publisher error
publisher reconnect
subscriber reconnect again
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
subscriber reconnect again
publisher error
publisher reconnect
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber reconnect again
subscriber error SocketClosedUnexpectedlyError: Socket closed unexpectedly
at Socket. (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:156:118)
at Object.onceWrapper (node:events:642:26)
at Socket.emit (node:events:527:28)
at TCP. (node:net:709:12)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber error TypeError: Cannot read properties of undefined (reading 'destroy')
at RedisSocket._RedisSocket_connect (/Users/anthonybarre/fasterize/libs-ts/node_modules/@redis/client/dist/lib/client/socket.js:119:67)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
subscriber reconnect again
publisher error
subscriber reconnect again
subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -61,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
publisher reconnect
subscriber reconnect again
subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -61,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -61,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
publisher error
subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -61,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
subscriber reconnect again
subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -61,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
subscriber reconnect again
subscriber error Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
errno: -61,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
-> publisher modifies key
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
subscriber reconnect again
publisher reconnect
subscriber reconnect again
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
-> publisher modifies key
^C
(⎈ |eks-euwest1:default)MBPdefasterize [11:13:32] [~/fasterize/libs-ts/packages/storage-website-config] [storage_list_index *]
-> %

Also, after the reconnect, I can see that the number of socket in state ESTABLISHED increases from 2 to 11.

node-Redis 3.1.2

In node-redis 3.1.2, the keyspace notifications are also lost after reconnection but the number of socket in state ESTABLISHED stays at 2.

var redis = require('redis');

var subscriber = redis.createClient({
  host: '127.0.0.1',
  port: '6379',
});

subscriber.on('pmessage', function (pattern, channel, message) {
  console.info('subscriber', pattern, channel, message);
});

subscriber.on('psubscribe', function () {
  console.log('subscriber psubscribe');
});

subscriber.on('reconnecting', async () => {
  console.log('subscriber reconnect again');
});

subscriber.on('error', (error) => {
  console.log('subscriber error');
});

let first = true;
subscriber.on('ready', async () => {
  if (first) {
    subscriber.config('set', 'notify-keyspace-events', 'KEA', function (err) {
      console.log('error', err);
    });

    first = false;
  }
  console.log('subscriber subscribe');
  subscriber.psubscribe(['__keyspace@*__:test']);
});

var publisher = redis.createClient({
  host: '127.0.0.1',
  port: '6379',
});

publisher.on('reconnecting', () => {
  console.log('publisher reconnect');
});

publisher.on('error', (error) => {
  console.log('publisher error', error);
});

publisher.on('ready', async () => {
  console.log('publisher connected');
  setInterval(async function () {
    try {
      console.log('publisher send');
      await publisher.set('test', Date.now().toString());
    } catch (err) {
      console.log(err);
    }
  }, 1000);
});
Log 3.1.2
publisher connected subscriber subscribe error null subscriber psubscribe publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher send subscriber __keyspace@*__:test __keyspace@0__:test set publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher send publisher reconnect subscriber reconnect again publisher error Error: connect ECONNREFUSED 127.0.0.1:6379 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 6379 } subscriber error publisher send publisher send publisher send publisher reconnect subscriber reconnect again publisher connected subscriber psubscribe subscriber subscribe subscriber psubscribe publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send publisher send

Workaround

The unique workaround that I found for the moment is to call punsubscribe and quit in the reconnecting event handler and then creating a new Redis Client with a new socket.

subscriber.once('reconnecting', async () => {
    console.log('subscriber reconnect again');
    setTimeout(async () => {
      try {
        await subscriber.punsubscribe();
        await subscriber.quit();
        console.log('subscriber after quit');
      } catch (err) {
        console.log(err);
      }
      createNewSubscriber();
    }, 100);
  });

Note

I tried to see the behavior of the client for the subscribe and publish method and in this case, the subscription is correctly maintained after the reconnection.

Environment:

  • Node.js Version: v16.15.0
  • Redis Server Version: 6.2
  • Node Redis Version: 4.1.0 and 3.1.2
  • Platform: Mac OS 12.12.1
@ThisIsMissEm
Copy link

I suspect the issue you're seeing here is that the reconnection to redis isn't actually succeeding correctly; I was investigating a pubsub issue for the Mastodon project, and was able to add in some debugging where I saw the reconnecting event fire, then the connect event (despite redis not being alive at this point), followed by:

Resubscribe {
  commands: [
    {
      args: [Array],
      channelsCounter: 3,
      resolve: [Function: callback],
      reject: [Function: callback]
    }
  ]
}

Where I'd added in console.log('Resubscribe', { commands }) to the pub-sub.js method resubscribe

From what I can tell, those commands never succeed in resolving for a pubsub connection, but for a regular connection, you do actually get a reconnection.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants