Skip to content
Snippets Groups Projects
Commit 6616ca9e authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Fixing #585 Refactor router

parent a1b98572
No related branches found
No related tags found
No related merge requests found
...@@ -29,67 +29,50 @@ function Router (PeeringService, conf, dal) { ...@@ -29,67 +29,50 @@ function Router (PeeringService, conf, dal) {
const that = this; const that = this;
this._write = function (obj, enc, done) { this._write = function (obj, enc, done) {
return co(function*() {
try {
if (obj.joiners) { if (obj.joiners) {
route('block', obj, getRandomInUPPeers(), done); yield route('block', obj, getRandomInUPPeers());
} }
else if (obj.pubkey && obj.uid) { else if (obj.pubkey && obj.uid) {
route('identity', obj, getRandomInUPPeers(), done); yield route('identity', obj, getRandomInUPPeers());
} }
else if (obj.userid) { else if (obj.userid) {
route('membership', obj, getRandomInUPPeers(), done); yield route('membership', obj, getRandomInUPPeers());
} }
else if (obj.inputs) { else if (obj.inputs) {
route('transaction', obj, getRandomInUPPeers(), done); yield route('transaction', obj, getRandomInUPPeers());
} }
else if (obj.endpoints) { else if (obj.endpoints) {
route('peer', obj, getRandomInUPPeers(), done); yield route('peer', obj, getRandomInUPPeers());
} }
else if (obj.from && obj.from == PeeringService.pubkey) { else if (obj.from && obj.from == PeeringService.pubkey) {
// Route ONLY status emitted by this node // Route ONLY status emitted by this node
route('status', obj, getTargeted(obj.to), done); yield route('status', obj, getTargeted(obj.to));
} }
else if (obj.unreachable) { else if (obj.unreachable) {
async.waterfall([ yield dal.setPeerDown(obj.peer.pubkey);
function (next) { logger.info("Peer %s unreachable: now considered as DOWN.", obj.peer.pubkey);
dal.setPeerDown(obj.peer.pubkey)
.then(function(){
next();
})
.catch(next);
}
], function(err) {
if (err) logger.error(err);
else logger.info("Peer %s unreachable: now considered as DOWN.", obj.peer.pubkey);
done();
});
} }
else if (obj.outdated) { else if (obj.outdated) {
co(function*() {
try {
yield PeeringService.handleNewerPeer(obj.peer); yield PeeringService.handleNewerPeer(obj.peer);
done(); }
} catch (e) { } catch (e) {
logger.warn(e); logger.error("Routing error: %s", e && (e.stack || e.message || e));
done(e);
} }
done && done();
}); });
}
else {
done();
}
}; };
function route (type, obj, getPeersFunc, done) { function route (type, obj, getPeersFunc) {
if (!active) { return co(function*() {
return done(); if (!active) return;
} const peers = yield getPeersFunc();
getPeersFunc(function (err, peers) {
that.push({ that.push({
'type': type, 'type': type,
'obj': obj, 'obj': obj,
'peers': (peers || []).map(Peer.statics.peerize) 'peers': (peers || []).map(Peer.statics.peerize)
}); });
done();
}); });
} }
...@@ -98,7 +81,7 @@ function Router (PeeringService, conf, dal) { ...@@ -98,7 +81,7 @@ function Router (PeeringService, conf, dal) {
} }
function getValidUpPeers (without) { function getValidUpPeers (without) {
return function (done) { return function () {
return co(function *() { return co(function *() {
let members = []; let members = [];
let nonmembers = []; let nonmembers = [];
...@@ -115,8 +98,7 @@ function Router (PeeringService, conf, dal) { ...@@ -115,8 +98,7 @@ function Router (PeeringService, conf, dal) {
pubkey: 'M' + index + '_' + PeeringService.pubkey, pubkey: 'M' + index + '_' + PeeringService.pubkey,
endpoints: [mep] endpoints: [mep]
}})); }}));
}) });
.then(_.partial(done, null)).catch(done);
}; };
} }
...@@ -124,14 +106,14 @@ function Router (PeeringService, conf, dal) { ...@@ -124,14 +106,14 @@ function Router (PeeringService, conf, dal) {
* Get the peer targeted by `to` argument, this node excluded (for not to loop on self). * Get the peer targeted by `to` argument, this node excluded (for not to loop on self).
*/ */
function getTargeted (to) { function getTargeted (to) {
return function (done) { return function () {
return co(function*() {
if (to == PeeringService.pubkey) { if (to == PeeringService.pubkey) {
done(null, []); return [];
} else {
dal.getPeer(to)
.then((peer) => done(null, [peer]))
.catch((err) => done(err));
} }
const peer = yield dal.getPeer(to);
return [peer];
});
}; };
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment