All files / src/peer_book new_list.ts

91.67% Statements 11/12
75% Branches 3/4
100% Functions 3/3
91.67% Lines 11/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72                            35x   35x           35x           35x                   513x           513x 513x           4x               12323x       12323x         12323x      
/*
 * Copyright © 2019 Lisk Foundation
 *
 * See the LICENSE file at the top-level directory of this distribution
 * for licensing information.
 *
 * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation,
 * no part of this software, including this file, may be copied, modified,
 * propagated, or distributed except according to the terms contained in the
 * LICENSE file.
 *
 * Removal or modification of this copyright notice is prohibited.
 *
 */
import { DEFAULT_EVICTION_THRESHOLD_TIME } from '../constants';
import { P2PEnhancedPeerInfo } from '../p2p_types';
import {
	evictPeerRandomlyFromBucket,
	expirePeerFromBucket,
	PEER_TYPE,
} from '../utils';
 
import { BaseList, Bucket, PeerListConfig } from './base_list';
 
export interface NewListConfig extends PeerListConfig {
	readonly evictionThresholdTime?: number;
}
 
export class NewList extends BaseList {
	private readonly _evictionThresholdTime: number;
 
	public constructor({
		evictionThresholdTime,
		numOfBuckets,
		bucketSize,
		secret,
		peerType,
	}: NewListConfig) {
		super({
			secret,
			numOfBuckets,
			bucketSize,
			peerType,
		});
		this.type = PEER_TYPE.NEW_PEER;
		this._evictionThresholdTime = evictionThresholdTime
			? evictionThresholdTime
			: DEFAULT_EVICTION_THRESHOLD_TIME;
	}
 
	public get newPeerConfig(): NewListConfig {
		return {
			...this.peerListConfig,
			evictionThresholdTime: this._evictionThresholdTime,
		};
	}
 
	public makeSpace(bucket: Bucket): P2PEnhancedPeerInfo | undefined {
		// First eviction strategy: expire older peers
		const evictedPeer = expirePeerFromBucket(
			bucket,
			this._evictionThresholdTime,
		);
		Iif (evictedPeer) {
			return evictedPeer;
		}
 
		// Second eviction strategy: Select random peer and evict
		return evictPeerRandomlyFromBucket(bucket);
	}
}