-AsyncHBase 1.5.0-rc1 available for download and testing (HBase 0.96 compatibility inside)
tsuna 2013-10-29, 04:57
The first release candidate of AsyncHBase "post-singularity" is now
available for download. AsyncHBase remains true to its initial
promise: the API is still backward compatible, but under the hood it
continues to work with all production releases of HBase of the past
This release was tested against HBase 0.89, 0.90, 0.92, 0.94, and
0.96. While 0.2x probably still works, I didn't take the time to test
it, because… well, really, you shouldn't be using such ancient version
of HBase. Really.
The Maven build was broken by the addition of protobufs in the build
process. Any Maven fans out there who would like to help fix it?
Without it I can't easily publish new artifacts to Maven repo.
Here is the relevant excerpt of the NEWS file:
This release introduces compatibility with HBase 0.96 and up, and adds
a dependency on Google's protobuf-java library. Note that HBase 0.95.x,
which was a "developer preview" release train, is NOT supported.
Please note that support for explicit row locks has been removed from
HBase 0.95 and up. While the classes and functionality remain usable
when using earlier versions of HBase, an `UnsupportedOperationException'
will be raised if one attempt to send a `RowLockRequest' to a newer
version of HBase.
Please note that while AsyncHBase never made any guarantees about the
exact order in which multiple edits are applied within a batch, the order
is now different when talking to HBase 0.96 and up.
New public APIs:
- Scanners can now use a variety of different filters via the new
`ScanFilter' interfaces and its various implementations.
- It's possible to specify specific families to scan via `setFamilies'.
- Scanners can put an upper bound on the amount of data fetched by RPC
via the new `setMaxNumKeyValues' (works with HBase 0.96 and up only).
- HBaseRpc now has a `failfast()' and a `setFailfast(boolean)' pair
of methods to allow RPCs to fail as soon as their encounter an
issue out of the ordinary (e.g. not just a `NotSuchRegionException').
- `GetRequest' has additional constructor overloads that make its API
more uniform with that of other RPCs.
Noteworthy bug fixes:
- DeleteRequest wasn't honoring its timestamp if one was given (#58).
- When a connection attempt fails, buffered RPCs weren't cleaned up
or retried properly.
- When one RPC fails because of another one (e.g. we fail to send an
RPC because a META lookup failed), the asynchronous exception that
is given to the callback now properly carries the original RPC that
- There was an unlikely race condition that could cause an NPE while
trying to retrieve the ROOT region from ZooKeeper.
Pre-compiled JAR: http://tsunanet.net/~tsuna/asynchbase/asynchbase-1.5.0-rc1.jar
$ git diff --stat v1.4.1.. | tail -n 1
70 files changed, 4824 insertions(+), 487 deletions(-)
$ git shortlog v1.4.1..
Andrey Stepachev (1):
Add support for multiple families/qualifiers in scanners.
Benoit Sigoure (65):
Add Viral to AUTHORS for his work on ScanFilter.
Document ScanFilter and prevent it from being subclassed externally.
Convert the regexp key filtering mechanism to the ScanFilter.
Document how to run integration tests.
Enhance filters a bit and add integration tests.
Add a new helper function to produce better errors during tests.
Mention new scanner filters in NEWS.
Allow RPCs to fail-fast.
Update NEWS / THANKS.
Update suasync to 1.3.2.
Properly clean up when connection fails before being opened.
Properly report which RPC has failed in HasFailedRpcException.
Fix a small race condition when looking up the ROOT region.
Add HBase protocol buffers to the compilation process.
De-serialize the HBase 0.95+ znode that points to META.
Fix the process of META lookups for HBase 0.95 and up.
Send the proper "hello" message to HBase 0.95 and up.
Remove some unused helper code to create buffers.
Update the per-RPC header for HBase 0.95+.
Refactor how RPC objects know what RPC method they're for.
Compile Java code generated from protobuf files separately.
Kill some trailing whitespaces.
Add a helper function to de-serialize Protocol Buffer VarInt32.
Add a semi-evil helper class to avoid copying byte arrays from protobufs.
De-serialize RPC responses from HBase 0.95+.
Add a helper function to de-serialize protocol buffers.
Handle META lookups with 0.95+.
Dedup byte arrays when deserializing KeyValues from 0.95+.
Make sure we have all the data we need before de-serializing.
Convert GetRequest to HBase 0.95+.
Convert AtomicIncrementRequest to HBase 0.95+.
Make the run target depend on the jar.
Sync protobuf files with changes made in the HBase 0.95 branch.
Add some make variables for the compilers used.
Add support for "cell blocks".
Avoid unnecessary string copies on each RPC.
Convert scanners and filters to HBase 0.95+.
Add a missing accessor to retrieve the max number of KVs on a Scanner.
Expose HBase 0.95's ability to limit the number of bytes
returned by a scanner.
Log the channel when logging outgoing RPCs.
Convert single-put RPCs to HBase 0.95+.
Ensure that RPCs that shouldn't get cell blocks don't.
Convert the CAS RPC to HBase 0.95+.
Convert single-Delete RPCs to HBase 0.95+.
Catch up with the protobuf changes made in 0.96
Explicit row locks are no longer supported in HBase 0.95 and up.
The 'getProtocolVersion' RPC no longer exists in 0.95+.
Add support for batched edits with HBase 0.96+.
Optimize multi-action a bit with HBase 0.95+ by sorting less.
Remove some warnings that come up when compiling