Package org.apache.pulsar.broker.service
Class AbstractReplicator
- java.lang.Object
-
- org.apache.pulsar.broker.service.AbstractReplicator
-
- Direct Known Subclasses:
NonPersistentReplicator,PersistentReplicator
public abstract class AbstractReplicator extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classAbstractReplicator.State
-
Field Summary
Fields Modifier and Type Field Description protected org.apache.pulsar.client.impl.BackoffbackOffprotected BrokerServicebrokerServiceprotected org.apache.pulsar.client.impl.PulsarClientImplclientprotected java.lang.StringlocalClusterprotected org.apache.pulsar.client.impl.ProducerImplproducerprotected org.apache.pulsar.client.api.ProducerBuilder<byte[]>producerBuilderprotected intproducerQueueSizeprotected java.lang.StringremoteClusterstatic java.lang.StringREPL_PRODUCER_NAME_DELIMITERprotected org.apache.pulsar.client.impl.PulsarClientImplreplicationClientprotected java.lang.StringreplicatorPrefixprotected static java.util.concurrent.atomic.AtomicReferenceFieldUpdater<AbstractReplicator,AbstractReplicator.State>STATE_UPDATERprotected java.lang.StringtopicName
-
Constructor Summary
Constructors Constructor Description 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)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected java.util.concurrent.CompletableFuture<java.lang.Void>closeProducerAsync()protected abstract voiddisableReplicatorRead()java.util.concurrent.CompletableFuture<java.lang.Void>disconnect()java.util.concurrent.CompletableFuture<java.lang.Void>disconnect(boolean failIfHasBacklog)protected abstract longgetNumberOfEntriesInBacklog()java.lang.StringgetRemoteCluster()static java.lang.StringgetRemoteCluster(java.lang.String remoteCursor)static java.lang.StringgetReplicatorName(java.lang.String replicatorPrefix, java.lang.String cluster)protected abstract org.apache.bookkeeper.mledger.PositiongetReplicatorReadPosition()protected booleanisWritable()protected abstract voidreadEntries(org.apache.pulsar.client.api.Producer<byte[]> producer)java.util.concurrent.CompletableFuture<java.lang.Void>remove()voidstartProducer()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.
-
-
-
Field Detail
-
brokerService
protected final BrokerService brokerService
-
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
-
STATE_UPDATER
protected static final java.util.concurrent.atomic.AtomicReferenceFieldUpdater<AbstractReplicator,AbstractReplicator.State> STATE_UPDATER
-
-
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-
-
-