Looks like the formatting didn't come through. Please refer to the linked 
document.
Thanks.
-- Lars
      From: lars hofhansl <[email protected]>
 To: Dev <[email protected]> 
 Sent: Saturday, November 15, 2014 5:06 PM
 Subject: HBase - Semantic Versioning
   
As we approach the released of HBase 1.0.0, your PMC has been working hard on 
documenting the exact compatibility guarantees we plan to support for HBase 
versions going forward.
You can find the current version of the document here:
https://docs.google.com/document/d/1p5pP7v2OuzSSaomK2S2v7sfKky1Hex6OqwsJO0sZTUY/edit?usp=sharing

For convenience I am also including the entire text at the end of this email 
(hopefully the formatting comes through).
Please have a look and let us know what you think.While we cannot possibly 
include provisions for every corner case, this should be as comprehensive as 
possible.Note that the semantic versioning document is itself semantically 
versioned :)
Thanks.
-- Lars
--------------------------------------

HBase Semantic Versioning - 1.0.4As HBase approaches its 1.0.0 version we 
should start using semantic versioning.In addition to the usual API versioning 
considerations HBase has other compatibility dimensions that we need to 
consider.
Compatibility Dimensions
  
  - Client-Server wire protocol compatibility
  
  - Allows updating client and server out of sync.
  - We could only allow upgrading the server first. I.e. the server would be 
backward compatible to an old client, that way new APIs are OK.
  - Example: A user should be able to use an old client to connect to an 
upgraded cluster.
  
  - Server-Server protocol compatibility 
  
  - Servers of different versions can co-exist in the same cluster.
  - The wire protocol between servers is compatible.
  - Workers for distributed tasks, such as replication and log splitting, can 
co-exist in the same cluster.
  - Dependent protocols (such as using ZK for coordination) will also not be 
changed.
  - Example: A user can perform a rolling upgrade.
  
  - File format compatibility
  
  - Support file formats backward and forward compatible
  - Example: File, ZK encoding, directory layout is upgraded automatically as 
part of an HBase upgrade. User can rollback to the older version and everything 
will continue to work.
  
  - Client API compatibility
  
  - Allow changing or removing existing client APIs.
  - An API needs to deprecated for a major version before we will change/remove 
it.
  - Example: A user using a newly deprecated api does not need to modify 
application code with hbase api calls until the next major version.
  
  - Client Binary compatibility
  
  - Old client code can run unchanged (no recompilation needed) against new 
jars.
  - Example: Old compiled client code will work unchanged with the new jars.
  
  - Server-Side Limited API compatibility (taken from Hadoop)
  
  - Internal APIs are marked as Stable, Evolving, or Unstable
  - This implies binary compatibility for coprocessors and plugins (pluggable 
classes, including replication) as long as these are only using marked 
interfaces/classes.
  - Example: Old compiled Coprocessor, Filter, or Plugin code will work 
unchanged with the new jars.
  
  - Dependency Compatibility
  
  - An upgrade of HBase will not require an incompatible upgrade of a dependent 
project, including the Java runtime.
  - Example: An upgrade of Hadoop will not invalidate any of the 
compatibilities guarantees we made.
  
  - Operational Compatibility
  
  - Metric changes
  - Behavioral changes of services
  - Web page APIs

Summary
  
  - A patch upgrade is a drop-in replacement. Any change that is not Java 
binary compatible would not be allowed.
  - A minor upgrade requires no application/client code modification. Ideally 
it would be a drop-in replacement but client code, coprocessors, filters, etc 
might have to be recompiled if new jars are used.
  - A major upgrade allows the HBase community to make breaking changes.


Compatibility Matrix

| 
 | Major | Minor | Patch |
| Client-Server wire Compatibility | N | Y | Y |
| Server-Server Compatibility | N | Y | Y |
| File Format Compatibility | N | Y | Y |
| Client API Compatibility | N | Y | Y |
| Client Binary Compatibility | N | N | Y |
| Server-Side Limited API Compatibility | 
 | 
 | 
 |
|    
  - Stable
 | N | Y | Y |
|    
  - Evolving
 | N | N | Y |
|    
  - Unstable
 | N | N | N |
| Dependency Compatibility | N | Y | Y |
| Operational Compatibility | N | N | Y |

(Y means we support the compatibility. N means we can break it.)



  

Reply via email to