code: public String readConfigName(SolrZkClient zkClient, String collection)
    throws KeeperException, InterruptedException {
      if (collection == null) {
        throw new IllegalArgumentException("collection must not be null");
      }
      String configName = null;
  
      // first check for alias
      byte[] aliasData = zkClient.getData(ZkStateReader.ALIASES, null, null, true);
      Aliases aliases = ClusterState.load(aliasData);
      String alias = aliases.getCollectionAlias(collection);
      if (alias != null) {
        List<String> aliasList = StrUtils.splitSmart(alias, ",", true);
        if (aliasList.size() > 1) {
          throw new IllegalArgumentException("collection cannot be an alias that maps to multiple collections");
        }
        collection = aliasList.get(0);
      }
      
      String path = ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection;
      if (LOG.isInfoEnabled()) {
        LOG.info("Load collection config from:" + path);
      }
      byte[] data = zkClient.getData(path, null, null, true);
      
      if(data != null) {
        ZkNodeProps props = ZkNodeProps.load(data);
        configName = props.getStr(ZkController.CONFIGNAME_PROP);
      }
      
      if (configName != null && !zkClient.exists(ZkConfigManager.CONFIGS_ZKNODE + "/" + configName, true)) {
        LOG.error("Specified config does not exist in ZooKeeper:" + configName);
        throw new IllegalArgumentException("Specified config does not exist in ZooKeeper:"
          + configName);
      }
  
      return configName;
    }
docs: Returns config value given collection name
  Borrowed heavily from Solr's ZKController.