Class AbstractReplicator

java.lang.Object
org.apache.pulsar.broker.service.AbstractReplicator
All Implemented Interfaces:
Replicator
Direct Known Subclasses:
NonPersistentReplicator, PersistentReplicator

public abstract class AbstractReplicator extends Object implements Replicator
  • Field Details

    • brokerService

      protected final BrokerService brokerService
    • localTopicName

      protected final String localTopicName
    • localCluster

      protected final String localCluster
    • remoteTopicName

      protected final String remoteTopicName
    • remoteCluster

      protected final String remoteCluster
    • replicationClient

      protected final PulsarClientImpl replicationClient
    • client

      protected final PulsarClientImpl client
    • replicatorId

      protected String replicatorId
    • localTopic

      protected final Topic localTopic
    • producer

      protected volatile ProducerImpl producer
    • REPL_PRODUCER_NAME_DELIMITER

      public static final String REPL_PRODUCER_NAME_DELIMITER
      See Also:
    • producerQueueSize

      protected final int producerQueueSize
    • producerBuilder

      protected final org.apache.pulsar.client.api.ProducerBuilder<byte[]> producerBuilder
    • backOff

      protected final org.apache.pulsar.common.util.Backoff backOff
    • replicatorPrefix

      protected final String replicatorPrefix
    • STATE_UPDATER

    • state

      protected volatile AbstractReplicator.State state
  • Constructor Details

  • Method Details

    • getProducerName

      protected abstract String getProducerName()
    • setProducerAndTriggerReadEntries

      protected abstract void setProducerAndTriggerReadEntries(org.apache.pulsar.client.api.Producer<byte[]> producer)
    • getReplicatorReadPosition

      protected abstract Position getReplicatorReadPosition()
    • getNumberOfEntriesInBacklog

      public abstract long getNumberOfEntriesInBacklog()
      Specified by:
      getNumberOfEntriesInBacklog in interface Replicator
    • disableReplicatorRead

      protected abstract void disableReplicatorRead()
    • isConnected

      public boolean isConnected()
      Specified by:
      isConnected in interface Replicator
    • getReplicationDelayMs

      public long getReplicationDelayMs()
    • getRemoteCluster

      public String getRemoteCluster()
      Specified by:
      getRemoteCluster in interface Replicator
    • prepareCreateProducer

      protected CompletableFuture<Void> prepareCreateProducer()
    • startProducer

      public void startProducer()
      Specified by:
      startProducer in interface Replicator
    • delayStartProducerAfterDisconnected

      protected void delayStartProducerAfterDisconnected()
      The producer is disconnecting, delay to start the producer. If we start a producer immediately, we will get a conflict producer(same name producer) registered error.
    • scheduleCheckTopicActiveAndStartProducer

      protected void scheduleCheckTopicActiveAndStartProducer(long waitTimeMs)
    • isLocalTopicActive

      protected CompletableFuture<Boolean> isLocalTopicActive()
    • disconnect

      public CompletableFuture<Void> disconnect(boolean failIfHasBacklog, boolean closeTheStartingProducer)
      This method only be used by PersistentTopic.checkGC() now.
      Specified by:
      disconnect in interface Replicator
    • closeProducerAsync

      protected CompletableFuture<Void> closeProducerAsync(boolean closeTheStartingProducer)
      This method only be used by PersistentTopic.checkGC() now.
    • doCloseProducerAsync

      protected CompletableFuture<Void> doCloseProducerAsync(org.apache.pulsar.client.api.Producer<byte[]> producer, Runnable actionAfterClosed)
    • terminate

      public CompletableFuture<Void> terminate()
      Specified by:
      terminate in interface Replicator
    • doReleaseResources

      protected void doReleaseResources()
    • tryChangeStatusToTerminating

      protected boolean tryChangeStatusToTerminating()
    • remove

      public CompletableFuture<Void> remove()
    • isWritable

      protected boolean isWritable()
    • getRemoteCluster

      public static String getRemoteCluster(String remoteCursor)
    • getReplicatorName

      public static String getReplicatorName(String replicatorPrefix, String cluster)
    • validatePartitionedTopicAsync

      public static CompletableFuture<Void> validatePartitionedTopicAsync(String topic, BrokerService brokerService)
      Replication can't be started on root-partitioned-topic to avoid producer startup conflict.
       eg:
       if topic : persistent://prop/cluster/ns/my-topic is a partitioned topic with 2 partitions then
       broker explicitly creates replicator producer for: "my-topic-partition-1" and "my-topic-partition-2".
      
       However, if broker tries to start producer with root topic "my-topic" then client-lib internally
       creates individual producers for "my-topic-partition-1" and "my-topic-partition-2" which creates
       conflict with existing
       replicator producers.
       
      Therefore, replicator can't be started on root-partition topic which can internally create multiple partitioned producers.
      Parameters:
      topic -
      brokerService -
    • getState

      public AbstractReplicator.State getState()
    • compareSetAndGetState

      protected org.apache.commons.lang3.tuple.ImmutablePair<Boolean,AbstractReplicator.State> compareSetAndGetState(AbstractReplicator.State expect, AbstractReplicator.State update)
    • isTerminated

      public boolean isTerminated()
      Specified by:
      isTerminated in interface Replicator
    • getAttributes

      public io.opentelemetry.api.common.Attributes getAttributes()