public static AsyncWriter createAsyncWriter(Configuration conf, FileSystem fs, Path path,
    boolean overwritable, long blocksize, EventLoopGroup eventLoopGroup,
    Class<? extends Channel> channelClass, StreamSlowMonitor monitor) throws IOException {
    // Configuration already does caching for the Class lookup.
    Class<? extends AsyncWriter> logWriterClass =
      conf.getClass(WRITER_IMPL, AsyncProtobufLogWriter.class, AsyncWriter.class);
    try {
      AsyncWriter writer = logWriterClass.getConstructor(EventLoopGroup.class, Class.class)
        .newInstance(eventLoopGroup, channelClass);
      writer.init(fs, path, conf, overwritable, blocksize, monitor);
      return writer;
    } catch (Exception e) {
      if (e instanceof CommonFSUtils.StreamLacksCapabilityException) {
        LOG.error("The RegionServer async write ahead log provider "
          + "relies on the ability to call " + e.getMessage() + " for proper operation during "
          + "component failures, but the current FileSystem does not support doing so. Please "
          + "check the config value of '" + CommonFSUtils.HBASE_WAL_DIR + "' and ensure "
          + "it points to a FileSystem mount that has suitable capabilities for output streams.");
      } else {
        LOG.debug("Error instantiating log writer.", e);
      }
      Throwables.propagateIfPossible(e, IOException.class);
      throw new IOException("cannot get log writer", e);
    }
  }
Public because of AsyncFSWAL. Should be package-private
hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java