Agreed. Sent from my iPhone
> On 22 Jul 2014, at 07:55, "Eli Stevens (Gmail)" <wickedg...@gmail.com> wrote: > > One quick thought: > > Clustered couchdb has been a while coming, and still has a while to go > before it's ready; I would suggest not saddling the release with > additional changes or requirements, especially if they're the type > that can be bikeshedded to death (stuff like API changes can take a > while to sort out). > > I'd much rather see CouchDB 4.0 sometime next year than have to wait > until next year for 2.0. > > Cheers, > Eli > > On Sat, Jul 19, 2014 at 5:23 AM, Robert Samuel Newson > <rnew...@apache.org> wrote: >> >> What important tools or browsers still need text/plain for our json >> responses that justify the mismatch? >> >> >>> On 19 Jul 2014, at 11:30, Jan Lehnardt <j...@apache.org> wrote: >>> >>> >>>> On 19 Jul 2014, at 12:27 , Robert Samuel Newson <rnew...@apache.org> wrote: >>>> >>>> I agree with you on the category split and, obviously, that we can make a >>>> 3.0 whenever we like, since it only indicates compatibility breaks. >>>> >>>> MVCC for _security will be great since it will enable us to heal _security >>>> writes during partitions with the same logic we use for documents. >>>> Cloudant worked around (hacked around) that problem for a long time but >>>> we’ve finally done the work to add MVCC for reals, so it’ll be nice to >>>> bring that enhancement to CouchDB officially. >>> >>> Yeah, I don’t see a reason not to get this in for 2.0. >>> >>> >>>> I don’t think defaulting to conflicts=true is quite the right change. I >>>> was thinking that conflicted document would return a 300 Multiple Choices >>>> instead of a 200 OK (the response body format TBD but imagine a JSON array >>>> of each conflicting leaf revision). I agree that a change like that will >>>> break every client, but that would be the intention. A CouchDB 3.0 would >>>> be much more forthcoming about its fundamental architecture and would >>>> largely eschew the attempts to present an arbitrary "winning" revision. >>> >>> Right, this was just meant as a possible compromise to get a more >>> first-class-conflict API without making this 3-rd category change. Happy to >>> abandon it :) >>> >>> >>>> One further thought occurs, could we totally ditch the code that returns >>>> "text/plain" content-type? All that "are you a browser?" logic? It made >>>> sense at the time, but I feel it confuses more than it helps today. >>> >>> I use that all the time :) >>> >>> Best >>> Jan >>> -- >>> >>> >>> >>>> >>>> B. >>>> >>>> >>>>> On 19 Jul 2014, at 10:50, Jan Lehnardt <j...@apache.org> wrote: >>>>> >>>>> >>>>>> On 19 Jul 2014, at 10:38 , Robert Samuel Newson <rnew...@apache.org> >>>>>> wrote: >>>>>> >>>>>> >>>>>> I think this is backward. We are not proposing API changes "just >>>>>> because" BigCouch happens to make them. >>>>>> >>>>>> Given that we have to bump the major version number, we are afforded an >>>>>> opportunity to improve our API in significant ways for the first time >>>>>> since 1.0. We all know there are warts to be fixed. The question is what >>>>>> to fix with 2.0, seeing as we’re making one. >>>>> >>>>> That is what I meant to express, with the caveat that we should be >>>>> careful, taking a conservative stance, so we can meet in the middle. >>>>> >>>>> >>>>>> I would also hate to see low adoption of CouchDB 2.0 if we change too >>>>>> much, because I’ve spent quite a bit of time trying to make it happen. >>>>>> >>>>>> Is there nothing, besides what comes with the BigCouch merge, that we >>>>>> wouldn’t want to change for 2.0? At least the ability to add metadata >>>>>> without breaking 2.0 compliant clients and libraries, I hope? >>>>> >>>>> >>>>> Most apps should continue to work on CouchDB 2.0. >>>>> >>>>> Specifically, the regular document CRUD cycle should work as-is. >>>>> Especially moving things around in the JSON usually goes further >>>>> than the HTTP/Couch layer of most apps, as it is usually passed >>>>> down into the rest of the app, while HTTP specifics are kept on >>>>> the outside. >>>>> >>>>> In that scenario, adding properties should be easier to do than >>>>> removing them (e.g. _conflicts could be standard, but renaming >>>>> _rev to _mvcc would break things more significantly), although >>>>> Bob mentioned the replicator compatibility as a major concern, >>>>> so we need to make sure this is doable. >>>>> >>>>> My main point here is to start a discussion about how we would >>>>> go about evolving this down the road and my suggestion was the >>>>> separate API endpoint that we can mess with at will and gradually >>>>> introduce until we switch at a later time when we feel confident >>>>> that people have migrated, or a solid compatibility API is available. >>>>> >>>>> I see us having three discussions: >>>>> >>>>> 1. What do we want to fix/break for 2.0? >>>>> 2. How do we introduce fixes/breaks that we aren’t comfortable doing for >>>>> 2.0? >>>>> 3. What do we want to fix/break for later versions? >>>>> >>>>> >>>>> From this thread, I’d handwavingly suggest these fall into category 1: >>>>> (as per the “most apps should just continue to work”-mantra): >>>>> >>>>> - timeout and heartbeat params for /_db_updates works in different way >>>>> then the same parameters for changes feed; >>>>> - we need to find the way to pass open_revs in POST body instead of >>>>> tweaking max URL param; >>>>> - we have /db/_revs_diff and /db/_revs_missing endpoints which are >>>>> doing the same job. Well, the latter is only used for pre-1.1 CouchDB >>>>> replicator. >>>>> - /db/doc accepts conflicts, deleted_conflicts and revs params. In the >>>>> same time we provides meta one which includes each of specified. >>>>> - make eventsource feed to follow the specification format more better >>>>> then it does now >>>>> - MVCC for /db/_security and allow atomic changes for admins/members only >>>>> - a variant of “Changing the default respones for conflicts to include all >>>>> versions (or no version).” where ?conflicts=BOOL defaults to true, so we >>>>> get an additional _conflicts: [] member on regular GETs (if there are >>>>> conflicts), but not the conflicting versions themselves (see above note >>>>> about additional doc members) >>>>> - Fix the list API (inside couchjs) so that its a pure callback like >>>>> everything else. >>>>> - 'JSONP responses should be sent with a "application/javascript"' >>>>> >>>>> >>>>> These fall into category 3: >>>>> >>>>> - Change _rev to _mvcc or other. >>>>> - Move document metadata elsewhere (sub-object, headers, whatever) >>>>> - Changing the default respones for conflicts to include all versions >>>>> (or no version). >>>>> - more RESTy API (move /_all_docs to /, db info to _info etc), >>>>> self-defining REST API >>>>> - don’t pollute top level namespace (e.g. /database moves to /db/database) >>>>> >>>>> This isn’t exhaustive, and we don’t yet know the answers to some of them. >>>>> >>>>> As a repeat: with our new understanding of SemVer, we are free to ship >>>>> CouchDB >>>>> 3.0 a month after 2.0, if we really want to. We are not beholden to >>>>> marketing >>>>> version numbers after 2.0 (strictly, we aren’t for 2.0 either, but it is >>>>> rather convenient :). >>>>> >>>>> * * * >>>>> >>>>> The view server protocol change suggested by Samuel is IMHO an internal >>>>> change that should not break BC unless people rely on implementation >>>>> details. >>>>> >>>>> >>>>> * * * >>>>> >>>>> Most apps should continue to work on CouchDB 2.0. >>>>> >>>>> Jan >>>>> -- >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> Adding a new top-level _-prefixed field in couchdb causes the replicator >>>>>> to crash hard, this is unacceptable brittle imo. >>>>> >>>>>> >>>>>> B. >>>>>> >>>>>>> On 18 Jul 2014, at 21:15, Jan Lehnardt <j...@apache.org> wrote: >>>>>>> >>>>>>> I’m major -1 on substantial API changes *just* because we are having >>>>>>> some >>>>>>> by necessity of getting BigCouch in. >>>>>>> >>>>>>> The minor improvements mentioned previously in this thread sound >>>>>>> reasonable, >>>>>>> but changing the main JSON format seems like a rather bad idea as it >>>>>>> will >>>>>>> just break all clients. While the scenario is a little different, I’d >>>>>>> like to >>>>>>> avoid a Python 3 kind of situation (I think CouchDB 2.0 has more to >>>>>>> offer over >>>>>>> 1.0 than Python 3 had over 2, but still, there is no need to make this >>>>>>> harder >>>>>>> for our users, if we don’t have to). >>>>>>> >>>>>>> That said, we likely want to evolve the API at some point and I think >>>>>>> we should >>>>>>> nail down a strategy on *how* to do that, before getting into the >>>>>>> details of >>>>>>> what should change. >>>>>>> >>>>>>> One option, and I haven’t thought this through, would be to use >>>>>>> separate ports >>>>>>> for a new API endpoint that we can evolve while keeping the current >>>>>>> one. And >>>>>>> we can do the deprecation and switch dance some time in the future. We >>>>>>> could >>>>>>> even try multiple competing APIs, even non HTTP APIs (all things, I’d >>>>>>> love to >>>>>>> see, so we can learn from them). Of course there is a certain overhead >>>>>>> in >>>>>>> maintaining this all, and I don’t know if there are any roadblocks in >>>>>>> the way >>>>>>> BigCouch works today for implementing this. >>>>>>> >>>>>>> Best >>>>>>> Jan >>>>>>> -- >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> On 17 Jul 2014, at 21:03 , Russell Branca <chewbra...@apache.org> >>>>>>>> wrote: >>>>>>>> >>>>>>>> I would also love to see _rev renamed, and I think it's a good >>>>>>>> opportunity to flip around all the meta info as well. I'm still >>>>>>>> partial to moving the relevant metadata into the headers, and no >>>>>>>> longer including any _* fields in the doc, but I know there are >>>>>>>> proponents on both sides of the coin there. The most recent proposal I >>>>>>>> could find is to move all the metadata into a '_' field [1]. In 2.0 I >>>>>>>> would like to see us move all metadata into headers or into the '_' >>>>>>>> field, and rename 'rev'. There's a lot of code overlap for the two so >>>>>>>> it seems like an opportune time to do it. >>>>>>>> >>>>>>>> I wonder if it's reasonable to make the use of a '_' field or exposed >>>>>>>> through headers configurable. I'm not sure it's a great idea to do so, >>>>>>>> but it's at least worth thinking about. >>>>>>>> >>>>>>>> Exposing conflicts by default is another thing I'm keen on. The >>>>>>>> question is how to make it "fail" loudly so that client libraries >>>>>>>> don't just think it's the document body. An aggressive approach send a >>>>>>>> list of conflict revs rather than a doc object which will break all >>>>>>>> existing parsers and require users to deal with. Then if you want a >>>>>>>> particular rev, you'll need to specify it in the request. >>>>>>>> >>>>>>>> We could also cleanup the API endpoints to make them more RESTful. IMO >>>>>>>> things like _all_dbs and _all_docs should be the top level endpoints >>>>>>>> and the current info endpoints moved to _info or some such. >>>>>>>> >>>>>>>> Along the lines of API cleanup is the capabilities engine. I think >>>>>>>> this would be a great thing to land, and if done properly could be a >>>>>>>> self defining REST endpoint showing all the things the server is >>>>>>>> capable of and how to reach them. >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -Russell >>>>>>>> >>>>>>>> >>>>>>>> [1] >>>>>>>> http://mail-archives.apache.org/mod_mbox/couchdb-dev/201312.mbox/%3c529de44c.4090...@bigbluehat.com%3E >>>>>>>> >>>>>>>> On Thu, Jul 17, 2014 at 2:14 AM, Robert Samuel Newson >>>>>>>> <rnew...@apache.org> wrote: >>>>>>>>> Great point, +1 to just making that change on master right now. >>>>>>>>> >>>>>>>>> B. >>>>>>>>> >>>>>>>>>> On 16 Jul 2014, at 22:35, Robert Kowalski <r...@kowalski.gd> wrote: >>>>>>>>>> >>>>>>>>>> I would like to see 'JSONP responses should be sent with a >>>>>>>>>> "application/javascript"' >>>>>>>>>> (https://github.com/apache/couchdb/pull/236) >>>>>>>>>> beside the two merges in the 2.0 release - it is a small, but >>>>>>>>>> breaking >>>>>>>>>> change and the original issue is flying around in Jira for years. >>>>>>>>>> >>>>>>>>>> Best, >>>>>>>>>> Robert >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> 2014-07-13 22:17 GMT+02:00 Robert Samuel Newson <rnew...@apache.org>: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Since we follow semantic versioning, the only meaning behind naming >>>>>>>>>>> our >>>>>>>>>>> next release 2.0 and not 1.7 is that it contains backwards >>>>>>>>>>> incompatible >>>>>>>>>>> changes. >>>>>>>>>>> >>>>>>>>>>> It’s for the CouchDB community as a whole to determine what is and >>>>>>>>>>> isn’t >>>>>>>>>>> in a release. Certainly merging in bigcouch and rcouch are a huge >>>>>>>>>>> part of >>>>>>>>>>> the 2.0 release, but they aren’t necessarily the only things. If >>>>>>>>>>> they >>>>>>>>>>> hadn’t changed the API in incompatible ways, they wouldn’t cause a >>>>>>>>>>> major >>>>>>>>>>> version bump. >>>>>>>>>>> >>>>>>>>>>> With that said then, I’m interested in hearing what else, besides >>>>>>>>>>> the two >>>>>>>>>>> merges, we feel we want to take on in our first major revision bump >>>>>>>>>>> in >>>>>>>>>>> approximately forever? At minimum, I would like to see a change >>>>>>>>>>> that allows >>>>>>>>>>> us to use versions of spidermonkey released after 1.8.5, whatever >>>>>>>>>>> that >>>>>>>>>>> change might be. >>>>>>>>>>> >>>>>>>>>>> B. >>>>>>>>>>> >>>>>>>>>>>> On 13 Jul 2014, at 20:31, Joan Touzet <woh...@apache.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Improving the view server protocol is a great idea, but it is >>>>>>>>>>>> appropriate >>>>>>>>>>>> for a 2.0 timeframe? I would think it would make more sense in a >>>>>>>>>>>> 3.0 >>>>>>>>>>>> timeframe, given 2.0 is all about merging forks, not writing new >>>>>>>>>>>> features >>>>>>>>>>>> entirely from scratch. >>>>>>>>>>>> >>>>>>>>>>>> -Joan >>>>>>>>>>>> >>>>>>>>>>>> ----- Original Message ----- >>>>>>>>>>>> From: "Robert Samuel Newson" <rnew...@apache.org> >>>>>>>>>>>> To: dev@couchdb.apache.org >>>>>>>>>>>> Sent: Sunday, July 13, 2014 8:52:40 AM >>>>>>>>>>>> Subject: Re: CouchDB 2.0: breaking the backward compatibility >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Adding mvcc for _security is a great idea (happily, Cloudant have >>>>>>>>>>>> done >>>>>>>>>>> so very recently, so I will be pulling that work over soon). >>>>>>>>>>>> >>>>>>>>>>>> A better view server protocol is also a great idea. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> On 13 Jul 2014, at 13:13, Samuel Williams < >>>>>>>>>>>> space.ship.travel...@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> On 13/07/14 23:47, Alexander Shorin wrote: >>>>>>>>>>>>>> Our view server is compiles functions on each view index update >>>>>>>>>>>>>> instead of reusing inner cache. This is because of out-dated >>>>>>>>>>>>>> protocol: >>>>>>>>>>>>>> others design function are works differently from views. While >>>>>>>>>>>>>> it's >>>>>>>>>>>>>> good to change and improve query server protocol completely, >>>>>>>>>>>>>> this task >>>>>>>>>>>>>> requires more time to be done. We should have a least plan B to >>>>>>>>>>>>>> do >>>>>>>>>>>>>> small steps in good direction. >>>>>>>>>>>>> As already suggested, here is my proposal for 2.0 view/query >>>>>>>>>>>>> server: >>>>>>>>>>> https://docs.google.com/document/d/1JtfvCpNB9pRQyLhS5KkkEdJ-ghSCv89xnw5HDMTCsp8/edit >>>>>>>>>>>>> >>>>>>>>>>>>> I welcome people to suggest improvements/changes/ideas. >>>>>>>>>>>>> >>>>>>>>>>>>> Kind regards, >>>>>>>>>>>>> Samuel >>