Fix bug in the pool of requests
authorChocobozzz <florian.bigard@gmail.com>
Sun, 6 Dec 2015 21:40:30 +0000 (22:40 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Mon, 7 Dec 2015 16:22:36 +0000 (17:22 +0100)
src/poolRequests.js
test/api/friendsAdvanced.js

index 391ed6ab2b2544bbb495f0821a7f895032357413..190fb36592db06abe8649ca42e0782955fc84bfd 100644 (file)
   // ----------- Private -----------
   var timer = null
 
+  function removePoolRequestsFromDB (ids) {
+    PoolRequestsDB.remove({ _id: { $in: ids } }, function (err) {
+      if (err) {
+        logger.error('Cannot remove requests from the pool requests database.', { error: err })
+        return
+      }
+
+      logger.info('Pool requests flushed.')
+    })
+  }
+
   function makePoolRequests () {
     logger.info('Making pool requests to friends.')
 
-    PoolRequestsDB.find({}, { type: 1, request: 1 }, function (err, pool_requests) {
+    PoolRequestsDB.find({}, { _id: 1, type: 1, request: 1 }, function (err, pool_requests) {
       if (err) throw err
 
       if (pool_requests.length === 0) return
 
       var requests = {
-        add: [],
-        remove: []
+        add: {
+          ids: [],
+          requests: []
+        },
+        remove: {
+          ids: [],
+          requests: []
+        }
       }
 
       async.each(pool_requests, function (pool_request, callback_each) {
         if (pool_request.type === 'add') {
-          requests.add.push(pool_request.request)
+          requests.add.requests.push(pool_request.request)
+          requests.add.ids.push(pool_request._id)
         } else if (pool_request.type === 'remove') {
-          requests.remove.push(pool_request.request)
+          requests.remove.requests.push(pool_request.request)
+          requests.remove.ids.push(pool_request._id)
         } else {
           throw new Error('Unkown pool request type.')
         }
 
         callback_each()
       }, function () {
-        makePoolRequest('add', requests.add)
-        makePoolRequest('remove', requests.remove)
-        logger.info('Pool requests to friends sent.')
+        // Send the add requests
+        if (requests.add.requests.length !== 0) {
+          makePoolRequest('add', requests.add.requests, function (err) {
+            if (err) logger.error('Errors when sent add pool requests.', { error: err })
+
+            removePoolRequestsFromDB(requests.add.ids)
+          })
+        }
+
+        // Send the remove requests
+        if (requests.remove.requests.length !== 0) {
+          makePoolRequest('remove', requests.remove.requests, function (err) {
+            if (err) logger.error('Errors when sent remove pool requests.', { error: err })
+
+            removePoolRequestsFromDB(requests.remove.ids)
+          })
+        }
       })
     })
   }
     })
   }
 
-  function makePoolRequest (type, requests) {
+  function makePoolRequest (type, requests, callback) {
+    if (!callback) callback = function () {}
+
     PodsDB.find({}, { _id: 1, url: 1, publicKey: 1 }).exec(function (err, pods) {
       if (err) throw err
 
       }
 
       function callbackAllPodsFinished (err) {
-        if (err) {
-          logger.error('There was some errors when sending the video meta data.', { error: err })
-        }
+        if (err) return callback(err)
 
         updatePodsScore(good_pods, bad_pods)
-        PoolRequestsDB.remove().exec()
+        callback(null)
       }
     })
   }
index 7a0940647308f284399d3870c886145ed8e1499d..5d3891923d1f99056648d6e9522138946bb87dff 100644 (file)
                                 })
                               })
                             })
-                          }, 11000)
+                          }, 15000)
                         })
-                      }, 11000)
+                      }, 15000)
                     })
-                  }, 11000)
+                  }, 15000)
                 })
-              }, 11000)
+              }, 15000)
             })
           })
         })