Merge pull request #1156 from msgmaxim/fix-guard-selection

More robust guard node selection
pull/1158/head
Maxim Shishmarev 5 years ago committed by GitHub
commit 149f179214
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -17,6 +17,7 @@ const snodeHttpsAgent = new https.Agent({
const RANDOM_SNODES_TO_USE_FOR_PUBKEY_SWARM = 3;
const SEED_NODE_RETRIES = 3;
const SNODE_VERSION_RETRIES = 3;
const MIN_GUARD_COUNT = 2;
const compareSnodes = (current, search) =>
current.pubkey_ed25519 === search.pubkey_ed25519;
@ -273,6 +274,7 @@ class LokiSnodeAPI {
let guardNodes = [];
const DESIRED_GUARD_COUNT = 3;
if (shuffled.length < DESIRED_GUARD_COUNT) {
log.error(
`Could not select guard nodes: node pool is not big enough, pool size ${
@ -335,7 +337,7 @@ class LokiSnodeAPI {
const goodPaths = this.onionPaths.filter(x => !x.bad);
if (goodPaths.length < 2) {
if (goodPaths.length < MIN_GUARD_COUNT) {
log.error(
`Must have at least 2 good onion paths, actual: ${goodPaths.length}`
);
@ -387,6 +389,7 @@ class LokiSnodeAPI {
});
}
// Does this get called multiple times on startup??
async buildNewOnionPaths() {
// Note: this function may be called concurrently, so
// might consider blocking the other calls
@ -420,7 +423,8 @@ class LokiSnodeAPI {
}
// If guard nodes is still empty (the old nodes are now invalid), select new ones:
if (this.guardNodes.length === 0) {
if (this.guardNodes.length < MIN_GUARD_COUNT) {
// TODO: don't throw away potentially good guard nodes
this.guardNodes = await this.selectGuardNodes();
}
}

Loading…
Cancel
Save