@Override
    public void run() {
      while (!stopped) {
        try {
          Thread.sleep(30000);
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
          continue;
        }
        // we could add new datanodes during tests, so here we will check every 30 seconds, as the
        // timeout of the thread pool executor is 60 seconds by default.
        try {
          for (DataNode dn : cluster.getDataNodes()) {
            FsDatasetSpi<?> dataset = dn.getFSDataset();
            Field service = dataset.getClass().getDeclaredField("asyncDiskService");
            service.setAccessible(true);
            Object asyncDiskService = service.get(dataset);
            Field group = asyncDiskService.getClass().getDeclaredField("threadGroup");
            group.setAccessible(true);
            ThreadGroup threadGroup = (ThreadGroup) group.get(asyncDiskService);
            if (threadGroup.isDaemon()) {
              threadGroup.setDaemon(false);
            }
          }
        } catch (NoSuchFieldException e) {
          LOG.debug("NoSuchFieldException: " + e.getMessage()
            + "; It might because your Hadoop version > 3.2.3 or 3.3.4, "
            + "See HBASE-27595 for details.");
        } catch (Exception e) {
          LOG.warn("failed to reset thread pool timeout for FsDatasetAsyncDiskService", e);
        }
      }
    }
Start a minidfscluster. Can only create one.
@param servers How many DNs to start.
@param hosts   hostnames DNs to run on.
@see #shutdownMiniDFSCluster()
@return The mini dfs cluster created.
hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtil.java