private void dumpTableListToDumpLocation(List<String> tableList, Path dbRoot, String dbName,
                                           HiveConf hiveConf) throws Exception {
    // Empty list will create an empty file to distinguish it from db level replication. If no file is there, that means
    // db level replication. If empty file is there, means no table satisfies the policy.
    if (tableList == null) {
      LOG.debug("Table list file is not created for db level replication.");
      return;
    }

    // The table list is dumped in _tables/dbname file
    Retryable retryable = Retryable.builder()
      .withHiveConf(conf)
      .withRetryOnException(IOException.class).build();
    try {
      retryable.executeCallable((Callable<Void>) () -> {
        Path tableListFile = new Path(dbRoot, ReplUtils.REPL_TABLE_LIST_DIR_NAME);
        tableListFile = new Path(tableListFile, dbName.toLowerCase());
        FSDataOutputStream writer = tableListFile.getFileSystem(hiveConf).create(tableListFile);
        for (String tableName : tableList) {
          String line = tableName.toLowerCase().concat("\n");
          writer.write(line.getBytes(StandardCharsets.UTF_8));
        }
        // Close is called explicitly as close also calls the actual file system write,
        // so there is chance of i/o exception thrown by close.
        writer.close();
        LOG.info("Table list file " + tableListFile.toUri() + " is created for table list - " + tableList);
        return null;
      });
    } catch (Exception e) {
      FileSystem.closeAllForUGI(org.apache.hadoop.hive.shims.Utils.getUGI());
      throw new SemanticException(ErrorMsg.REPL_RETRY_EXHAUSTED.format(e.getMessage()), e);
    }
  }
Decide whether to dump ACID tables.
@param tableName - Name of ACID table to be replicated
@return true if need to bootstrap dump ACID table and false if not.
ql/src/java/org/apache/hadoop/hive/ql/exec/repl/ReplDumpTask.java