Currently, all server configuration is stored in a monolithic xml file (accumulo-site.xml).
We should support configuration scoped to the service it is intended to configure. That means, that there could be a separate configuration file for each service (gc.conf, tserver.conf, master.conf, monitor.conf, tracer.conf, etc.), which could be specified with a parameter to the service's main method (--config <file>) with a sensible default.
Some shared configuration may still be necessary, but that can be easily satisfied by using commons-configuration, which supports include statements.
Additionally, system properties should override the configuration file, and be interpolated into it. This can be easily achieved with commons-configuration's hierarchical configuration.
A monolithic file could still be supported, if the individual files are concatenated. To ensure this is possible, the service-specific prefixes should remain, to distinguish between the scopes.
Any implementation of this should be backwards compatible with the monolithic accumulo-site.xml.
Some benefits of this:
- Consolidated configuration to a single file per service, instead of multiple command-line parameters per service.
- Allow non-XML configuration options.
- Move away from Hadoop libraries for parsing configuration.
- Allow starting multiple instances of the same service type with different configuration.