public static void main(String[] args) throws Exception {
    VerifiableProperties properties = ToolUtils.getVerifiableProperties(args);
    DiskReformatterConfig config = new DiskReformatterConfig(properties);
    StoreConfig storeConfig = new StoreConfig(properties);
    ClusterMapConfig clusterMapConfig = new ClusterMapConfig(properties);
    ServerConfig serverConfig = new ServerConfig(properties);
    ClusterAgentsFactory clusterAgentsFactory =
        Utils.getObj(clusterMapConfig.clusterMapClusterAgentsFactory, clusterMapConfig, config.hardwareLayoutFilePath,
            config.partitionLayoutFilePath);
    try (ClusterMap clusterMap = clusterAgentsFactory.getClusterMap()) {
      StoreKeyConverterFactory storeKeyConverterFactory = Utils.getObj(serverConfig.serverStoreKeyConverterFactory, properties, clusterMap.getMetricRegistry());
      StoreKeyFactory storeKeyFactory = Utils.getObj(storeConfig.storeKeyFactory, clusterMap);
      DataNodeId dataNodeId = clusterMap.getDataNodeId(config.datanodeHostname, config.datanodePort);
      if (dataNodeId == null) {
        throw new IllegalArgumentException(
            "Did not find node in clustermap with hostname:port - " + config.datanodeHostname + ":"
                + config.datanodePort);
      }
      DiskReformatter reformatter =
          new DiskReformatter(dataNodeId, Collections.EMPTY_LIST, config.fetchSizeInBytes, storeConfig, storeKeyFactory,
              clusterMap, SystemTime.getInstance(), storeKeyConverterFactory.getStoreKeyConverter());
      AtomicInteger exitStatus = new AtomicInteger(0);
      CountDownLatch latch = new CountDownLatch(config.diskMountPaths.length);
      for (int i = 0; i < config.diskMountPaths.length; i++) {
        int finalI = i;
        Runnable runnable = () -> {
          try {
            reformatter.reformat(config.diskMountPaths[finalI], new File(config.scratchPaths[finalI]));
            latch.countDown();
          } catch (Exception e) {
            throw new IllegalStateException(e);
          }
        };
        Thread thread = Utils.newThread(config.diskMountPaths[finalI] + "-reformatter", runnable, true);
        thread.setUncaughtExceptionHandler((t, e) -> {
          exitStatus.set(1);
          logger.error("Reformatting {} failed", config.diskMountPaths[finalI], e);
          latch.countDown();
        });
        thread.start();
      }
      latch.await();
      System.exit(exitStatus.get());
    }
  }
Constructs the configs associated with the tool.
@param verifiableProperties the props to use to load the config.
ambry-tools/src/main/java/com/github/ambry/store/DiskReformatter.java