Proposed.  Mix and match:

   - Any expected behaviors dropped or changed from pre-existing API
   versions are available only when API v4 is specified.
   - Any existing behaviors, unchanged in couchdb 4, work the same whether
   API v4 is specified, or not
   - Any new endpoints created in couchdb 4 are available only when API v4
   is specified (=404)
   - - OR -, they respond with an error indicating that v4 is required
      (422?)
      - #include ways-of-indicating-v4
   - start emitting deprecation warnings in v3 api requests
      - e.g. response header: couchdb-warning: start_key is deprecated; use
      startkey instead
      - ...etc...
      - drop v4 support for deprecations (422 error: use of deprecated
   start_key)
   - ? include errors @v3 requests for detected request parameters that are
   clearly v4-targeted (422: feature newAndShiny requires that you
   <indicate-v4-api>)
   - ? be conservative: include v3 deprecation-related behaviors only when
   request-header x-i-want-couchdb-v4: help me
   - other things we want to deprecate @v3  =not support in v4, while the
   window is (?) still open for that
   - plus or minus bike-shedding on header names, message content, 422 vs
   400 etc.
   - Something else?

Anything about the proposed Replicator changes that would conflict with
this?  I guess the replicator, making a request to a remote server whose
protocol support is uncertain, would need to start by making a request
guaranteed to fail on pre-4.0 server - e.g. with /_v4/ url prefix, and from
there, branch to the appropriate behavior for the remote server's
capabilities.

San


On Tue, Mar 30, 2021 at 2:25 PM Adam Kocoloski <kocol...@apache.org> wrote:

