Server: requests refractoring

pull/40/head
Chocobozzz 2017-01-17 21:17:07 +01:00
parent da691c46df
commit 1e4b0080ff
2 changed files with 40 additions and 39 deletions

View File

@ -203,7 +203,7 @@ function computeForeignPodsList (host, podsScore, callback) {
else podsScore[foreignPodHost] = 1 else podsScore[foreignPodHost] = 1
}) })
callback() return callback()
}) })
} }
@ -212,6 +212,7 @@ function computeWinningPods (hosts, podsScore) {
// Only add a pod if it exists in more than a half base pods // Only add a pod if it exists in more than a half base pods
const podsList = [] const podsList = []
const baseScore = hosts.length / 2 const baseScore = hosts.length / 2
Object.keys(podsScore).forEach(function (podHost) { Object.keys(podsScore).forEach(function (podHost) {
// If the pod is not me and with a good score we add it // If the pod is not me and with a good score we add it
if (isMe(podHost) === false && podsScore[podHost] > baseScore) { if (isMe(podHost) === false && podsScore[podHost] > baseScore) {

View File

@ -118,13 +118,8 @@ function makeRequest (toPod, requestEndpoint, requestsToMake, callback) {
// The function fire some useful callbacks // The function fire some useful callbacks
requests.makeSecureRequest(params, function (err, res) { requests.makeSecureRequest(params, function (err, res) {
if (err || (res.statusCode !== 200 && res.statusCode !== 201 && res.statusCode !== 204)) { if (err || (res.statusCode !== 200 && res.statusCode !== 201 && res.statusCode !== 204)) {
logger.error( err = err ? err.message : 'Status code not 20x : ' + res.statusCode
'Error sending secure request to %s pod.', logger.error('Error sending secure request to %s pod.', toPod.host, { error: err })
toPod.host,
{
error: err ? err.message : 'Status code not 20x : ' + res.statusCode
}
)
return callback(false) return callback(false)
} }
@ -153,26 +148,7 @@ function makeRequests () {
} }
// We want to group requests by destinations pod and endpoint // We want to group requests by destinations pod and endpoint
const requestsToMakeGrouped = {} const requestsToMakeGrouped = buildRequestObjects(requests)
Object.keys(requests).forEach(function (toPodId) {
requests[toPodId].forEach(function (data) {
const request = data.request
const pod = data.pod
const hashKey = toPodId + request.endpoint
if (!requestsToMakeGrouped[hashKey]) {
requestsToMakeGrouped[hashKey] = {
toPod: pod,
endpoint: request.endpoint,
ids: [], // request ids, to delete them from the DB in the future
datas: [] // requests data,
}
}
requestsToMakeGrouped[hashKey].ids.push(request.id)
requestsToMakeGrouped[hashKey].datas.push(request.request)
})
})
logger.info('Making requests to friends.') logger.info('Making requests to friends.')
@ -188,22 +164,20 @@ function makeRequests () {
const requestIdsToDelete = requestToMake.ids const requestIdsToDelete = requestToMake.ids
logger.info('Removing %d requests of unexisting pod %s.', requestIdsToDelete.length, requestToMake.toPod.id) logger.info('Removing %d requests of unexisting pod %s.', requestIdsToDelete.length, requestToMake.toPod.id)
RequestToPod.removePodOf.call(self, requestIdsToDelete, requestToMake.toPod.id) return RequestToPod.removePodOf(requestIdsToDelete, requestToMake.toPod.id, callbackEach)
return callbackEach()
} }
makeRequest(toPod, requestToMake.endpoint, requestToMake.datas, function (success) { makeRequest(toPod, requestToMake.endpoint, requestToMake.datas, function (success) {
if (success === true) { if (success === false) {
logger.debug('Removing requests for pod %s.', requestToMake.toPod.id, { requestsIds: requestToMake.ids })
goodPods.push(requestToMake.toPod.id)
// Remove the pod id of these request ids
RequestToPod.removePodOf(requestToMake.ids, requestToMake.toPod.id, callbackEach)
} else {
badPods.push(requestToMake.toPod.id) badPods.push(requestToMake.toPod.id)
callbackEach() return callbackEach()
} }
logger.debug('Removing requests for pod %s.', requestToMake.toPod.id, { requestsIds: requestToMake.ids })
goodPods.push(requestToMake.toPod.id)
// Remove the pod id of these request ids
RequestToPod.removePodOf(requestToMake.ids, requestToMake.toPod.id, callbackEach)
}) })
}, function () { }, function () {
// All the requests were made, we update the pods score // All the requests were made, we update the pods score
@ -216,6 +190,32 @@ function makeRequests () {
}) })
} }
function buildRequestObjects (requests) {
const requestsToMakeGrouped = {}
Object.keys(requests).forEach(function (toPodId) {
requests[toPodId].forEach(function (data) {
const request = data.request
const pod = data.pod
const hashKey = toPodId + request.endpoint
if (!requestsToMakeGrouped[hashKey]) {
requestsToMakeGrouped[hashKey] = {
toPod: pod,
endpoint: request.endpoint,
ids: [], // request ids, to delete them from the DB in the future
datas: [] // requests data,
}
}
requestsToMakeGrouped[hashKey].ids.push(request.id)
requestsToMakeGrouped[hashKey].datas.push(request.request)
})
})
return requestsToMakeGrouped
}
// Remove pods with a score of 0 (too many requests where they were unreachable) // Remove pods with a score of 0 (too many requests where they were unreachable)
function removeBadPods () { function removeBadPods () {
const self = this const self = this