Feature flag OkHttp automatic network retry.

fork-5.53.8
Greyson Parrelli 2021-01-16 14:50:57 -05:00
rodzic a2dc781840
commit 0514950333
7 zmienionych plików z 43 dodań i 20 usunięć

Wyświetl plik

@ -50,6 +50,7 @@ import org.thoughtcrime.securesms.shakereport.ShakeToReport;
import org.thoughtcrime.securesms.util.AlarmSleepTimer;
import org.thoughtcrime.securesms.util.ByteUnit;
import org.thoughtcrime.securesms.util.EarlyMessageCache;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.FrameRateTracker;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.libsignal.util.guava.Optional;
@ -94,7 +95,8 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
return new SignalServiceAccountManager(networkAccess.getConfiguration(context),
new DynamicCredentialsProvider(context),
BuildConfig.SIGNAL_AGENT,
provideGroupsV2Operations());
provideGroupsV2Operations(),
FeatureFlags.okHttpAutomaticRetry());
}
@Override
@ -109,7 +111,8 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
Optional.of(new SecurityEventListener(context)),
provideClientZkOperations().getProfileOperations(),
SignalExecutors.newCachedBoundedExecutor("signal-messages", 1, 16),
ByteUnit.KILOBYTES.toBytes(512));
ByteUnit.KILOBYTES.toBytes(512),
FeatureFlags.okHttpAutomaticRetry());
}
@Override
@ -121,7 +124,8 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr
BuildConfig.SIGNAL_AGENT,
new PipeConnectivityListener(),
sleepTimer,
provideClientZkOperations().getProfileOperations());
provideClientZkOperations().getProfileOperations(),
FeatureFlags.okHttpAutomaticRetry());
}
@Override

Wyświetl plik

@ -9,6 +9,7 @@ import com.google.android.gms.security.ProviderInstaller;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
import java.util.UUID;
@ -33,7 +34,7 @@ public class AccountManagerFactory {
}
return new SignalServiceAccountManager(new SignalServiceNetworkAccess(context).getConfiguration(number),
uuid, number, password, BuildConfig.SIGNAL_AGENT);
uuid, number, password, BuildConfig.SIGNAL_AGENT, FeatureFlags.okHttpAutomaticRetry());
}
/**
@ -54,7 +55,7 @@ public class AccountManagerFactory {
}
return new SignalServiceAccountManager(new SignalServiceNetworkAccess(context).getConfiguration(number),
null, number, password, BuildConfig.SIGNAL_AGENT);
null, number, password, BuildConfig.SIGNAL_AGENT, FeatureFlags.okHttpAutomaticRetry());
}
}

Wyświetl plik

@ -70,6 +70,7 @@ public final class FeatureFlags {
private static final String AUTOMATIC_SESSION_RESET = "android.automaticSessionReset.2";
private static final String AUTOMATIC_SESSION_INTERVAL = "android.automaticSessionResetInterval";
private static final String DEFAULT_MAX_BACKOFF = "android.defaultMaxBackoff";
private static final String OKHTTP_AUTOMATIC_RETRY = "android.okhttpAutomaticRetry";
/**
* We will only store remote values for flags in this set. If you want a flag to be controllable
@ -96,7 +97,8 @@ public final class FeatureFlags {
GROUP_NAME_MAX_LENGTH,
AUTOMATIC_SESSION_RESET,
AUTOMATIC_SESSION_INTERVAL,
DEFAULT_MAX_BACKOFF
DEFAULT_MAX_BACKOFF,
OKHTTP_AUTOMATIC_RETRY
);
@VisibleForTesting
@ -133,7 +135,8 @@ public final class FeatureFlags {
GROUP_NAME_MAX_LENGTH,
AUTOMATIC_SESSION_RESET,
AUTOMATIC_SESSION_INTERVAL,
DEFAULT_MAX_BACKOFF
DEFAULT_MAX_BACKOFF,
OKHTTP_AUTOMATIC_RETRY
);
/**
@ -308,6 +311,11 @@ public final class FeatureFlags {
return getInteger(DEFAULT_MAX_BACKOFF, 60);
}
/** Whether or not to allow automatic retries from OkHttp */
public static boolean okHttpAutomaticRetry() {
return getBoolean(OKHTTP_AUTOMATIC_RETRY, false);
}
/** Only for rendering debug info. */
public static synchronized @NonNull Map<String, Object> getMemoryValues() {
return new TreeMap<>(REMOTE_VALUES);

Wyświetl plik

@ -121,21 +121,23 @@ public class SignalServiceAccountManager {
*/
public SignalServiceAccountManager(SignalServiceConfiguration configuration,
UUID uuid, String e164, String password,
String signalAgent)
String signalAgent, boolean automaticNetworkRetry)
{
this(configuration,
new StaticCredentialsProvider(uuid, e164, password, null),
signalAgent,
new GroupsV2Operations(ClientZkOperations.create(configuration)));
new GroupsV2Operations(ClientZkOperations.create(configuration)),
automaticNetworkRetry);
}
public SignalServiceAccountManager(SignalServiceConfiguration configuration,
CredentialsProvider credentialsProvider,
String signalAgent,
GroupsV2Operations groupsV2Operations)
GroupsV2Operations groupsV2Operations,
boolean automaticNetworkRetry)
{
this.groupsV2Operations = groupsV2Operations;
this.pushServiceSocket = new PushServiceSocket(configuration, credentialsProvider, signalAgent, groupsV2Operations.getProfileOperations());
this.pushServiceSocket = new PushServiceSocket(configuration, credentialsProvider, signalAgent, groupsV2Operations.getProfileOperations(), automaticNetworkRetry);
this.credentials = credentialsProvider;
this.userAgent = signalAgent;
}

