From ae90799288bfeee966a25605429ed90656ba0029 Mon Sep 17 00:00:00 2001 From: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com> Date: Sat, 30 May 2020 17:36:48 -0300 Subject: [PATCH] [NEW] Skip Export Operations that haven't been updated in over a day (#16135) --- app/models/server/models/ExportOperations.js | 8 ++++---- app/user-data-download/server/cronProcessDownloads.js | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/models/server/models/ExportOperations.js b/app/models/server/models/ExportOperations.js index bb0f968b17c..fb70d38925c 100644 --- a/app/models/server/models/ExportOperations.js +++ b/app/models/server/models/ExportOperations.js @@ -31,7 +31,7 @@ export class ExportOperations extends Base { const query = { userId, status: { - $nin: ['completed'], + $nin: ['completed', 'skipped'], }, }; @@ -40,7 +40,7 @@ export class ExportOperations extends Base { findAllPending(options) { const query = { - status: { $nin: ['completed'] }, + status: { $nin: ['completed', 'skipped'] }, }; return this.find(query, options); @@ -48,7 +48,7 @@ export class ExportOperations extends Base { findOnePending(options) { const query = { - status: { $nin: ['completed'] }, + status: { $nin: ['completed', 'skipped'] }, }; return this.findOne(query, options); @@ -56,7 +56,7 @@ export class ExportOperations extends Base { findAllPendingBeforeMyRequest(requestDay, options) { const query = { - status: { $nin: ['completed'] }, + status: { $nin: ['completed', 'skipped'] }, createdAt: { $lt: requestDay }, }; diff --git a/app/user-data-download/server/cronProcessDownloads.js b/app/user-data-download/server/cronProcessDownloads.js index 02bdcc39707..3b1d8c785c7 100644 --- a/app/user-data-download/server/cronProcessDownloads.js +++ b/app/user-data-download/server/cronProcessDownloads.js @@ -6,6 +6,7 @@ import { Meteor } from 'meteor/meteor'; import { TAPi18n } from 'meteor/rocketchat:tap-i18n'; import { SyncedCron } from 'meteor/littledata:synced-cron'; import archiver from 'archiver'; +import moment from 'moment'; import { settings } from '../../settings'; import { Subscriptions, Rooms, Users, Uploads, Messages, UserDataFiles, ExportOperations, Avatars } from '../../models'; @@ -564,6 +565,15 @@ async function processDataDownloads() { return; } + if (operation.status !== 'pending') { + // If the operation has started but was not updated in over a day, then skip it + if (operation._updatedAt && moment().diff(moment(operation._updatedAt), 'days') > 1) { + operation.status = 'skipped'; + await ExportOperations.updateOperation(operation); + return processDataDownloads(); + } + } + await continueExportOperation(operation); await ExportOperations.updateOperation(operation);