If we break the APIs, can we also do the API cleanup where we remove
duplicate ones and change everything to use req/resp pattern?

On 17/12/14, 13:50, "Thejas Nair" <thejas.n...@gmail.com> wrote:

>This direction looks good to me.
>If the new exceptions are inheriting from TException the applications
>would
>still work. But would it still work if we old metastore client library is
>used with a newer version of metastore server running with these changes ?
>
>
>On Wed, Dec 13, 2017 at 4:02 AM, Peter Vary <pv...@cloudera.com> wrote:
>
>> Hi Team,
>>
>> Since the work begin to separate the HMS to a standalone project we
>> thought that it would be useful the create extensive API tests for the
>> public APIs of the new project.
>> We started to create tests using the IMetaStoreClient interface
>> implementations and found that not surprisingly the happy paths are
>>working
>> as expected, but there are some gaps in the exception handling. Most of
>>the
>> enhancements affect the Thrift API as well.
>> We went through the following methods:
>> Functions
>> Indexes
>> Tables
>> Databases
>> We also plan to comb through at least the Partition related methods too.
>>
>> The possible enhancements we found could be grouped to the following
>> categories:
>> Bugs: For example IMetaStoreClient.drop/alter/createFunction with null
>> function name might throw NullPointerException exception - this is
>>clearly
>> a bug which should be solved:
>> Embedded MetaStore throws NullPointerException
>> Remote MetaStore client throws TTransportException
>> Sub-optimal error handling: For example IMetaStoreClient.alterFunction
>> will not check if the new function is already exist, and tries to
>>insert it
>> anyway. After 10 tries it throws a MetaException where the exception
>>text
>> is "Update of object [...] failed : java.sql.
>> SQLIntegrityConstraintViolationException [...]". Fixing this could be
>> done without interface change, but following the logic of the other
>>methods
>> on the interface AlreadyExistsException should be thrown.
>> Inconsistent exception handling: Different methods will throw different
>> exceptions for similar errors. This makes the interface hard to
>>understand,
>> hard to document and maintain. For example:
>> Calling IMetaStoreClient.createTable with nonexistent database name will
>> throw InvalidObjectException
>> Calling IMetaStoreClient.createFunction with nonexistent database name
>> database will throw NoSuchObjectException
>> There are some cases when the Embedded MetaStore handles error
>>differently
>> than the Remote MetaStore. For example: IMetaStoreClient.dropTable with
>> "null" as a database:
>> Embedded MetaStore throws MetaException
>> Remote MetaStore client throws TProtocolException
>>
>> Proposed changes:
>> Fixing cases 1. and 2. is a simple bug fix - it could be done
>>independently
>> Fixing cases 3. and 4. will change how the IMetaStoreClient and HMS
>>Thrift
>> API works. For these we should review the IMetaStoreClient and HMS
>>Thrift
>> API interface exception handling, to create consistent and easy to
>>follow
>> rules for the possible exceptions. We propose to keep the current
>> exceptions, and only change when the given type of exceptions are
>>thrown.
>> If we stick to this then the interface will be binary backward
>>compatible
>> since currently every method defines TException as a throwable and every
>> exception is inherited from TException. I think we allowed to change
>>this
>> since 3.0.0 is a major release.
>>
>> Do we agree with the general direction of these changes?
>>
>> Thanks,
>> Peter
>>
>>

Reply via email to