> Thanks for bubbling this thread back up to the top Donat.
>
> I think a “cleaner slate” v4 API has a lot going for it, but if we go that
> route without also supporting the v3 API at the same time we’ll be sunk.
> Python succeeded in spite of the 2->3 transition, but it was a long and
> painful road as Joan points out. I’d rather get people on the new version
> and have them adopt new APIs over time there, rather than make all of that
> work a gate on adopting 4.0.
>
> >>>> If we do want to go with API versioning, can someone help me with a
> worked example that shows how and when an endpoint gets a new `v_`, how
> that affects other endpoints, which versions of CouchDB need updating for
> such a change and when do we get to drop previous versions of the API?
>
> That seems like a good set of questions to work through. I wouldn’t think
> this requires any changes to 3.x and would be something we could introduce
> going forward in 4.0. As to whether we support N-1, N-2, … versions of the
> API, I don’t have a strong opinion at the moment. 5.0 is a long ways off :)
>
> Cheers, Adam
>
> > On Mar 30, 2021, at 4:27 PM, Joan Touzet <woh...@apache.org> wrote:
> >
> >
> >
> > On 2021-03-30 2:35 p.m., Bessenyei Balázs Donát wrote:
> >>> It'd be like a Python 2 -> 3 transition
> >>
> >> I think the simile is spot on.
> >> But that shouldn't be a problem, it's more like evolution.
> >>
> >>> your user base plummet
> >>
> >> Looking at [1] and for lack of a better idea for reference [2], the
> >> user base issues are not obvious to me.
> >
> > It also took them 12 years to get back to that point. Python 3.0 came
> > out in December 2008. It took until Python 3.5-3.6 or so (3.6 was
> > released in 2016) before people really started taking Python 3 seriously
> > for production at scale, I believe. The rest of the people were forced
> > off of it with the end of support for 2.7 at the beginning of last year.
> >
> > If he's back from break, Paul Davis can tell you about all the horrors
> > of the transition. It was not pretty.
> >
> >> Having said that, I'm okay with dropping the idea, I just want to make
> >> sure it's also considered.
> >
> > Not railing against it, just saying, if you expect to succeed, you will
> > need to do a *LOT* more community work than throwing a release over the
> > wall and calling it done. It would be wise to at least look into why
> > Python had such a hard time, and start making concrete plans (and
> > dedication of people) to avoid a similar trajectory.
> >
> > -Joan
> >
> >>
> >> [1]: https://www.jetbrains.com/lp/python-developers-survey-2020/
> >> [2]: https://www.tiobe.com/tiobe-index//
> >>
> >> On Tue, Mar 30, 2021 at 7:20 PM Joan Touzet <woh...@apache.org> wrote:
> >>>
> >>>
> >>>
> >>> On 30/03/2021 12:57, Bessenyei Balázs Donát wrote:
> >>>> If we are bumping major anyways, can we just go "clean slate" and
> >>>> promise replication compatibility only?
> >>>
> >>> Basically: watch your user base plummet. It'd be like a Python 2 -> 3
> >>> transition, or a Perl 5 -> 6 one. It would take years of concerted
> >>> effort to recover.
> >>>
> >>> This is why I'd thought pushing that off to 5.0, with 4.0 being the
> >>> transitional release, would be best. But I have no strong opinion.
> >>>
> >>>> All that while we'd publish a migration guide that explains the
> >>>> differences and helps users adjust their implementations, but this way
> >>>> we'd get rid of some potential complexity.
> >>>>
> >>>> If we do want to go with API versioning, can someone help me with a
> >>>> worked example that shows how and when an endpoint gets a new `v_`,
> >>>> how that affects other endpoints, which versions of CouchDB need
> >>>> updating for such a change and when do we get to drop previous
> >>>> versions of the API?
> >>>
> >>> I'd like to see this too.
> >>>
> >>>> Thank you,
> >>>> Donat
> >>>>
> >>>> On Mon, Mar 29, 2021 at 6:28 PM Joan Touzet <woh...@apache.org>
> wrote:
> >>>>>
> >>>>> On 22/02/2021 20:48, Adam Kocoloski wrote:
> >>>>>> Hi all,
> >>>>>>
> >>>>>> Several times in recent months we’ve had discussions on this list
> about behavior changes in CouchDB 4.0 that boil down to tradeoffs between
> >>>>>>
> >>>>>> a) maintaining compatibility with current CouchDB APIs, and
> >>>>>> b) capitalizing on the transactional semantics of FoundationDB
> >>>>>>
> >>>>>> An example would be the support for large result sets in a view
> response: do we stitch together multiple transactions to support very large
> responses, or provide new pagination APIs and guarantee that each response
> is generated from a single isolated snapshot?
> >>>>>>
> >>>>>> I’d like to suggest that we “have our cake and eat it, too” by
> introducing versioned APIs as previously suggested by Ilya[1]. We’d have a
> V3 API that strives to maximize compatibility with CouchDB 3.x, and a V4
> API that still looks and feels like CouchDB, but introduces breaking
> changes where necessary to provide well-defined transactional semantics. I
> think this explicit approach to API evolution could make life easier for
> client library maintainers, and also free us up to improve the API without
> needing to be quite as careful about in-place backwards compatibility.
> >>>>>>
> >>>>>> [1]:
> https://lists.apache.org/thread.html/rcc742c0fdca0363bb338b54526045720868597ea35ee6842aef174e0%40%3Cdev.couchdb.apache.org%3E
> >>>>>>
> >>>>>> What do you think? Cheers, Adam
> >>>>>
> >>>>> In general, +1, as long as the concerns raised by Bob are addressed.
> >>>>> Namely: if I point a CouchDB 1.x-3.x client at a future CouchDB 4.0,
> I
> >>>>> shouldn't be *too* surprised, and as much as possible should "just
> work."
> >>>>>
> >>>>> I've long believed that 4.0 would be a transitional version, and 5.0
> >>>>> would break things completely... so if 5.0 (or whatever) stops
> accepting
> >>>>> "v3" syntax, or "default" changes to "v4", fine by me.
> >>>>>
> >>>>> Also it'd be great if this was advertised in the feature strings
> shown
> >>>>> in `GET /` in some intelligent way. Maybe an array of API versions
> >>>>> supported?
> >>>>>
> >>>>> -Joan
>
>

Reply via email to