-
Notifications
You must be signed in to change notification settings - Fork 9
Update Apollo GraphQL packages #707
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Overview for:
|
| Gateway | RPS ⬇️ | Requests | Duration | Notes |
|---|---|---|---|---|
| cosmo | 178 | 5496 total, 0 failed | avg: 846ms, p95: 2384ms | ✅ |
| grafbase | 171 | 5281 total, 0 failed | avg: 887ms, p95: 2379ms | ✅ |
| apollo-router | 157 | 4880 total, 1 failed | avg: 865ms, p95: 2369ms | ❌ 1 failed requests, 1 non-200 responses, 1 unexpected GraphQL errors |
| apollo-server | 90 | 2998 total, 0 failed | avg: 3119ms, p95: 23373ms | ✅ |
| hive-gateway-bun | 85 | 2828 total, 0 failed | avg: 3267ms, p95: 5722ms | ✅ |
| hive-gateway | 84 | 2831 total, 0 failed | avg: 3293ms, p95: 17473ms | ✅ |
| mercurius | 76 | 2465 total, 0 failed | avg: 3760ms, p95: 5411ms | ✅ |
Summary for: `cosmo`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 16428 ✗ 0
data_received..................: 482 MB 16 MB/s
data_sent......................: 6.5 MB 212 kB/s
http_req_blocked...............: avg=1.43ms min=1.71µs med=3.53µs max=1.58s p(90)=6.25µs p(95)=382.7µs
http_req_connecting............: avg=1.36ms min=0s med=0s max=1.58s p(90)=0s p(95)=276.85µs
http_req_duration..............: avg=845.73ms min=3.57ms med=574.92ms max=7.38s p(90)=1.95s p(95)=2.38s
{ expected_response:true }...: avg=845.73ms min=3.57ms med=574.92ms max=7.38s p(90)=1.95s p(95)=2.38s
http_req_failed................: 0.00% ✓ 0 ✗ 5496
http_req_receiving.............: avg=416.66ms min=35.49µs med=112.82µs max=7.3s p(90)=1.41s p(95)=1.98s
http_req_sending...............: avg=15.99ms min=7.58µs med=16.61µs max=3.64s p(90)=150.98µs p(95)=2.8ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=413.08ms min=3.4ms med=374.49ms max=2.02s p(90)=760.45ms p(95)=907.9ms
http_reqs......................: 5496 178.157248/s
iteration_duration.............: avg=1.65s min=20.21ms med=1.27s max=8.9s p(90)=3.67s p(95)=4.5s
iterations.....................: 5476 177.508932/s
vus............................: 300 min=300 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `grafbase`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 15783 ✗ 0
data_received..................: 464 MB 15 MB/s
data_sent......................: 6.3 MB 203 kB/s
http_req_blocked...............: avg=2.92ms min=1.4µs med=3.18µs max=2.94s p(90)=5.27µs p(95)=1.05ms
http_req_connecting............: avg=2.45ms min=0s med=0s max=2.94s p(90)=0s p(95)=822.09µs
http_req_duration..............: avg=886.87ms min=2.99ms med=714.77ms max=4.67s p(90)=2s p(95)=2.37s
{ expected_response:true }...: avg=886.87ms min=2.99ms med=714.77ms max=4.67s p(90)=2s p(95)=2.37s
http_req_failed................: 0.00% ✓ 0 ✗ 5281
http_req_receiving.............: avg=305.47ms min=33.73µs med=86.45µs max=3.9s p(90)=1.23s p(95)=1.69s
http_req_sending...............: avg=22.96ms min=7.69µs med=14.77µs max=2.81s p(90)=321.45µs p(95)=13.15ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=558.43ms min=2.93ms med=545.14ms max=2.81s p(90)=981.52ms p(95)=1.12s
http_reqs......................: 5281 171.047262/s
iteration_duration.............: avg=1.72s min=18.29ms med=1.45s max=9.29s p(90)=3.55s p(95)=4.25s
iterations.....................: 5261 170.399478/s
vus............................: 300 min=300 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `apollo-router`
K6 Output
✗ response code was 200
↳ 99% — ✓ 4859 / ✗ 1
✗ no graphql errors
↳ 99% — ✓ 4859 / ✗ 1
✓ valid response structure
█ setup
checks.........................: 99.98% ✓ 14577 ✗ 2
data_received..................: 428 MB 14 MB/s
data_sent......................: 5.8 MB 187 kB/s
http_req_blocked...............: avg=3.51ms min=1.68µs med=3.69µs max=2.32s p(90)=6.82µs p(95)=2.75ms
http_req_connecting............: avg=3.05ms min=0s med=0s max=2.32s p(90)=0s p(95)=2.48ms
http_req_duration..............: avg=865.38ms min=6.63ms med=716.43ms max=4.63s p(90)=1.74s p(95)=2.36s
{ expected_response:true }...: avg=865.2ms min=6.63ms med=716.26ms max=4.63s p(90)=1.74s p(95)=2.36s
http_req_failed................: 0.02% ✓ 1 ✗ 4879
http_req_receiving.............: avg=267.49ms min=0s med=88.27µs max=4.21s p(90)=1.14s p(95)=1.79s
http_req_sending...............: avg=23.24ms min=8.27µs med=18.08µs max=2.81s p(90)=356.44µs p(95)=18.72ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=574.63ms min=6.54ms med=524.91ms max=2.84s p(90)=1.06s p(95)=1.26s
http_reqs......................: 4880 157.247442/s
iteration_duration.............: avg=1.88s min=28.54ms med=1.63s max=11.72s p(90)=3.64s p(95)=4.54s
iterations.....................: 4860 156.602985/s
vus............................: 37 min=37 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `apollo-server`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 8934 ✗ 0
data_received..................: 263 MB 8.0 MB/s
data_sent......................: 3.6 MB 108 kB/s
http_req_blocked...............: avg=640.31µs min=1.54µs med=3.05µs max=15.72ms p(90)=93.98µs p(95)=6.49ms
http_req_connecting............: avg=617.71µs min=0s med=0s max=15.45ms p(90)=58.16µs p(95)=6.33ms
http_req_duration..............: avg=3.11s min=11.43ms med=1.4s max=32.65s p(90)=1.98s p(95)=23.37s
{ expected_response:true }...: avg=3.11s min=11.43ms med=1.4s max=32.65s p(90)=1.98s p(95)=23.37s
http_req_failed................: 0.00% ✓ 0 ✗ 2998
http_req_receiving.............: avg=404.01µs min=43.91µs med=103.33µs max=82.96ms p(90)=205.13µs p(95)=343.09µs
http_req_sending...............: avg=88.07µs min=8.93µs med=15.06µs max=19.85ms p(90)=55.76µs p(95)=344.78µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.11s min=11.35ms med=1.4s max=32.65s p(90)=1.98s p(95)=23.37s
http_reqs......................: 2998 90.602321/s
iteration_duration.............: avg=3.15s min=396.85ms med=1.42s max=32.65s p(90)=2s p(95)=23.74s
iterations.....................: 2978 89.997903/s
vus............................: 15 min=15 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `hive-gateway-bun`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 8424 ✗ 0
data_received..................: 248 MB 7.5 MB/s
data_sent......................: 3.4 MB 101 kB/s
http_req_blocked...............: avg=606.34µs min=2.17µs med=4.92µs max=30.48ms p(90)=302.48µs p(95)=5.13ms
http_req_connecting............: avg=485.47µs min=0s med=0s max=15.06ms p(90)=164.57µs p(95)=4.42ms
http_req_duration..............: avg=3.26s min=17.52ms med=2.89s max=7.25s p(90)=5.06s p(95)=5.72s
{ expected_response:true }...: avg=3.26s min=17.52ms med=2.89s max=7.25s p(90)=5.06s p(95)=5.72s
http_req_failed................: 0.00% ✓ 0 ✗ 2828
http_req_receiving.............: avg=66.56ms min=45.35µs med=216.67µs max=1.98s p(90)=37.67ms p(95)=595.9ms
http_req_sending...............: avg=829.96µs min=9.48µs med=27.67µs max=341.77ms p(90)=263.26µs p(95)=1.44ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.19s min=17.3ms med=2.85s max=7.25s p(90)=4.98s p(95)=5.71s
http_reqs......................: 2828 85.290239/s
iteration_duration.............: avg=3.34s min=145.21ms med=2.96s max=7.42s p(90)=5.18s p(95)=5.9s
iterations.....................: 2808 84.687055/s
vus............................: 32 min=32 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `hive-gateway`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 8433 ✗ 0
data_received..................: 249 MB 7.5 MB/s
data_sent......................: 3.4 MB 101 kB/s
http_req_blocked...............: avg=2.55ms min=2.09µs med=4.21µs max=70.81ms p(90)=3.46ms p(95)=23.43ms
http_req_connecting............: avg=2.5ms min=0s med=0s max=70.77ms p(90)=3.35ms p(95)=23.13ms
http_req_duration..............: avg=3.29s min=13.86ms med=1.71s max=32.81s p(90)=3.22s p(95)=17.47s
{ expected_response:true }...: avg=3.29s min=13.86ms med=1.71s max=32.81s p(90)=3.22s p(95)=17.47s
http_req_failed................: 0.00% ✓ 0 ✗ 2831
http_req_receiving.............: avg=1.99ms min=43.55µs med=109.34µs max=416.86ms p(90)=596.56µs p(95)=2.01ms
http_req_sending...............: avg=1.62ms min=9.63µs med=24.11µs max=62.24ms p(90)=479.99µs p(95)=11.61ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.28s min=13.71ms med=1.71s max=32.8s p(90)=3.22s p(95)=17.46s
http_reqs......................: 2831 84.898927/s
iteration_duration.............: avg=3.35s min=297.58ms med=1.75s max=32.83s p(90)=3.27s p(95)=17.74s
iterations.....................: 2811 84.299146/s
vus............................: 35 min=35 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `mercurius`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 7335 ✗ 0
data_received..................: 216 MB 6.7 MB/s
data_sent......................: 2.9 MB 91 kB/s
http_req_blocked...............: avg=962.18µs min=1.82µs med=4.05µs max=42.08ms p(90)=1.05ms p(95)=9.53ms
http_req_connecting............: avg=920.98µs min=0s med=0s max=20.94ms p(90)=952.34µs p(95)=9.34ms
http_req_duration..............: avg=3.75s min=11.57ms med=3.69s max=8.11s p(90)=4.75s p(95)=5.41s
{ expected_response:true }...: avg=3.75s min=11.57ms med=3.69s max=8.11s p(90)=4.75s p(95)=5.41s
http_req_failed................: 0.00% ✓ 0 ✗ 2465
http_req_receiving.............: avg=2.28ms min=40.93µs med=101µs max=487.5ms p(90)=239.81µs p(95)=557.37µs
http_req_sending...............: avg=105.49µs min=9.33µs med=23.39µs max=17.34ms p(90)=177.03µs p(95)=407.91µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.75s min=11.4ms med=3.69s max=8.11s p(90)=4.75s p(95)=5.41s
http_reqs......................: 2465 76.471967/s
iteration_duration.............: avg=3.81s min=417.75ms med=3.71s max=8.13s p(90)=4.78s p(95)=5.46s
iterations.....................: 2445 75.851504/s
vus............................: 72 min=72 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Overview for:
|
| Gateway | RPS ⬇️ | Requests | Duration | Notes |
|---|---|---|---|---|
| cosmo | 178 | 5529 total, 0 failed | avg: 837ms, p95: 2142ms | ✅ |
| grafbase | 170 | 5239 total, 0 failed | avg: 910ms, p95: 2570ms | ✅ |
| apollo-router | 158 | 4896 total, 1 failed | avg: 964ms, p95: 2642ms | ❌ 1 failed requests, 1 non-200 responses, 1 unexpected GraphQL errors |
| hive-gateway | 90 | 2984 total, 0 failed | avg: 3118ms, p95: 14373ms | ✅ |
| apollo-server | 89 | 2966 total, 0 failed | avg: 3157ms, p95: 25065ms | ✅ |
| hive-gateway-bun | 89 | 2967 total, 0 failed | avg: 3126ms, p95: 4988ms | ✅ |
| mercurius | 76 | 2452 total, 0 failed | avg: 3748ms, p95: 5716ms | ✅ |
Summary for: `cosmo`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 16527 ✗ 0
data_received..................: 485 MB 16 MB/s
data_sent......................: 6.6 MB 212 kB/s
http_req_blocked...............: avg=1.88ms min=1.53µs med=3.24µs max=3.13s p(90)=5.42µs p(95)=712.67µs
http_req_connecting............: avg=1.22ms min=0s med=0s max=1.61s p(90)=0s p(95)=373.24µs
http_req_duration..............: avg=837.19ms min=2.99ms med=662.68ms max=5.71s p(90)=1.87s p(95)=2.14s
{ expected_response:true }...: avg=837.19ms min=2.99ms med=662.68ms max=5.71s p(90)=1.87s p(95)=2.14s
http_req_failed................: 0.00% ✓ 0 ✗ 5529
http_req_receiving.............: avg=327.34ms min=34.86µs med=99.41µs max=4.47s p(90)=1.26s p(95)=1.65s
http_req_sending...............: avg=23.07ms min=8.54µs med=14.74µs max=3.38s p(90)=299.63µs p(95)=16.39ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=486.77ms min=2.91ms med=463.34ms max=2.11s p(90)=828.87ms p(95)=983.05ms
http_reqs......................: 5529 178.595206/s
iteration_duration.............: avg=1.64s min=18.62ms med=1.34s max=9.28s p(90)=3.39s p(95)=4.18s
iterations.....................: 5509 177.949175/s
vus............................: 300 min=300 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `grafbase`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 15657 ✗ 0
data_received..................: 460 MB 15 MB/s
data_sent......................: 6.2 MB 202 kB/s
http_req_blocked...............: avg=3.01ms min=1.54µs med=3.59µs max=5.59s p(90)=6µs p(95)=762.19µs
http_req_connecting............: avg=1.82ms min=0s med=0s max=4.78s p(90)=0s p(95)=526.82µs
http_req_duration..............: avg=910ms min=3.46ms med=654.18ms max=7.92s p(90)=2.07s p(95)=2.56s
{ expected_response:true }...: avg=910ms min=3.46ms med=654.18ms max=7.92s p(90)=2.07s p(95)=2.56s
http_req_failed................: 0.00% ✓ 0 ✗ 5239
http_req_receiving.............: avg=417.82ms min=30.31µs med=96.68µs max=6.96s p(90)=1.62s p(95)=2.01s
http_req_sending...............: avg=23.67ms min=7.73µs med=16.57µs max=6.82s p(90)=249.89µs p(95)=14.69ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=468.5ms min=3.39ms med=389.85ms max=2.38s p(90)=963.93ms p(95)=1.18s
http_reqs......................: 5239 170.186336/s
iteration_duration.............: avg=1.74s min=20.89ms med=1.36s max=10.44s p(90)=3.93s p(95)=4.67s
iterations.....................: 5219 169.536646/s
vus............................: 300 min=300 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `apollo-router`
K6 Output
✗ response code was 200
↳ 99% — ✓ 4875 / ✗ 1
✗ no graphql errors
↳ 99% — ✓ 4875 / ✗ 1
✓ valid response structure
█ setup
checks.........................: 99.98% ✓ 14625 ✗ 2
data_received..................: 430 MB 14 MB/s
data_sent......................: 5.8 MB 188 kB/s
http_req_blocked...............: avg=2ms min=1.38µs med=3.31µs max=2.11s p(90)=5.68µs p(95)=3.63ms
http_req_connecting............: avg=1.29ms min=0s med=0s max=1.25s p(90)=0s p(95)=3.31ms
http_req_duration..............: avg=964.04ms min=6.52ms med=758.42ms max=6s p(90)=2.13s p(95)=2.64s
{ expected_response:true }...: avg=964.05ms min=6.52ms med=758.17ms max=6s p(90)=2.13s p(95)=2.64s
http_req_failed................: 0.02% ✓ 1 ✗ 4895
http_req_receiving.............: avg=357ms min=0s med=91.3µs max=4.19s p(90)=1.41s p(95)=2.1s
http_req_sending...............: avg=19.87ms min=7.91µs med=15.03µs max=3s p(90)=320.28µs p(95)=13.88ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=587.15ms min=6.44ms med=535.9ms max=3.8s p(90)=1.11s p(95)=1.25s
http_reqs......................: 4896 158.092042/s
iteration_duration.............: avg=1.86s min=27.39ms med=1.55s max=9.72s p(90)=3.93s p(95)=4.72s
iterations.....................: 4876 157.446241/s
vus............................: 300 min=300 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `hive-gateway`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 8892 ✗ 0
data_received..................: 262 MB 7.9 MB/s
data_sent......................: 3.5 MB 107 kB/s
http_req_blocked...............: avg=1.71ms min=2µs med=3.8µs max=70.23ms p(90)=133.23µs p(95)=12.67ms
http_req_connecting............: avg=1.63ms min=0s med=0s max=49.65ms p(90)=87.27µs p(95)=12.3ms
http_req_duration..............: avg=3.11s min=14.17ms med=1.75s max=32.62s p(90)=2.75s p(95)=14.37s
{ expected_response:true }...: avg=3.11s min=14.17ms med=1.75s max=32.62s p(90)=2.75s p(95)=14.37s
http_req_failed................: 0.00% ✓ 0 ✗ 2984
http_req_receiving.............: avg=1.8ms min=41.43µs med=95.77µs max=187.33ms p(90)=560.9µs p(95)=2.06ms
http_req_sending...............: avg=1.11ms min=9.4µs med=21.16µs max=57.94ms p(90)=1.17ms p(95)=6.73ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.11s min=14.06ms med=1.75s max=32.62s p(90)=2.75s p(95)=14.36s
http_reqs......................: 2984 90.100268/s
iteration_duration.............: avg=3.18s min=375.63ms med=1.81s max=32.63s p(90)=2.78s p(95)=14.61s
iterations.....................: 2964 89.496379/s
vus............................: 16 min=16 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `apollo-server`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 8838 ✗ 0
data_received..................: 261 MB 7.9 MB/s
data_sent......................: 3.5 MB 106 kB/s
http_req_blocked...............: avg=2.47ms min=1.63µs med=3.44µs max=67.56ms p(90)=303.68µs p(95)=27.31ms
http_req_connecting............: avg=2.37ms min=0s med=0s max=61.14ms p(90)=147.24µs p(95)=25.1ms
http_req_duration..............: avg=3.15s min=10.32ms med=1.37s max=32.7s p(90)=2.13s p(95)=25.06s
{ expected_response:true }...: avg=3.15s min=10.32ms med=1.37s max=32.7s p(90)=2.13s p(95)=25.06s
http_req_failed................: 0.00% ✓ 0 ✗ 2966
http_req_receiving.............: avg=224.56µs min=43.5µs med=98.19µs max=46.91ms p(90)=197.86µs p(95)=289.17µs
http_req_sending...............: avg=461.75µs min=9.09µs med=18.15µs max=44.6ms p(90)=236.18µs p(95)=2.05ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.15s min=10.25ms med=1.37s max=32.7s p(90)=2.13s p(95)=25.06s
http_reqs......................: 2966 89.503105/s
iteration_duration.............: avg=3.19s min=242.02ms med=1.38s max=32.77s p(90)=2.19s p(95)=25.28s
iterations.....................: 2946 88.899578/s
vus............................: 16 min=16 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `hive-gateway-bun`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 8841 ✗ 0
data_received..................: 260 MB 7.9 MB/s
data_sent......................: 3.5 MB 107 kB/s
http_req_blocked...............: avg=723.61µs min=1.87µs med=3.89µs max=33ms p(90)=125.2µs p(95)=6.11ms
http_req_connecting............: avg=671.94µs min=0s med=0s max=17.65ms p(90)=81.41µs p(95)=5.82ms
http_req_duration..............: avg=3.12s min=15.58ms med=2.84s max=6.94s p(90)=4.62s p(95)=4.98s
{ expected_response:true }...: avg=3.12s min=15.58ms med=2.84s max=6.94s p(90)=4.62s p(95)=4.98s
http_req_failed................: 0.00% ✓ 0 ✗ 2967
http_req_receiving.............: avg=57.9ms min=40.04µs med=170µs max=1.45s p(90)=18.23ms p(95)=553ms
http_req_sending...............: avg=762.47µs min=7.94µs med=21.6µs max=340.46ms p(90)=204.1µs p(95)=1.05ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.06s min=15.42ms med=2.81s max=6.94s p(90)=4.61s p(95)=4.97s
http_reqs......................: 2967 89.708014/s
iteration_duration.............: avg=3.2s min=82.69ms med=2.88s max=6.96s p(90)=4.74s p(95)=5.05s
iterations.....................: 2947 89.103308/s
vus............................: 12 min=12 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `mercurius`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 7296 ✗ 0
data_received..................: 215 MB 6.7 MB/s
data_sent......................: 2.9 MB 91 kB/s
http_req_blocked...............: avg=773.32µs min=1.69µs med=3.8µs max=15.19ms p(90)=670.91µs p(95)=7.42ms
http_req_connecting............: avg=757.79µs min=0s med=0s max=15.14ms p(90)=598.2µs p(95)=7.34ms
http_req_duration..............: avg=3.74s min=11.4ms med=3.73s max=8.03s p(90)=4.41s p(95)=5.71s
{ expected_response:true }...: avg=3.74s min=11.4ms med=3.73s max=8.03s p(90)=4.41s p(95)=5.71s
http_req_failed................: 0.00% ✓ 0 ✗ 2452
http_req_receiving.............: avg=3.6ms min=42.79µs med=101.66µs max=635.8ms p(90)=256.74µs p(95)=527.33µs
http_req_sending...............: avg=184.8µs min=9.55µs med=21.72µs max=13.89ms p(90)=211.71µs p(95)=869.84µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.74s min=11.29ms med=3.73s max=8.03s p(90)=4.41s p(95)=5.71s
http_reqs......................: 2452 76.506712/s
iteration_duration.............: avg=3.81s min=437.42ms med=3.75s max=8.04s p(90)=4.44s p(95)=5.74s
iterations.....................: 2432 75.882677/s
vus............................: 36 min=36 max=300
vus_max........................: 300 min=300 max=300
Performance Overview
Subgraphs Overview
HTTP Overview
Overview for:
|
| Gateway | duration(p95)⬇️ | RPS | Requests | Durations | Notes |
|---|---|---|---|---|---|
| apollo-router | 6210ms | 166 | 11694 total, 550 failed | avg: 2536ms, p95: 6211ms, max: 12563ms, med: 2247ms | ❌ 550 failed requests, 550 non-200 responses, 550 unexpected GraphQL errors |
| grafbase | 7113ms | 168 | 12066 total, 0 failed | avg: 3107ms, p95: 7114ms, max: 14942ms, med: 2824ms | ✅ |
| cosmo | 8111ms | 176 | 12406 total, 0 failed | avg: 2717ms, p95: 8111ms, max: 14958ms, med: 2410ms | ✅ |
| hive-gateway-bun | 29040ms | 91 | 7465 total, 0 failed | avg: 11763ms, p95: 29040ms, max: 39254ms, med: 10182ms | ✅ |
| mercurius | 43014ms | 51 | 4782 total, 0 failed | avg: 22112ms, p95: 43015ms, max: 44367ms, med: 19567ms | ✅ |
| hive-gateway | 50927ms | 89 | 7757 total, 0 failed | avg: 11793ms, p95: 50928ms, max: 57972ms, med: 3316ms | ✅ |
| apollo-server | 59999ms | 85 | 7893 total, 492 failed | avg: 11644ms, p95: 60000ms, max: 60152ms, med: 2171ms | ❌ 492 failed requests, 492 non-200 responses, 492 unexpected GraphQL errors |
Summary for: `apollo-router`
K6 Output
✗ response code was 200
↳ 95% — ✓ 11124 / ✗ 550
✗ no graphql errors
↳ 95% — ✓ 11124 / ✗ 550
✓ valid response structure
█ setup
checks.........................: 96.80% ✓ 33372 ✗ 1100
data_received..................: 978 MB 14 MB/s
data_sent......................: 14 MB 198 kB/s
http_req_blocked...............: avg=529.29ms min=1.46µs med=3.72µs max=10.91s p(90)=2.39s p(95)=3.64s
http_req_connecting............: avg=523.22ms min=0s med=0s max=10.91s p(90)=2.38s p(95)=3.61s
http_req_duration..............: avg=2.53s min=6.54ms med=2.24s max=12.56s p(90)=4.49s p(95)=6.21s
{ expected_response:true }...: avg=2.51s min=6.54ms med=2.22s max=12.56s p(90)=4.47s p(95)=6.18s
http_req_failed................: 4.70% ✓ 550 ✗ 11144
http_req_receiving.............: avg=255.32ms min=0s med=75.81µs max=8.75s p(90)=346.64ms p(95)=1.66s
http_req_sending...............: avg=155.01ms min=8.09µs med=18.5µs max=6.8s p(90)=442.55ms p(95)=834.12ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=2.12s min=6.47ms med=1.95s max=9.4s p(90)=3.88s p(95)=4.38s
http_reqs......................: 11694 166.617446/s
iteration_duration.............: avg=6.05s min=19ms med=5.16s max=28.97s p(90)=12.19s p(95)=15.1s
iterations.....................: 11674 166.332483/s
vus............................: 5 min=5 max=1937
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `grafbase`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 36138 ✗ 0
data_received..................: 1.1 GB 15 MB/s
data_sent......................: 14 MB 200 kB/s
http_req_blocked...............: avg=417.65ms min=1.62µs med=3.9µs max=14.03s p(90)=1.75s p(95)=3.84s
http_req_connecting............: avg=414.27ms min=0s med=0s max=14.03s p(90)=1.71s p(95)=3.83s
http_req_duration..............: avg=3.1s min=3.32ms med=2.82s max=14.94s p(90)=5.73s p(95)=7.11s
{ expected_response:true }...: avg=3.1s min=3.32ms med=2.82s max=14.94s p(90)=5.73s p(95)=7.11s
http_req_failed................: 0.00% ✓ 0 ✗ 12066
http_req_receiving.............: avg=180.8ms min=30.82µs med=79.91µs max=6.17s p(90)=459.48ms p(95)=1.29s
http_req_sending...............: avg=121.41ms min=8.28µs med=19.23µs max=10.53s p(90)=267.76ms p(95)=746.17ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=2.8s min=3.24ms med=2.55s max=11.41s p(90)=5.3s p(95)=6.04s
http_reqs......................: 12066 168.784363/s
iteration_duration.............: avg=6.15s min=18.3ms med=5.2s max=26.22s p(90)=12.26s p(95)=14.28s
iterations.....................: 12046 168.504594/s
vus............................: 331 min=71 max=1977
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `cosmo`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 37158 ✗ 0
data_received..................: 1.1 GB 16 MB/s
data_sent......................: 15 MB 209 kB/s
http_req_blocked...............: avg=308.95ms min=1.68µs med=3.98µs max=12.74s p(90)=931.95ms p(95)=2.43s
http_req_connecting............: avg=306.54ms min=0s med=0s max=12.74s p(90)=912.78ms p(95)=2.43s
http_req_duration..............: avg=2.71s min=3.23ms med=2.4s max=14.95s p(90)=4.81s p(95)=8.11s
{ expected_response:true }...: avg=2.71s min=3.23ms med=2.4s max=14.95s p(90)=4.81s p(95)=8.11s
http_req_failed................: 0.00% ✓ 0 ✗ 12406
http_req_receiving.............: avg=449.25ms min=30.64µs med=89.2µs max=9.94s p(90)=998.61ms p(95)=3.88s
http_req_sending...............: avg=178.83ms min=8.71µs med=20.48µs max=13.87s p(90)=359.92ms p(95)=958.76ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=2.08s min=3.13ms med=2.06s max=8.3s p(90)=4.01s p(95)=4.45s
http_reqs......................: 12406 176.2212/s
iteration_duration.............: avg=6s min=24.18ms med=5.02s max=30.11s p(90)=12.24s p(95)=14.99s
iterations.....................: 12386 175.937109/s
vus............................: 116 min=71 max=1995
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `hive-gateway-bun`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 22335 ✗ 0
data_received..................: 655 MB 8.0 MB/s
data_sent......................: 8.9 MB 108 kB/s
http_req_blocked...............: avg=14.44ms min=1.89µs med=4.95µs max=661.27ms p(90)=27.7ms p(95)=110.23ms
http_req_connecting............: avg=13.97ms min=0s med=0s max=653.57ms p(90)=26.4ms p(95)=108.17ms
http_req_duration..............: avg=11.76s min=16.22ms med=10.18s max=39.25s p(90)=24.76s p(95)=29.04s
{ expected_response:true }...: avg=11.76s min=16.22ms med=10.18s max=39.25s p(90)=24.76s p(95)=29.04s
http_req_failed................: 0.00% ✓ 0 ✗ 7465
http_req_receiving.............: avg=133.6ms min=40.3µs med=132.75µs max=8.47s p(90)=22.05ms p(95)=760.86ms
http_req_sending...............: avg=9.88ms min=9.17µs med=29.33µs max=1.25s p(90)=14.67ms p(95)=45.4ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=11.61s min=16.04ms med=9.88s max=38.37s p(90)=24.67s p(95)=28.94s
http_reqs......................: 7465 91.016047/s
iteration_duration.............: avg=12.13s min=288.75ms med=10.41s max=41.86s p(90)=25.08s p(95)=29.99s
iterations.....................: 7445 90.7722/s
vus............................: 193 min=59 max=1999
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `mercurius`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 14246 ✗ 0
data_received..................: 421 MB 4.6 MB/s
data_sent......................: 5.9 MB 64 kB/s
http_req_blocked...............: avg=249.78µs min=1.76µs med=4.96µs max=26.25ms p(90)=539.77µs p(95)=809.07µs
http_req_connecting............: avg=212.45µs min=0s med=0s max=26.07ms p(90)=456.84µs p(95)=636.18µs
http_req_duration..............: avg=22.11s min=12.26ms med=19.56s max=44.36s p(90)=41.61s p(95)=43.01s
{ expected_response:true }...: avg=22.11s min=12.26ms med=19.56s max=44.36s p(90)=41.61s p(95)=43.01s
http_req_failed................: 0.00% ✓ 0 ✗ 4782
http_req_receiving.............: avg=8.28ms min=42.3µs med=112.22µs max=1.1s p(90)=410.96µs p(95)=1.09ms
http_req_sending...............: avg=58µs min=9.26µs med=31.17µs max=7.78ms p(90)=73.37µs p(95)=98.22µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=22.1s min=12.17ms med=19.56s max=43.87s p(90)=41.61s p(95)=43.01s
http_reqs......................: 4782 51.806484/s
iteration_duration.............: avg=22.17s min=271.94ms med=19.55s max=45.15s p(90)=41.92s p(95)=43.1s
iterations.....................: 4722 51.156466/s
vus............................: 193 min=60 max=2000
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `hive-gateway`
K6 Output
✓ response code was 200
✓ no graphql errors
✓ valid response structure
█ setup
checks.........................: 100.00% ✓ 23211 ✗ 0
data_received..................: 681 MB 7.9 MB/s
data_sent......................: 9.2 MB 107 kB/s
http_req_blocked...............: avg=6.88ms min=1.99µs med=4.79µs max=351.89ms p(90)=14.75ms p(95)=47.26ms
http_req_connecting............: avg=6.76ms min=0s med=0s max=351.82ms p(90)=14.62ms p(95)=45.43ms
http_req_duration..............: avg=11.79s min=14.04ms med=3.31s max=57.97s p(90)=43.66s p(95)=50.92s
{ expected_response:true }...: avg=11.79s min=14.04ms med=3.31s max=57.97s p(90)=43.66s p(95)=50.92s
http_req_failed................: 0.00% ✓ 0 ✗ 7757
http_req_receiving.............: avg=7.24ms min=41.48µs med=100.26µs max=948.53ms p(90)=1ms p(95)=4.68ms
http_req_sending...............: avg=3.48ms min=9.5µs med=27.22µs max=570.73ms p(90)=3.07ms p(95)=20.27ms
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=11.78s min=13.94ms med=3.3s max=57.97s p(90)=43.65s p(95)=50.9s
http_reqs......................: 7757 89.680796/s
iteration_duration.............: avg=11.91s min=63.73ms med=3.4s max=58.14s p(90)=43.76s p(95)=51s
iterations.....................: 7737 89.44957/s
vus............................: 133 min=59 max=1999
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
Summary for: `apollo-server`
K6 Output
✗ response code was 200
↳ 93% — ✓ 7381 / ✗ 492
✗ no graphql errors
↳ 93% — ✓ 7381 / ✗ 492
✓ valid response structure
█ setup
checks.........................: 95.74% ✓ 22143 ✗ 984
data_received..................: 650 MB 7.0 MB/s
data_sent......................: 9.4 MB 102 kB/s
http_req_blocked...............: avg=599.98µs min=1.42µs med=3.52µs max=82.7ms p(90)=363.01µs p(95)=658.26µs
http_req_connecting............: avg=577.84µs min=0s med=0s max=82.63ms p(90)=292.19µs p(95)=531.81µs
http_req_duration..............: avg=11.64s min=11.04ms med=2.17s max=1m0s p(90)=55.44s p(95)=59.99s
{ expected_response:true }...: avg=8.42s min=11.04ms med=2.1s max=59.97s p(90)=36.64s p(95)=46.56s
http_req_failed................: 6.23% ✓ 492 ✗ 7401
http_req_receiving.............: avg=225.5µs min=0s med=103.38µs max=169.53ms p(90)=215.41µs p(95)=337.97µs
http_req_sending...............: avg=201.94µs min=8.47µs med=17.37µs max=39.4ms p(90)=64.67µs p(95)=120.23µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=11.64s min=10.93ms med=2.17s max=1m0s p(90)=55.44s p(95)=59.99s
http_reqs......................: 7893 85.10698/s
iteration_duration.............: avg=11.68s min=50.61ms med=2.18s max=1m0s p(90)=55.48s p(95)=1m0s
iterations.....................: 7873 84.891328/s
vus............................: 25 min=25 max=2000
vus_max........................: 2000 min=2000 max=2000
Performance Overview
Subgraphs Overview
HTTP Overview
6670c21 to
17578e8
Compare
17578e8 to
4a750a8
Compare
4a750a8 to
170faac
Compare
This PR contains the following updates:
2.10.2->2.11.22.10.2->2.11.2v2.2.1->v2.4.0Release Notes
apollographql/federation (@apollo/composition)
v2.11.2Compare Source
Patch Changes
Improve error messages when @composeDirective arguments are NULL or empty strings. (#3283)
Previous message on undefined/null argument value
Cannot read properties of undefined (reading '0')New message
Argument to @​composeDirective in subgraph "${sg.name}" cannot be NULL or an empty StringUpdated dependencies [
28c08bef6e691aefc6ed07c0e7057f9cd803b317]:v2.11.1Compare Source
Patch Changes
Adding new CompositionOption
maxValidationSubgraphPaths. This value represents the maximum number of SubgraphPathInfo objects that may exist in a ValidationTraversal when checking for satisfiability. Setting this value can help composition error before running out of memory. Default is 1,000,000. (#3254)Fix bug in composition where, when a field's type in a subgraph is a subtype of the field's type in the supergraph, the satisfiability validation spuriously succeeds/errors. (#3277)
Updated dependencies [
7799ad1717becf15fb0e82f89619f2ec8a24b4d4,b26794c5724ef23d1f0fd45a40aee3d301557489,51bed5be49d8e87adae59f568315c9e3488a91e0]:v2.11.0Compare Source
Minor Changes
Patch Changes
Allow merging external types when using arrays as default arguments. (#3262)
Updated dependencies [
1462c91879d41884c0a7e60551d8dd0d67c832d3,9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d]:apollographql/federation (@apollo/gateway)
v2.11.2Compare Source
Patch Changes
28c08bef6e691aefc6ed07c0e7057f9cd803b317,28c08bef6e691aefc6ed07c0e7057f9cd803b317]:v2.11.1Compare Source
Patch Changes
7799ad1717becf15fb0e82f89619f2ec8a24b4d4,b26794c5724ef23d1f0fd45a40aee3d301557489,51bed5be49d8e87adae59f568315c9e3488a91e0]:v2.11.0Compare Source
Minor Changes
Patch Changes
Corrects a set of denial-of-service (DOS) vulnerabilities that made it possible for an attacker to render gateway inoperable with certain simple query patterns due to uncontrolled resource consumption. All prior-released versions and configurations are vulnerable. (#3238)
See the associated GitHub Advisories GHSA-q2f9-x4p4-7xmh and GHSA-p2q6-pwh5-m6jr for more information.
Updated dependencies [
1462c91879d41884c0a7e60551d8dd0d67c832d3,9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d,9614b26e5a17cbf1f6aaf08f6fcb1c95eb12592d]:apollographql/router (ghcr.io/apollographql/router)
v2.4.0Compare Source
🚀 Features
Support JWT audience (
aud) validation (PR #7578)The router now supports JWT audience (
aud) validation. This allows the router to ensure that the JWT is intendedfor the specific audience it is being used with, enhancing security by preventing token misuse across different audiences.
The following sample configuration will validate the JWT's
audclaim against the specified audiences and ensure a match with eitherhttps://my.apiorhttps://my.other.api. If theaudclaim does not match either of those configured audiences, the router will reject the request.By @Velfi in https://github.com/apollographql/router/pull/7578
Prioritize existing requests over query parsing and planning during "warm up" (PR #7223)
The router warms up its query planning cache during a hot reload. This change decreases the priority
of warm up tasks in the compute job queue to reduce the impact of warmup on serving requests.
This change adds new values to the
job.typedimension of the following metrics:apollo.router.compute_jobs.duration- A histogram of time spent in the compute pipeline by the job, including the queue and query planning.job.type: (query_planning,query_parsing,introspection,query_planning_warmup,query_parsing_warmup)job.outcome: (executed_ok,executed_error,channel_error,rejected_queue_full,abandoned)apollo.router.compute_jobs.queue.wait.duration- A histogram of time spent in the compute queue by the job.job.type: (query_planning,query_parsing,introspection,query_planning_warmup,query_parsing_warmup)apollo.router.compute_jobs.execution.duration- A histogram of time spent to execute job (excludes time spent in the queue).job.type: (query_planning,query_parsing,introspection,query_planning_warmup,query_parsing_warmup)apollo.router.compute_jobs.active_jobs- A gauge of the number of compute jobs being processed in parallel.job.type: (query_planning,query_parsing,introspection,query_planning_warmup,query_parsing_warmup)By @carodewig in https://github.com/apollographql/router/pull/7223
Persisted queries: include operation name in
PERSISTED_QUERY_NOT_IN_LISTerror for debuggability (PR #7768)When persisted query safelisting is enabled and a request has an unknown PQ ID, the GraphQL error now has the extension field
operation_namecontaining the GraphQL operation name (if provided explicitly in the request). Note that this only applies to thePERSISTED_QUERY_NOT_IN_LISTerror returned when manifest-based PQs are enabled, APQs are disabled, and the request contains an operation ID that is not in the list.By @glasser in https://github.com/apollographql/router/pull/7768
Introduce cooperative cancellation for query planning
The cooperative cancellation feature allows the router to gracefully handle query planning timeouts and cancellations, improving resource utilization.
The
modecan be set tomeasureorenforce. We recommend starting withmeasure. Inmeasuremode, the router will measure the time taken for query planning and emit metrics accordingly. Inenforcemode, the router will cancel query planning operations that exceed the specified timeout.To observe this behavior, the router telemetry has been updated:
outcomeattribute to theapollo.router.query_planning.plan.durationmetricoutcomeattribute to thequery_planningspanBelow is a sample configuration to configure cooperative cancellation in measure mode:
By @Velfi in https://github.com/apollographql/router/pull/7604
🐛 Fixes
Align
on_graphql_errorselector withsubgraph_on_graphql_error(PR #7676)The
on_graphql_errorselector will now returntrueorfalse, in alignment with thesubgraph_on_graphql_errorselector. Previously, the selector would returntrueorNone.By @carodewig in https://github.com/apollographql/router/pull/7676
Return valid GraphQL response when performing a websocket handshake (PR #7680)
PR #7141 added checks on GraphQL responses returned from coprocessors to ensure compliance with GraphQL specifications. This surfaced an issue where subscription responses over websockets could omit the required
datafield during the handshake, resulting in invalid GraphQL response payloads. All websocket subscription responses will now return a valid GraphQL response when doing the websocket handshake.By @bnjjj in https://github.com/apollographql/router/pull/7680
Fix SigV4 configuration handling (PR #7726)
Fixed an issue introduced in Router 2.3.0 where some SigV4 configurations would fail to start, preventing communication with SigV4-enabled services.
By @dylan-apollo in https://github.com/apollographql/router/pull/7726
Improve error message for invalid variables (Issue #2984)
When a variable in a GraphQL request is missing or contains an invalid value, the router now returns more useful error messages. Example:
By @SimonSapin in https://github.com/apollographql/router/pull/7567
Support exporting resources on all Prometheus metrics (PR #7394)
By default, the Prometheus metrics exporter will only export resources as
target_infometrics, not inline on every metric. Now, you can add resources to every metric by settingresource_selectortoall(default isnone).Note: this change only affects Prometheus, not OTLP.
By @bnjjj in https://github.com/apollographql/router/pull/7394
Forbid unknown
@linkdirectives for supergraph schemas wherepurposeisEXECUTIONorSECURITYThe legacy JavaScript query planner forbid any usage of unknown
@linkspecs in supergraph schemas with eitherEXECUTIONorSECURITYvalue set for theforargument (aka, the spec's "purpose"). This behavior had not been ported to the native query planner previously. This PR implements the expected behavior in the native query planner.By @duckki in https://github.com/apollographql/router/pull/7587
Supergraph stage correctly receives
on_graphql_errorselector (PR #7669)The
on_graphql_errorselector will now correctly fire on the supergraph stage; previously it only worked on the router stage.By @carodewig in https://github.com/apollographql/router/pull/7669
Invalid type condition in
@deferfetchThe query planner was adding an inline spread (
...) conditioned on theQuerytype in deferred subgraph fetch queries. Such a query would be invalid in the subgraph when the subgraph schema renamed the rootquerytype to somethhing other thanQuery. The fix removes the root type condition from all subgraph queries, so that they stay valid even when root types are renamed.By @duckki in https://github.com/apollographql/router/pull/7580
Preserve
content-typefor file uploads when Rhai scripts are in use (PR #7559)If a Rhai script was invoked during file upload processing, then the "Content-Type" of the request was not preserved correctly. This would cause a file upload to fail.
The error message would be something like:
This issue has now been fixed.
By @garypen in https://github.com/apollographql/router/pull/7559
Improve OTLP metric HTTP endpoint behavior (PR #7595)
We made substantial updates to OpenTelemetry in router 2.0, but didn't catch that OpenTelemetry changed how it processed "endpoints" (destinations for metrics and traces) until now.
With the undetected change, the router wasn't setting the path correctly, resulting in failure to export metrics over HTTP when using the "default" endpoint. Neither metrics via gRPC nor traces were impacted.
We have fixed our interactions with the dependency and improved our testing to make sure this does not occur again. Additionally, the router now supports setting standard OpenTelemetry environment variables for endpoints.
There is still a known problem when using environment variables to configure endpoints for the HTTP protocol when transmitting to an un-encrypted endpoint (i.e., TLS not configured). This affects the following environment variables:
OTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_METRICS_ENDPOINTOTEL_EXPORTER_OTLP_TRACES_ENDPOINTWhen these environment variables are set to insecure hosts, messages will appear in the logs indicating an error, but the metrics and traces will still be sent correctly:
This is tracked upstream at https://github.com/open-telemetry/opentelemetry-collector/issues/10952.
By @garypen in https://github.com/apollographql/router/pull/7595
Add
graphql.operation.nameattribute toapollo.router.opened.subscriptionscounter (PR #7606)The
apollo.router.opened.subscriptionsmetric has angraphql.operation.nameattribute applied to identify the named operation of open subscriptions.By @bnjjj in https://github.com/apollographql/router/pull/7606
🛠 Maintenance
Measure
preview_extended_error_metricsin Apollo config telemetry (PR #7597)By @timbotnik in https://github.com/apollographql/router/pull/7597
📚 Documentation
Document Apollo Runtime Container deployment (PR #7734 and PR #7668)
The Apollo Runtime Container is now included in our documentation for deployment options. It also includes instructions for running Apollo Router with the Apollo MCP Server.
By @jonathanrainer and @lambertjosh in https://github.com/apollographql/router/pull/7734 and https://github.com/apollographql/router/pull/7668
Fix incorrect reference to
apollo.router.schema.load.duration(PR #7582)The in-memory cache documentation was referencing an incorrect metric to track schema load times. Previously it was referred to as
apollo.router.schema.loading.time, whereas the metric being emitted by the router since v2.0.0 is actuallyapollo.router.schema.load.duration. This is now fixed.By @lrlna in https://github.com/apollographql/router/pull/7582
v2.3.0Compare Source
🚀 Features
Connectors improvements: Router 2.3.0 supports Connect spec v0.2, including batch requests, error customization, and direct access to HTTP headers. To use these features: upgrade your Router to 2.3, update your version of Federation to 2.11, and update the @link directives in your subgraphs to https://specs.apollo.dev/connect/v0.2.
See the Connectors changelog for more details.
Log whether safe-listing enforcement was skipped (Issue #7509)
When logging unknown operations encountered during safe-listing, include information about whether enforcement was skipped. This will help distinguish between truly problematic external operations (where
enforcement_skippedis false) and internal operations that are intentionally allowed to bypass safelisting (whereenforcement_skippedis true).By @DaleSeo in https://github.com/apollographql/router/pull/7509
Add response body telemetry selector (PR #7363)
The Router now supports a
response_bodyselector which provides access to the response body in telemetry configurations. This enables more detailed monitoring and logging of response data in the Router.Example configuration:
By @Velfi in https://github.com/apollographql/router/pull/7363
Support non-JSON and JSON-like content types for connectors (PR #7380)
Connectors now inspect the
content-typeheader of responses to determine how they should treat the response. This allows more flexibility as prior to this change, all responses were treated as JSON which would lead to errors on non-json responses.The behavior is as follows:
content-typeends with/json(likeapplication/json) OR+json(likeapplication/vnd.foo+json): content is parsed as JSON.content-typeistext/plain: content will be treated as a UTF-8string. Content can be accessed inselectionmapping via$variable.content-typeis any other value: content will be treated as a JSONnull.content-typeheader is provided: content is assumed to be JSON and therefore parsed as JSON.If deserialization fails, an error message of
Response deserialization failedwith a error code ofCONNECTOR_DESERIALIZEwill be returned:By @andrewmcgivery in https://github.com/apollographql/router/pull/7380
Include message and path for certain errors in Apollo telemetry (PR #7378)
For errors pertaining to connectors and demand control features, Apollo telemetry will now include the original error message and path as part of the traces sent to GraphOS.
By @timbotnik in https://github.com/apollographql/router/pull/7378
Support ignoring specific headers during subscriptions deduplication (PR #7070)
The Router now supports ignoring specific headers when deduplicating requests to subgraphs which provide subscription events. Previously, any differing headers which didn't actually affect the subscription response (e.g.,
user-agent) would prevent or limit the potential of deduplication.The introduction of the
ignored_headersoption allows you to specify headers to ignore during deduplication, enabling you to benefit from subscription deduplication even when requests include headers with unique or varying values that don't affect the subscription's event data.Configuration example:
By @bnjjj in https://github.com/apollographql/router/pull/7070
🐛 Fixes
Support disabling the health check endpoint (PR #7519)
During the development of Router 2.0, the health check endpoint support was converted to be a plugin. Unfortunately, the support for disabling the health check endpoint was lost during the conversion.
This is now fixed and a new unit test ensures that disabling the health check does not result in the creation of a health check endpoint.
By @garypen in https://github.com/apollographql/router/pull/7519
Propagate client name and version modifications through telemetry (PR #7369)
The Router accepts modifications to the client name and version (
apollo::telemetry::client_nameandapollo::telemetry::client_version), but those modifications were not propagated through the telemetry layers to update spans and traces.After this change, the modifications from plugins on the
routerservice are propagated through the telemetry layers.By @carodewig in https://github.com/apollographql/router/pull/7369
Prevent connectors error when using a variable in a nested input argument (PR #7472)
The connectors plugin will no longer error when using a variable in a nested input argument. The following example would error prior to this change:
By @andrewmcgivery in https://github.com/apollographql/router/pull/7472
Spans should only include path in
http.route(PR #7390)Per the OpenTelemetry spec, the
http.routeshould only include "the matched route, that is, the path template used in the format used by the respective server framework."Prior to this change, the Router sends the full URI in
http.route, which can be high cardinality (ie/graphql?operation=one_of_many_values). The Router will now only include the path (/graphql).By @carodewig in https://github.com/apollographql/router/pull/7390
Decrease log level for JWT authentication failure (PR #7396)
A recent change increased the log level of JWT authentication failures from
infotoerror. This reverts that change.By @carodewig in https://github.com/apollographql/router/pull/7396
Prefer headers propagated with Router YAML config over headers from Connector directives (PR #7499)
When configuring the same header name in both
@connect(http: { headers: })(or@source(http: { headers: })) in SDL andpropagatein Router YAML configuration, the request had both headers, even if the value is the same. After this change, Router YAML configuration always wins.By @andrewmcgivery in https://github.com/apollographql/router/pull/7499
Fixed native query planner regression not forbidding unknown spec links
The legacy JavaScript query planner forbids any usage of unknown
@linkspecs in supergraph schemas with eitherEXECUTIONorSECURITYvalue set for theforargument (aka, the spec's "purpose"). This behavior had not been ported to the native query planner previously. This PR implements the expected behavior in the native query planner.By @duckki in https://github.com/apollographql/router/pull/7587
(Query Planner) Fix invalid type condition in
@deferfetchThe query planner could add an inline spread conditioned on the
Querytype in deferred subgraph fetch queries. Such a query would be invalid in the subgraph when the subgraph schema renamed the root query type. This fix removes the root type condition from all subgraph queries, so that they stay valid even when root types were renamed.By @duckki in https://github.com/apollographql/router/pull/7580
🛠 Maintenance
Add timeouts and connection health checks to Redis connections (Issue #6855)
The Router's internal Redis configuration has been improved to increase client resiliency under various failure modes (TCP failures and timeouts, unresponsive sockets, Redis server failures, etc.). It also adds heartbeats (a PING every 10 seconds) to the Redis clients.
By @aembke, @carodewig in https://github.com/apollographql/router/pull/7526
📚 Documentation
Fix discrepancies in coprocessor metrics documentation (PR #7359)
The documentation for standard metric instruments for coprocessors has been updated:
apollo.router.operations.coprocessor.totaltoapollo.router.operations.coprocessorcoprocessor.succeededattribute applies toapollo.router.operations.coprocessoronly.By @shorgi in https://github.com/apollographql/router/pull/7359
Add example Rhai script for returning Demand Control metrics as response headers (PR #7564)
A new section has been added to the demand control documentation to demonstrate how to use Rhai scripts to expose cost estimation data in response headers. This allows clients to see the estimated cost, actual cost, and other demand control metrics directly in HTTP responses, which is useful for debugging and client-side optimization.
By @abernix in https://github.com/apollographql/router/pull/7564
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.