public abstract class AbstractReplicator extends Object
| Modifier and Type | Class and Description |
|---|---|
protected static class |
AbstractReplicator.State |
| Modifier and Type | Field and Description |
|---|---|
protected Backoff |
backOff |
protected BrokerService |
brokerService |
protected PulsarClientImpl |
client |
protected String |
localCluster |
protected ProducerImpl |
producer |
protected org.apache.pulsar.client.api.ProducerBuilder<byte[]> |
producerBuilder |
protected int |
producerQueueSize |
protected String |
remoteCluster |
static String |
REPL_PRODUCER_NAME_DELIMITER |
protected PulsarClientImpl |
replicationClient |
protected String |
replicatorPrefix |
protected static AtomicReferenceFieldUpdater<AbstractReplicator,AbstractReplicator.State> |
STATE_UPDATER |
protected String |
topicName |
| Constructor and Description |
|---|
AbstractReplicator(String topicName,
String replicatorPrefix,
String localCluster,
String remoteCluster,
BrokerService brokerService,
PulsarClientImpl replicationClient) |
| Modifier and Type | Method and Description |
|---|---|
protected CompletableFuture<Void> |
closeProducerAsync() |
protected abstract void |
disableReplicatorRead() |
CompletableFuture<Void> |
disconnect() |
CompletableFuture<Void> |
disconnect(boolean failIfHasBacklog) |
protected abstract long |
getNumberOfEntriesInBacklog() |
String |
getRemoteCluster() |
static String |
getRemoteCluster(String remoteCursor) |
static String |
getReplicatorName(String replicatorPrefix,
String cluster) |
protected abstract Position |
getReplicatorReadPosition() |
protected boolean |
isWritable() |
protected abstract void |
readEntries(org.apache.pulsar.client.api.Producer<byte[]> producer) |
CompletableFuture<Void> |
remove() |
void |
startProducer() |
static CompletableFuture<Void> |
validatePartitionedTopicAsync(String topic,
BrokerService brokerService)
Replication can't be started on root-partitioned-topic to avoid producer startup conflict.
|
protected final BrokerService brokerService
protected final String topicName
protected final String localCluster
protected final String remoteCluster
protected final PulsarClientImpl replicationClient
protected final PulsarClientImpl client
protected volatile ProducerImpl producer
public static final String REPL_PRODUCER_NAME_DELIMITER
protected final int producerQueueSize
protected final org.apache.pulsar.client.api.ProducerBuilder<byte[]> producerBuilder
protected final Backoff backOff
protected final String replicatorPrefix
protected static final AtomicReferenceFieldUpdater<AbstractReplicator,AbstractReplicator.State> STATE_UPDATER
public AbstractReplicator(String topicName, String replicatorPrefix, String localCluster, String remoteCluster, BrokerService brokerService, PulsarClientImpl replicationClient) throws PulsarServerException
PulsarServerExceptionprotected abstract void readEntries(org.apache.pulsar.client.api.Producer<byte[]> producer)
protected abstract Position getReplicatorReadPosition()
protected abstract long getNumberOfEntriesInBacklog()
protected abstract void disableReplicatorRead()
public String getRemoteCluster()
public void startProducer()
protected CompletableFuture<Void> closeProducerAsync()
public CompletableFuture<Void> disconnect()
public CompletableFuture<Void> disconnect(boolean failIfHasBacklog)
public CompletableFuture<Void> remove()
protected boolean isWritable()
public static CompletableFuture<Void> validatePartitionedTopicAsync(String topic, BrokerService brokerService)
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.
topic - brokerService - Copyright © 2017–2022 Apache Software Foundation. All rights reserved.