Skip to content

Commit ddb8d1f

Browse files
authored
Makes the flutter tool retry on a bad gateway network error from gradle (#140670)
Seen in flutter/flutter#140643
1 parent 89f0c69 commit ddb8d1f

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

packages/flutter_tools/lib/src/android/gradle_errors.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ final GradleHandledError networkErrorHandler = GradleHandledError(
214214
test: _lineMatcher(const <String>[
215215
'java.io.FileNotFoundException: https://downloads.gradle.org',
216216
'java.io.IOException: Unable to tunnel through proxy',
217+
'java.io.IOException: Server returned HTTP response code: 502',
217218
'java.lang.RuntimeException: Timeout of',
218219
'java.util.zip.ZipException: error in opening zip file',
219220
'javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake',

packages/flutter_tools/test/general.shard/android/gradle_errors_test.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,39 @@ at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)''';
171171
ProcessManager: () => processManager,
172172
});
173173

174+
testUsingContext('retries if gradle fails downloading with bad gateway error', () async {
175+
const String errorMessage = r'''
176+
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 502 for URL: https://objects.githubusercontent.com/github-production-release-asset-2e65be/696192900/1e77bbfb-4cde-4376-92ea-fc4ff57b8362?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=FFFF%2F20231220%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231220T160553Z&X-Amz-Expires=300&X-Amz-Signature=ffff&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=696192900&response-content-disposition=attachment%3B%20filename%3Dgradle-8.2.1-all.zip&response-content-type=application%2Foctet-stream
177+
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1997)
178+
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
179+
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:224)
180+
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
181+
at org.gradle.wrapper.Download.download(Download.java:44)
182+
at org.gradle.wrapper.Install$1.call(Install.java:61)
183+
at org.gradle.wrapper.Install$1.call(Install.java:48)
184+
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
185+
at org.gradle.wrapper.Install.createDist(Install.java:48)
186+
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
187+
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)''';
188+
189+
expect(formatTestErrorMessage(errorMessage, networkErrorHandler), isTrue);
190+
expect(await networkErrorHandler.handler(
191+
line: '',
192+
multidexEnabled: true,
193+
project: FakeFlutterProject(),
194+
usesAndroidX: true,
195+
), equals(GradleBuildStatus.retry));
196+
197+
expect(testLogger.errorText,
198+
contains(
199+
'Gradle threw an error while downloading artifacts from the network.'
200+
)
201+
);
202+
}, overrides: <Type, Generator>{
203+
FileSystem: () => fileSystem,
204+
ProcessManager: () => processManager,
205+
});
206+
174207
testUsingContext('retries if gradle times out waiting for exclusive access to zip', () async {
175208
const String errorMessage = '''
176209
Exception in thread "main" java.lang.RuntimeException: Timeout of 120000 reached waiting for exclusive access to file: /User/documents/gradle-5.6.2-all.zip

0 commit comments

Comments
 (0)