In HBASE-24966, we found that in AsyncTableRegionLocator, we accidentally
declared 3 methods

getStartKeys
getEndKeys
getStartEndKeys

to throw IOException directly.

This should be a copy paste mistake, as typically, for a method which
returns CompletableFuture, the exception should be returned through the
CompletableFuture, and this is exactly the behavior of these methods.

So the actual problem is only that we have a wrong method signature. but
since this interface is IA.Public, and it has already been included in
several releases, according to our compatibility rule, we can not just
remove the throws part from the method. Instead, we need to deprecate them
and create new methods. But there will be another problem that we want to
align the method names between the sync and async client, so if we change
the names of the methods, we'd better also change the name of methods for
sync client, which will make our users do more unnecessary work.

So here I want to discuss that, since we all know that, this is a mistake,
and the methods will never throw IOException directly, is it OK for us to
just remove the throws part and tell users directly that this is a mistake,
and release it in the next minor release or a major release as an
incompatible change?

Thanks.

Reply via email to