Hi,

I started to work on HBASE-18978 (Align the methods in Table and
AsyncTable) and I would appreciate some feedback from you.

To make it simpler to compare the differences between Table and AsyncTable
I put together a spreadsheet.
https://docs.google.com/spreadsheets/d/15DdDp3Yljlb_Mrd3BQuoyzqnhomJhTM8bHvmEa6t6Jc/edit?usp=sharing

I categorized them into the following groups:

* RPC timeouts
- Both interfaces have the same functionality, however, in AsyncTable the
TimeUnit can be set for each method.
- The getRpcTimeout is deprecated in Table from version 2.0.0, but it is
not deprecated in AsyncTable.
We can make the RPC timeout handling aligned in the 2 interfaces. My
recommendation is to go with the ones in AsyncTable.

* Coprocessor
- Methods that are related to Coprocessors are only available in Table.
What is the reason for this?

* List with xAll operations
- We have the ability to run operation (get, delete, put, batch) in batch
mode using a List input parameter in both interfaces. AsyncTable has
additional methods called xAll(List) (e.g. getAll) where we have the same
operations but the whole operation fails if there are any failures.
- The methods related to {exists} differ from the previous operations. To
compare it with {get}:
Table                                                 | AsyncTable
-------------------------------------------------------------------------------------------------------------------------------
Result get(Get get)                           | CompletableFuture<Result>
get(Get get)
Result[] get(List<Get> gets)             | List<CompletableFuture<Result>>
get(List<Get> gets)
-                                                        |
CompletableFuture<List<Result>> getAll(List<Get> gets)
-------------------------------------------------------------------------------------------------------------------------------
boolean exists(Get get)                    | CompletableFuture<Boolean>
exists(Get get)
boolean[] existsAll(List<Get> gets)  | List<CompletableFuture<Boolean>>
exists(List<Get> gets)
-                                                        |
CompletableFuture<List<Boolean>> existsAll(List<Get> gets)
Should we align these methods?

- Method {batch} is also similar to these operations, however, the
signature is different between Table and AsyncTable interfaces.
Additionally, Table had a method {batchCallback} which is missing from
AsyncTable.

* Checks
Check and mutate methods are way different. Table has checkAndx methods
(some of them are deprecated), but AsyncTable has an interface called
CheckAndMutateBuilder and these kind of operations are handled through that.

* Scan
Both interfaces include getScanner methods with the same signature.
Additionally, AsyncTable has {scan} and {scanAll} methods which are not
part of Table interface.

* Different return types
There are 2 methods that does the same in the 2 interfaces but have
different return types. The ones in Table return with an array and the ones
from AsyncTable return with a List. HBASE-18912 is a similar issue on Admin
interface. Changing only return type is difficult. Do we need to deal with
this problem?

Thanks,
Peter

Reply via email to