What are expectations for Hive 3 in terms of API compatibility - especially in regards to old clients talking to Hive 3 servers?
- Alex On Thu, Dec 14, 2017 at 1:50 PM, 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 > > > > >