@Override
        public void initialize() throws IOException {
          if (created) {
            return;
          }
          synchronized (this) {
            if (created) {
              return;
            }
            if (services.getTableDescriptors().exists(replicationQueueTableName)) {
              created = true;
              return;
            }
            long procId = services.createSystemTable(ReplicationStorageFactory
              .createReplicationQueueTableDescriptor(replicationQueueTableName));
            ProcedureExecutor<MasterProcedureEnv> procExec = services.getMasterProcedureExecutor();
            ProcedureSyncWait.waitFor(procExec.getEnvironment(), TimeUnit.MINUTES.toMillis(1),
              "Creating table " + replicationQueueTableName, () -> procExec.isFinished(procId));
          }
        }
Set a namespace in the peer config means that all tables in this namespace will be replicated
to the peer cluster.
<ol>
<li>If peer config already has a namespace, then not allow set any table of this namespace to
the peer config.</li>
<li>If peer config already has a table, then not allow set this table's namespace to the peer
config.</li>
</ol>
<p>
Set a exclude namespace in the peer config means that all tables in this namespace can't be
replicated to the peer cluster.
<ol>
<li>If peer config already has a exclude namespace, then not allow set any exclude table of
this namespace to the peer config.</li>
<li>If peer config already has a exclude table, then not allow set this table's namespace as a
exclude namespace.</li>
</ol>
hbase-server/src/main/java/org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.java