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

[router] Reduced allocations in router read path #1367

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

FelixGV
Copy link
Contributor

@FelixGV FelixGV commented Dec 4, 2024

A lot of multi-key specific state was moved out of VenicePath and into its subclasses, which makes single get queries require less heap space. This includes streaming (chunkedResponse), HAR (helixGroupId and requestId), longTailRetryThresholdMs and responseHeaders.

In addition, all kinds of VenicePaths are also getting their heap size reduced by leveraging shared instances where possible. For example:

  • The resourceName, storeName and versionNumber properties are replaced by a single reference to a shared instance of StoreVersionName, which is a new class obtained from a NameRepository (same idea as the PubSubTopicRepository).

  • The smartLongTailRetryEnabled, smartLongTailRetryAbortThresholdMs and longTailRetryThresholdMs properties are replaced by a single pointer to a RouterRetryConfig object, which is a simple facade wrapping the VeniceRouterConfig.

  • The responseDecompressor is now coming from a map of shared instances in the VenicePathParser.

Miscellaneous:

  • Various refactorings enable the VenicePath constructors to have fewer params and to make more of the properties final.

  • Made as many properties as possible final in the VeniceRouterConfig.

  • Minor tweaks to the main README page.

How was this PR tested?

CI.

Does this PR introduce any user-facing changes?

  • No. You can skip the rest of this section.
  • Yes. Make sure to explain your proposed changes and call out the behavior change.

A lot of multi-key specific state was moved out of VenicePath and into
its subclasses, which makes single get queries require less heap space.
This includes streaming (chunkedResponse), HAR (helixGroupId and
requestId), longTailRetryThresholdMs and responseHeaders.

In addition, all kinds of VenicePaths are also getting their heap size
reduced by leveraging shared instances where possible. For example:

- The resourceName, storeName and versionNumber properties are replaced
  by a single reference to a shared instance of StoreVersionName, which
  is a new class obtained from a NameRepository (same idea as the
  PubSubTopicRepository).

- The smartLongTailRetryEnabled, smartLongTailRetryAbortThresholdMs and
  longTailRetryThresholdMs properties are replaced by a single pointer
  to a RouterRetryConfig object, which is a simple facade wrapping the
  VeniceRouterConfig.

- The responseDecompressor is now coming from a map of shared instances
  in the VenicePathParser.

Miscellaneous:

- Various refactorings enable the VenicePath constructors to have fewer
  params and to make more of the properties final.

- Made as many properties as possible final in the VeniceRouterConfig.

- Minor tweaks to the main README page.
…uilder.

Deleted VeniceMetricsProvider which can be trivially inlined.
by tests to inject a MockTime, it is done from a subclass, and therefore
can be achieved differently via extension, rather than composition.
final BiConsumer<AggRouterHttpRequestStats, String> statsRecorder;

FailureType(BiConsumer<AggRouterHttpRequestStats, String> statsRecorder) {
this.reportUnhealthy = statsRecorder == null;
Copy link

@lusong64 lusong64 Dec 13, 2024

Choose a reason for hiding this comment

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

So the entire reportUnhealthy is used to recorded whether we have a non-null BiConsumer? Would it possible to just use

this.statsRecorder = Optional.ofNullable(statsRecorder)
    .orElse((stats, store) -> {});

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.

2 participants