From 909bb99b9f2a73aefe8551d746c384cf33f7eed3 Mon Sep 17 00:00:00 2001 From: Miguel Serrano Date: Wed, 8 Feb 2023 16:02:21 +0100 Subject: [PATCH] [CE/SP] Flush redis on `docker stop` (#11714) * [CE/SP] Flush redis on `docker stop` * Extracted `limit` to variable Co-authored-by: Jakob Ackermann * Increased logging --------- Co-authored-by: Jakob Ackermann GitOrigin-RevId: 4bcb4e70988337369acca0e80f243609bd6323ed --- server-ce/Dockerfile | 5 ++-- .../01_flush_project_history | 11 ++++++++ .../01_flush_track_changes | 11 ++++++++ .../02_flush_document_updater | 11 ++++++++ .../document-updater/scripts/flush_all.js | 28 +++++++++++++++++++ services/track-changes/scripts/flush_all.js | 25 +++++++++++++++++ 6 files changed, 89 insertions(+), 2 deletions(-) create mode 100755 server-ce/init_preshutdown_scripts/01_flush_project_history create mode 100755 server-ce/init_preshutdown_scripts/01_flush_track_changes create mode 100755 server-ce/init_preshutdown_scripts/02_flush_document_updater create mode 100644 services/document-updater/scripts/flush_all.js create mode 100644 services/track-changes/scripts/flush_all.js 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) + })