Add support for lazy protobuf deserialization of Metric
#14371
+19,857
−194
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This change add support for a code path to pdata generator that lazily deserialize the
metricsfield inScopedMetrics. By default the existing behavior isn't changed, but a caller could decide the lazily deserialize.This approach gives few advantages:
Metricwhich plays particularly well with the experimental featurepdata.useProtoPooling.Additional note:
Metricwould the errors happen. This is add difficulty to keep the API compatible, because calling.At(), or.All()could fail. Furthermore, the official protobufFieldDescriptorsupport a "lazy" annotation, see here, and the comment says that the message should be eagerly verified.At()needs to deserialize in it's own state, because the internal data may be modified. This in turn forces to creation of a different function.Link to tracking issue
Fixes #14246 (check for additional information)
Testing
This was tested and benchmarked in a Mimir deployment as well as a benchmark.
Documentation
TODO