Wish in lieu of "brainstorming" JIRA.
Metastore Thrift APIs currently use normal method signatures (e.g. int foo(string bar, double baz)); this is problematic in Thrift because the APIs cannot be evolved without breaking compat; and weird names have to be invented because overloading is not supported either.
An easy solution to this is to have methods in the form of FooResponse foo(FooRequest req); the structures can then be evolved easily.
This may apply also to other Thrift APIs, I have not checked.
This is a brainstorming JIRA for the transformations. Obviously this will either double the API size, or cause massive backward incompatibility.
Maybe we can do 1-2 releases with both APIs, marking the old ones deprecated in some form, and then remove them?