merge: fix race conditions in check_connect.js (!715)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/715 Approved-by: Marie <github@yuugi.dev> Approved-by: dakkar <dakkar@thenautilus.net>
This commit is contained in:
commit
d72c40d157
1 changed files with 39 additions and 17 deletions
|
@ -12,27 +12,49 @@ const config = loadConfig();
|
||||||
// createPostgresDataSource handels primaries and replicas automatically.
|
// createPostgresDataSource handels primaries and replicas automatically.
|
||||||
// usually, it only opens connections first use, so we force it using
|
// usually, it only opens connections first use, so we force it using
|
||||||
// .initialize()
|
// .initialize()
|
||||||
createPostgresDataSource(config)
|
async function connectToPostgres(){
|
||||||
.initialize()
|
const source = createPostgresDataSource(config);
|
||||||
.then(c => { c.destroy() })
|
await source.initialize();
|
||||||
.catch(e => { throw e });
|
await source.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
// Connect to all redis servers
|
// Connect to all redis servers
|
||||||
function connectToRedis(redisOptions) {
|
async function connectToRedis(redisOptions) {
|
||||||
const redis = new Redis(redisOptions);
|
return await new Promise(async (resolve, reject) => {
|
||||||
redis.on('connect', () => redis.disconnect());
|
const redis = new Redis({
|
||||||
redis.on('error', (e) => {
|
...redisOptions,
|
||||||
throw e;
|
lazyConnect: true,
|
||||||
|
reconnectOnError: false,
|
||||||
|
showFriendlyErrorStack: true,
|
||||||
|
});
|
||||||
|
redis.on('error', e => reject(e));
|
||||||
|
|
||||||
|
try {
|
||||||
|
await redis.connect();
|
||||||
|
resolve();
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
redis.disconnect(false);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not all of these are defined, the default one gets reused.
|
// If not all of these are defined, the default one gets reused.
|
||||||
// so we use a Set to only try connecting once to each **uniq** redis.
|
// so we use a Set to only try connecting once to each **uniq** redis.
|
||||||
(new Set([
|
const promises = Array
|
||||||
config.redis,
|
.from(new Set([
|
||||||
config.redisForPubsub,
|
config.redis,
|
||||||
config.redisForJobQueue,
|
config.redisForPubsub,
|
||||||
config.redisForTimelines,
|
config.redisForJobQueue,
|
||||||
config.redisForReactions,
|
config.redisForTimelines,
|
||||||
])).forEach(connectToRedis);
|
config.redisForReactions,
|
||||||
|
]))
|
||||||
|
.map(connectToRedis)
|
||||||
|
.concat([
|
||||||
|
connectToPostgres()
|
||||||
|
]);
|
||||||
|
|
||||||
|
await Promise.allSettled(promises);
|
||||||
|
|
Loading…
Reference in a new issue