I think the per table config route would be best. Ultimately its still sored in zookeeper, just in a more systematic way. This would involve adding an enum to o.a.a.core.conf.Property
could still have API methods in table operation to set and get desc. These would be similar to methods for manipulating locality groups and iterator settings, which are also per table configs. Also, if you are still thinking of adding something to create table, I still think we should add a NewTableConfig method.
Would still have an option on tables command to list descriptions. Would we still need the desc command? I do not really like the name, but I am uncertain about the functionality. As far as functionality, it may make things slightly simpler for the user rather than using the config command. Also having a specific shell command for setting it puts a layer of indirection between the implementation and the user.