Skip to content

Commit

Permalink
fix race conditions in check_connect.js
Browse files Browse the repository at this point in the history
  • Loading branch information
warriordog committed Oct 26, 2024
1 parent 55df1ad commit 524ddb9
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions packages/backend/scripts/check_connect.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,49 @@ const config = loadConfig();
// createPostgresDataSource handels primaries and replicas automatically.
// usually, it only opens connections first use, so we force it using
// .initialize()
createPostgresDataSource(config)
.initialize()
.then(c => { c.destroy() })
.catch(e => { throw e });

async function connectToPostgres(){
const source = createPostgresDataSource(config);
await source.initialize();
await source.destroy();
}

// Connect to all redis servers
function connectToRedis(redisOptions) {
const redis = new Redis(redisOptions);
redis.on('connect', () => redis.disconnect());
redis.on('error', (e) => {
throw e;
async function connectToRedis(redisOptions) {
return await new Promise(async (resolve, reject) => {
const redis = new Redis({
...redisOptions,
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.
// so we use a Set to only try connecting once to each **uniq** redis.
(new Set([
config.redis,
config.redisForPubsub,
config.redisForJobQueue,
config.redisForTimelines,
config.redisForReactions,
])).forEach(connectToRedis);
const promises = Array
.from(new Set([
config.redis,
config.redisForPubsub,
config.redisForJobQueue,
config.redisForTimelines,
config.redisForReactions,
]))
.map(connectToRedis)
.concat([
connectToPostgres()
]);

await Promise.allSettled(promises);

0 comments on commit 524ddb9

Please sign in to comment.