there is a lot of volatile - I wonder if it makes sense to combine the ones that logically belong together in a struct like inner-class. I really don't like these multiple volatile fields since they always leave a chance for inconsistent state if you read one while the other is updated. 

I also think only the `ClusterState` should be volatile and not the `lastObservedClusterStateStatus` for the same problem can't we get the status from the cluster state or if not ie. if you do this on purpose make it a struct like inner class?