Skip to content
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

prep release: v1.43.0 #4831

Merged
merged 3 commits into from Mar 22, 2024
Merged

prep release: v1.43.0 #4831

merged 3 commits into from Mar 22, 2024

Conversation

abernix
Copy link
Member

@abernix abernix commented Mar 21, 2024

Note

When approved, this PR will merge into the 1.43.0 branch which will — upon being approved itself — merge into main.

Things to review in this PR:

  • Changelog correctness (There is a preview below, but it is not necessarily the most up to date. See the Files Changed for the true reality.)
  • Version bumps
  • That it targets the right release branch (1.43.0 in this case!).

🚀 Features

Support configurable heartbeat for subscriptions using the WebSocket protocol (Issue #4621)

To support GraphQL Subscription WebSocket implementations such as DGS that drop idle connections by design, the router adds the ability to configure a heartbeat to keep active connections alive.

An example router configuration:

subscription:
  mode:
    passthrough:
      all:
        path: /graphql
        heartbeat_interval: enable # Optional

By @IvanGoncharov in #4802

Unix socket support for subgraphs (Issue #3504)

⚠️ This is an Enterprise feature of the Apollo Router. It requires an organization with a GraphOS Enterprise plan.

If your organization doesn't currently have an Enterprise plan, you can test out this functionality by signing up for a free Enterprise trial.

The router now supports Unix sockets for subgraph connections by specifying URLs in the unix:///path/to/router.sock format in the schema, in addition to coming a valid URL option within the existing override_subgraph_url configuration. The router uses Unix stream-oriented sockets (not datagram-oriented). It supports compression but not TLS.

Due to the lack of standardization of Unix socket URLs (and lack of support in the common URL types in Rust) a transformation is applied to to the socket path to parse it: the host is encoded in hexadecimal and stored in the authority part. This will have no consequence on the way the router functions, but subgraph services will receive URLs with the hex-encoded host.

By @Geal in #4757

Add an option to refresh expiration on Redis GET (Issue #4473)

This adds the option to refresh the time-to-live (TTL) on Redis entries when they are accessed. We want the query plan cache to act like an LRU cache (least-recently used), so if a TTL is set in its Redis configuration, it should reset every time it is accessed.

While the option is also available for APQ, it's disabled for entity caching because that cache manages TTL directly.

By @Geal in #4604

Helm: Support configuring j on Horizontal Pod Autoscaler (HPA) targets (PR #4776)

The router supports configuration of the ContainerResource type metric on Horizontal Pod Autoscaler (HPA) targets in the Helm chart with Kubernetes v1.27 or later.

By @caugustus in #4776

🐛 Fixes

Fix chunk formatting in multipart protocol (Issue #4634)

Previously, when sending a stream of chunks for HTTP multipart, the router finished each chunk by appending it with .
Now, the router doesn't append to the current chunk but instead prepends it to the next chunk. This enables the router to close a stream with the correct final boundary by appending -- directly to the last chunk.

This PR changes the way we're sending chunks in the stream. Instead of finishing the chunk with we don't send this at the end of our current chunk but instead at the beginning of the next one. For the end users nothing changes but it let us to close the stream with the right final boundary by appending -- directly to the last chunk.

By @bnjjj in #4681

Zipkin service name not populated (Issue #4807)

The Zipkin trace exporter now respects service name configuration from YAML or environment variables.

For instance to set the service name to my-app, you can use the following configuration in your router.yaml file:

telemetry:
  exporters:
    tracing:
      common:
        service_name: my-app
      zipkin:
        enabled: true
        endpoint: default

By @BrynCooke in #4816

🛠 Maintenance

Preallocate response formatting output (PR #4775)

To improve runtime performance, an internal change to the router's format_response now preallocates the output object.

By @xuorig in #4775

@router-perf
Copy link

router-perf bot commented Mar 21, 2024

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
  • 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
  • step - Basic stress test that steps up the number of users over time

@abernix
Copy link
Member Author

abernix commented Mar 21, 2024

This is ready for review. Please take a look!

@abernix abernix requested a review from shorgi March 21, 2024 16:11
CHANGELOG.md Outdated Show resolved Hide resolved
Copy link
Contributor

@BrynCooke BrynCooke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved with a minor comment

Including my best attempt as a human to merge the suggestions from @shorgi
on #4821 into my own.
@abernix abernix mentioned this pull request Mar 21, 2024
Copy link
Contributor

@garypen garypen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line 48 in the Changelog. What is j?

@abernix
Copy link
Member Author

abernix commented Mar 22, 2024

Line 48 in the Changelog. What is j?

That's what happens when you're using vim and don't realize you accidentally a word.

Fixed in 4e0a580.

CHANGELOG.md Outdated Show resolved Hide resolved
@abernix abernix requested a review from garypen March 22, 2024 07:52
@abernix abernix merged commit ded84be into 1.43.0 Mar 22, 2024
12 checks passed
@abernix abernix deleted the prep-1.43.0 branch March 22, 2024 09:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants