Skip to content
This repository has been archived by the owner on May 23, 2023. It is now read-only.

Versioning process for the OpenTracing specification #106

Merged
merged 9 commits into from Mar 20, 2018

Conversation

tedsuo
Copy link
Member

@tedsuo tedsuo commented Feb 28, 2018

RFC Proposal

https://github.com/opentracing/specification/blob/tedsuo/rfc-process/rfc_process.md
Defines a more formal versioning process for the OpenTracing specification.

RFC Template

https://github.com/opentracing/specification/blob/tedsuo/rfc-process/rfc_template.md
To be used for starting proposals.

Example RFC

#107 Trace-Parent Accessors
A real change request, done in the format defined within this pull request.

Inspiration and prior art

Copy link
Member

@yurishkuro yurishkuro left a comment

Choose a reason for hiding this comment

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

lgtm

rfc_process.md Outdated
In order effect changes to the OpenTracing specification, all interfaces are developed together in a three step process:

* DRAFT: An RFC is drafted to define and justify the desired changes.
* TEST: A new version of each langauage interface is designed, tested, and released.
Copy link
Member

Choose a reason for hiding this comment

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

typo: langauage

rfc_process.md Outdated
* Historical background.
* Abstract interface.
* Use cases.
* Risk Assesment.
Copy link
Member

Choose a reason for hiding this comment

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

should be "Assessment", right?

rfc_process.md Outdated

* The issue is clearly defined, and within the scope of the OpenTracing charter.
* The utility to the OT community is illustrated with concrete use cases. It should be clear not only what will change, but how the new interface is expected to be used.
* Changes to the abstract interface are clearly defined. Language-specific interfaces will be implemented in a later phase,but the abstract interface must be clear enough that the changes could be ported to many languages without much deviation.
Copy link
Member

Choose a reason for hiding this comment

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

missing space after the comma.

rfc_process.md Outdated
* Repository branch containing the new version.
* Packages for installing the new version.
* Tracers which bind to the new version.
* Major instrmentation ported to the new version.
Copy link
Member

Choose a reason for hiding this comment

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

typo: instrmentation

rfc_process.md Outdated
A complete release candidate consists of the following:
* Repository branch containing the new version.
* Packages for installing the new version.
* Tracers which bind to the new version.
Copy link
Member

Choose a reason for hiding this comment

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

How should we define/choose which tracer should try to implement a feature? Do we just rely on the fact that people here are working on tracers anyway and will implement features in "their" tracers? Also, tracers are more or less separate projects with separate release cyclesoutside of our direct control (but tied to us of course). Maybe it would be easier if every language had the "basic tracer" which could be used to show the usage of the feature?

Copy link
Member Author

Choose a reason for hiding this comment

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

In general, I believe we should use "rough consensus" for making these decisions. No one can use an API without at least one tracer and one complete set of instrumentation (framework plus RPC library). So an API can't really be examined without these. Ideally, a new release candidate is not made official without at least support from some tracers and instrumentation, or it is useless to people. As to which ones and how many, that should be a case by case basis. For example, which tracers support C# might be different from those which support C++.

We definitely need to revisit the Basic Tracers and make them more useful, but I don't think they are a substitute.

rfc_process.md Outdated
* New risks and ambiguities may lead to proposal changes.

Once the draft proposal is finalized, language implementation begins. Language maintainers begin creating a release candidate on a branch of the language repository. Links to the release candidates, along with their status, are recorded in the tracking issue.

Copy link
Member

Choose a reason for hiding this comment

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

This no longer explains the previously mentioned point Tracers which bind to the new version.. See my previous comment for questions regarding it.

Copy link
Member Author

Choose a reason for hiding this comment

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

Ok, sounds like more detail is needed to describe the Test stage.

rfc_process.md Outdated
* RFC status changed from `Test` to `Accepted`.
* Tracking issue for the proposal is closed.

After a quorum of language interfaces have been tested and released, consensus may be reached that a proposal has been finalized. At this point, the abstract interface contained in the `specification.md` document is updated to reflect the final changes, based on the language in the RFC docment and release candidates.
Copy link
Member

