All,

I'd like to start the discussion about where we go after we release 1.6.0. We have a lot of great ideas that people have outlined that together, I think, would make a really compelling version of Accumulo.

Besides a set of new features/changes, we've also talked about changing how we version the software in such a way that would better align with how we want to support it and the guarantees we want to provide. Some of these will require additional discussion, but I believe there are a few things we could knock out ahead of time that will help in these later discussions (especially those regarding API, data and wire compatitbility).

The easy one: is everyone happy with calling the next "major" version after 1.6.0, "2.0.0"? I believe that reclaiming that extra digit in our current version string (the "1" in 1.6.0) will help alleviate many of the problems that we've been facing in where code is "allowed" to go.

Going a little deeper, I think we can also agree to some *general* guidelines about what these numbers mean, following what semantic versioning generally outlines based on what we've been trying to follow to date. The major (most-significant) number refers to releases in which very impactful changes were made to the codebase. The minor (middle) number refers to changes/improvements which are lesser in nature, but do not represent a major shift in how to use or administer Accumulo. The bugix (least-significant) number should *only* contain the least impactful change which address some breakage in the code.

- an important point that needs clarification is how we draw the line between which non-breaking changes can be put in a minor release and which must be introduced in a major release.

Bugfix versions should not make any compatibility changes at all - fix the bug as it stands. Minor versions can introduce additions to the public API, storage or wire implementations, but they should be done in a backwards compatible way. Major versions can remove deprecated public API calls. Data compatibility can be met with some upgrade process instead of full compatibility with the previous versions. Wire compatibility does not need to be guaranteed across major versions if this is not possible.

Then, we can target major releases ~yearly, minor releases every few months, and bugfix releases in order of weeks based on severity. I would also suggest that we reduce our testing burden for bugfixes to be more focused on verifying that the bugs have been identified in tests and verified as fixed.

This got a lot longer than I wanted, so I'm sorry for that. Please feel free to suggest pruning to this list so we can have a discussion that nets some actual results.

- Josh

Reply via email to