From 201390746e3d78ad7c9c43e6f7f8eb0b43ee9e9b Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Tue, 28 Mar 2023 12:32:42 +0700 Subject: [PATCH 1/2] Handle gossip messages async --- .../src/network/gossip/gossipsub.ts | 18 ++++++++++-------- .../src/network/processor/worker.ts | 11 ++++++++++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/beacon-node/src/network/gossip/gossipsub.ts b/packages/beacon-node/src/network/gossip/gossipsub.ts index 06740c7e7829..fe81f7a78a78 100644 --- a/packages/beacon-node/src/network/gossip/gossipsub.ts +++ b/packages/beacon-node/src/network/gossip/gossipsub.ts @@ -406,14 +406,16 @@ export class Eth2Gossipsub extends GossipSub implements GossipBeaconNode { const seenTimestampSec = Date.now() / 1000; // Emit message to network processor - this.events.emit(NetworkEvent.pendingGossipsubMessage, { - topic, - msg, - msgId, - propagationSource, - seenTimestampSec, - startProcessUnixSec: null, - }); + setTimeout(() => { + this.events.emit(NetworkEvent.pendingGossipsubMessage, { + topic, + msg, + msgId, + propagationSource, + seenTimestampSec, + startProcessUnixSec: null, + }); + }, 0); } private onValidationResult(msgId: string, propagationSource: PeerId, acceptance: TopicValidatorResult): void { diff --git a/packages/beacon-node/src/network/processor/worker.ts b/packages/beacon-node/src/network/processor/worker.ts index 64edfbf37077..3b65045dac6c 100644 --- a/packages/beacon-node/src/network/processor/worker.ts +++ b/packages/beacon-node/src/network/processor/worker.ts @@ -47,6 +47,15 @@ export class NetworkWorker { ); } - this.events.emit(NetworkEvent.gossipMessageValidationResult, message.msgId, message.propagationSource, acceptance); + setTimeout( + () => + this.events.emit( + NetworkEvent.gossipMessageValidationResult, + message.msgId, + message.propagationSource, + acceptance + ), + 0 + ); } } From 3df3c8ecca7f89d6a51003065a971c8e6dcf2f7e Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Wed, 29 Mar 2023 10:19:48 +0700 Subject: [PATCH 2/2] Add comments --- packages/beacon-node/src/network/gossip/gossipsub.ts | 4 +++- packages/beacon-node/src/network/processor/worker.ts | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/beacon-node/src/network/gossip/gossipsub.ts b/packages/beacon-node/src/network/gossip/gossipsub.ts index fe81f7a78a78..32a6f471da7d 100644 --- a/packages/beacon-node/src/network/gossip/gossipsub.ts +++ b/packages/beacon-node/src/network/gossip/gossipsub.ts @@ -405,7 +405,9 @@ export class Eth2Gossipsub extends GossipSub implements GossipBeaconNode { // Get seenTimestamp before adding the message to the queue or add async delays const seenTimestampSec = Date.now() / 1000; - // Emit message to network processor + // Emit message to network processor, use setTimeout to yield to the macro queue + // This is mostly due to too many attestation messages, and a gossipsub RPC may + // contain multiple of them. This helps avoid the I/O lag issue. setTimeout(() => { this.events.emit(NetworkEvent.pendingGossipsubMessage, { topic, diff --git a/packages/beacon-node/src/network/processor/worker.ts b/packages/beacon-node/src/network/processor/worker.ts index 3b65045dac6c..dc8fb82a6d34 100644 --- a/packages/beacon-node/src/network/processor/worker.ts +++ b/packages/beacon-node/src/network/processor/worker.ts @@ -47,6 +47,9 @@ export class NetworkWorker { ); } + // Use setTimeout to yield to the macro queue + // This is mostly due to too many attestation messages, and a gossipsub RPC may + // contain multiple of them. This helps avoid the I/O lag issue. setTimeout( () => this.events.emit(