Hi,

There is a ton of great work going into the 0.13 release.
Specifically, we are adding a ton of APIs to the metastore:

https://github.com/apache/hive/blame/trunk/metastore/if/hive_metastore.thrift

Few of these new API's follow the best practice of a single request
and response struct. Some follow this partially by having a single
response object but take no arguments while others return void and
take a single request object.  Still others, mostly related to
authorization, do not even partially follow this pattern.

The single request/response struct model is extremely important as
changing the number of arguments is a backwards incompatible change.
Therefore the only way to change an api is to add *new* methods calls.
This is why we have so many crazy APIs in the hive metastore such as
create_table/create_table_with_environment_context and 12 (yes,
twelve) ways to get partitions.

I would like to suggest that we require all new APIs to follow the
single request/response struct model. That is any new API that would
be committed *after* today.

I have heard the following arguments against this approach which I
believe to be invalid:

*This API will never change (or never return a value or never take
another value)*
We all have been writing code enough that we don't know, there are
unknown unknowns. By following the single request/response struct
model for *all* APIs we can future proof ourselves. Why wouldn't we
want to buy insurance now when it's cheap?

*The performance impact of wrapping an object is too much*
These calls are being made over the network which is orders of
magnitude slower than creating a small, simple, and lightweight object
to wrap method arguments and response values.

Cheers,
Brock

Reply via email to