Do exponential backoff for all exceptions in VMService::defaultOpenChannel. (#16785)

We were trying to only catch WebSocketException, but in fact
SocketException can be thrown as well.
This commit is contained in:
Todd Volkert 2018-04-19 23:36:15 -07:00 committed by GitHub
parent 060a1adec1
commit 12bbaba9ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 4 deletions

View file

@ -53,7 +53,7 @@ Future<StreamChannel<String>> _defaultOpenChannel(Uri uri) async {
attempts += 1;
try {
socket = await io.WebSocket.connect(uri.toString());
} on io.WebSocketException catch(e) {
} catch (e) {
printTrace('Exception attempting to connect to observatory: $e');
printTrace('This was attempt #$attempts. Will retry in $delay.');
await new Future<Null>.delayed(delay);

View file

@ -4,17 +4,19 @@
import 'package:test/test.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/port_scanner.dart';
import 'package:flutter_tools/src/vmservice.dart';
import 'src/common.dart';
import 'src/context.dart';
void main() {
group('VMService', () {
test('fails connection eagerly in the connect() method', () async {
testUsingContext('fails connection eagerly in the connect() method', () async {
final int port = await const HostPortScanner().findAvailablePort();
expect(
VMService.connect(Uri.parse('http://localhost:$port')),
throwsA(const isInstanceOf<SocketException>()),
throwsToolExit(),
);
});
});