Uh oh!
There was an error while loading. Please reload this page.
Versioning policy - #845
Conversation
This could be a helper, however some of these references refer to specific library versions. Something to revisit in due course.
mattheworiordan
commented
Mar 25, 2020
@tomczoink mind looking at why this deployment failed? |
| index: 19 | ||
| --- | ||
| Ably aims to follow the "semantic versioning scheme":http://semver.org/ for our "client library SDKs":https://www.ably.io/download, the "realtime protocol used by these SDKs":/client-lib-development-guide/protocol, our "REST API endpoints":/rest-api, and all other public endpoints, that support versioning, such as "Server-Sent Events":/sse. |
There was a problem hiding this comment.
We (aim to) follow semver for public-facing APIs (which includes the REST api), but we don't really for the realtime protocol. E.g. connectionTimeserials will be a breaking protocol change, but we're doing that change in 1.3 rather than 2.0 because there's no change to the customer-facing client lib API. The policy we're effectively currently following for the realtime protocol is that breaking changes require a new spec version, which can be either a major or minor version.
| Further, given that the version numbers we use cover the raw HTTP API, the protocol and API spec, and the client library SDKs, features such as support for connection/request params, channel params, extras, token lengths, APIs (eg push HTTP API) vary by the API version. Stateless connections are subject to some of those constraints, even if they don't follow the full protocol spec or the library API. | ||
| As such, in the case of SSE for example, we feel standardising on versioning means it's quite natural for a connection string for a stateless connection to include the spec version, and that will allow the system to know what features the client can be expected to understand, and might be required so that the system knows how to interpret param values that are supplied by the client. Whilst we always try to make it so that there are no incompatibilities, we have a version because we recognise that that's not always avoidable. |
There was a problem hiding this comment.
TBH I'm not sure I'm 100% convinced - the main api version is essentially 100% driven by client library protocol requirements, so this policy leaves other transports wanting to make changes that don't affect client libs in the position of just waiting until the next new client lib spec version happens, which might be a month or > a year away. (And technically per semver if it's a breaking change, waiting until the next new major client lib spec version happens, which is once in a blue moon).
But I don't feel particularly strongly about it, and if you (Matt) and Paddy both think this is the right policy, I'm happy to accept the consensus.
There was a problem hiding this comment.
I agree it's not ideal, but equally maintaining different versions across different protocols, SDKs, endpoints feels like a far bigger issue. If we had to introduce a breaking change that only affected SSE for example, and we bumped from 1.3 to 1.4 but communicate it in the changelogs, it would be less than ideal, but possible. Equally, I think we can deal with that issue if it ever arises.
QuintinWillison
commented
Mar 26, 2020
@paddybyers if you're happy then I think we get this merged. |
mattheworiordan
commented
Mar 28, 2020
@paddybyers@SimonWoolf@QuintinWillison updated with a small change. You OK to proceed? |
| h3(#versioning). Versioning | ||
| By default, all requests receive the latest version of the API, which is currently @1.0@. | ||
| By default, all requests receive the latest version of the API, which is currently @1.1@. |
There was a problem hiding this comment.
Did you mean to modify this file as it's in a versions folder?
paddybyers
left a comment
There was a problem hiding this comment.
LGTM, after some clarifications and minor edits (11013bb)
MarkWoulfeAbly
left a comment
There was a problem hiding this comment.
@mattheworiordan if this is still something we want to merge can you please address the conflicts and also update the base version from 1.1 1.2 now we have that released?
@mattheworiordan are you able to work on this or do you need somebody else to take over? Also, @paddybyers and @SimonWoolf, I'm here today because I've been briefly diverted to looking at (potentially rogue)
And then there's the exception (!?) as recently updated by @marto83:
This feels like it needs refinement for clarity (and I've not even looked at the other libraries). In fact, in the case of Java, I think this line is a bug (i.e. idempotent publishing cannot possibly be enabled!). I've created ably/ably-java#590 to track that. All I can find in the client library features specification is G4 which refers to "API Version" which, clearly, seems to be about public facing programmable APIs - as distinct from information announced to the server at wire level. I'm not sure that the Realtime Protocol Definition page makes things any clearer either. What should I be looking at to ascertain what each library should be using? (that is assuming these values are even sent by each library as I've not yet dug deep enough to look at that yet) |
@QuintinWillison You've correctly identified G4 as the relevant spec item. When it says "A client library must identify to Ably the version..." that is talking about the So, yeah, all those libraries should have been updated to change that api version with the release of 1.2, and Martin was the only person who remembered :/. (Not your fault obviously, mine as I should have caught it in the 1.2 release PR review) (Luckily doesn't matter that much, since I don't think there are any non-backwards-compatible wire protocol changes in 1.2. For 1.3 it'll matter a lot more, since the api version will trigger the server to use connectionTimeserials) |
QuintinWillison
commented
Aug 20, 2020
@MarkWoulfeAbly I'm going to get this ready to land, FYI. |
kavalerov
commented
Dec 7, 2020
Quick notes from a call between me, @niksilver , @paddybyers and @QuintinWillison
|
kavalerov
commented
Dec 7, 2020
@jamienewcomb for some reason this issue was not synced to Jira - can you please take a look? |
jamienewcomb
commented
Dec 7, 2020
We don’t sync PRs :) |
tbedford
commented
Dec 21, 2020
I've reviewed locally and looks good, but I'd like to review the deployed review app: it's showing as "1 inactive (outdated) deployment". Is there a way to "reboot" the review app so I can see the latest changes? Unfortunately local review is not enough because I want to check menus are OK. |
Uh oh!
There was an error while loading. Please reload this page.
tbedford
commented
Jan 4, 2021
Reviewed locally and here: https://ably-docs-versioning-ca8dyfe7y.herokuapp.com/client-lib-development-guide/versioning/ LGTM |
Given we have no formal policy on how we version, I thought we should get something down based on what we do practically now.
This is not meant to be a discussion about what we should do. That's for another day. This PR is about providing some guidance on what we do now.
@QuintinWillison notice the 1.0 to 1.1 update commit. You may need to do the same for the 1.2 release.