MAPREDUCE-3431 has shown that some of the key services's shutdown operations are not robust against being invoked before the service is started. They need to be by
- not calling other things if the other things are null
- not being re-entrant (i.e. make synchronized if possible),
- have a StopService operation that only stops a service if it is live
- factor out the is-running test from the base service class and make it a pre-check for all the child services, so they bail out sooner rather than later. This would be the best as it would be the one guaranteed to work consistently across all instances, so only one or two would need testing
my first iteration will skip the sync though it's something to consider.
Testing: try to create each instance; call stop() straight after construction.