Class AbstractReplicator

    • Field Detail

      • topicName

        protected final java.lang.String topicName
      • localCluster

        protected final java.lang.String localCluster
      • remoteCluster

        protected final java.lang.String remoteCluster
      • replicationClient

        protected final org.apache.pulsar.client.impl.PulsarClientImpl replicationClient
      • client

        protected final org.apache.pulsar.client.impl.PulsarClientImpl client
      • producer

        protected volatile org.apache.pulsar.client.impl.ProducerImpl producer
      • REPL_PRODUCER_NAME_DELIMITER

        public static final java.lang.String REPL_PRODUCER_NAME_DELIMITER
        See Also:
        Constant Field Values
      • producerQueueSize

        protected final int producerQueueSize
      • producerBuilder

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

        protected final org.apache.pulsar.client.impl.Backoff backOff
      • replicatorPrefix

        protected final java.lang.String replicatorPrefix
    • Constructor Detail

      • AbstractReplicator

        public AbstractReplicator​(java.lang.String topicName,
                                  java.lang.String replicatorPrefix,
                                  java.lang.String localCluster,
                                  java.lang.String remoteCluster,
                                  BrokerService brokerService,
                                  org.apache.pulsar.client.impl.PulsarClientImpl replicationClient)
                           throws org.apache.pulsar.broker.PulsarServerException
        Throws:
        org.apache.pulsar.broker.PulsarServerException
    • Method Detail

      • readEntries

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

        protected abstract org.apache.bookkeeper.mledger.Position getReplicatorReadPosition()
      • getNumberOfEntriesInBacklog

        protected abstract long getNumberOfEntriesInBacklog()
      • disableReplicatorRead

        protected abstract void disableReplicatorRead()
      • getRemoteCluster

        public java.lang.String getRemoteCluster()
      • startProducer

        public void startProducer()
      • closeProducerAsync

        protected java.util.concurrent.CompletableFuture<java.lang.Void> closeProducerAsync()
      • disconnect

        public java.util.concurrent.CompletableFuture<java.lang.Void> disconnect()
      • disconnect

        public java.util.concurrent.CompletableFuture<java.lang.Void> disconnect​(boolean failIfHasBacklog)
      • remove

        public java.util.concurrent.CompletableFuture<java.lang.Void> remove()
      • isWritable

        protected boolean isWritable()
      • getRemoteCluster

        public static java.lang.String getRemoteCluster​(java.lang.String remoteCursor)
      • getReplicatorName

        public static java.lang.String getReplicatorName​(java.lang.String replicatorPrefix,
                                                         java.lang.String cluster)
      • validatePartitionedTopicAsync

        public static java.util.concurrent.CompletableFuture<java.lang.Void> validatePartitionedTopicAsync​(java.lang.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 -