diff --git a/pkgs/bazel_worker/CHANGELOG.md b/pkgs/bazel_worker/CHANGELOG.md index 7377326fb..e0ad4b31b 100644 --- a/pkgs/bazel_worker/CHANGELOG.md +++ b/pkgs/bazel_worker/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.1.1 + +* Fix a bug where if spawnWorker threw an error, work requests would hang + forever instead of failing. + ## 1.1.0 * Add constructors with named parameters to diff --git a/pkgs/bazel_worker/lib/src/driver/driver.dart b/pkgs/bazel_worker/lib/src/driver/driver.dart index b395bd55c..e0d57aee4 100644 --- a/pkgs/bazel_worker/lib/src/driver/driver.dart +++ b/pkgs/bazel_worker/lib/src/driver/driver.dart @@ -120,6 +120,10 @@ class BazelWorkerDriver { _readyWorkers.remove(worker); _runWorkQueue(); }); + }).onError((e, s) { + _spawningWorkers.remove(futureWorker); + if (attempt.responseCompleter.isCompleted) return; + attempt.responseCompleter.completeError(e, s); }); } // Recursively calls itself until one of the bail out conditions are met. diff --git a/pkgs/bazel_worker/pubspec.yaml b/pkgs/bazel_worker/pubspec.yaml index 358f03e1e..425fd9be6 100644 --- a/pkgs/bazel_worker/pubspec.yaml +++ b/pkgs/bazel_worker/pubspec.yaml @@ -1,5 +1,5 @@ name: bazel_worker -version: 1.1.0 +version: 1.1.1 description: >- Protocol and utilities to implement or invoke persistent bazel workers. repository: https://github.com/dart-lang/bazel_worker diff --git a/pkgs/bazel_worker/test/driver_test.dart b/pkgs/bazel_worker/test/driver_test.dart index 034d75a43..980ae2374 100644 --- a/pkgs/bazel_worker/test/driver_test.dart +++ b/pkgs/bazel_worker/test/driver_test.dart @@ -139,6 +139,12 @@ void main() { }); }); + test('handles spawnWorker failures', () async { + driver = BazelWorkerDriver(() async => throw StateError('oh no!'), + maxRetries: 0); + expect(driver!.doWork(WorkRequest()), throwsA(isA())); + }); + tearDown(() async { await driver?.terminateWorkers(); expect(MockWorker.liveWorkers, isEmpty);