2023-07-27 00:31:52 -05:00
|
|
|
/*
|
2024-02-13 09:59:27 -06:00
|
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
2023-07-27 00:31:52 -05:00
|
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
*/
|
|
|
|
|
2023-04-14 00:14:00 -05:00
|
|
|
import Redis from 'ioredis';
|
2024-04-04 08:25:28 -05:00
|
|
|
import { loadConfig } from '../built/config.js';
|
2024-10-28 07:06:54 -05:00
|
|
|
import { createPostgresDataSource } from '../built/postgres.js';
|
2023-02-23 23:09:17 -06:00
|
|
|
|
|
|
|
const config = loadConfig();
|
|
|
|
|
2024-10-28 07:06:54 -05:00
|
|
|
async function connectToPostgres() {
|
|
|
|
const source = createPostgresDataSource(config);
|
|
|
|
await source.initialize();
|
|
|
|
await source.destroy();
|
|
|
|
}
|
|
|
|
|
|
|
|
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.
|
|
|
|
const promises = Array
|
|
|
|
.from(new Set([
|
|
|
|
config.redis,
|
|
|
|
config.redisForPubsub,
|
|
|
|
config.redisForJobQueue,
|
|
|
|
config.redisForTimelines,
|
|
|
|
config.redisForReactions,
|
|
|
|
]))
|
|
|
|
.map(connectToRedis)
|
|
|
|
.concat([
|
|
|
|
connectToPostgres()
|
|
|
|
]);
|
|
|
|
|
|
|
|
await Promise.allSettled(promises);
|