From e856e334a14ac8449b31db24bd5c6fb18f9a23e7 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Sun, 15 May 2016 18:03:43 +0200 Subject: [PATCH] Use async waterfall in request scheduler for better readability --- server/lib/requestsScheduler.js | 70 ++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/server/lib/requestsScheduler.js b/server/lib/requestsScheduler.js index f10de6276..3d04b8cc8 100644 --- a/server/lib/requestsScheduler.js +++ b/server/lib/requestsScheduler.js @@ -177,35 +177,61 @@ function makeRequests () { } function removeBadPods () { - Pods.findBadPods(function (err, pods) { - if (err) { - logger.error('Cannot find bad pods.', { error: err }) - return // abort - } + async.waterfall([ + function findBadPods (callback) { + Pods.findBadPods(function (err, pods) { + if (err) { + logger.error('Cannot find bad pods.', { error: err }) + return callback(err) + } - if (pods.length === 0) return + return callback(null, pods) + }) + }, - const urls = map(pods, 'url') - const ids = map(pods, '_id') + function listVideosOfTheseBadPods (pods, callback) { + if (pods.length === 0) return callback(null) - Videos.listFromUrls(urls, function (err, videosList) { - if (err) { - logger.error('Cannot list videos urls.', { error: err, urls: urls }) - } else { - videos.removeRemoteVideos(videosList, function (err) { - if (err) logger.error('Cannot remove remote videos.', { error: err }) - }) - } + const urls = map(pods, 'url') + const ids = map(pods, '_id') - Pods.removeAllByIds(ids, function (err, r) { + Videos.listFromUrls(urls, function (err, videosList) { if (err) { - logger.error('Cannot remove bad pods.', { error: err }) - } else { - const podsRemoved = r.result.n - logger.info('Removed %d pods.', podsRemoved) + logger.error('Cannot list videos urls.', { error: err, urls: urls }) + return callback(null, ids, []) } + + return callback(null, ids, videosList) }) - }) + }, + + function removeVideosOfTheseBadPods (podIds, videosList, callback) { + // We don't have to remove pods, skip + if (typeof podIds === 'function') return podIds(null) + + // Remove the remote videos + videos.removeRemoteVideos(videosList, function (err) { + if (err) logger.error('Cannot remove remote videos.', { error: err }) + + return callback(null, podIds) + }) + }, + + function removeBadPodsFromDB (podIds, callback) { + // We don't have to remove pods, skip + if (typeof podIds === 'function') return podIds(null) + + Pods.removeAllByIds(podIds, callback) + } + ], function (err, removeResult) { + if (err) { + logger.error('Cannot remove bad pods.', { error: err }) + } else if (removeResult) { + const podsRemoved = removeResult.result.n + logger.info('Removed %d pods.', podsRemoved) + } else { + logger.info('No need to remove bad pods.') + } }) } -- 2.41.0