Skip to content

Commit 4a97294

Browse files
authored
fix(redis): increase slotsRefresh{timeout|interval} and add refreshSlotsCache (#1240)
1 parent 0c3c88b commit 4a97294

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

packages/sdk-socket-server-next/src/analytics-api.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ export const getRedisOptions = (
7777
reconnectOnError: (error) => {
7878
// eslint-disable-next-line require-unicode-regexp
7979
const targetErrors = [/MOVED/, /READONLY/, /ETIMEDOUT/];
80+
81+
logger.error('Redis reconnect error:', error);
82+
if (error.message.includes('MOVED') && redisClient instanceof Cluster) {
83+
logger.error('Refreshing Redis Cluster slots cache');
84+
try {
85+
redisClient?.refreshSlotsCache();
86+
} catch (error) {
87+
logger.error('Error refreshing Redis Cluster slots cache:', error);
88+
}
89+
}
90+
8091
return targetErrors.some((targetError) =>
8192
targetError.test(error.message),
8293
);
@@ -100,9 +111,9 @@ export const getRedisClient = () => {
100111
const redisClusterOptions: ClusterOptions = {
101112
dnsLookup: (address, callback) => callback(null, address),
102113
scaleReads: 'slave',
103-
slotsRefreshTimeout: 2000,
114+
slotsRefreshTimeout: 5000,
104115
showFriendlyErrorStack: true,
105-
slotsRefreshInterval: 4000,
116+
slotsRefreshInterval: 2000,
106117
clusterRetryStrategy: (times) => Math.min(times * 30, 1000),
107118
enableAutoPipelining: true,
108119
redisOptions,
@@ -120,6 +131,19 @@ export const getRedisClient = () => {
120131
}
121132
}
122133

134+
redisClient.on('ready', () => {
135+
logger.info('Redis ready');
136+
137+
if (redisClient instanceof Cluster) {
138+
logger.error('Refreshing Redis Cluster slots cache');
139+
try {
140+
redisClient?.refreshSlotsCache();
141+
} catch (error) {
142+
logger.error('Error refreshing Redis Cluster slots cache:', error);
143+
}
144+
}
145+
});
146+
123147
redisClient.on('error', (error) => {
124148
logger.error('Redis error:', error);
125149
});

0 commit comments

Comments
 (0)