Return-Path: Delivered-To: apmail-incubator-cassandra-dev-archive@minotaur.apache.org Received: (qmail 55576 invoked from network); 11 Jan 2010 18:03:41 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 11 Jan 2010 18:03:41 -0000 Received: (qmail 31059 invoked by uid 500); 11 Jan 2010 18:03:41 -0000 Delivered-To: apmail-incubator-cassandra-dev-archive@incubator.apache.org Received: (qmail 31026 invoked by uid 500); 11 Jan 2010 18:03:41 -0000 Mailing-List: contact cassandra-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cassandra-dev@incubator.apache.org Delivered-To: mailing list cassandra-dev@incubator.apache.org Received: (qmail 31015 invoked by uid 99); 11 Jan 2010 18:03:41 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Jan 2010 18:03:41 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of ryan@twitter.com designates 209.85.160.41 as permitted sender) Received: from [209.85.160.41] (HELO mail-pw0-f41.google.com) (209.85.160.41) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Jan 2010 18:03:33 +0000 Received: by pwj4 with SMTP id 4so1658792pwj.20 for ; Mon, 11 Jan 2010 10:03:11 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.119.7 with SMTP id r7mr4960013wfc.261.1263232991318; Mon, 11 Jan 2010 10:03:11 -0800 (PST) In-Reply-To: References: Date: Mon, 11 Jan 2010 10:03:11 -0800 Message-ID: <7c5131fa1001111003k61900c72x336bf3d5b213de39@mail.gmail.com> Subject: Re: release policy From: Ryan King To: cassandra-dev@incubator.apache.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org On Fri, Jan 8, 2010 at 11:47 AM, Jonathan Ellis wrote: > I think we have enough people using Cassandra in production now that > it would be useful to be explicit about the kinds of changes we will > make between major and minor releases. =A0Here is one possibility: > > Minor releases (e.g. 0.4.0 -> 0.4.1): minor releases will contain bug > fixes only -- no new functionality, full disk and network-level > compatibility. =A0If bugs cannot be fixed without adding new > functionality or breaking compatibility, then it should probably not > be fixed in the stable branch unless it is very severe. =A0This is > similar to postgresql's minor release policy, and I really like it for > two reasons: > =A0(1) it makes a clear line of what people can expect in minor releases > =A0(2) making changes breaks stuff. =A0That's just how software is, so > the less we change in a stable branch the more likely it is that we > won't introduce regressions. =A0With our community's most enthusiastic > testers also the most interested in trunk rather than older releases, > it behooves us to be careful. > > Major releases (e.g. 0.5 -> 0.6): the compatibility story is going to > be more nuanced: > =A0(1) sstable compatibility: may change. =A0If it does, we will notify > you in NEWS.txt and provide some method of upgrading without > dump-and-reload (and hopefully without downtime while a conversion > tool grinds away from old to new format, but I don't think we can > promise that with 100% certainty at this point). > =A0(2) commitlog compatibility: may change. =A0If it does, we will notify > you in NEWS.txt that you need to "nodeprobe flush" before upgrading, > as was the case for 0.4 -> 0.5. Both of the above are fine. I think we could even tolerate having to run an upgrade tool with a node, as long as we can do it one at a time and as long as... > =A0(3) network compatibility (from one cluster node to another): may > change. =A0If it does, we will notify you in NEWS.txt that you need to > upgrade the whole cluster at once, as was the case for 0.4 -> 0.5. ...the network compat doesn't change at the same time. If both the disk format and network protocol change in the same release, we can't easy do a rolling restart/upgrade. In general, doing full cluster upgrades at once is going to be prohibitively difficult for us. In addition to the disruption it would cause for clients, we wouldn't want to throw away all of our in-process caches at once. If we want the flexibility of changing the internal network protocol, we should move towards an rpc framework that can tolerate upgrades. > =A0(4) thrift api: We will make our best efforts to keep deprecated > methods will be available for one major release before being removed. > (e.g., get_key_range is deprecated in 0.5; it will be removed in the > next). =A0I do not anticipate having to make the kind of changes we made > from 0.3 to 0.4 (where we redid basically all the thrift structures, > and there was really no sane way to provide backwards compatibility), > but if we do we will notify you in NEWS.txt. > =A0(5) StorageProxy "fat client" api: This is still considered "mostly > an internal api," to be used if you are brave and need the extra > performance badly enough. :) =A0We probably won't render it > unrecognizably different since it's a fairly one-to-one mapping to the > thrift api, which has the above compatibility policy, but no promises. > > Thoughts? =A0(Separate threads to follow re "the next major release > after 0.5 specifically," and "1.0.") > > -Jonathan >