Track language implementation status in meta schema#350
Track language implementation status in meta schema#350jack-berg merged 8 commits intoopen-telemetry:mainfrom
Conversation
codeboten
left a comment
There was a problem hiding this comment.
Thanks @jack-berg, i think this is a good first step. I would definitely take this to the next step of having separate files per languages to make it more manageable.
Thanks @jack-berg I second Alex proposal: Having a file per implementation allows better git history, and allows to have different code owners to review PRs changing the support status for a given language. |
👍 done |
…y-configuration into meta-schema-language-status
…y-configuration into meta-schema-language-status
|
RE:
I would like to propose the following enum values as well:
In short, when we know exactly the status for an entry which is not supported, it should not stay blank or unknown but be given a more descriptive status. |
|
Suggestion makes sense @marcalff. With multiple statuses emerging, we'll want to expand the schema for The interpretation of this would be: The type In this proposal, |
47396e5 to
d925489
Compare
| - property: translation_strategy | ||
| status: not_implemented | ||
| - property: without_scope_info | ||
| status: ignored |
There was a problem hiding this comment.
Here's a concrete example showing usage of propertyOverrides.
In the java implementation, the ExperimentalPrometheusMetricExporter is generally supported, but with some exceptions:
translation_strategyis not even available in the programmatic config API, and so is not available in declarative config.without_scope_infois supported via programmatic config API, but we haven't added declarative support for this property yet.
| * `suppported`: The type / property is supported by the language implementation. | ||
| * `not_implemented`: The type / property is not parsed / recognized by the language implementation because the concept is not yet implemented but should be eventually. | ||
| * `not_applicable`: The type / property is not parsed / recognized by the language implementation because the concept is not applicable. E.g. C++ specific instrumentation for Java. | ||
| * `ignored`: The type / property is not parsed / recognized by the language implementation despite the concept being available in the language's programmatic configuration API. |
There was a problem hiding this comment.
Adding lightweight docs for the schema of the meta_schema*.yaml documents.
|
Thanks for the tooling, and making each language a separate yaml file. I think we should merge this, and start documenting each language status, it will help to assess readiness for 1.0.0, in term of coverage for each property (if a property is not supported by any language, there is inherent stability risk in the model) Looking forward to provide the cpp coverage. |
marcalff
left a comment
There was a problem hiding this comment.
LGTM.
Reviewed the yaml, the doc and generated doc, but not the generation scripts.
Followup to #312.
This expands the meta schema to include tracking for language implementation status. Notes:
We want it to be easy for language implementation maintainers to add / update implementation status. Therefore, each language has their own
meta_schema_language_{language}.yamlfile, with all types listed and kept in sync automatically through build tooling. I could have added a language implementation status to each of the meta schema type entries, but this would be very cumbersome for language maintainers as they would need to scroll through a huge file with lots of irrelevant information just to update their relevant bits.We want it to be easy for end users to understand implementation status as a glance. End users are typically interested in a specific language. Therefore, the markdown generation has section for the status of each language implementation like this.
We also want config project maintainers to be able to understand the implementation status of particular types / properties across all languages at a glance, for things like deciding whether to promote experimental types to stable. Therefore, the markdown generation has a cross-language support status collapsible section for each type. For example, see "Language support status" section in SpanExporter type definition.
I think we'll need to consider / iterate what implementation status information we want to capture and how best to organize it maintainability. Here's what I sketched out for this PR:
Notes:
.latestSupportFileFormatcaptures the top level file format the implementation supports.typeSupportStatuseshas entries for each JSON schema type, automatically synced with build tooling.typeSupportStatuses[].statusis an enum with values:supported,unknown(default until a maintainer updates it). What other options are there?.typeSupportStatuses[].unsupportedPropertiescaptures any properties that are unsupported. This is only applicable whenstatus: supported..typeSupportStatuses[].notesopen ended string field capturing any specific callouts about the implementation's support of the type.WDYT? What information is missing? Is there a representation that would be easier for maintainers?