No, I would not. I was thinking only of the previous major release. so a 3.x.y that adds bidirection replication compatibility with 4.0.0.
B. > On 16 Jul 2020, at 21:50, Joan Touzet <woh...@apache.org> wrote: > > > > On 2020-07-16 2:24 p.m., Robert Samuel Newson wrote: >> Agreed on all 4 points. On the final point, it's worth noting that a >> continuous changes feed was two-phase, the first is indeed over a snapshot >> of the db as of the start of the _changes request, the second phase is an >> endless series of subsequent snapshots. the 4.0 behaviour won't exactly >> match that but it's definitely in the same spirit. >> Agreed also on requiring pagination (I've not reviewed the proposed >> pagination api in sufficient detail to +1 it yet). Would we start the >> response as rows are retrieved, though? That's my preference, with an >> unclean termination if we hit txn_too_old, and an upper bound on the "limit" >> parameter or equivalent chosen such that txn_too_old is vanishingly unlikely. >> On compatibility, there's precedent for a minor release of old branches just >> to add replicator compatibility. for example, the replicator could call >> _changes again if it received a complete _changes response (i.e, one that >> ended with a } that completes the json object) that did not include a >> "last_seq" row. The 4.0 replicator would always do this. > > I wouldn't really want to release a new 1.x, would you? Augh. > > If we're going to change how replication works, wouldn't it better to simply > say "there is no guaranteed one-shot replication back from 4.x to 1.x?" Or, > intentionally break backward compatibility so one-shot replication to > un-upgraded old Couches refuses to work at all? This would prevent the > confusion by making it clear - you can't do things this way anymore. > > We could do a point release of 3.x, sure. > > -Joan > >> B. >>> On 16 Jul 2020, at 17:25, Paul Davis <paul.joseph.da...@gmail.com> wrote: >>> >>> From what I'm reading it sounds like we have general consensus on a few >>> things: >>> >>> 1. A single CouchDB API call should map to a single FDB transaction >>> 2. We absolutely do not want to return a valid JSON response to any >>> streaming API that hit a transaction boundary (because data >>> loss/corruption) >>> 3. We're willing to change the API requirements so that 2 is not an issue. >>> 4. None of this applies to continuous changes since that API call was >>> never a single snapshot. >>> >>> If everyone generally agrees with that summarization, my suggestion >>> would be that we just revisit the new pagination APIs and make them >>> the only behavior rather than having them be opt-in. I believe those >>> APIs already address all the concerns in this thread and the only >>> reason we kept the older versions with `restart_tx` was to maintain >>> API backwards compatibility at the expense of a slight change to >>> semantics of snapshots. However, if there's a consensus that the >>> semantics are more important than allowing a blanket `GET >>> /db/_all_docs` I think it'd make the most sense to just embrace the >>> pagination APIs that already exist and were written to cover these >>> issues. >>> >>> The only thing I'm not 100% on is how to deal with non-continuous >>> replications. I.e., the older single shot replication. Do we go back >>> with patches to older replicators to allow 4.0 compatibility? Just >>> declare that you have to mediate a replication on the newer of the two >>> CouchDB deployments? Sniff the replicator's UserAgent and behave >>> differently on 4.x for just that special case? >>> >>> Paul >>> >>> On Wed, Jul 15, 2020 at 7:25 PM Adam Kocoloski <kocol...@apache.org> wrote: >>>> >>>> Sorry, I also missed that you quoted this specific bit about eagerly >>>> requesting a new snapshot. Currently the code will just react to the >>>> transaction expiring, then wait till it acquires a new snapshot if >>>> “restart_tx” is set (which can take a couple of milliseconds on a >>>> FoundationDB cluster that is deployed across multiple AZs in a cloud >>>> Region) and then proceed. >>>> >>>> Adam >>>> >>>>> On Jul 15, 2020, at 6:54 PM, Adam Kocoloski <kocol...@apache.org> wrote: >>>>> >>>>> Right now the code has an internal “restart_tx” flag that is used to >>>>> automatically request a new snapshot if the original one expires and >>>>> continue streaming the response. It can be used for all manner of >>>>> multi-row responses, not just _changes. >>>>> >>>>> As this is a pretty big change to the isolation guarantees provided by >>>>> the database Bob volunteered to elevate the issue to the mailing list for >>>>> a deeper discussion. >>>>> >>>>> Cheers, Adam >>>>> >>>>>> On Jul 15, 2020, at 11:38 AM, Joan Touzet <woh...@apache.org> wrote: >>>>>> >>>>>> I'm having trouble following the thread... >>>>>> >>>>>> On 14/07/2020 14:56, Adam Kocoloski wrote: >>>>>>> For cases where you’re not concerned about the snapshot isolation (e.g. >>>>>>> streaming an entire _changes feed), there is a small performance >>>>>>> benefit to requesting a new FDB transaction asynchronously before the >>>>>>> old one actually times out and swapping over to it. That’s a pattern >>>>>>> I’ve seen in other FDB layers but I’m not sure we’ve used it anywhere >>>>>>> in CouchDB yet. >>>>>> >>>>>> How does _changes work right now in the proposed 4.0 code? >>>>>> >>>>>> -Joan >>>>> >>>>