router icon indicating copy to clipboard operation
router copied to clipboard

Unix socket support for subgraphs

Open Geal opened this issue 11 months ago • 5 comments

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 avatar Mar 06 '24 14:03 Geal

@Geal, please consider creating a changeset entry in /.changesets/. These instructions describe the process and tooling.

github-actions[bot] avatar Mar 06 '24 14:03 github-actions[bot]

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

router-perf[bot] avatar Mar 06 '24 14:03 router-perf[bot]

@shorgi Do you have suggestions on where this can land in the docs?

abernix avatar Mar 06 '24 19:03 abernix

@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.

shorgi avatar Mar 06 '24 23:03 shorgi

it is a new subgraph URL, and it will be supported by override_subgraph_url. But also, it could come from the supergraph schema

Geal avatar Mar 07 '24 11:03 Geal

ok, it's mentioned in the subgraph routing urls section now https://github.com/apollographql/router/pull/4757/files#diff-69d7e3fff212844102e67091fcc275b06d67899a25df2c16f9f5a78bfd7e6444R517

Geal avatar Mar 13 '24 08:03 Geal

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

Geal avatar Mar 13 '24 09:03 Geal