Commit f43ef4f
fix: Use @internal executor for streaming subscriptions to prevent ForkJoinPool saturation
Root cause: Transport handlers used CompletableFuture.runAsync() without executor
parameter, defaulting to ForkJoinPool.commonPool (3 threads on CI). During concurrent
test execution, pool saturation prevented streaming subscriptions from starting,
causing SSE tests to timeout waiting for HTTP headers.
Changes:
- RestHandler: Add @internal Executor injection, use in runAsync()
- GrpcHandler: Add abstract getExecutor(), use in convertToStreamResponse()
- QuarkusGrpcHandler: Implement getExecutor() with @internal Executor
- JSONRPCHandler: Add @internal Executor injection, use in convertToSendStreamingMessageResponse()
- All test classes: Update handler instantiations to pass internalExecutor
Fixes SSE streaming test timeouts (test_sse_header_compliance, test_sse_event_format_compliance)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>1 parent 97a28b8 commit f43ef4f
File tree
7 files changed
+132
-100
lines changed- reference/grpc/src/main/java/io/a2a/server/grpc/quarkus
- transport
- grpc/src
- main/java/io/a2a/transport/grpc/handler
- test/java/io/a2a/transport/grpc/handler
- jsonrpc/src
- main/java/io/a2a/transport/jsonrpc/handler
- test/java/io/a2a/transport/jsonrpc/handler
- rest/src
- main/java/io/a2a/transport/rest/handler
- test/java/io/a2a/transport/rest/handler
7 files changed
+132
-100
lines changedLines changed: 12 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
| 7 | + | |
6 | 8 | | |
7 | 9 | | |
| 10 | + | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
| |||
20 | 23 | | |
21 | 24 | | |
22 | 25 | | |
| 26 | + | |
23 | 27 | | |
24 | 28 | | |
25 | 29 | | |
26 | 30 | | |
27 | | - | |
| 31 | + | |
| 32 | + | |
28 | 33 | | |
29 | 34 | | |
30 | 35 | | |
| 36 | + | |
31 | 37 | | |
32 | 38 | | |
33 | 39 | | |
| |||
44 | 50 | | |
45 | 51 | | |
46 | 52 | | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
47 | 58 | | |
Lines changed: 4 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
| |||
294 | 295 | | |
295 | 296 | | |
296 | 297 | | |
297 | | - | |
| 298 | + | |
298 | 299 | | |
299 | 300 | | |
300 | 301 | | |
| |||
504 | 505 | | |
505 | 506 | | |
506 | 507 | | |
| 508 | + | |
| 509 | + | |
507 | 510 | | |
508 | 511 | | |
509 | 512 | | |
| |||
Lines changed: 39 additions & 32 deletions
Large diffs are not rendered by default.
Lines changed: 10 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| |||
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| 48 | + | |
47 | 49 | | |
48 | 50 | | |
49 | 51 | | |
| |||
52 | 54 | | |
53 | 55 | | |
54 | 56 | | |
| 57 | + | |
55 | 58 | | |
56 | 59 | | |
| 60 | + | |
57 | 61 | | |
58 | 62 | | |
59 | 63 | | |
60 | 64 | | |
61 | | - | |
| 65 | + | |
62 | 66 | | |
63 | 67 | | |
64 | 68 | | |
65 | | - | |
| 69 | + | |
| 70 | + | |
66 | 71 | | |
67 | 72 | | |
68 | 73 | | |
69 | 74 | | |
70 | | - | |
71 | | - | |
| 75 | + | |
| 76 | + | |
72 | 77 | | |
73 | 78 | | |
74 | 79 | | |
| |||
278 | 283 | | |
279 | 284 | | |
280 | 285 | | |
281 | | - | |
| 286 | + | |
282 | 287 | | |
283 | 288 | | |
284 | 289 | | |
0 commit comments