private void uploadClusterAdminInfos(Map<String, Map<String, Map<String, String>>> adminInfosByDc,
      String clusterAdminType, String adminConfigZNodePath) {
    for (String dcName : dataCenterToZkAddress.keySet()) {
      info("Uploading {} infos for datacenter {}.", clusterAdminType, dcName);
      HelixPropertyStore<ZNRecord> helixPropertyStore =
          createHelixPropertyStore(this.clusterName, dataCenterToZkAddress.get(dcName).getZkConnectStrs().get(0));
      try {
        ZNRecord znRecord = new ZNRecord(clusterAdminType);
        znRecord.setMapFields(adminInfosByDc.get(dcName));
        if (!helixPropertyStore.set(adminConfigZNodePath, znRecord, AccessOption.PERSISTENT)) {
          logger.error("Failed to upload {} infos for datacenter {}", clusterAdminType, dcName);
        }
      } finally {
        helixPropertyStore.stop();
      }
    }
  }
Uploads cluster config infos onto Helix PropertyStore.
@param adminInfosByDc the cluster admin information (overridden partitions, added replicas) grouped by DC that would
                      be applied to cluster.
@param clusterAdminType the type of cluster admin that would be uploaded (i.e. PartitionOverride, ReplicaAddition)
@param adminConfigZNodePath ZNode path of admin config associated with clusterAdminType.
ambry-clustermap/src/main/java/com/github/ambry/clustermap/HelixBootstrapUpgradeUtil.java