Reset message receiver upon REST failure.
We've been seeing a lot of socket timeouts on REST requests under certain conditions. The issue seems to be a problem with the OkHttp client. Through testing, I've seen that resetting the receiver and retrying again seems to resolve most issues.
This commit is contained in:
parent
3849b46f0a
commit
02ea99254a
6 changed files with 12 additions and 15 deletions
|
@ -75,6 +75,11 @@ public class ApplicationDependencies {
|
|||
return messageReceiver;
|
||||
}
|
||||
|
||||
public static synchronized void resetSignalServiceMessageReceiver() {
|
||||
assertInitialization();
|
||||
messageReceiver = null;
|
||||
}
|
||||
|
||||
public static synchronized @NonNull SignalServiceNetworkAccess getSignalServiceNetworkAccess() {
|
||||
assertInitialization();
|
||||
return provider.provideSignalServiceNetworkAccess();
|
||||
|
|
|
@ -49,7 +49,7 @@ public class FcmJobService extends JobService {
|
|||
SignalExecutors.UNBOUNDED.execute(() -> {
|
||||
Context context = getApplicationContext();
|
||||
MessageRetriever retriever = ApplicationDependencies.getMessageRetriever();
|
||||
boolean success = retriever.retrieveMessages(context, new RestStrategy(context));
|
||||
boolean success = retriever.retrieveMessages(context, new RestStrategy(), new RestStrategy());
|
||||
|
||||
if (success) {
|
||||
Log.i(TAG, "Successfully retrieved messages.");
|
||||
|
|
|
@ -49,7 +49,7 @@ public class FcmService extends FirebaseMessagingService {
|
|||
|
||||
private static void handleReceivedNotification(Context context) {
|
||||
MessageRetriever retriever = ApplicationDependencies.getMessageRetriever();
|
||||
boolean success = retriever.retrieveMessages(context, new RestStrategy(context));
|
||||
boolean success = retriever.retrieveMessages(context, new RestStrategy(), new RestStrategy());
|
||||
|
||||
if (success) {
|
||||
Log.i(TAG, "Successfully retrieved messages.");
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
package org.thoughtcrime.securesms.gcm;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import org.thoughtcrime.securesms.IncomingMessageProcessor;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.whispersystems.signalservice.api.SignalServiceMessageReceiver;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -23,12 +20,6 @@ public class RestStrategy implements MessageRetriever.Strategy {
|
|||
|
||||
private static final long SOCKET_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
|
||||
|
||||
private final Context context;
|
||||
|
||||
public RestStrategy(@NonNull Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
@Override
|
||||
public boolean run() {
|
||||
|
@ -46,7 +37,8 @@ public class RestStrategy implements MessageRetriever.Strategy {
|
|||
|
||||
return true;
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to retrieve messages.", e);
|
||||
Log.w(TAG, "Failed to retrieve messages. Resetting the SignalServiceMessageReceiver.", e);
|
||||
ApplicationDependencies.resetSignalServiceMessageReceiver();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ public class PushNotificationReceiveJob extends BaseJob {
|
|||
@Override
|
||||
public void onRun() throws IOException {
|
||||
MessageRetriever retriever = ApplicationDependencies.getMessageRetriever();
|
||||
boolean result = retriever.retrieveMessages(context, new RestStrategy(context));
|
||||
boolean result = retriever.retrieveMessages(context, new RestStrategy());
|
||||
|
||||
if (result) {
|
||||
Log.i(TAG, "Successfully pulled messages.");
|
||||
|
|
|
@ -43,7 +43,6 @@ public class IncomingMessageObserver implements ConstraintObserver.Notifier {
|
|||
|
||||
private final Context context;
|
||||
private final NetworkConstraint networkConstraint;
|
||||
private final SignalServiceMessageReceiver receiver;
|
||||
private final SignalServiceNetworkAccess networkAccess;
|
||||
|
||||
private boolean appVisible;
|
||||
|
@ -52,7 +51,6 @@ public class IncomingMessageObserver implements ConstraintObserver.Notifier {
|
|||
public IncomingMessageObserver(@NonNull Context context) {
|
||||
this.context = context;
|
||||
this.networkConstraint = new NetworkConstraint.Factory(ApplicationContext.getInstance(context)).create();
|
||||
this.receiver = ApplicationDependencies.getSignalServiceMessageReceiver();
|
||||
this.networkAccess = ApplicationDependencies.getSignalServiceNetworkAccess();
|
||||
|
||||
new NetworkConstraintObserver(ApplicationContext.getInstance(context)).register(this);
|
||||
|
@ -144,6 +142,8 @@ public class IncomingMessageObserver implements ConstraintObserver.Notifier {
|
|||
waitForConnectionNecessary();
|
||||
|
||||
Log.i(TAG, "Making websocket connection....");
|
||||
SignalServiceMessageReceiver receiver = ApplicationDependencies.getSignalServiceMessageReceiver();
|
||||
|
||||
pipe = receiver.createMessagePipe();
|
||||
unidentifiedPipe = receiver.createUnidentifiedMessagePipe();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue