router
router copied to clipboard
Unix socket support for subgraphs
Fix #3504
This implements support for Unix sockets in subgraph connections by specifying URLs in the unix:///path/to/router.sock
format.
Implementation details:
- the Uri type used throughout the router does not actually support the
unix://
scheme, and there is no real standard for it, so the library we use here hides the socket path by hex encoding it in the authority part of the Uri - this only supports stream sockets
- decompression is supported
- TLS is not supported
Note: I'd like to add it to the doc but can't decide on the right place to put it. Any suggestions?
TODO:
- [x] update the override_subgraph_url plugin to support it
Checklist
Complete the checklist (and note appropriate exceptions) before the PR is marked ready-for-review.
- [ ] Changes are compatible[^1]
- [ ] Documentation[^2] completed
- [ ] Performance impact assessed and acceptable
- Tests added and passing[^3]
- [ ] Unit Tests
- [ ] Integration Tests
- [ ] Manual Tests
Exceptions
Note any exceptions here
Notes
[^1]: It may be appropriate to bring upcoming changes to the attention of other (impacted) groups. Please endeavour to do this before seeking PR approval. The mechanism for doing this will vary considerably, so use your judgement as to how and when to do this. [^2]: Configuration is an important part of many changes. Where applicable please try to document configuration examples. [^3]: Tick whichever testing boxes are applicable. If you are adding Manual Tests, please document the manual testing (extensively) in the Exceptions.
@Geal, please consider creating a changeset entry in /.changesets/
. These instructions describe the process and tooling.
CI performance tests
- [ ] reload - Reload test over a long period of time at a constant rate of users
- [ ] events_big_cap_high_rate_callback - Stress test for events with a lot of users, deduplication enabled and high rate event with a big queue capacity using callback mode
- [ ] events_without_dedup_callback - Stress test for events with a lot of users and deduplication DISABLED using callback mode
- [ ] large-request - Stress test with a 1 MB request payload
- [x] const - Basic stress test that runs with a constant number of users
- [ ] no-graphos - Basic stress test, no GraphOS.
- [ ] step-jemalloc-tuning - Clone of the basic stress test for jemalloc tuning
- [ ] events - Stress test for events with a lot of users and deduplication ENABLED
- [ ] events_callback - Stress test for events with a lot of users and deduplication ENABLED in callback mode
- [ ] events_big_cap_high_rate - Stress test for events with a lot of users, deduplication enabled and high rate event with a big queue capacity
- [ ] events_without_dedup - Stress test for events with a lot of users and deduplication DISABLED
- [ ] xxlarge-request - Stress test with 100 MB request payload
- [ ] xlarge-request - Stress test with 10 MB request payload
- [x] step - Basic stress test that steps up the number of users over time
@shorgi Do you have suggestions on where this can land in the docs?
@shorgi Do you have suggestions on where this can land in the docs?
Is this a new valid routing_url
or subgraph_url
? And if subgraph_url
, can it be set via override_subgraph_urls
?
For now in router docs, the Configuration page is the landing page for all user-configurable router settings. We can add content to Subgraph routing URLs or a new heading for Routing URLs.
This also has ramifications for federation, rover, and GraphOS docs. Taking note of this as we reorganize the docs IA.
it is a new subgraph URL, and it will be supported by override_subgraph_url. But also, it could come from the supergraph schema
ok, it's mentioned in the subgraph routing urls section now https://github.com/apollographql/router/pull/4757/files#diff-69d7e3fff212844102e67091fcc275b06d67899a25df2c16f9f5a78bfd7e6444R517
it needs a few more fixes to make sure builds are passing on Windows (where unix sockets don't exist) then I'll merge it