pr_26091.patch 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. --- a/services/web/modules/server-ce-scripts/scripts/check-mongodb.mjs
  2. +++ b/services/web/modules/server-ce-scripts/scripts/check-mongodb.mjs
  3. @@ -7,6 +7,7 @@ import {
  4. const { ObjectId } = mongodb
  5. const MIN_MONGO_VERSION = [6, 0]
  6. +const MIN_MONGO_FEATURE_COMPATIBILITY_VERSION = [6, 0]
  7. async function main() {
  8. let mongoClient
  9. @@ -18,6 +19,7 @@ async function main() {
  10. }
  11. await checkMongoVersion(mongoClient)
  12. + await checkFeatureCompatibilityVersion(mongoClient)
  13. try {
  14. await testTransactions(mongoClient)
  15. @@ -53,6 +55,41 @@ async function checkMongoVersion(mongoClient) {
  16. }
  17. }
  18. +async function checkFeatureCompatibilityVersion(mongoClient) {
  19. + const {
  20. + featureCompatibilityVersion: { version },
  21. + } = await mongoClient
  22. + .db()
  23. + .admin()
  24. + .command({ getParameter: 1, featureCompatibilityVersion: 1 })
  25. + const [major, minor] = version.split('.').map(v => parseInt(v))
  26. + const [minMajor, minMinor] = MIN_MONGO_FEATURE_COMPATIBILITY_VERSION
  27. +
  28. + if (major < minMajor || (major === minMajor && minor < minMinor)) {
  29. + const minVersion = MIN_MONGO_FEATURE_COMPATIBILITY_VERSION.join('.')
  30. + console.error(`
  31. +The MongoDB server has featureCompatibilityVersion=${version}, but Overleaf requires at least version ${minVersion}.
  32. +
  33. +Open a mongo shell:
  34. +- Overleaf Toolkit deployments: $ bin/mongo
  35. +- Legacy docker-compose.yml deployments: $ docker exec -it mongo mongosh localhost/sharelatex
  36. +
  37. +In the mongo shell:
  38. +> db.adminCommand( { setFeatureCompatibilityVersion: "${minMajor}.${minMinor}" } )
  39. +
  40. +Verify the new value:
  41. +> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
  42. + ...
  43. + {
  44. + featureCompatibilityVersion: { version: ${minMajor}.${minMinor}' },
  45. +...
  46. +
  47. +Aborting.
  48. +`)
  49. + process.exit(1)
  50. + }
  51. +}
  52. +
  53. main()
  54. .then(() => {
  55. console.error('Mongodb is up.')