Skip to content

Commit cca6f24

Browse files
committed
store [nfc]: Explain why we reset backoff, and the trade-offs
Adapted from the text I wrote at zulip#554.
1 parent fa29128 commit cca6f24

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

lib/model/store.dart

+16
Original file line numberDiff line numberDiff line change
@@ -807,8 +807,24 @@ class UpdateMachine {
807807
}
808808
}
809809

810+
// After one successful request, we reset backoff to its initial state.
811+
// That way if the user is off the network and comes back on, the app
812+
// doesn't wind up in a state where it's slow to recover the next time
813+
// one request fails.
814+
//
815+
// This does mean that if the server is having trouble and handling some
816+
// but not all of its requests, we'll end up doing a lot more retries than
817+
// if we stayed at the max backoff interval; partway toward what would
818+
// happen if we weren't backing off at all.
819+
//
820+
// But at least for [getEvents] requests, as here, it should be OK,
821+
// because this is a long-poll. That means a typical successful request
822+
// takes a long time to come back; in fact longer than our max backoff
823+
// duration (which is 10 seconds). So if we're getting a mix of successes
824+
// and failures, the successes themselves should space out the requests.
810825
backoffMachine = null;
811826
store.isLoading = false;
827+
812828
final events = result.events;
813829
for (final event in events) {
814830
await store.handleEvent(event);

0 commit comments

Comments
 (0)