Wyświetl plik

@ -80,9 +80,10 @@ public class SignalServiceMessageReceiver {
String signalingKey, String signalAgent,
ConnectivityListener listener,
SleepTimer timer,
ClientZkProfileOperations clientZkProfileOperations)
ClientZkProfileOperations clientZkProfileOperations,
boolean automaticNetworkRetry)
{
this(urls, new StaticCredentialsProvider(uuid, e164, password, signalingKey), signalAgent, listener, timer, clientZkProfileOperations);
this(urls, new StaticCredentialsProvider(uuid, e164, password, signalingKey), signalAgent, listener, timer, clientZkProfileOperations, automaticNetworkRetry);
}
/**
@ -96,11 +97,12 @@ public class SignalServiceMessageReceiver {
String signalAgent,
ConnectivityListener listener,
SleepTimer timer,
ClientZkProfileOperations clientZkProfileOperations)
ClientZkProfileOperations clientZkProfileOperations,
boolean automaticNetworkRetry)
{
this.urls = urls;
this.credentialsProvider = credentials;
this.socket = new PushServiceSocket(urls, credentials, signalAgent, clientZkProfileOperations);
this.socket = new PushServiceSocket(urls, credentials, signalAgent, clientZkProfileOperations, automaticNetworkRetry);
this.signalAgent = signalAgent;
this.connectivityListener = listener;
this.sleepTimer = timer;

Wyświetl plik

@ -149,9 +149,10 @@ public class SignalServiceMessageSender {
Optional<SignalServiceMessagePipe> unidentifiedPipe,
Optional<EventListener> eventListener,
ClientZkProfileOperations clientZkProfileOperations,
ExecutorService executor)
ExecutorService executor,
boolean automaticNetworkRetry)
{
this(urls, new StaticCredentialsProvider(uuid, e164, password, null), store, signalAgent, isMultiDevice, pipe, unidentifiedPipe, eventListener, clientZkProfileOperations, executor, 0);
this(urls, new StaticCredentialsProvider(uuid, e164, password, null), store, signalAgent, isMultiDevice, pipe, unidentifiedPipe, eventListener, clientZkProfileOperations, executor, 0, automaticNetworkRetry);
}
public SignalServiceMessageSender(SignalServiceConfiguration urls,
@ -164,9 +165,10 @@ public class SignalServiceMessageSender {
Optional<EventListener> eventListener,
ClientZkProfileOperations clientZkProfileOperations,
ExecutorService executor,
long maxEnvelopeSize)
long maxEnvelopeSize,
boolean automaticNetworkRetry)
{
this.socket = new PushServiceSocket(urls, credentialsProvider, signalAgent, clientZkProfileOperations);
this.socket = new PushServiceSocket(urls, credentialsProvider, signalAgent, clientZkProfileOperations, automaticNetworkRetry);
this.store = store;
this.localAddress = new SignalServiceAddress(credentialsProvider.getUuid(), credentialsProvider.getE164());
this.pipe = new AtomicReference<>(pipe);

Wyświetl plik

@ -233,14 +233,17 @@ public class PushServiceSocket {
private final String signalAgent;
private final SecureRandom random;
private final ClientZkProfileOperations clientZkProfileOperations;
private final boolean automaticNetworkRetry;
public PushServiceSocket(SignalServiceConfiguration configuration,
CredentialsProvider credentialsProvider,
String signalAgent,
ClientZkProfileOperations clientZkProfileOperations)
ClientZkProfileOperations clientZkProfileOperations,
boolean automaticNetworkRetry)
{
this.credentialsProvider = credentialsProvider;
this.signalAgent = signalAgent;
this.automaticNetworkRetry = automaticNetworkRetry;
this.serviceClients = createServiceConnectionHolders(configuration.getSignalServiceUrls(), configuration.getNetworkInterceptors(), configuration.getDns());
this.cdnClientsMap = createCdnClientsMap(configuration.getSignalCdnUrlMap(), configuration.getNetworkInterceptors(), configuration.getDns());
this.contactDiscoveryClients = createConnectionHolders(configuration.getSignalContactDiscoveryUrls(), configuration.getNetworkInterceptors(), configuration.getDns());
@ -1477,6 +1480,7 @@ public class PushServiceSocket {
return baseClient.newBuilder()
.connectTimeout(soTimeoutMillis, TimeUnit.MILLISECONDS)
.readTimeout(soTimeoutMillis, TimeUnit.MILLISECONDS)
.retryOnConnectionFailure(automaticNetworkRetry)
.build();
}