-
Notifications
You must be signed in to change notification settings - Fork 17
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
Add scope configuration properties #140
base: main
Are you sure you want to change the base?
Conversation
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.
These are not stable parts of the specification. Do we want to add these?
The Go SIG does not plan to implement this FWIW.
See PR description. I think we need to find a path forward for having experimental portions of the data model, and figured this is a good problem domain to explore that.
I'm interested in hearing more about this.. do you mean Go doesn't plan to implement while the feature is experimental, or doesn't plan to implement ever? If Go doesn't plant to implement ever, is it because of some problem with the feature, issues with compatibility, or something else? |
I agree. If a spec is experimental, we should look at it sooner rather than later, so that:
The C++ SIG is implementing this. |
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.
The structure overall looks ok.
For a second pass, I think a lot of properties should be required, for example for traces:
- node TracerConfigurator: make default_config required
- node TracerMatcherAndConfig: make name and config required
- node TracerConfig: make disabled required
I think this is a good opportunity to add schema modeling guidance for when a field should be required or not. IMO, the general guidance should be something to the effect of: A field should be required if the spec explicitly states its required, or implies that its required by not indicating what should happen in its absence (i.e. no default is defined). So But this guidance alone isn't enough. For example, consider
But as a counter argument, we already have the Anyway, it probably needs more analysis to extract general guidance. Applied here:
The spec has defaults for each of the properties. Allowing
Agreed.
In a future where |
It's hard to say for certain what the future holds, but as of now the Go SIG does not plan to implement this ever. Defining singularly at the |
It seems like we are going to need two things for experimental configuration:
Users need to be able to validate their configuration with experimental features. However, implementations need to have a way they can signal this feature is not supported. This seems adjacent to the instrumentation configuration in that it is something that would be an "add on" to the already stabilized configuration. |
@MrAlias - thinking about this more.. My goal here was to use scope config as a way to tease out these mechanisms to model experimental stuff, allow users to opt in, etc. But I realized that we're already modeling an experimental portion of the spec in the instrumentation config block. So I can use that config as the canary for answering these questions. And then whatever we come up with can apply to scope config. So I'd like to put this PR on hold and use |
} | ||
}, | ||
"MeterConfig": { | ||
"type": ["object", "null"], |
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.
"type": ["object", "null"], | |
"type": ["object"], |
"title": "MeterMatcherAndConfig", | ||
"properties": { | ||
"name": { | ||
"type": ["string", "null"] |
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.
"type": ["string", "null"] | |
"type": ["string"] |
} | ||
}, | ||
"LoggerConfig": { | ||
"type": ["object", "null"], |
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.
"type": ["object", "null"], | |
"type": ["object"], |
"title": "LoggerMatcherAndConfig", | ||
"properties": { | ||
"name": { | ||
"type": ["string", "null"] |
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.
"type": ["string", "null"] | |
"type": ["string"] |
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.
The cleanup done for tracer needs to be applied to metrics and logs as well.
See suggested changes.
Yes, thanks for that.
Relying on the default of the default just to have something less verbose affects clarity, but the pattern makes sense. Agreed.
Makes sense. |
Corresponding to the following spec sections:
I believe this is the first time we've discussed adding properties which are experimental in the spec. And I want to use this as an opportunity to work out the details on how experimental properties work and their intersection with stability guarantees we still need to work out (#89).
The content in this PR needs review independent of the experimental conversation, and I'd like to find a way to separate the two issues.
One way we could proceed is to evaluate this PR ignoring the fact that the corresponding spec if experimental. Open an issue to find a resolution to experimental config properties, and indicate that the issue is blocking the next release (0.4.0). I would then tackle that issue as a followup to this, which I'm quite motivated to do because its a critical task on the path to stabilizing.