Skip to content

Commit e3863f1

Browse files
authored
feat: Add client-to-server request retry mechanism to handle transient network failures (#1102)
1 parent 9093dbd commit e3863f1

File tree

8 files changed

+1443
-171
lines changed

8 files changed

+1443
-171
lines changed

packages/dart/lib/parse_server_sdk.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ part 'src/network/options.dart';
3636
part 'src/network/parse_client.dart';
3737
part 'src/network/parse_connectivity.dart';
3838
part 'src/network/parse_live_query.dart';
39+
part 'src/network/parse_network_retry.dart';
3940
part 'src/network/parse_query.dart';
4041
part 'src/objects/parse_acl.dart';
4142
part 'src/objects/parse_array.dart';
@@ -100,6 +101,18 @@ class Parse {
100101
/// debug: true,
101102
/// liveQuery: true);
102103
/// ```
104+
///
105+
/// Parameters:
106+
///
107+
/// * [restRetryIntervals] - Optional list of retry delay intervals (in milliseconds)
108+
/// for read operations. Applies to: GET, DELETE, and getBytes methods.
109+
/// Defaults to [0, 250, 500, 1000, 2000].
110+
/// * [restRetryIntervalsForWrites] - Optional list of retry delay intervals for
111+
/// write operations. Applies to: POST, PUT, and postBytes methods.
112+
/// Defaults to [] (no retries) to prevent duplicate data creation.
113+
/// Configure only if you have idempotency guarantees in place.
114+
/// * [liveListRetryIntervals] - Optional list of retry delay intervals for
115+
/// LiveQuery operations.
103116
Future<Parse> initialize(
104117
String appId,
105118
String serverUrl, {
@@ -118,6 +131,8 @@ class Parse {
118131
Map<String, ParseObjectConstructor>? registeredSubClassMap,
119132
ParseUserConstructor? parseUserConstructor,
120133
ParseFileConstructor? parseFileConstructor,
134+
List<int>? restRetryIntervals,
135+
List<int>? restRetryIntervalsForWrites,
121136
List<int>? liveListRetryIntervals,
122137
ParseConnectivityProvider? connectivityProvider,
123138
String? fileDirectory,
@@ -144,6 +159,8 @@ class Parse {
144159
registeredSubClassMap: registeredSubClassMap,
145160
parseUserConstructor: parseUserConstructor,
146161
parseFileConstructor: parseFileConstructor,
162+
restRetryIntervals: restRetryIntervals,
163+
restRetryIntervalsForWrites: restRetryIntervalsForWrites,
147164
liveListRetryIntervals: liveListRetryIntervals,
148165
connectivityProvider: connectivityProvider,
149166
fileDirectory: fileDirectory,

packages/dart/lib/src/data/parse_core_data.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ class ParseCoreData {
3232
Map<String, ParseObjectConstructor>? registeredSubClassMap,
3333
ParseUserConstructor? parseUserConstructor,
3434
ParseFileConstructor? parseFileConstructor,
35+
List<int>? restRetryIntervals,
36+
List<int>? restRetryIntervalsForWrites,
3537
List<int>? liveListRetryIntervals,
3638
ParseConnectivityProvider? connectivityProvider,
3739
String? fileDirectory,
@@ -52,6 +54,10 @@ class ParseCoreData {
5254
_instance.sessionId = sessionId;
5355
_instance.autoSendSessionId = autoSendSessionId;
5456
_instance.securityContext = securityContext;
57+
_instance.restRetryIntervals =
58+
restRetryIntervals ?? <int>[0, 250, 500, 1000, 2000];
59+
_instance.restRetryIntervalsForWrites =
60+
restRetryIntervalsForWrites ?? <int>[];
5561
_instance.liveListRetryIntervals =
5662
liveListRetryIntervals ??
5763
(parseIsWeb
@@ -89,6 +95,8 @@ class ParseCoreData {
8995
late bool debug;
9096
late CoreStore storage;
9197
late ParseSubClassHandler _subClassHandler;
98+
late List<int> restRetryIntervals;
99+
late List<int> restRetryIntervalsForWrites;
92100
late List<int> liveListRetryIntervals;
93101
ParseConnectivityProvider? connectivityProvider;
94102
String? fileDirectory;

0 commit comments

Comments
 (0)