From 9fc1d3cfb947fb142823878b0cc9950a45a871b8 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Fri, 3 Dec 2021 05:30:02 -0800 Subject: [PATCH] Ignore stale replies Summary: Changelog: ignore stale replies Reviewed By: lblasa Differential Revision: D32829739 fbshipit-source-id: 267f43f8e8f3dea60ee86187f7a7709fea09e5af --- .../src/comms/BrowserServerWebSocket.tsx | 5 +++++ .../src/comms/SecureServerWebSocket.tsx | 4 ++++ .../src/comms/WebSocketClientConnection.tsx | 7 +++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/desktop/flipper-server-core/src/comms/BrowserServerWebSocket.tsx b/desktop/flipper-server-core/src/comms/BrowserServerWebSocket.tsx index 69bcd417c..40bf07535 100644 --- a/desktop/flipper-server-core/src/comms/BrowserServerWebSocket.tsx +++ b/desktop/flipper-server-core/src/comms/BrowserServerWebSocket.tsx @@ -97,6 +97,11 @@ class BrowserServerWebSocket extends SecureServerWebSocket { // Upon initialization it sent a `getPlugins` request. // We find that request and resolve it with the list of plugins we received from the `connect` message const getPluginsCallbacks = clientConnection.matchPendingRequest(0); + + if (!getPluginsCallbacks) { + return; + } + getPluginsCallbacks.resolve({ success: {plugins}, length: rawMessage.length, diff --git a/desktop/flipper-server-core/src/comms/SecureServerWebSocket.tsx b/desktop/flipper-server-core/src/comms/SecureServerWebSocket.tsx index e0a586345..9cff1f421 100644 --- a/desktop/flipper-server-core/src/comms/SecureServerWebSocket.tsx +++ b/desktop/flipper-server-core/src/comms/SecureServerWebSocket.tsx @@ -86,6 +86,10 @@ class SecureServerWebSocket extends ServerWebSocket { if (isWsResponseMessage(parsedMessage)) { const callbacks = clientConnection.matchPendingRequest(parsedMessage.id); + if (!callbacks) { + return; + } + if (parsedMessage.success !== undefined) { callbacks.resolve({ ...parsedMessage, diff --git a/desktop/flipper-server-core/src/comms/WebSocketClientConnection.tsx b/desktop/flipper-server-core/src/comms/WebSocketClientConnection.tsx index 63e620b45..a0db113d2 100644 --- a/desktop/flipper-server-core/src/comms/WebSocketClientConnection.tsx +++ b/desktop/flipper-server-core/src/comms/WebSocketClientConnection.tsx @@ -37,11 +37,14 @@ export default class WebSocketClientConnection implements ClientConnection { }); } - matchPendingRequest(id: number): PendingRequestResolvers { + matchPendingRequest(id: number): PendingRequestResolvers | undefined { const callbacks = this.pendingRequests.get(id); if (!callbacks) { - throw new Error('Pending request was not found'); + console.debug(`[conn] Pending request ${id} is not found. Ignore.`); + // It must be a response for a message from the older connection. Ignore. + // TODO: When we decide to bump sdk_version, make `id` a string equal to `connectionId:messageId`. Ignore messages only from other conections. Raise an error for missing mesages from this connection. + return; } this.pendingRequests.delete(id);