There are a two things I'd like to break down here:

1. The non-functional behaviour of the API is changing. What was hopefully a 
short request could now block for much longer as the client must wait for a 
write to happen. Among other things, this affects UI latency, as well as the 
power consumption of low-power devices. Silently changing this behaviour is 
very hard to debug client side. This is an example where the new behaviour may 
not be better for some use-cases.
2. The request is documented as returning 202 only. We are proposing changing 
that API contract.

IMO, the HTTP response code is a fundamental part of any HTTP API, and it's 
reasonable for clients to listen on the 202 that is documented as the only 
possible response code in this scenario. For example, the client might want to 
be sure CouchDB is interpreting the argument they are sending correctly.

On the question of accepting any 2XX response being desirable, I would agree 
that perhaps it is better to be liberal in what you accept, but we need to 
therefore be strict in what we send. CouchDB isn't great at returning 400 when 
there are mutually exclusive parameters supplied in a request, for example.

If the only reason for retaining this setting is to maintain backwards API 
compatibility, and we are not worried about API purity, returning 202 seems the 
appropriate approach to me; it may not be "correct" but it is seemingly the way 
of achieving the stated goal of silently dropping the param in a safe(ish) 
manner.

-- 
Mike.

On Wed, 23 Oct 2019, at 13:32, Jan Lehnardt wrote:
> 
> 
> > On 23. Oct 2019, at 14:26, Arturo GARCIA-VARGAS <art...@ficuslabs.com> 
> > wrote:
> > 
> > I guess the way I see it (and where I may be wrong) is that batch=ok will 
> > become a deprecated use of the API.  And if we are to support a deprecated 
> > behaviour:
> > 
> > 1. Behave as before because you are nice, via an explicit config enable; or
> 
> The point is, we would be behaving “better than before”
> 
> > 2. Stop doing it because it is well..., deprecated.  Update your client.
> 
> …and we don’t want to break client software, when we don’t have to.
> 
> Best
> Jan
> —
> > 
> > -A.
> > 
> > Again my opinion :-)
> > 
> > On 23/10/2019 13:19, Jan Lehnardt wrote:
> >>> On 23. Oct 2019, at 13:56, Arturo GARCIA-VARGAS <art...@ficuslabs.com> 
> >>> wrote:
> >>> 
> >>> Maybe my point is not coming across correctly.
> >>> 
> >>> By reading the docs, a consumer would match *explicitly* to a 202 
> >>> response, to acknowledge success.
> >>> 
> >>> We better be consistent and either hard-break this behaviour, or behave 
> >>> as before, but not silently switch the behaviour, even more if the 
> >>> operation behind is a no-op.
> >> I think I do understand your point, however, the nature of this API allows 
> >> us to argue for the best of both worlds: batch=ok today says that the 
> >> client is fine with letting CouchDB decide when to fully commit data. 
> >> Depending on the circumstances, that decision could be “immediately”, or 
> >> it could be “some time later”. The proposal here now suggests that we 
> >> switch this to be always “immediately”, but regardless of batch=ok being 
> >> present or not, the client doesn’t really care about that. So I don’t 
> >> think there is a good reason for suggesting a hard break.
> >> Best
> >> Jan
> >> —
> >>> 
> >>> Well, my opinion.
> >>> 
> >>> On 23/10/2019 12:50, Jan Lehnardt wrote:
> >>>>> On 23. Oct 2019, at 13:32, Arturo GARCIA-VARGAS <art...@ficuslabs.com> 
> >>>>> wrote:
> >>>>> 
> >>>>> Well, a consumer would be explicitly waiting the the accept response 
> >>>>> code like responseCode === '202' as a sign of "success".  We have 
> >>>>> silently broken the consumer.
> >>>>> 
> >>>>> Granted a consumer should cater for a '201' response, but the docs 
> >>>>> explicitly say you do not get a 201 when using batch=ok.
> >>>> A consumer that can’t deal with different HTTP response codes already 
> >>>> isn’t doing HTTP correctly. They could already equally receive a 400, 
> >>>> 401, 500 or any other variety or responses, so I think we’re fine here.
> >>>>> 
> >>>>> On 23/10/2019 12:29, Jan Lehnardt wrote:
> >>>>>>> On 23. Oct 2019, at 13:25, Arturo GARCIA-VARGAS 
> >>>>>>> <art...@ficuslabs.com> wrote:
> >>>>>>> 
> >>>>>>> My opinion....
> >>>>>>> 
> >>>>>>> On 23/10/2019 12:15, Jan Lehnardt wrote:
> >>>>>>>> 
> >>>>>>>>> On 23. Oct 2019, at 12:40, Robert Samuel Newson 
> >>>>>>>>> <rnew...@apache.org> wrote:
> >>>>>>>>> 
> >>>>>>>>> Hi,
> >>>>>>>>> 
> >>>>>>>>> Just confirming my position on this. We should treat a request with 
> >>>>>>>>> batch=ok as if the setting was not there. That is, make the same 
> >>>>>>>>> durable commit as normal. We should therefore send a 201 Created 
> >>>>>>>>> response code. We should continue to validate the batch setting (it 
> >>>>>>>>> can be absent or it can be "ok" but every other value is a 400 Bad 
> >>>>>>>>> Request).
> >>>>>>>> 
> >>>>>>> -1 from me, we should:
> >>>>>>> 1. Drop it and be consistent with the API.  Maybe warning of 
> >>>>>>> deprecation in couchdb-3?
> >>>>>>> 2. Enable same behaviour as before (accepted) with a no-op and config 
> >>>>>>> file parameter.
> >>>>>>> 
> >>>>>>> But not modify the behaviour of the API
> >>>>>> Can you explain why?
> >>>>>> The proposed behaviour is no worse than what the option enables, and 
> >>>>>> it ensures that existing software continues to work without (much) 
> >>>>>> change.
> >>>>>> API purity for the sake of it is not really a goal here.
> >>>>>> Best
> >>>>>> Jan
> 
> -- 
> Professional Support for Apache CouchDB:
> https://neighbourhood.ie/couchdb-support/
> 
>

Reply via email to