diff --git a/packages/core-p2p/src/network-monitor.ts b/packages/core-p2p/src/network-monitor.ts index b44a0a10dc..8f8ebf4ab6 100644 --- a/packages/core-p2p/src/network-monitor.ts +++ b/packages/core-p2p/src/network-monitor.ts @@ -394,7 +394,8 @@ export class NetworkMonitor implements P2P.INetworkMonitor { } if (someJobFailed) { - throw new Error(`Prematurely canceled due to another job failure.`); + this.logger.info(`Prematurely canceled due to another job failure.`); + return; } } diff --git a/packages/core-p2p/src/socket-server/index.ts b/packages/core-p2p/src/socket-server/index.ts index ec57715fa3..fcc605b0be 100644 --- a/packages/core-p2p/src/socket-server/index.ts +++ b/packages/core-p2p/src/socket-server/index.ts @@ -61,18 +61,15 @@ export const startSocketServer = async (service: P2P.IPeerService, config: Recor }); // Create a timeout promise so that if socket server is not ready in 10 seconds, it rejects - const timeoutPromise = new Promise((resolve, reject) => { - const id = setTimeout(() => { - clearTimeout(id); - reject("Socket server failed to setup in 10 seconds."); - }, 10000); - }); + const timeout: NodeJS.Timeout = setTimeout(() => { + throw new Error("Socket server failed to setup in 10 seconds."); + }, 10000); - const serverReadyPromise = new Promise((resolve, reject) => { - server.on("ready", () => resolve(server)); - }); + const serverReadyPromise = await new Promise(resolve => server.on("ready", () => resolve(server))); + + clearTimeout(timeout); payloadProcessor.inject(server); - return Promise.race([serverReadyPromise, timeoutPromise]); + return serverReadyPromise; }; diff --git a/packages/core-p2p/src/socket-server/worker.ts b/packages/core-p2p/src/socket-server/worker.ts index e1e41a0418..ba08757e20 100644 --- a/packages/core-p2p/src/socket-server/worker.ts +++ b/packages/core-p2p/src/socket-server/worker.ts @@ -121,7 +121,6 @@ export class Worker extends SCWorker { // Check that blockchain, tx-pool and p2p are ready const isAppReady: boolean = (await this.sendToMasterAsync("p2p.utils.isAppReady")).data.ready; if (!isAppReady) { - req.socket.terminate(); return; } diff --git a/packages/core-p2p/src/utils/socket.ts b/packages/core-p2p/src/utils/socket.ts index 3448535ad1..6cf12567cf 100644 --- a/packages/core-p2p/src/utils/socket.ts +++ b/packages/core-p2p/src/utils/socket.ts @@ -26,20 +26,27 @@ export const socketEmit = async ( throw error; } - const socketEmitPromise = new Promise((resolve, reject) => { - socket.emit(event, req, (err, val) => (err ? reject(err) : resolve(val))); - }); + const socketEmitPromise = new Promise((resolve, reject) => + socket.emit(event, req, (err, val) => (err ? reject(err) : resolve(val))), + ); + + let timeoutHandle: NodeJS.Timeout; + const timeoutPromiseFn = (_, reject) => { + timeoutHandle = setTimeout(() => { + clearTimeout(timeoutHandle); - const timeoutPromiseFn = (resolve, reject) => { - const id = setTimeout(() => { - clearTimeout(id); const error = new Error(`Socket emit "${event}" : timed out (${timeout}ms)`); error.name = SocketErrors.Timeout; + reject(error); }, timeout); }; - const allPromises = timeout ? [socketEmitPromise, new Promise(timeoutPromiseFn)] : [socketEmitPromise]; + const response = await Promise.race( + timeout ? [socketEmitPromise, new Promise(timeoutPromiseFn)] : [socketEmitPromise], + ); + + clearTimeout(timeoutHandle); - return Promise.race(allPromises); + return response; };