aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnna Koskinen <Ansku@users.noreply.github.com>2019-11-06 16:12:28 +0200
committerGitHub <noreply@github.com>2019-11-06 16:12:28 +0200
commitf12a6e7c4cd003ef69aea188985415cf3bfab120 (patch)
treef52030c74f054a442defe8d598c73fbe814d9211
parent810b5b0aed16c2ea56ee55d6361d35ba984305d7 (diff)
downloadvaadin-framework-f12a6e7c4cd003ef69aea188985415cf3bfab120.tar.gz
vaadin-framework-f12a6e7c4cd003ef69aea188985415cf3bfab120.zip
Fixing issue with Push stopping working in some circumstances (#11791) (#11795)
* Fixing issue with Push stopping working in some circumstances If new request is attempted when resynchronization is ongoing, the Push will stop working. This patch fixes the issue by aborting handleJson if resynch is already ongoing. Fixes #11702, #7719
-rw-r--r--client/src/main/java/com/vaadin/client/communication/MessageHandler.java18
-rw-r--r--client/src/main/java/com/vaadin/client/communication/MessageSender.java1
2 files changed, 17 insertions, 2 deletions
diff --git a/client/src/main/java/com/vaadin/client/communication/MessageHandler.java b/client/src/main/java/com/vaadin/client/communication/MessageHandler.java
index a622bf1614..8e16293423 100644
--- a/client/src/main/java/com/vaadin/client/communication/MessageHandler.java
+++ b/client/src/main/java/com/vaadin/client/communication/MessageHandler.java
@@ -193,6 +193,7 @@ public class MessageHandler {
private int lastSeenServerSyncId = UNDEFINED_SYNC_ID;
private ApplicationConnection connection;
+ private boolean resyncInProgress;
/**
* Data structure holding information about pending UIDL messages.
@@ -258,7 +259,17 @@ public class MessageHandler {
protected void handleJSON(final ValueMap json) {
final int serverId = getServerId(json);
- if (isResynchronize(json) && !isNextExpectedMessage(serverId)) {
+ boolean hasResynchronize = isResynchronize(json);
+
+ if (!hasResynchronize && resyncInProgress) {
+ Logger.getLogger(MessageHandler.class.getName())
+ .warning("Dropping the response of a request before a resync request.");
+ return;
+ }
+
+ resyncInProgress = false;
+
+ if (hasResynchronize && !isNextExpectedMessage(serverId)) {
// Resynchronize request. We must remove any old pending
// messages and ensure this is handled next. Otherwise we
// would keep waiting for an older message forever (if this
@@ -321,7 +332,7 @@ public class MessageHandler {
int serverNextExpected = json
.getInt(ApplicationConstants.CLIENT_TO_SERVER_ID);
getMessageSender().setClientToServerMessageId(serverNextExpected,
- isResynchronize(json));
+ hasResynchronize);
}
if (serverId != -1) {
@@ -1822,4 +1833,7 @@ public class MessageHandler {
}
}-*/;
+ public void onResynchronize() {
+ resyncInProgress = true;
+ }
}
diff --git a/client/src/main/java/com/vaadin/client/communication/MessageSender.java b/client/src/main/java/com/vaadin/client/communication/MessageSender.java
index 5864ee5ee7..cde6657d1a 100644
--- a/client/src/main/java/com/vaadin/client/communication/MessageSender.java
+++ b/client/src/main/java/com/vaadin/client/communication/MessageSender.java
@@ -349,6 +349,7 @@ public class MessageSender {
* state from the server
*/
public void resynchronize() {
+ getMessageHandler().onResynchronize();
getLogger().info("Resynchronizing from server");
JsonObject resyncParam = Json.createObject();
resyncParam.put(ApplicationConstants.RESYNCHRONIZE_ID, true);