after 3 months in RC2 and 2 more months past that, I'm happy to
announce that AsyncHBase 1.5.0 is now officially out. 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 few years.
This release was tested against HBase 0.89, 0.90, 0.92, 0.94, and
0.96. On HBase 0.96, the performance is looking great, with
AsyncHBase still outperforming HTable by about 2x.
Pre-built jar: http://code.google.com/p/opentsdb/downloads/detail?name=asynchbase-1.5.0.jar
The release is also available in Maven central.
* Version 1.5.0 (2013-12-13) [67fc3b7]
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.
- HBaseClient has new `prefetchMeta' methods to prefetch metadata about
the regions of a table (for the entire table or a given key range).
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.
- There was an unlikely race if the client got disconnected right
after successfully establishing a connection to a RegionServer, while
it was flushing RPC buffered while waiting to be connected. Also
when those RPCs were flushed, the batchable RPCs weren't given a
chance to get batched.
- It was not possible to scan the ROOT region (or the hbase:meta region
when using HBase 0.96+).
$ git diff --stat v1.4.1..v1.5.0 | tail -n 1
72 files changed, 5213 insertions(+), 540 deletions(-)
(a fair amount of the new lines comes from all the .proto files
imported from HBase's source tree)
$ git shortlog v1.4.1..v1.5.0
Andrey Stepachev (1):
Add support for multiple families/qualifiers in scanners.
Benoit Sigoure (76):
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 HB