private WALProvider getWALProvider(RegionInfo region) throws IOException {
    String group;
    if (META_WAL_PROVIDER_ID.equals(this.providerId)) {
      group = META_WAL_GROUP_NAME;
    } else {
      byte[] id;
      byte[] namespace;
      if (region != null) {
        id = region.getEncodedNameAsBytes();
        namespace = region.getTable().getNamespace();
      } else {
        id = HConstants.EMPTY_BYTE_ARRAY;
        namespace = null;
      }
      group = strategy.group(id, namespace);
    }
    WALProvider provider = cached.get(group);
    if (provider == null) {
      Lock lock = createLock.acquireLock(group);
      try {
        provider = cached.get(group);
        if (provider == null) {
          provider = createProvider(group);
          // Notice that there is an assumption that the addWALActionsListener method must be called
          // before the getWAL method, so we can make sure there is no sub WALProvider yet, so we
          // only add the listener to our listeners list without calling addWALActionListener for
          // each WALProvider. Although it is no hurt to execute an extra loop to call
          // addWALActionListener for each WALProvider, but if the extra code actually works, then
          // we will have other big problems. So leave it as is.
          listeners.forEach(provider::addWALActionsListener);
          cached.put(group, provider);
        }
      } finally {
        lock.unlock();
      }
    }
    return provider;
  }
A group-provider mapping, make sure one-one rather than many-one mapping
hbase-server/src/main/java/org/apache/hadoop/hbase/wal/RegionGroupingProvider.java