Hmmm, so if I'm understanding you correctly, if you start up the CloudSolrServer early, then even after the cluster is ready, the CloudSolrServer never sees it as ready.
If the issue truly is in ZkStateReader, this may be an issue beyond CloudSolrServer and cause problems in the servers themselves? Or perhaps the code that creates all the collection template stuff if none exists has been preventing this from being seen?
If it looks like there is no clusterstate.json it seems like we should have an option to bail out immediately (with an appropriate error message).
Do we also need a mode that waits and retries for a certain amount of time?