| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- // raise mongo timeout to 1hr if otherwise unspecified
- process.env.MONGO_SOCKET_TIMEOUT =
- parseInt(process.env.MONGO_SOCKET_TIMEOUT, 10) || 3600000
- const {
- countProjects,
- countDocHistory,
- upgradeProject,
- findProjects,
- } = require('../../modules/history-migration/app/src/HistoryUpgradeHelper')
- const { waitForDb } = require('../../app/src/infrastructure/mongodb')
- const minimist = require('minimist')
- const argv = minimist(process.argv.slice(2), {
- boolean: [
- 'verbose',
- 'dry-run',
- 'use-query-hint',
- 'retry-failed',
- 'archive-on-failure',
- ],
- alias: {
- verbose: 'v',
- 'dry-run': 'd',
- 'use-query-hint': 'q',
- 'retry-failed': 'r',
- 'archive-on-failure': 'a',
- },
- default: {
- 'write-concurrency': 10,
- 'batch-size': 100,
- 'max-upgrades-to-attempt': false,
- 'max-failures': 50,
- },
- })
- async function findProjectsToMigrate() {
- console.log('History Migration Statistics')
- // Show statistics about the number of projects to migrate
- const migratedProjects = await countProjects({
- 'overleaf.history.display': true,
- })
- const totalProjects = await countProjects()
- console.log('Migrated Projects : ', migratedProjects)
- console.log('Total Projects : ', totalProjects)
- console.log('Remaining Projects : ', totalProjects - migratedProjects)
- if (migratedProjects === totalProjects) {
- console.log('All projects have been migrated')
- process.exit(0)
- }
- // Get a list of projects to migrate
- const projectsToMigrate = await findProjects(
- { 'overleaf.history.display': { $ne: true } },
- { _id: 1, overleaf: 1 }
- )
- // Show statistics for docHistory collection
- const docHistoryWithoutProjectId = await countDocHistory({
- project_id: { $exists: false },
- })
- if (docHistoryWithoutProjectId > 0) {
- console.log(
- `WARNING: docHistory collection contains ${docHistoryWithoutProjectId} records without project_id`
- )
- process.exit(1)
- }
- // Find the total number of history records for the projects we need to migrate
- let docHistoryCount = 0
- for await (const project of projectsToMigrate) {
- const count = await countDocHistory({ project_id: project._id })
- docHistoryCount += count
- }
- console.log('Total history records to migrate:', docHistoryCount)
- return projectsToMigrate
- }
- async function migrateProjects(projectsToMigrate) {
- let projectsMigrated = 0
- let projectsFailed = 0
- console.log('Starting migration...')
- for (const project of projectsToMigrate) {
- console.log(`Migrating project: ${project._id}`)
- try {
- const result = await upgradeProject(project._id)
- if (result.error) {
- console.error('migration failed', result)
- projectsFailed++
- } else {
- console.log('migration result', result)
- projectsMigrated++
- }
- } catch (err) {
- projectsFailed++
- console.error(err)
- }
- }
- console.log('Migration complete')
- console.log('==================')
- console.log('Projects migrated: ', projectsMigrated)
- console.log('Projects failed: ', projectsFailed)
- }
- async function main() {
- const projectsToMigrate = await findProjectsToMigrate()
- if (argv['dry-run']) {
- console.log('Dry run, exiting')
- process.exit(0)
- }
- await migrateProjects(projectsToMigrate)
- console.log('Done.')
- }
- waitForDb()
- .then(main)
- .catch(err => {
- console.error(err)
- process.exit(1)
- })
|