TODOs: joinWithBackoff -> joinWithRetry
Instead of backing off exponentially, we will consistently check
every 2s, 15 times in a row.
Change-Id: I9f2fbdae39fd4e8150a20ba5e010bca17f17fb1a
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
index b957fe8..34771e1 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbaseMain.java
@@ -44,7 +44,8 @@
private static final String
TAG = SyncbaseMain.class.getSimpleName();
- private static int DEFAULT_MAX_JOIN_ATTEMPTS = 10;
+ private static final int DEFAULT_MAX_JOIN_ATTEMPTS = 15;
+ private static final long RETRY_DELAY = 2000;
private final IdGenerator mIdGenerator = new IdGenerator(IdAlphabets.COLLECTION_ID, true);
private final Map<String, MainListTracker> mTaskTrackers = new HashMap<>();
@@ -82,7 +83,7 @@
Log.d(TAG, "Found a list id from userdata watch: " + listId.getName() +
" with owner: " + listId.getBlessing());
- trap(joinWithBackoff(listId));
+ trap(joinWithRetry(listId));
MainListTracker listTracker = new MainListTracker(getVContext(),
getDatabase(), listId, listener);
@@ -138,18 +139,20 @@
CLOUD_NAME, Arrays.asList(CLOUD_BLESSING), memberInfo);
}
- private ListenableFuture<SyncgroupSpec> joinWithBackoff(Id listId) {
- return joinWithBackoff(listId, 0, DEFAULT_MAX_JOIN_ATTEMPTS);
+ // Join the syncgroup. Retry if there are failures.
+ private ListenableFuture<SyncgroupSpec> joinWithRetry(Id listId) {
+ return joinWithRetry(listId, 0, DEFAULT_MAX_JOIN_ATTEMPTS);
}
- private ListenableFuture<SyncgroupSpec> joinWithBackoff(final Id listId, final int numTimes,
- final int limit) {
+ private ListenableFuture<SyncgroupSpec> joinWithRetry(final Id listId, final int numTimes,
+ final int limit) {
final String debugString = (numTimes + 1) + "/" + limit + " for: " + listId;
Log.d(TAG, "Join attempt " + debugString);
if (numTimes + 1 == limit) { // final attempt!
return joinListSyncgroup(listId);
}
- final long delay = RETRY_DELAY * (1 << numTimes);
+ // Note: This can be easily converted to exponential backoff.
+ final long delay = RETRY_DELAY;
return Futures.catchingAsync(
joinListSyncgroup(listId),
SyncgroupJoinFailedException.class,
@@ -168,7 +171,7 @@
// If this errors, then we will not get another chance to
// see this syncgroup until the app is restarted.
try {
- return joinWithBackoff(listId, numTimes + 1, limit).get();
+ return joinWithRetry(listId, numTimes + 1, limit).get();
} catch (InterruptedException | ExecutionException e) {
return null;
}
diff --git a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
index e99d341..dd01b54 100644
--- a/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
+++ b/app/src/syncbase/java/io/v/todos/persistence/syncbase/SyncbasePersistence.java
@@ -41,7 +41,6 @@
import java.util.TimerTask;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
import io.v.android.inspectors.RemoteInspectors;
import io.v.android.ManagedVAndroidContext;
@@ -103,7 +102,6 @@
protected static final String LISTS_PREFIX = "lists_";
protected static final long
SHORT_TIMEOUT = 2500,
- RETRY_DELAY = 300,
MEMBER_TIMER_DELAY = 100,
MEMBER_TIMER_PERIOD = 5000;
public static final String