check-mongodb.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const { ObjectId } = require('mongodb-legacy')
  2. const {
  3. connectionPromise,
  4. db,
  5. } = require('../../../app/src/infrastructure/mongodb')
  6. const MIN_MONGO_VERSION = [5, 0]
  7. async function main() {
  8. let mongoClient
  9. try {
  10. mongoClient = await connectionPromise
  11. } catch (err) {
  12. console.error('Cannot connect to mongodb')
  13. throw err
  14. }
  15. await checkMongoVersion(mongoClient)
  16. try {
  17. await testTransactions(mongoClient)
  18. } catch (err) {
  19. console.error("Mongo instance doesn't support transactions")
  20. throw err
  21. }
  22. }
  23. async function testTransactions(mongoClient) {
  24. const session = mongoClient.startSession()
  25. try {
  26. await session.withTransaction(async () => {
  27. await db.users.findOne({ _id: new ObjectId() }, { session })
  28. })
  29. } finally {
  30. await session.endSession()
  31. }
  32. }
  33. async function checkMongoVersion(mongoClient) {
  34. const buildInfo = await mongoClient.db().admin().buildInfo()
  35. const [major, minor] = buildInfo.versionArray
  36. const [minMajor, minMinor] = MIN_MONGO_VERSION
  37. if (major < minMajor || (major === minMajor && minor < minMinor)) {
  38. const version = buildInfo.version
  39. const minVersion = MIN_MONGO_VERSION.join('.')
  40. console.error(
  41. `The MongoDB server has version ${version}, but Overleaf requires at least version ${minVersion}. Aborting.`
  42. )
  43. process.exit(1)
  44. }
  45. }
  46. main()
  47. .then(() => {
  48. console.error('Mongodb is up.')
  49. process.exit(0)
  50. })
  51. .catch(err => {
  52. console.error(err)
  53. process.exit(1)
  54. })