Refactor checkMongoDb (#3339)
This commit is contained in:
		
							
								
								
									
										29
									
								
								src/index.ts
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								src/index.ts
									
									
									
									
									
								
							| @@ -23,6 +23,7 @@ import notesStats from './daemons/notes-stats'; | |||||||
| import loadConfig from './config/load'; | import loadConfig from './config/load'; | ||||||
| import { Config } from './config/types'; | import { Config } from './config/types'; | ||||||
| import { lessThan } from './prelude/array'; | import { lessThan } from './prelude/array'; | ||||||
|  | import { Db } from 'mongodb'; | ||||||
|  |  | ||||||
| const clusterLog = debug('misskey:cluster'); | const clusterLog = debug('misskey:cluster'); | ||||||
| const ev = new Xev(); | const ev = new Xev(); | ||||||
| @@ -191,34 +192,38 @@ async function init(): Promise<Config> { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Try to connect to MongoDB | 	// Try to connect to MongoDB | ||||||
| 	checkMongoDb(config); | 	await checkMongoDB(config); | ||||||
|  |  | ||||||
| 	return config; | 	return config; | ||||||
| } | } | ||||||
|  |  | ||||||
| function checkMongoDb(config: Config) { | const requiredMongoDBVersion = [3, 6]; | ||||||
|  |  | ||||||
|  | function checkMongoDB(config: Config): Promise<void> { | ||||||
| 	const mongoDBLogger = new Logger('MongoDB'); | 	const mongoDBLogger = new Logger('MongoDB'); | ||||||
| 	const u = config.mongodb.user ? encodeURIComponent(config.mongodb.user) : null; | 	const u = config.mongodb.user ? encodeURIComponent(config.mongodb.user) : null; | ||||||
| 	const p = config.mongodb.pass ? encodeURIComponent(config.mongodb.pass) : null; | 	const p = config.mongodb.pass ? encodeURIComponent(config.mongodb.pass) : null; | ||||||
| 	const uri = `mongodb://${u && p ? `${u}:****@` : ''}${config.mongodb.host}:${config.mongodb.port}/${config.mongodb.db}`; | 	const uri = `mongodb://${u && p ? `${u}:****@` : ''}${config.mongodb.host}:${config.mongodb.port}/${config.mongodb.db}`; | ||||||
| 	mongoDBLogger.info(`Connecting to ${uri}`); | 	mongoDBLogger.info(`Connecting to ${uri}`); | ||||||
|  |  | ||||||
| 	mongo.then(() => { | 	return mongo.then(async () => { | ||||||
| 		nativeDbConn().then(db => db.admin().serverInfo()).then(x => x.version).then((version: string) => { | 		mongoDBLogger.succ('Connectivity confirmed'); | ||||||
| 			mongoDBLogger.info(`Version: ${version}`); |  | ||||||
| 			if (lessThan(version.split('.').map(x => parseInt(x, 10)), [3, 6])) { | 		const runningMongoDBVersion = (await nativeDbConn().then(getMongoDBVersion)).split('.').map(x => parseInt(x, 10)); | ||||||
| 				mongoDBLogger.error(`MongoDB version is less than 3.6. Please upgrade it.`); | 		mongoDBLogger.info(`Version: ${runningMongoDBVersion.join('.')}`); | ||||||
|  | 		if (lessThan(runningMongoDBVersion, requiredMongoDBVersion)) { | ||||||
|  | 			mongoDBLogger.error(`MongoDB version is less than ${requiredMongoDBVersion.join('.')}. Please upgrade it.`); | ||||||
| 			process.exit(1); | 			process.exit(1); | ||||||
| 		} | 		} | ||||||
| 		}); | 	}).catch(err => { | ||||||
|  |  | ||||||
| 		mongoDBLogger.succ('Connectivity confirmed'); |  | ||||||
| 	}) |  | ||||||
| 		.catch(err => { |  | ||||||
| 		mongoDBLogger.error(err.message); | 		mongoDBLogger.error(err.message); | ||||||
| 	}); | 	}); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | async function getMongoDBVersion(db: Db): Promise<string> { | ||||||
|  | 	return (await db.admin().serverInfo()).version; | ||||||
|  | } | ||||||
|  |  | ||||||
| async function spawnWorkers(limit: number) { | async function spawnWorkers(limit: number) { | ||||||
| 	const workers = Math.min(limit, os.cpus().length); | 	const workers = Math.min(limit, os.cpus().length); | ||||||
| 	Logger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`); | 	Logger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Aya Morisawa
					Aya Morisawa