There are two places (at least) to worry about compatibility -- rpc/wire compatibility and client api/binary jar compatibility. In 0.92->0.94 we got wire compatibility (fixed a few like this HBASE-6710) meaning we could heterogeneous a client/master/rs from 0.92 and 0.94 (thus allowing rolling upgrades). There are a few places where we broke api compatibility and did not address it.
I'm facing similar problems currently between 0.94 and 0.95/0.96 -- we've agreed to break wire compat (for the protobuf changes) and we have broken api compatibliity implicitly (HBASE-7215 removed an api used by a dependent project) and explicitly (HBASE-9334/HBASE-9247). We have a patch in flight that can help detects api compatibility breakages now -- see HBASE-9153 and its associated gdoc with a detailed report [1] . Please comment ! After 0.96 goes out we'll likely be stuck with the breakages. Since HBase has many dependencies now we should try to minimize the amount we do this in the future and be strict about our deprecation policies. [1] https://docs.google.com/a/cloudera.com/document/d/14nqQXlIvgJOxGFTfhSoquYzjW8Yx-v9TqTBqRjiB7g0/edit On Wed, Sep 4, 2013 at 3:08 PM, Jean-Daniel Cryans <[email protected]>wrote: > Link to this discussion we had in April about binary compatibility: > http://search-hadoop.com/m/Lg90wHGW981 > > > On Wed, Sep 4, 2013 at 3:04 PM, James Taylor <[email protected]> > wrote: > > > My two cents: if we want to ensure we're backward compatible, we need to > do > > two things: define clear boundaries of the classes and/or packages to > which > > this applies, and run automated tests that verify that backward > > compatibility is maintained across point releases. Or maybe we have this > > and I'm not aware of it? The way that APIs are annotated in the later > > branches as public/private/evolving is a good thing, but unfortunately > > doesn't apply to the 0.94 branch. Maybe that could be back-ported? > > > > James > > > > > > On Wed, Sep 4, 2013 at 2:39 PM, Stack <[email protected]> wrote: > > > > > On Thu, Sep 5, 2013 at 5:00 AM, lars hofhansl <[email protected]> > wrote: > > > > > > > Shrijeet Paliwal just pointed me to this section in the HBase > > bookhttp:// > > > > hbase.apache.org/upgrading.html#upgrade0.94 (thanks Shrijeet): > > > > > > > > > > > > ---- > > > > 1.3. Upgrading from 0.92.x to 0.94.x > > > > We used to think that 0.92 and 0.94 were interface compatible and > that > > > you > > > > can do a rolling upgrade between these versions but then we figured > > that > > > > HBASE-5357 Use builder pattern in HColumnDescriptor changed method > > > > signatures so rather than return void they instead return > > > > HColumnDescriptor. This will throw > > > > java.lang.NoSuchMethodError: > > > > org.apache.hadoop.hbase.HColumnDescriptor.setMaxVersions(I)V > > > > .... so 0.92 and 0.94 are NOT compatible. You cannot do a rolling > > > upgrade > > > > between them. > > > > ---- > > > > > > > > > > > > Is that statement actually correct? The issue here is binary code > > > > compatibility, which we indeed do not support, but which does not > > impede > > > > rolling upgrades between versions (as long as we're wire compatible > > > between > > > > releases, which we are). > > > > > > > > > > The statement overreaches with its absolute that the two are NOT > > > compatible. If someone suggests text, I'll update the refguide. > > > St.Ack > > > > > > -- // Jonathan Hsieh (shay) // Software Engineer, Cloudera // [email protected]
