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.
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
Define the reader interface, and create a manual reader #2885
Define the reader interface, and create a manual reader #2885
Changes from 1 commit
2e60156
a57bc8c
855deb5
bbdcf0f
0961f3f
6f28e05
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is odd to me that we are including the "manual reader" and not the periodic reader in this PR. Can this be added in a subsequent PR after we agree on the
Reader
design?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we have gotten to an impasse on "Just Design" and I think either an implementation to demonstrate how this would work, or some logic in the MetricProducer of how this is used is warranted.
I for one have already seen the use case of the
Shutdown
method and will have to work to add that code into this.But I still don't see how
ForceFlush
works in these implementations. This leads me to believe that I don't think we should be designing these in the absence of some use case, either the minimal implementation or where it is used.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd like to understand this concern about Shutdown and ForceFlush. They way I understand both of them, both method calls pass-through to each of the readers (i.e., exporters). If a reader (i.e., exporter) has nothing applicable to do for flush or shutdown, they'll do nothing. The reason we want Reader, Producer, and the Produce() method to be public, is so that users and/or exporters can choose to perform manual reading simply by implementing the 1-line
Register
function plus custom Shutdown and ForceFlush logic.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be an operation this method call will perform.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is perfect, as long as we expose the Register() and Produce() methods and the Producer interface. The ManualReader is just a convenience for exporters that read on-demand and have no need of a Shutdown or ForceFlush routine. If an exporter reads manually and needs a ForceFlush or Shutdown, they'll implement the
Reader
interface directly.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this can be removed, it's not needed if the Register method, Producer type, and Produce method are exposed. When these are exposed, the ManualReader is only needed for simple applications; anything that wants manual reading behavior and also to control flush/shutdown has the option to manually implement the reader themselves, it's very simple.
In my branch, Collect() is an interface method that the (async/sync)x(cumulative/delta) instrument objects implement, used by the producer during Produce()
In my branch I named what is
export
here as the packagesdk/metric/data
, so ^^^ is thedata.Collector
interface andCollect()
collects is how one API-level instrument outputs multiple View-level metric data objects. The user would not use this, it's between the*meter
and the internal packages.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Collect
is a required method for a reader: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/sdk.md#collect