diff --git a/server-ce/Dockerfile b/server-ce/Dockerfile index db21d1610f..beb774d173 100644 --- a/server-ce/Dockerfile +++ b/server-ce/Dockerfile @@ -52,9 +52,10 @@ ADD server-ce/cron /overleaf/cron ADD server-ce/config/crontab-history /etc/cron.d/crontab-history RUN chmod 600 /etc/cron.d/crontab-history -# Copy Phusion Image startup scripts to its location -# -------------------------------------------------- +# Copy Phusion Image startup and shutdown scripts to their locations +# ------------------------------------------------------------------ COPY server-ce/init_scripts/ /etc/my_init.d/ +COPY server-ce/init_preshutdown_scripts/ /etc/my_init.pre_shutdown.d/ # Copy app settings files # ----------------------- diff --git a/server-ce/init_preshutdown_scripts/01_flush_project_history b/server-ce/init_preshutdown_scripts/01_flush_project_history new file mode 100755 index 0000000000..8b8d3c3c03 --- /dev/null +++ b/server-ce/init_preshutdown_scripts/01_flush_project_history @@ -0,0 +1,11 @@ +#!/bin/sh + +cd /overleaf/services/project-history && node scripts/flush_all.js >> /var/log/sharelatex/project-history.log 2>&1 + +EXIT_CODE="$?" +if [ $EXIT_CODE -ne 0 ] +then + echo "project-history/scripts/flush_all.js failed with exit code $EXIT_CODE" +fi + +exit 0 diff --git a/server-ce/init_preshutdown_scripts/01_flush_track_changes b/server-ce/init_preshutdown_scripts/01_flush_track_changes new file mode 100755 index 0000000000..0c38068055 --- /dev/null +++ b/server-ce/init_preshutdown_scripts/01_flush_track_changes @@ -0,0 +1,11 @@ +#!/bin/sh + +cd /overleaf/services/track-changes && node scripts/flush_all.js >> /var/log/sharelatex/track-changes.log 2>&1 + +EXIT_CODE="$?" +if [ $EXIT_CODE -ne 0 ] +then + echo "track-changes/scripts/flush_all.js failed with exit code $EXIT_CODE" +fi + +exit 0 diff --git a/server-ce/init_preshutdown_scripts/02_flush_document_updater b/server-ce/init_preshutdown_scripts/02_flush_document_updater new file mode 100755 index 0000000000..fc9f317f17 --- /dev/null +++ b/server-ce/init_preshutdown_scripts/02_flush_document_updater @@ -0,0 +1,11 @@ +#!/bin/sh + +cd /overleaf/services/document-updater && node scripts/flush_all.js >> /var/log/sharelatex/document-updater.log 2>&1 + +EXIT_CODE="$?" +if [ $EXIT_CODE -ne 0 ] +then + echo "document-updater/scripts/flush_all.js failed with exit code $EXIT_CODE" +fi + +exit 0 diff --git a/services/document-updater/scripts/flush_all.js b/services/document-updater/scripts/flush_all.js new file mode 100644 index 0000000000..22afcc2c41 --- /dev/null +++ b/services/document-updater/scripts/flush_all.js @@ -0,0 +1,28 @@ +const ProjectFlusher = require('../app/js/ProjectFlusher') + +async function main() { + console.log('Flushing all projects') + return new Promise((resolve, reject) => { + const options = { + limit: 100000, + concurrency: 5, + } + ProjectFlusher.flushAllProjects(options, err => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) +} + +main() + .then(() => { + console.log('Done flushing all projects') + process.exit(0) + }) + .catch(error => { + console.error('There was an error flushing all projects', { error }) + process.exit(1) + }) diff --git a/services/track-changes/scripts/flush_all.js b/services/track-changes/scripts/flush_all.js new file mode 100644 index 0000000000..4fce564d61 --- /dev/null +++ b/services/track-changes/scripts/flush_all.js @@ -0,0 +1,25 @@ +const UpdatesManager = require('../app/js/UpdatesManager') + +async function main() { + return new Promise((resolve, reject) => { + const limit = -1 + console.log('Flushing all updates') + UpdatesManager.flushAll(limit, err => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) +} + +main() + .then(() => { + console.log('Done flushing all updates') + process.exit(0) + }) + .catch(error => { + console.error('There was an error flushing updates', { error }) + process.exit(1) + })