check-mongodb.js 1.5 KB

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