From 0b69752270f1ceea06a29872b3db23660a55d6d3 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 4 Dec 2015 16:13:32 +0100 Subject: Add a pool of requests instead of making a request at each action (add video/remove video) for performance in big networks --- src/pods.js | 89 ++++++++----------------------------------------------------- 1 file changed, 11 insertions(+), 78 deletions(-) (limited to 'src/pods.js') diff --git a/src/pods.js b/src/pods.js index e26b3f0ae..9afc6cc96 100644 --- a/src/pods.js +++ b/src/pods.js @@ -8,6 +8,7 @@ var logger = require('./logger') var PodsDB = require('./database').PodsDB + var poolRequests = require('./poolRequests') var utils = require('./utils') var pods = {} @@ -16,13 +17,6 @@ var host = config.get('webserver.host') var port = config.get('webserver.port') - // ----------- Constants ----------- - - var PODS_SCORE = { - MALUS: -10, - BONUS: 10 - } - // ----------- Private functions ----------- function getForeignPodsList (url, callback) { @@ -34,25 +28,6 @@ }) } - function updatePodsScore (good_pods, bad_pods) { - logger.info('Updating %d good pods and %d bad pods scores.', good_pods.length, bad_pods.length) - - PodsDB.update({ _id: { $in: good_pods } }, { $inc: { score: PODS_SCORE.BONUS } }, { multi: true }).exec() - PodsDB.update({ _id: { $in: bad_pods } }, { $inc: { score: PODS_SCORE.MALUS } }, { multi: true }, function (err) { - if (err) throw err - removeBadPods() - }) - } - - function removeBadPods () { - PodsDB.remove({ score: 0 }, function (err, result) { - if (err) throw err - - var number_removed = result.result.n - if (number_removed !== 0) logger.info('Removed %d pod.', number_removed) - }) - } - // ----------- Public functions ----------- pods.list = function (callback) { @@ -93,58 +68,16 @@ }) } - // { path, data } - pods.makeSecureRequest = function (data, callback) { - if (callback === undefined) callback = function () {} - - PodsDB.find({}, { _id: 1, url: 1, publicKey: 1 }).exec(function (err, pods) { - if (err) { - logger.error('Cannot get the list of the pods.', { error: err }) - return callback(err) - } - - logger.debug('Make multiple requests.') - - var params = { - encrypt: true, - sign: true, - method: data.method, - path: data.path, - data: data.data - } - - var bad_pods = [] - var good_pods = [] - - utils.makeMultipleRetryRequest( - params, - - pods, - - function callbackEachPodFinished (err, response, body, pod, callback_each_pod_finished) { - if (err || response.statusCode !== 200) { - bad_pods.push(pod._id) - logger.error('Error sending secure request to %s/%s pod.', pod.url, data.path, { error: err }) - } else { - good_pods.push(pod._id) - } - - return callback_each_pod_finished() - }, - - function callbackAllPodsFinished (err) { - if (err) { - logger.error('There was some errors when sending the video meta data.', { error: err }) - return callback(err) - } - - logger.debug('Finished') + pods.addVideoToFriends = function (video) { + // To avoid duplicates + var id = video.name + video.magnetUri + poolRequests.addToPoolRequests(id, 'add', video) + } - updatePodsScore(good_pods, bad_pods) - callback(null) - } - ) - }) + pods.removeVideoToFriends = function (video) { + // To avoid duplicates + var id = video.name + video.magnetUri + poolRequests.addToPoolRequests(id, 'remove', video) } pods.makeFriends = function (callback) { @@ -214,7 +147,7 @@ pods_list, - function eachRequest (err, response, body, pod, callback_each_request) { + function eachRequest (err, response, body, url, pod, callback_each_request) { // We add the pod if it responded correctly with its public certificate if (!err && response.statusCode === 200) { pods.add({ url: pod.url, publicKey: body.cert, score: global.FRIEND_BASE_SCORE }, function (err) { -- cgit v1.2.3