@eleven-am/pondsocket 0.1.181 → 0.1.183
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstracts/redisClient.js +20 -12
- package/package.json +1 -1
package/abstracts/redisClient.js
CHANGED
|
@@ -33,7 +33,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
33
33
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
34
34
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
35
35
|
};
|
|
36
|
-
var _RedisClient_instances, _RedisClient_heartbeatInterval, _RedisClient_cleanupInterval, _RedisClient_instanceTtl, _RedisClient_redisClient, _RedisClient_pubClient, _RedisClient_subClient, _RedisClient_instanceId, _RedisClient_assignsPublisher, _RedisClient_presencePublisher, _RedisClient_userLeavesPublisher, _RedisClient_channelMessagePublisher, _RedisClient_stateSyncPublisher, _RedisClient_heartbeatTimer, _RedisClient_cleanupTimer, _RedisClient_presence_changes_channel_get, _RedisClient_assigns_changes_channel_get, _RedisClient_channel_messages_channel_get, _RedisClient_user_leaves_channel_get,
|
|
36
|
+
var _RedisClient_instances, _RedisClient_heartbeatInterval, _RedisClient_cleanupInterval, _RedisClient_instanceTtl, _RedisClient_redisClient, _RedisClient_pubClient, _RedisClient_subClient, _RedisClient_instanceId, _RedisClient_assignsPublisher, _RedisClient_presencePublisher, _RedisClient_userLeavesPublisher, _RedisClient_channelMessagePublisher, _RedisClient_stateSyncPublisher, _RedisClient_heartbeatTimer, _RedisClient_cleanupTimer, _RedisClient_presence_changes_channel_get, _RedisClient_assigns_changes_channel_get, _RedisClient_channel_messages_channel_get, _RedisClient_user_leaves_channel_get, _RedisClient_handleErrors, _RedisClient_getPresenceCacheChannel, _RedisClient_getAssignsCacheChannel, _RedisClient_publishPresenceChange, _RedisClient_publishAssignsChange, _RedisClient_publishChannelMessage, _RedisClient_publishUserLeave, _RedisClient_registerInstance, _RedisClient_unregisterInstance, _RedisClient_unsubscribeFromChannels, _RedisClient_subscribeToChannels, _RedisClient_startHeartbeat, _RedisClient_startPeriodicCleanup, _RedisClient_performConsistencyCheck, _RedisClient_handleRedisMessage, _RedisClient_publishCacheMessage, _RedisClient_emitStateSyncEvent, _RedisClient_subscribeToCacheChanges, _RedisClient_subscribeToChannelMessages, _RedisClient_subscribeToUserLeaves, _RedisClient_subscribeToStateSync, _RedisClient_handleExit, _RedisClient_deleteKeysByPattern;
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.RedisClient = void 0;
|
|
39
39
|
const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
|
|
@@ -97,11 +97,12 @@ class RedisClient {
|
|
|
97
97
|
}
|
|
98
98
|
shutdown() {
|
|
99
99
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
const batchSize = 1000;
|
|
100
101
|
clearInterval(__classPrivateFieldGet(this, _RedisClient_heartbeatTimer, "f"));
|
|
101
102
|
clearInterval(__classPrivateFieldGet(this, _RedisClient_cleanupTimer, "f"));
|
|
102
103
|
yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_unsubscribeFromChannels).call(this);
|
|
103
104
|
yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_unregisterInstance).call(this);
|
|
104
|
-
yield __classPrivateFieldGet(this, _RedisClient_instances, "m",
|
|
105
|
+
yield __classPrivateFieldGet(this, _RedisClient_instances, "m", _RedisClient_deleteKeysByPattern).call(this, `*_cache:${__classPrivateFieldGet(this, _RedisClient_instanceId, "f")}:*`, batchSize);
|
|
105
106
|
});
|
|
106
107
|
}
|
|
107
108
|
}
|
|
@@ -114,15 +115,6 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
|
|
|
114
115
|
return 'channel_messages';
|
|
115
116
|
}, _RedisClient_user_leaves_channel_get = function _RedisClient_user_leaves_channel_get() {
|
|
116
117
|
return 'user_leaves';
|
|
117
|
-
}, _RedisClient_cleanup = function _RedisClient_cleanup() {
|
|
118
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
-
const pipeline = __classPrivateFieldGet(this, _RedisClient_redisClient, "f").pipeline();
|
|
120
|
-
const presenceKeys = yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").keys('presence_cache:*');
|
|
121
|
-
presenceKeys.forEach((key) => pipeline.del(key));
|
|
122
|
-
const assignsKeys = yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").keys('assigns_cache:*');
|
|
123
|
-
assignsKeys.forEach((key) => pipeline.del(key));
|
|
124
|
-
yield pipeline.exec();
|
|
125
|
-
});
|
|
126
118
|
}, _RedisClient_handleErrors = function _RedisClient_handleErrors() {
|
|
127
119
|
__classPrivateFieldGet(this, _RedisClient_redisClient, "f").on('error', (err) => console.error('Redis client error:', err));
|
|
128
120
|
__classPrivateFieldGet(this, _RedisClient_pubClient, "f").on('error', (err) => console.error('Redis pub client error:', err));
|
|
@@ -235,6 +227,11 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
|
|
|
235
227
|
local inactive_keys = {}
|
|
236
228
|
local unique_pairs = {}
|
|
237
229
|
|
|
230
|
+
local active_set = {}
|
|
231
|
+
for _, instance in ipairs(active_instances) do
|
|
232
|
+
active_set[instance] = true
|
|
233
|
+
end
|
|
234
|
+
|
|
238
235
|
for _, key in ipairs(all_keys) do
|
|
239
236
|
local parts = {}
|
|
240
237
|
for part in string.gmatch(key, '[^:]+') do
|
|
@@ -242,7 +239,7 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
|
|
|
242
239
|
end
|
|
243
240
|
local instance_id, endpoint_id, channel_id = parts[2], parts[3], parts[4]
|
|
244
241
|
|
|
245
|
-
if not
|
|
242
|
+
if not active_set[instance_id] then
|
|
246
243
|
table.insert(inactive_keys, key)
|
|
247
244
|
local pair = endpoint_id .. ':' .. channel_id
|
|
248
245
|
unique_pairs[pair] = true
|
|
@@ -384,4 +381,15 @@ _RedisClient_heartbeatInterval = new WeakMap(), _RedisClient_cleanupInterval = n
|
|
|
384
381
|
process.exit(1);
|
|
385
382
|
}
|
|
386
383
|
});
|
|
384
|
+
}, _RedisClient_deleteKeysByPattern = function _RedisClient_deleteKeysByPattern(pattern, batchSize) {
|
|
385
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
386
|
+
let cursor = '0';
|
|
387
|
+
do {
|
|
388
|
+
const [newCursor, keys] = yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").scan(cursor, 'MATCH', pattern, 'COUNT', batchSize);
|
|
389
|
+
cursor = newCursor;
|
|
390
|
+
if (keys.length > 0) {
|
|
391
|
+
yield __classPrivateFieldGet(this, _RedisClient_redisClient, "f").del(...keys);
|
|
392
|
+
}
|
|
393
|
+
} while (cursor !== '0');
|
|
394
|
+
});
|
|
387
395
|
};
|