Choose a reason for hiding this comment

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

Isn't this already done via the "Accepted" stage that says that the "Abstract interface is versioned and updated"?

Copy link
Member Author

Choose a reason for hiding this comment

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

Not sure what distinction you are making. This is a description of the Accepted stage.

Copy link
Member

Choose a reason for hiding this comment

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

my bad - I thought this was a new paragraph.

rfc_process.md Outdated

After a quorum of language interfaces have been tested and released, consensus may be reached that a proposal has been finalized. At this point, the abstract interface contained in the `specification.md` document is updated to reflect the final changes, based on the language in the RFC docment and release candidates.

In addition to the specification, the OpenTracing website and other major docmentation efforts are updated at this time to reflect the latest version. Once all work is complete, the tracking issue is closed.
Copy link
Member

Choose a reason for hiding this comment

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

typo: docmentation

rfc_template.md Outdated
@@ -0,0 +1,18 @@
# 0001: RFC_NAME
Copy link
Member

Choose a reason for hiding this comment

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

Do we really need numbered RFCs? They will have separate lifetimes and later RFCs might be released earlier etc. Also, it might be hard to know what the next free number is. (One might have to look through open and closed issues etc.)

As a different solution, e.g. in the "C# language" repository, they just use names for their proposals.

Copy link
Member Author

Choose a reason for hiding this comment

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

Should be clear what the next free number is when you commit (may be different than when you started, of course). Hopefully we are not accepting proposals so fast that there is some kind of race condition. :)

That said, I am not wedded to numbered RFCs. For me, it's simply a matter of how we would like the files organized, so they aren't just in one big arbitrary pile. Possibly directories like C# uses would also be a good approach.

rfc_template.md Outdated
@@ -0,0 +1,18 @@
# 0001: RFC_NAME

**Updated:** January 01, 2018
Copy link
Member

Choose a reason for hiding this comment

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

Since files are committed markdown files with a git history, it might not be necessary to use a "Updated" column. Maybe it's enough to keep dates for state changes?

Copy link
Member Author

Choose a reason for hiding this comment

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

Yeah, could be fine! I'm down to remove this.

rfc_template.md Outdated
# Use Cases
Concrete use cases must be provided, in order to guide testing and interface design, and assist reviewers.

# Risk Assesment
Copy link
Member

Choose a reason for hiding this comment

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

typo: I think it should be "Assessment"

@tedsuo
Copy link
Member Author

tedsuo commented Mar 13, 2018

I'd like to merge this in on Friday, March 16th, after the Cross-Language working group meeting. If you have objections or questions, please give them this week.

rfc_process.md Outdated

# Proposal Components

## RFC (Request for Change)

Choose a reason for hiding this comment

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

Usually, "RFC" is a "request for comments", not change. Did you really mean "change"?

* The issue is clearly defined, and within the scope of the OpenTracing charter.
* The utility to the OT community is illustrated with concrete use cases. It should be clear not only what will change, but how the new interface is expected to be used.
* Changes to the abstract interface are clearly defined. Language-specific interfaces will be implemented in a later phase, but the abstract interface must be clear enough that the changes could be ported to many languages without much deviation.
* All expected behavior should be documented, in sufficient detail such that language-specific tests and examples can be generated from the descriptions.

Choose a reason for hiding this comment

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

+1

rfc_process.md Outdated

## Test
* RFC status changed from `Draft` to `Test`.
* Release Candidate per major language is created.

Choose a reason for hiding this comment

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

Do we have a list of "major languages" defined somewhere?

Copy link
Member Author

Choose a reason for hiding this comment

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

good point, "supported language" is a better term.

* bold text
* RFC means Request for Comments
* Fill in details about the Testing stage.
@tedsuo
Copy link
Member Author

tedsuo commented Mar 20, 2018

@cwe1ss @jpkrohling thank you for your feedback. I've made changes based on your suggestions, and I'm going to merge. Feel free to make additional PRs if you find further changes.

@tedsuo tedsuo merged commit 0805d3d into master Mar 20, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants