The mechanism used for caching server-related configuration objects and processing ZK events could do with some simplification. For example:
- The watcher objects obtain their corresponding configuration objects by reaching through the ServerConfiguration cache, instead of just having a more direct reference.
- The watcher objects set log4j logging levels for both ZK and o.a.hadoop.io.compress to WARN, which prohibits debugging when needed. That should be done in log4j properties/XML instead.
- Possible bug: NamespaceConfWatcher expires table configuration observers, not namespace configuration observers.
- There is high duplication between the static and instance methods of ServerConfiguration. The class serves as both a cache container and a factory. Moreover, despite its name, it isn't actually a configuration object.
I may be missing some subtleties of why things are as they are, so please fill me in as needed.