Fix not shuffling nodes requested for pubkey

pull/1280/head
Maxim Shishmarev 5 years ago
parent c843da0e94
commit 8f0d59f9b8

@ -87,7 +87,9 @@ class LokiMessageAPI {
data: data64, data: data64,
}; };
const promises = _.slice(swarm, 0, numConnections).map(snode => const usedNodes = _.slice(swarm, 0, numConnections);
const promises = usedNodes.map(snode =>
_openSendConnection(snode, params) _openSendConnection(snode, params)
); );

@ -152,7 +152,7 @@ interface SendParams {
} }
// get snodes for pubkey from random snode. Uses an existing snode // get snodes for pubkey from random snode. Uses an existing snode
export async function getSnodesForPubkey( export async function requestSnodesForPubkey(
pubKey: string pubKey: string
): Promise<Array<Snode>> { ): Promise<Array<Snode>> {
const { log } = window; const { log } = window;
@ -170,7 +170,7 @@ export async function getSnodesForPubkey(
if (!result) { if (!result) {
log.warn( log.warn(
`LokiSnodeAPI::_getSnodesForPubkey - lokiRpc on ${snode.ip}:${snode.port} returned falsish value`, `LokiSnodeAPI::requestSnodesForPubkey - lokiRpc on ${snode.ip}:${snode.port} returned falsish value`,
result result
); );
return []; return [];
@ -189,7 +189,7 @@ export async function getSnodesForPubkey(
if (!json.snodes) { if (!json.snodes) {
// we hit this when snode gives 500s // we hit this when snode gives 500s
log.warn( log.warn(
`LokiSnodeAPI::_getSnodesForPubkey - lokiRpc on ${snode.ip}:${snode.port} returned falsish value for snodes`, `LokiSnodeAPI::requestSnodesForPubkey - lokiRpc on ${snode.ip}:${snode.port} returned falsish value for snodes`,
result result
); );
return []; return [];
@ -204,7 +204,7 @@ export async function getSnodesForPubkey(
return []; return [];
} }
} catch (e) { } catch (e) {
log.error('LokiSnodeAPI::_getSnodesForPubkey - error', e.code, e.message); log.error('LokiSnodeAPI::requestSnodesForPubkey - error', e.code, e.message);
if (snode) { if (snode) {
markNodeUnreachable(snode); markNodeUnreachable(snode);

@ -4,9 +4,9 @@ import {
} from '../../../js/modules/loki_primitives'; } from '../../../js/modules/loki_primitives';
import { import {
getSnodesForPubkey,
getSnodesFromSeedUrl, getSnodesFromSeedUrl,
getVersion, getVersion,
requestSnodesForPubkey,
} from './serviceNodeAPI'; } from './serviceNodeAPI';
import * as Data from '../../../js/modules/data'; import * as Data from '../../../js/modules/data';
@ -117,6 +117,8 @@ export function markNodeUnreachable(snode: Snode): void {
export async function getRandomSnodeAddress(): Promise<Snode> { export async function getRandomSnodeAddress(): Promise<Snode> {
// resolve random snode // resolve random snode
if (randomSnodePool.length === 0) { if (randomSnodePool.length === 0) {
// TODO: ensure that we only call this once at a time
// Should not this be saved to the database?
await refreshRandomPool([]); await refreshRandomPool([]);
if (randomSnodePool.length === 0) { if (randomSnodePool.length === 0) {
@ -331,11 +333,9 @@ async function internalUpdateSnodesFor(pubkey: string, edkeys: Array<string>) {
} }
export async function getSnodesFor(pubkey: string): Promise<Array<Snode>> { export async function getSnodesFor(pubkey: string): Promise<Array<Snode>> {
let maybeNodes = nodesForPubkey.get(pubkey); const maybeNodes = nodesForPubkey.get(pubkey);
let nodes: Array<string>; let nodes: Array<string>;
maybeNodes = [];
// NOTE: important that maybeNodes is not [] here // NOTE: important that maybeNodes is not [] here
if (maybeNodes === undefined) { if (maybeNodes === undefined) {
// First time access, try the database: // First time access, try the database:
@ -352,7 +352,7 @@ export async function getSnodesFor(pubkey: string): Promise<Array<Snode>> {
if (goodNodes.length < MIN_NODES) { if (goodNodes.length < MIN_NODES) {
// Request new node list from the network // Request new node list from the network
const freshNodes = await getSnodesForPubkey(pubkey); const freshNodes = _.shuffle(await requestSnodesForPubkey(pubkey));
const edkeys = freshNodes.map((n: Snode) => n.pubkey_ed25519); const edkeys = freshNodes.map((n: Snode) => n.pubkey_ed25519);
// tslint:disable-next-line no-floating-promises // tslint:disable-next-line no-floating-promises

Loading…
Cancel
Save