Maybe I'm nit-picking, but I thought you mean only API versioning, which does not include release versioning, to which "Updates" section is related. I would propose to make the sentence more catchy: convert it to `NOTE` and state clear the whole doc (not just API versioning) applies to Mesos 1.0+ only.
On Mon, Jan 4, 2016 at 7:33 PM, Anand Mazumdar <an...@mesosphere.io> wrote: > Vinod alluded to a similar concern as a review comment and we added the > following to the beginning of the doc: > > “API versioning was introduced in Mesos 0.24.0 and this scheme only applies > to Mesos 1.0.0 and higher.” > > I was under the impression that the above statement should suffice? > > -anand > > >> On Jan 4, 2016, at 3:02 AM, Alex R <ruklet...@gmail.com> wrote: >> >> The "Upgrades" section says "The master and agent are typically compatible >> as long as they are running the same major version.". Is my understanding >> correct that this will apply to 1.0.0+ versions? Currently we advice people >> not to skip any Mesos releases, could you please clarify that in the doc? >> >> >> On 31 December 2015 at 02:12, <vinodk...@apache.org> wrote: >> >>> Repository: mesos >>> Updated Branches: >>> refs/heads/master b54d9ee06 -> 4568e584d >>> >>> >>> Added documentation for API versioning. >>> >>> Review: https://reviews.apache.org/r/41661/ >>> >>> >>> Project: http://git-wip-us.apache.org/repos/asf/mesos/repo >>> Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/4568e584 >>> Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/4568e584 >>> Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/4568e584 >>> >>> Branch: refs/heads/master >>> Commit: 4568e584d15e2da68f777aff2570d6b0ceaa14fa >>> Parents: b54d9ee >>> Author: Anand Mazumdar <mazumdar.an...@gmail.com> >>> Authored: Wed Dec 30 17:11:21 2015 -0800 >>> Committer: Vinod Kone <vinodk...@gmail.com> >>> Committed: Wed Dec 30 17:11:21 2015 -0800 >>> >>> ---------------------------------------------------------------------- >>> docs/home.md | 1 + >>> docs/versioning.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ >>> 2 files changed, 101 insertions(+) >>> ---------------------------------------------------------------------- >>> >>> >>> http://git-wip-us.apache.org/repos/asf/mesos/blob/4568e584/docs/home.md >>> ---------------------------------------------------------------------- >>> diff --git a/docs/home.md b/docs/home.md >>> index d929838..6f0f4b9 100644 >>> --- a/docs/home.md >>> +++ b/docs/home.md >>> @@ -54,6 +54,7 @@ layout: documentation >>> * [Javadoc](/api/latest/java/) documents the Mesos Java API. >>> * [Doxygen](/api/latest/c++/namespacemesos.html) documents the Mesos C++ >>> API. >>> * [Developer Tools](/documentation/latest/tools/) for hacking on Mesos or >>> writing frameworks. >>> +* [Versioning](/documentation/latest/versioning/) describes how Mesos >>> does API and release versioning. >>> >>> ## Extending Mesos >>> >>> >>> >>> http://git-wip-us.apache.org/repos/asf/mesos/blob/4568e584/docs/versioning.md >>> ---------------------------------------------------------------------- >>> diff --git a/docs/versioning.md b/docs/versioning.md >>> new file mode 100644 >>> index 0000000..7af6581 >>> --- /dev/null >>> +++ b/docs/versioning.md >>> @@ -0,0 +1,100 @@ >>> +--- >>> +layout: documentation >>> +--- >>> + >>> +# Mesos Versioning >>> + >>> +The Mesos API and release versioning policy gives operators and >>> developers clear guidelines on: >>> + >>> +* Making modifications to the existing APIs without affecting backward >>> compatibility. >>> +* How long a Mesos API will be supported. >>> +* Upgrading the Mesos installation across release versions. >>> + >>> +API versioning was introduced in Mesos 0.24.0 and this scheme only >>> applies to Mesos 1.0.0 and higher. >>> + >>> +## Terminology >>> + >>> +* **Release Versioning**: This refers to the version of Mesos that is >>> being released. It is of the form **Mesos X.Y.Z** (X is the major version, >>> Y is the minor version, and Z is the patch version). >>> +* **API Versioning**: This refers to the version of the Mesos API. It is >>> of the form **vX** (X is the major version). >>> + >>> +## How does it work? >>> + >>> +The Mesos APIs (constituting Scheduler, Executor, Internal, >>> Operator/Admin APIs) will have a version in the URL. The versioned URL will >>> have a prefix of **`/api/vN`** where "N" is the version of the API. The >>> "/api" prefix is chosen to distinguish API resources from Web UI paths. >>> + >>> +Examples: >>> + >>> +* http://localhost:5050/api/v1/scheduler : Scheduler HTTP API hosted by >>> the master. >>> +* http://localhost:5051/api/v1/executor : Executor HTTP API hosted by >>> the agent. >>> + >>> +A given Mesos installation might host multiple versions of the same API >>> i.e., Scheduler API v1 and/or v2 etc. >>> + >>> +### API version vs Release version >>> + >>> +* To keep things simple, the stable version of the API will correspond to >>> the major release version of Mesos. >>> + * For example, v1 of the API will be supported by Mesos release >>> versions 1.0.0, 1.4.0, 1.20.0 etc. >>> +* vN version of the API might also be supported by release versions of >>> N-1 series but the vN API is not considered stable until the last release >>> version of N-1 series. >>> + * For example, v2 of the API might be introduced in Mesos 1.12.0 >>> release but it is only considered stable in Mesos 1.21.0 release if it is >>> the last release of “1” series. Note that all Mesos 1.x.y versions will >>> still support v1 of the API. >>> +* The API version is only bumped if we need to make a backwards >>> [incompatible](#api-compatibility) API change. We will strive to support a >>> given API version for at least a year. >>> +* The deprecation clock for vN-1 API will start as soon as we release >>> “N.0.0” version of Mesos. We will strive to give enough time (e.g., 6 >>> months) for frameworks/operators to upgrade to vN API before we stop >>> supporting vN-1 API. >>> +* Minor release version is bumped roughly on a monthly cycle to give a >>> cadence of new features to users. >>> + >>> +NOTE: Presently, for "0.X.Y" releases i.e. till we reach "1.0.0", we wait >>> for at least 6 monthly releases before deprecating functionality. So, >>> functionality that has been deprecated in 0.26.0 can be safely removed in >>> 0.32.0. >>> + >>> +### API Compatibility >>> + >>> +The API compatibility is determined by the corresponding protobuf >>> guarantees. >>> + >>> +As an example, the following are considered "backwards compatible" >>> changes for Scheduler API: >>> + >>> +* Adding new types of Calls i.e., new types of HTTP requests to >>> "/scheduler". >>> +* Adding new optional fields to existing requests to "/scheduler". >>> +* Adding new types of Events i.e., new types of chunks streamed on >>> "/scheduler". >>> +* Adding new header fields to chunked response streamed on "/scheduler". >>> +* Adding new fields (or changing the order of fields) to chunks’ body >>> streamed on "/scheduler". >>> +* Adding new API resources (e.g., "/foobar"). >>> + >>> +The following are considered backwards incompatible changes for Scheduler >>> API: >>> + >>> +* Adding new required fields to existing requests to "/scheduler". >>> +* Renaming/removing fields from existing requests to "/scheduler". >>> +* Renaming/removing fields from chunks streamed on "/scheduler". >>> +* Renaming/removing existing Calls. >>> + >>> +## Upgrades >>> + >>> +* The master and agent are typically compatible as long as they are >>> running the same major version. >>> + * For example, 1.3.0 master is compatible with 1.13.0 agent. >>> +* In rare cases, we might require the master and agent to go through a >>> specific minor version for upgrades. >>> + * For example, we might require that a 1.1.0 master (and/or agent) be >>> upgraded to 1.8.0 before it can be upgraded to 1.9.0 or later versions. >>> + >>> +The detailed information about upgrading to a particular Mesos version >>> would be posted [here](/documentation/latest/upgrades/). >>> + >>> +### Implementation Details >>> + >>> +Most APIs in Mesos accept protobuf messages with a corresponding JSON >>> field mapping. To support multiple versions of the API, we decoupled the >>> versioned protobufs backing the API from the “internal” protobufs used by >>> the Mesos code. >>> + >>> +For example, the protobufs for the v1 Scheduler API are located at: >>> + >>> +``` >>> +include/mesos/v1/scheduler/scheduler.proto >>> + >>> +package mesos.v1.scheduler; >>> +option java_package = "org.apache.mesos.v1.scheduler"; >>> +option java_outer_classname = "Protos"; >>> +… >>> +``` >>> + >>> +The corresponding internal protobufs for the Scheduler API are located at: >>> + >>> +``` >>> +include/mesos/scheduler/scheduler.proto >>> + >>> +package mesos.scheduler; >>> +option java_package = "org.apache.mesos.scheduler"; >>> +option java_outer_classname = "Protos"; >>> +… >>> +``` >>> + >>> +The users of the API send requests (and receive responses) based on the >>> versioned protobufs. We implemented [evolve]( >>> https://github.com/apache/mesos/blob/master/src/internal/evolve.hpp)/[devolve](https://github.com/apache/mesos/blob/master/src/internal/devolve.hpp) >>> converters that can convert protobufs from any supported version to the >>> internal protobuf and vice versa. >>> + >>> +Internally, message passing between various Mesos components would use >>> the internal unversioned protobufs. When sending response (if any) back to >>> the user of the API, the unversioned protobuf would be converted back to a >>> versioned protobuf. >>> >>> >