You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by si...@apache.org on 2020/12/09 17:18:50 UTC
[pulsar] branch master updated: [CheckStyle] Make module
`pulsar-broker` conform checkstyle. (#8878)
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new cc64889 [CheckStyle] Make module `pulsar-broker` conform checkstyle. (#8878)
cc64889 is described below
commit cc64889abe94d47f048e2f8e8fb10d6c37e695ec
Author: Renkai Ge <ga...@gmail.com>
AuthorDate: Thu Dec 10 01:18:31 2020 +0800
[CheckStyle] Make module `pulsar-broker` conform checkstyle. (#8878)
Fix issue: https://github.com/streamnative/pulsar/issues/1768
This PR contains code style changes only, it will be the final patch to make module `pulsar-broker` conform checkstyle.
---
.../src/main/resources/pulsar/checkstyle.xml | 6 +
.../src/main/resources/pulsar/suppressions.xml | 14 --
.../broker/service/AbstractBaseDispatcher.java | 7 +-
.../AbstractDispatcherMultipleConsumers.java | 26 ++-
.../AbstractDispatcherSingleActiveConsumer.java | 8 +-
.../pulsar/broker/service/AbstractReplicator.java | 17 +-
.../pulsar/broker/service/AbstractTopic.java | 39 ++--
.../pulsar/broker/service/BacklogQuotaManager.java | 18 +-
.../pulsar/broker/service/BrokerService.java | 175 ++++++++------
.../broker/service/BrokerServiceException.java | 4 +-
.../org/apache/pulsar/broker/service/Consumer.java | 28 ++-
.../apache/pulsar/broker/service/Dispatcher.java | 10 +-
...ashRangeAutoSplitStickyKeyConsumerSelector.java | 4 +-
...ashRangeExclusiveStickyKeyConsumerSelector.java | 9 +-
.../broker/service/InMemoryRedeliveryTracker.java | 2 +-
.../broker/service/PrecisPublishLimiter.java | 7 +-
.../org/apache/pulsar/broker/service/Producer.java | 21 +-
.../pulsar/broker/service/PublishRateLimiter.java | 5 +-
.../pulsar/broker/service/PulsarCommandSender.java | 5 +-
.../broker/service/PulsarCommandSenderImpl.java | 12 +-
.../apache/pulsar/broker/service/PulsarStats.java | 17 +-
.../apache/pulsar/broker/service/ServerCnx.java | 244 ++++++++++++--------
.../broker/service/StickyKeyConsumerSelector.java | 9 +-
.../apache/pulsar/broker/service/Subscription.java | 2 +-
.../SystemTopicBasedTopicPoliciesService.java | 62 ++---
.../org/apache/pulsar/broker/service/Topic.java | 17 +-
.../broker/service/TopicPoliciesService.java | 15 +-
.../apache/pulsar/broker/service/TransportCnx.java | 3 +-
.../nonpersistent/NonPersistentDispatcher.java | 4 +-
.../NonPersistentDispatcherMultipleConsumers.java | 3 +-
...onPersistentDispatcherSingleActiveConsumer.java | 9 +-
.../nonpersistent/NonPersistentReplicator.java | 3 +-
...istentStickyKeyDispatcherMultipleConsumers.java | 13 +-
.../nonpersistent/NonPersistentSubscription.java | 20 +-
.../service/nonpersistent/NonPersistentTopic.java | 31 +--
.../service/persistent/CompactorSubscription.java | 2 +-
.../service/persistent/DispatchRateLimiter.java | 4 +-
.../service/persistent/MessageDeduplication.java | 44 ++--
.../PersistentDispatcherMultipleConsumers.java | 65 ++++--
.../PersistentDispatcherSingleActiveConsumer.java | 41 ++--
.../persistent/PersistentMessageExpiryMonitor.java | 6 +-
.../persistent/PersistentMessageFinder.java | 8 +-
.../service/persistent/PersistentReplicator.java | 66 ++++--
...istentStickyKeyDispatcherMultipleConsumers.java | 51 +++--
.../service/persistent/PersistentSubscription.java | 54 +++--
.../broker/service/persistent/PersistentTopic.java | 251 ++++++++++++---------
.../ReplicatedSubscriptionSnapshotCache.java | 2 +-
.../ReplicatedSubscriptionsController.java | 5 +-
.../service/persistent/SubscribeRateLimiter.java | 33 ++-
.../broker/service/persistent/SystemTopic.java | 3 +-
.../service/schema/AlwaysSchemaValidator.java | 2 +-
.../schema/AvroSchemaBasedCompatibilityCheck.java | 8 +-
.../service/schema/BookkeeperSchemaStorage.java | 45 ++--
.../schema/JsonSchemaCompatibilityCheck.java | 3 +-
.../schema/KeyValueSchemaCompatibilityCheck.java | 20 +-
.../service/schema/NeverSchemaValidator.java | 2 +-
.../ProtobufNativeSchemaCompatibilityCheck.java | 6 +-
.../service/schema/SchemaCompatibilityCheck.java | 23 +-
.../broker/service/schema/SchemaRegistry.java | 6 +-
.../service/schema/SchemaRegistryService.java | 4 +-
.../service/schema/SchemaRegistryServiceImpl.java | 60 ++---
.../ProtobufNativeSchemaDataValidator.java | 4 +-
...hemaRegistryServiceWithSchemaDataValidator.java | 3 +-
.../pulsar/broker/stats/MBeanStatsGenerator.java | 2 +-
.../apache/pulsar/broker/stats/NamespaceStats.java | 6 +-
.../broker/stats/metrics/AbstractMetrics.java | 19 +-
.../broker/stats/metrics/ManagedLedgerMetrics.java | 29 ++-
.../stats/prometheus/AggregatedNamespaceStats.java | 2 +-
.../prometheus/AggregatedReplicationStats.java | 4 +-
.../stats/prometheus/NamespaceStatsAggregator.java | 25 +-
.../prometheus/PrometheusMetricsGenerator.java | 18 +-
.../stats/prometheus/PrometheusMetricsServlet.java | 3 +-
.../pulsar/broker/stats/prometheus/TopicStats.java | 109 +++++----
.../metrics/PrometheusMetricsProvider.java | 5 +-
.../metrics/PrometheusTextFormatUtil.java | 70 +++---
.../pulsar/broker/systopic/SystemTopicClient.java | 25 +-
.../systopic/TopicPoliciesSystemTopicClient.java | 8 +-
.../broker/transaction/buffer/TransactionMeta.java | 2 +-
.../buffer/impl/TransactionBufferClientImpl.java | 25 +-
.../buffer/impl/TransactionBufferHandlerImpl.java | 27 ++-
.../transaction/pendingack/PendingAckHandle.java | 12 +-
.../pendingack/impl/PendingAckHandleImpl.java | 34 +--
.../pulsar/broker/web/PreInterceptFilter.java | 7 +-
.../pulsar/broker/web/PulsarWebResource.java | 65 +++---
.../pulsar/broker/web/ResponseHandlerFilter.java | 2 +-
.../org/apache/pulsar/broker/web/WebService.java | 15 +-
.../apache/pulsar/client/impl/RawReaderImpl.java | 20 +-
.../apache/pulsar/broker/admin/AdminApiTest.java | 17 +-
.../apache/pulsar/broker/admin/AdminApiTest2.java | 12 +-
.../broker/admin/CreateSubscriptionTest.java | 7 +-
.../broker/admin/IncrementPartitionsTest.java | 16 +-
.../pulsar/broker/admin/PersistentTopicsTest.java | 46 ++--
.../BrokerServiceAutoSubscriptionCreationTest.java | 7 +-
.../BrokerServiceAutoTopicCreationTest.java | 4 +-
.../broker/service/ConsumedLedgersTrimTest.java | 7 +-
.../broker/service/SubscriptionSeekTest.java | 3 -
.../broker/service/TopicTerminationTest.java | 2 -
.../api/AuthorizationProducerConsumerTest.java | 2 -
.../client/api/ClientDeduplicationFailureTest.java | 7 +-
.../api/SimpleTypedProducerConsumerTest.java | 12 +-
.../apache/pulsar/client/api/TopicReaderTest.java | 31 ++-
.../pulsar/client/impl/MultiTopicsReaderTest.java | 14 +-
.../apache/pulsar/client/impl/RawReaderTest.java | 5 +-
.../org/apache/pulsar/client/impl/ReaderTest.java | 34 ++-
.../apache/pulsar/compaction/CompactionTest.java | 5 +-
.../pulsar/client/admin/OffloadProcessStatus.java | 2 +-
.../pulsar/client/admin/internal/TopicsImpl.java | 6 +-
.../pulsar/admin/cli/PulsarAdminToolTest.java | 9 +-
.../pulsar/admin/cli/CmdPersistentTopics.java | 23 +-
.../org/apache/pulsar/admin/cli/CmdTopics.java | 4 -
.../apache/pulsar/client/impl/ConsumerImpl.java | 11 +-
.../client/impl/MultiTopicsConsumerImpl.java | 42 ++--
.../PersistentAcknowledgmentsGroupingTracker.java | 7 +-
.../pulsar/client/impl/ReaderBuilderImpl.java | 5 +-
.../apache/pulsar/client/impl/BuildersTest.java | 5 +-
.../functions/worker/FunctionAssignmentTailer.java | 11 +-
.../functions/worker/FunctionMetaDataManager.java | 23 +-
.../functions/worker/FunctionRuntimeManager.java | 52 ++---
.../pulsar/functions/worker/SchedulerManager.java | 51 ++---
.../pulsar/functions/worker/WorkerService.java | 13 +-
.../worker/FunctionMetaDataTopicTailerTest.java | 6 +-
.../functions/worker/SchedulerManagerTest.java | 28 ++-
.../pulsar/io/debezium/PulsarDatabaseHistory.java | 9 +-
.../io/kafka/connect/PulsarOffsetBackingStore.java | 5 +-
.../pulsar/testclient/PerformanceReader.java | 17 +-
.../org/apache/pulsar/websocket/ReaderHandler.java | 1 -
.../integration/functions/PulsarFunctionsTest.java | 30 ++-
.../pulsar/tests/integration/proxy/TestProxy.java | 6 +-
128 files changed, 1568 insertions(+), 1253 deletions(-)
diff --git a/buildtools/src/main/resources/pulsar/checkstyle.xml b/buildtools/src/main/resources/pulsar/checkstyle.xml
index 1d01c81..82dd052 100644
--- a/buildtools/src/main/resources/pulsar/checkstyle.xml
+++ b/buildtools/src/main/resources/pulsar/checkstyle.xml
@@ -92,6 +92,12 @@ page at http://checkstyle.sourceforge.net/config.html -->
<!-- All Java AST specific tests live under TreeWalker module. -->
<module name="TreeWalker">
+ <module name="SuppressionCommentFilter">
+ <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
+ <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
+ <property name="checkFormat" value="$1"/>
+ </module>
+
<module name="SuppressWarningsHolder" />
<module name="TodoComment">
diff --git a/buildtools/src/main/resources/pulsar/suppressions.xml b/buildtools/src/main/resources/pulsar/suppressions.xml
index 082a8ca..f7d34ab 100644
--- a/buildtools/src/main/resources/pulsar/suppressions.xml
+++ b/buildtools/src/main/resources/pulsar/suppressions.xml
@@ -39,20 +39,6 @@
<!-- suppress all checks in the copied code -->
<suppress checks=".*" files=".+[\\/]com[\\/]scurrilous[\\/]circe[\\/].+\.java"/>
- <!-- TODO: gradually delete below lines to make the whole project conform the checkstyle rule -->
<suppress checks=".*" files="MLDataFormats.java"/>
<suppress checks=".*" files="BitSetRecyclable.java"/>
- <suppress checks=".*" files="Schema.java"/>
- <suppress checks="StaticVariableName" files="AuthData.java"/>
- <suppress checks="MethodName" files="AuthenticationFactory.java"/>
- <suppress checks="ConstantName" files="MessageId.java"/>
- <suppress checks="MethodName" files="TopicsImpl.java"/>
- <suppress checks="MemberName" files="TopicsImpl.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/protocol/.*.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/service/.*.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/stats/.*.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/systopic/.*.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/tools/.*.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/transaction/.*.java"/>
- <suppress checks=".*" files="src/main/java/org/apache/pulsar/broker/web/.*.java"/>
</suppressions>
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java
index d0e2880..878a026 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java
@@ -131,14 +131,15 @@ public abstract class AbstractBaseDispatcher implements Dispatcher {
int batchSize = msgMetadata.getNumMessagesInBatch();
totalMessages += batchSize;
totalBytes += metadataAndPayload.readableBytes();
- totalChunkedMessages += msgMetadata.hasChunkId() ? 1: 0;
+ totalChunkedMessages += msgMetadata.hasChunkId() ? 1 : 0;
batchSizes.setBatchSize(i, batchSize);
if (indexesAcks != null && cursor != null) {
- long[] ackSet = cursor.getDeletedBatchIndexesAsLongArray(PositionImpl.get(entry.getLedgerId(), entry.getEntryId()));
+ long[] ackSet = cursor.getDeletedBatchIndexesAsLongArray(
+ PositionImpl.get(entry.getLedgerId(), entry.getEntryId()));
if (ackSet != null) {
indexesAcks.setIndexesAcks(i, Pair.of(batchSize, ackSet));
} else {
- indexesAcks.setIndexesAcks(i,null);
+ indexesAcks.setIndexesAcks(i, null);
}
}
} finally {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherMultipleConsumers.java
index 23b835e..c7ce59f 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherMultipleConsumers.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherMultipleConsumers.java
@@ -29,6 +29,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
+ *
*/
public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDispatcher {
@@ -38,8 +39,9 @@ public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDi
protected static final int FALSE = 0;
protected static final int TRUE = 1;
- protected static final AtomicIntegerFieldUpdater<AbstractDispatcherMultipleConsumers> IS_CLOSED_UPDATER = AtomicIntegerFieldUpdater
- .newUpdater(AbstractDispatcherMultipleConsumers.class, "isClosed");
+ protected static final AtomicIntegerFieldUpdater<AbstractDispatcherMultipleConsumers> IS_CLOSED_UPDATER =
+ AtomicIntegerFieldUpdater
+ .newUpdater(AbstractDispatcherMultipleConsumers.class, "isClosed");
private volatile int isClosed = FALSE;
private Random random = new Random(42);
@@ -79,7 +81,8 @@ public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDi
* have permits, else broker will consider next priority level consumers.
* Also on the same priority-level, it selects consumer in round-robin manner.
* <p>
- * If subscription has consumer-A with priorityLevel 1 and Consumer-B with priorityLevel 2 then broker will dispatch
+ * If subscription has consumer-A with priorityLevel 1 and Consumer-B with priorityLevel 2
+ * then broker will dispatch
* messages to only consumer-A until it runs out permit and then broker starts dispatching messages to Consumer-B.
* <p>
* Consumer PriorityLevel Permits
@@ -98,8 +101,10 @@ public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDi
*
* Each time getNextConsumer() is called:<p>
* 1. It always starts to traverse from the max-priority consumer (first element) from sorted-list
- * 2. Consumers on same priority-level will be treated equally and it tries to pick one of them in round-robin manner
- * 3. If consumer is not available on given priority-level then only it will go to the next lower priority-level consumers
+ * 2. Consumers on same priority-level will be treated equally and it tries to pick one of them in
+ * round-robin manner
+ * 3. If consumer is not available on given priority-level then only it will go to the next lower priority-level
+ * consumers
* 4. Returns null in case it doesn't find any available consumer
* </pre>
*
@@ -154,7 +159,7 @@ public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDi
/**
- * Finds index of first available consumer which has higher priority then given targetPriority
+ * Finds index of first available consumer which has higher priority then given targetPriority.
*
* @param targetPriority
* @return -1 if couldn't find any available consumer
@@ -174,9 +179,10 @@ public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDi
}
/**
- * Finds index of round-robin available consumer that present on same level as consumer on currentRoundRobinIndex if
- * doesn't find consumer on same level then it finds first available consumer on lower priority level else returns
- * index=-1 if couldn't find any available consumer in the list
+ * Finds index of round-robin available consumer that present on same level as consumer on
+ * currentRoundRobinIndex if doesn't find consumer on same level then it finds first available consumer on lower
+ * priority level else returns
+ * index=-1 if couldn't find any available consumer in the list.
*
* @param currentRoundRobinIndex
* @return
@@ -214,7 +220,7 @@ public abstract class AbstractDispatcherMultipleConsumers extends AbstractBaseDi
}
/**
- * Finds index of first consumer in list which has same priority as given targetPriority
+ * Finds index of first consumer in list which has same priority as given targetPriority.
*
* @param targetPriority
* @return
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherSingleActiveConsumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherSingleActiveConsumer.java
index 48eae73..aab4b14 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherSingleActiveConsumer.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractDispatcherSingleActiveConsumer.java
@@ -35,8 +35,9 @@ import org.slf4j.LoggerFactory;
public abstract class AbstractDispatcherSingleActiveConsumer extends AbstractBaseDispatcher {
protected final String topicName;
- protected static final AtomicReferenceFieldUpdater<AbstractDispatcherSingleActiveConsumer, Consumer> ACTIVE_CONSUMER_UPDATER =
- AtomicReferenceFieldUpdater.newUpdater(AbstractDispatcherSingleActiveConsumer.class, Consumer.class, "activeConsumer");
+ protected static final AtomicReferenceFieldUpdater<AbstractDispatcherSingleActiveConsumer, Consumer>
+ ACTIVE_CONSUMER_UPDATER = AtomicReferenceFieldUpdater.newUpdater(
+ AbstractDispatcherSingleActiveConsumer.class, Consumer.class, "activeConsumer");
private volatile Consumer activeConsumer = null;
protected final CopyOnWriteArrayList<Consumer> consumers;
protected StickyKeyConsumerSelector stickyKeyConsumerSelector;
@@ -142,7 +143,8 @@ public abstract class AbstractDispatcherSingleActiveConsumer extends AbstractBas
}
if (subscriptionType == SubType.Failover && isConsumersExceededOnSubscription()) {
- log.warn("[{}] Attempting to add consumer to subscription which reached max consumers limit", this.topicName);
+ log.warn("[{}] Attempting to add consumer to subscription which reached max consumers limit",
+ this.topicName);
throw new ConsumerBusyException("Subscription reached max consumers limit");
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractReplicator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractReplicator.java
index ff957cc..ad03784 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractReplicator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractReplicator.java
@@ -49,12 +49,13 @@ public abstract class AbstractReplicator {
protected final int producerQueueSize;
protected final ProducerBuilder<byte[]> producerBuilder;
- protected final Backoff backOff = new Backoff(100, TimeUnit.MILLISECONDS, 1, TimeUnit.MINUTES, 0 ,TimeUnit.MILLISECONDS);
+ protected final Backoff backOff = new Backoff(100, TimeUnit.MILLISECONDS, 1, TimeUnit.MINUTES, 0,
+ TimeUnit.MILLISECONDS);
protected final String replicatorPrefix;
- protected static final AtomicReferenceFieldUpdater<AbstractReplicator, State> STATE_UPDATER = AtomicReferenceFieldUpdater
- .newUpdater(AbstractReplicator.class, State.class, "state");
+ protected static final AtomicReferenceFieldUpdater<AbstractReplicator, State> STATE_UPDATER =
+ AtomicReferenceFieldUpdater.newUpdater(AbstractReplicator.class, State.class, "state");
private volatile State state = State.Stopped;
protected enum State {
@@ -62,7 +63,7 @@ public abstract class AbstractReplicator {
}
public AbstractReplicator(String topicName, String replicatorPrefix, String localCluster, String remoteCluster,
- BrokerService brokerService) throws NamingException {
+ BrokerService brokerService) throws NamingException {
validatePartitionedTopic(topicName, brokerService);
this.brokerService = brokerService;
this.topicName = topicName;
@@ -166,7 +167,8 @@ public abstract class AbstractReplicator {
}).exceptionally(ex -> {
long waitTimeMs = backOff.next();
log.warn(
- "[{}][{} -> {}] Exception: '{}' occurred while trying to close the producer. retrying again in {} s",
+ "[{}][{} -> {}] Exception: '{}' occurred while trying to close the producer."
+ + " retrying again in {} s",
topicName, localCluster, remoteCluster, ex.getMessage(), waitTimeMs / 1000.0);
// BackOff before retrying
brokerService.executor().schedule(this::closeProducerAsync, waitTimeMs, TimeUnit.MILLISECONDS);
@@ -234,8 +236,9 @@ public abstract class AbstractReplicator {
* 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
+ * 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.
* </pre>
*
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
index ce56216..1b4a068 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractTopic.java
@@ -22,7 +22,6 @@ import static com.google.common.base.Preconditions.checkArgument;
import static org.apache.bookkeeper.mledger.impl.ManagedLedgerMBeanImpl.ENTRY_LATENCY_BUCKETS_USEC;
import static org.apache.pulsar.broker.cache.ConfigurationCacheService.POLICIES;
import com.google.common.base.MoreObjects;
-
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -34,7 +33,6 @@ import java.util.concurrent.atomic.AtomicLongFieldUpdater;
import java.util.concurrent.atomic.LongAdder;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
-
import org.apache.bookkeeper.mledger.util.StatsBuckets;
import org.apache.pulsar.broker.ServiceConfiguration;
import org.apache.pulsar.broker.admin.AdminResource;
@@ -122,9 +120,12 @@ public abstract class AbstractTopic implements Topic {
this.producers = new ConcurrentHashMap<>();
this.isFenced = false;
this.replicatorPrefix = brokerService.pulsar().getConfiguration().getReplicatorPrefix();
- this.inactiveTopicPolicies.setDeleteWhileInactive(brokerService.pulsar().getConfiguration().isBrokerDeleteInactiveTopicsEnabled());
- this.inactiveTopicPolicies.setMaxInactiveDurationSeconds(brokerService.pulsar().getConfiguration().getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds());
- this.inactiveTopicPolicies.setInactiveTopicDeleteMode(brokerService.pulsar().getConfiguration().getBrokerDeleteInactiveTopicsMode());
+ this.inactiveTopicPolicies.setDeleteWhileInactive(brokerService.pulsar().getConfiguration()
+ .isBrokerDeleteInactiveTopicsEnabled());
+ this.inactiveTopicPolicies.setMaxInactiveDurationSeconds(brokerService.pulsar().getConfiguration()
+ .getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds());
+ this.inactiveTopicPolicies.setInactiveTopicDeleteMode(brokerService.pulsar().getConfiguration()
+ .getBrokerDeleteInactiveTopicsMode());
this.lastActive = System.nanoTime();
Policies policies = null;
try {
@@ -157,7 +158,8 @@ public abstract class AbstractTopic implements Topic {
}
maxProducers = policies.max_producers_per_topic;
}
- maxProducers = maxProducers > 0 ? maxProducers : brokerService.pulsar().getConfiguration().getMaxProducersPerTopic();
+ maxProducers = maxProducers > 0 ? maxProducers : brokerService.pulsar()
+ .getConfiguration().getMaxProducersPerTopic();
if (maxProducers > 0 && maxProducers <= producers.size()) {
return true;
}
@@ -311,7 +313,8 @@ public abstract class AbstractTopic implements Topic {
return schemaRegistryService.getSchema(id)
.thenCompose(schema -> {
if (schema != null) {
- // It's different from `SchemasResource.deleteSchema` because when we delete a topic, the schema
+ // It's different from `SchemasResource.deleteSchema`
+ // because when we delete a topic, the schema
// history is meaningless. But when we delete a schema of a topic, a new schema could be
// registered in the future.
log.info("Delete schema storage of id: {}", id);
@@ -489,7 +492,7 @@ public abstract class AbstractTopic implements Topic {
}
/**
- * it sets cnx auto-readable if producer's cnx is disabled due to publish-throttling
+ * it sets cnx auto-readable if producer's cnx is disabled due to publish-throttling.
*/
protected void enableProducerReadForPublishRateLimiting() {
if (producers != null) {
@@ -547,7 +550,7 @@ public abstract class AbstractTopic implements Topic {
canOverwrite = true;
}
if (canOverwrite) {
- if(!producers.replace(newProducer.getProducerName(), oldProducer, newProducer)) {
+ if (!producers.replace(newProducer.getProducerName(), oldProducer, newProducer)) {
// Met concurrent update, throw exception here so that client can try reconnect later.
throw new BrokerServiceException.NamingException("Producer with name '" + newProducer.getProducerName()
+ "' replace concurrency error");
@@ -607,8 +610,8 @@ public abstract class AbstractTopic implements Topic {
@Override
public boolean isPublishRateExceeded() {
// either topic or broker publish rate exceeded.
- return this.topicPublishRateLimiter.isPublishRateExceeded() ||
- getBrokerPublishRateLimiter().isPublishRateExceeded();
+ return this.topicPublishRateLimiter.isPublishRateExceeded()
+ || getBrokerPublishRateLimiter().isPublishRateExceeded();
}
@Override
@@ -639,7 +642,8 @@ public abstract class AbstractTopic implements Topic {
//if topic-level policy exists, try to use topic-level publish rate policy
TopicPolicies topicPolicies = getTopicPolicies(TopicName.get(topic));
if (topicPolicies != null && topicPolicies.isPublishRateSet()) {
- log.info("Using topic policy publish rate instead of namespace level topic publish rate on topic {}", this.topic);
+ log.info("Using topic policy publish rate instead of namespace level topic publish rate on topic {}",
+ this.topic);
updatePublishDispatcher(topicPolicies.getPublishRate());
return;
}
@@ -662,7 +666,9 @@ public abstract class AbstractTopic implements Topic {
updatePublishDispatcher(publishRate);
}
- public long getMsgInCounter() { return this.msgInCounter.longValue(); }
+ public long getMsgInCounter() {
+ return this.msgInCounter.longValue();
+ }
public long getBytesInCounter() {
return this.bytesInCounter.longValue();
@@ -719,8 +725,8 @@ public abstract class AbstractTopic implements Topic {
log.warn("Topic {} policies cache have not init.", topicName.getPartitionedTopicName());
return null;
} catch (NullPointerException e) {
- log.warn("Topic level policies are not enabled. " +
- "Please refer to systemTopicEnabled and topicLevelPoliciesEnabled on broker.conf");
+ log.warn("Topic level policies are not enabled. "
+ + "Please refer to systemTopicEnabled and topicLevelPoliciesEnabled on broker.conf");
return null;
}
}
@@ -755,7 +761,8 @@ public abstract class AbstractTopic implements Topic {
|| this.topicPublishRateLimiter == PublishRateLimiter.DISABLED_RATE_LIMITER) {
// create new rateLimiter if rate-limiter is disabled
if (preciseTopicPublishRateLimitingEnable) {
- this.topicPublishRateLimiter = new PrecisPublishLimiter(publishRate, ()-> this.enableCnxAutoRead());
+ this.topicPublishRateLimiter = new PrecisPublishLimiter(publishRate,
+ () -> this.enableCnxAutoRead());
} else {
this.topicPublishRateLimiter = new PublishRateLimiterImpl(publishRate);
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BacklogQuotaManager.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BacklogQuotaManager.java
index 5b5e6ab..c3f2281 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BacklogQuotaManager.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BacklogQuotaManager.java
@@ -75,18 +75,19 @@ public class BacklogQuotaManager {
public BacklogQuota getBacklogQuota(TopicName topicName) {
String policyPath = AdminResource.path(POLICIES, topicName.getNamespace());
if (!isTopicLevelPoliciesEnable) {
- return getBacklogQuota(topicName.getNamespace(),policyPath);
+ return getBacklogQuota(topicName.getNamespace(), policyPath);
}
try {
return Optional.ofNullable(pulsar.getTopicPoliciesService().getTopicPolicies(topicName))
.map(TopicPolicies::getBackLogQuotaMap)
.map(map -> map.get(BacklogQuotaType.destination_storage.name()))
- .orElseGet(() -> getBacklogQuota(topicName.getNamespace(),policyPath));
+ .orElseGet(() -> getBacklogQuota(topicName.getNamespace(), policyPath));
} catch (Exception e) {
- log.warn("Failed to read topic policies data, will apply the namespace backlog quota: topicName={}", topicName, e);
+ log.warn("Failed to read topic policies data, will apply the namespace backlog quota: topicName={}",
+ topicName, e);
}
- return getBacklogQuota(topicName.getNamespace(),policyPath);
+ return getBacklogQuota(topicName.getNamespace(), policyPath);
}
public long getBacklogQuotaLimit(TopicName topicName) {
@@ -94,10 +95,9 @@ public class BacklogQuotaManager {
}
/**
- * Handle exceeded backlog by using policies set in the zookeeper for given topic
+ * Handle exceeded backlog by using policies set in the zookeeper for given topic.
*
- * @param persistentTopic
- * Topic on which backlog has been exceeded
+ * @param persistentTopic Topic on which backlog has been exceeded
*/
public void handleExceededBacklogQuota(PersistentTopic persistentTopic) {
TopicName topicName = TopicName.get(persistentTopic.getName());
@@ -118,7 +118,7 @@ public class BacklogQuotaManager {
}
/**
- * Drop the backlog on the topic
+ * Drop the backlog on the topic.
*
* @param persistentTopic
* The topic from which backlog should be dropped
@@ -192,7 +192,7 @@ public class BacklogQuotaManager {
}
/**
- * Disconnect producers on given topic
+ * Disconnect producers on given topic.
*
* @param persistentTopic
* The topic on which all producers should be disconnected
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java
index b43ec4d..77993d1 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java
@@ -182,7 +182,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
// Multi-layer topics map:
// Namespace --> Bundle --> topicName --> topic
- private final ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, Topic>>> multiLayerTopicsMap;
+ private final ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, Topic>>>
+ multiLayerTopicsMap;
private int numberOfNamespaceBundles = 0;
private final EventLoopGroup acceptorGroup;
@@ -190,7 +191,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
private final OrderedExecutor topicOrderedExecutor;
// offline topic backlog cache
private final ConcurrentOpenHashMap<TopicName, PersistentOfflineTopicStats> offlineTopicStatCache;
- private static final ConcurrentOpenHashMap<String, ConfigField> dynamicConfigurationMap = prepareDynamicConfigurationMap();
+ private static final ConcurrentOpenHashMap<String, ConfigField> dynamicConfigurationMap =
+ prepareDynamicConfigurationMap();
private final ConcurrentOpenHashMap<String, Consumer<?>> configRegisteredListeners;
private final ConcurrentLinkedQueue<Pair<String, CompletableFuture<Optional<Topic>>>> pendingTopicLoadingQueue;
@@ -218,7 +220,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
private DistributedIdGenerator producerNameGenerator;
- public final static String producerNameGeneratorPath = "/counters/producer-name";
+ public final static String PRODUCER_NAME_GENERATOR_PATH = "/counters/producer-name";
private final BacklogQuotaManager backlogQuotaManager;
@@ -251,10 +253,11 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
public BrokerService(PulsarService pulsar) throws Exception {
this.pulsar = pulsar;
- this.maxMessagePublishBufferBytes = pulsar.getConfiguration().getMaxMessagePublishBufferSizeInMB() > 0 ?
- pulsar.getConfiguration().getMaxMessagePublishBufferSizeInMB() * 1024L * 1024L : -1;
+ this.maxMessagePublishBufferBytes = pulsar.getConfiguration().getMaxMessagePublishBufferSizeInMB() > 0
+ ? pulsar.getConfiguration().getMaxMessagePublishBufferSizeInMB() * 1024L * 1024L : -1;
this.resumeProducerReadMessagePublishBufferBytes = this.maxMessagePublishBufferBytes / 2;
- this.preciseTopicPublishRateLimitingEnable = pulsar.getConfiguration().isPreciseTopicPublishRateLimiterEnable();
+ this.preciseTopicPublishRateLimitingEnable =
+ pulsar.getConfiguration().isPreciseTopicPublishRateLimiterEnable();
this.managedLedgerFactory = pulsar.getManagedLedgerFactory();
this.topics = new ConcurrentOpenHashMap<>();
this.replicationClients = new ConcurrentOpenHashMap<>();
@@ -279,7 +282,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
this.workerGroup = EventLoopUtil.newEventLoopGroup(numThreads, workersThreadFactory);
this.statsUpdater = Executors
.newSingleThreadScheduledExecutor(new DefaultThreadFactory("pulsar-stats-updater"));
- this.authorizationService = new AuthorizationService(pulsar.getConfiguration(), pulsar.getConfigurationCache());
+ this.authorizationService = new AuthorizationService(
+ pulsar.getConfiguration(), pulsar.getConfigurationCache());
if (pulsar.getConfigurationCache() != null) {
pulsar.getConfigurationCache().policiesCache().registerListener(this);
@@ -290,9 +294,11 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
this.messageExpiryMonitor = Executors
.newSingleThreadScheduledExecutor(new DefaultThreadFactory("pulsar-msg-expiry-monitor"));
this.compactionMonitor =
- Executors.newSingleThreadScheduledExecutor(new DefaultThreadFactory("pulsar-compaction-monitor"));
+ Executors.newSingleThreadScheduledExecutor(
+ new DefaultThreadFactory("pulsar-compaction-monitor"));
this.messagePublishBufferMonitor =
- Executors.newSingleThreadScheduledExecutor(new DefaultThreadFactory("pulsar-publish-buffer-monitor"));
+ Executors.newSingleThreadScheduledExecutor(
+ new DefaultThreadFactory("pulsar-publish-buffer-monitor"));
this.consumedLedgersMonitor = Executors
.newSingleThreadScheduledExecutor(new DefaultThreadFactory("consumed-Ledgers-monitor"));
this.ledgerFullMonitor =
@@ -323,12 +329,14 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
log.info("Enabling per-broker unack-message limit {} and dispatcher-limit {} on blocked-broker",
maxUnackedMessages, maxUnackedMsgsPerDispatcher);
// block misbehaving dispatcher by checking periodically
- pulsar.getExecutor().scheduleAtFixedRate(() -> checkUnAckMessageDispatching(), 600, 30, TimeUnit.SECONDS);
+ pulsar.getExecutor().scheduleAtFixedRate(() -> checkUnAckMessageDispatching(),
+ 600, 30, TimeUnit.SECONDS);
} else {
this.maxUnackedMessages = 0;
this.maxUnackedMsgsPerDispatcher = 0;
log.info(
- "Disabling per broker unack-msg blocking due invalid unAckMsgSubscriptionPercentageLimitOnBrokerBlocked {} ",
+ "Disabling per broker unack-msg blocking due invalid"
+ + " unAckMsgSubscriptionPercentageLimitOnBrokerBlocked {} ",
pulsar.getConfiguration().getMaxUnackedMessagesPerSubscriptionOnBrokerBlocked());
}
@@ -345,7 +353,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
- lookupRequestSemaphore.get().availablePermits())
.register();
- this.pendingTopicLoadRequests = ObserverGauge.build("pulsar_broker_topic_load_pending_requests", "-")
+ this.pendingTopicLoadRequests = ObserverGauge.build(
+ "pulsar_broker_topic_load_pending_requests", "-")
.supplier(() -> pulsar.getConfig().getMaxConcurrentTopicLoadRequest()
- topicLoadRequestSemaphore.get().availablePermits())
.register();
@@ -393,7 +402,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
public void start() throws Exception {
- this.producerNameGenerator = new DistributedIdGenerator(pulsar.getZkClient(), producerNameGeneratorPath,
+ this.producerNameGenerator = new DistributedIdGenerator(pulsar.getZkClient(), PRODUCER_NAME_GENERATOR_PATH,
pulsar.getConfiguration().getClusterName());
ServerBootstrap bootstrap = defaultServerBootstrap.clone();
@@ -419,7 +428,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
ServerBootstrap tlsBootstrap = bootstrap.clone();
tlsBootstrap.childHandler(new PulsarChannelInitializer(pulsar, true));
try {
- listenChannelTls = tlsBootstrap.bind(new InetSocketAddress(pulsar.getBindAddress(), tlsPort.get())).sync()
+ listenChannelTls = tlsBootstrap.bind(new InetSocketAddress(
+ pulsar.getBindAddress(), tlsPort.get())).sync()
.channel();
log.info("Started Pulsar Broker TLS service on {} - TLS provider: {}", listenChannelTls.localAddress(),
SslContext.defaultServerProvider());
@@ -460,8 +470,10 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
int interval = pulsar().getConfiguration().getBrokerDeduplicationSnapshotFrequencyInSeconds();
if (interval > 0 && pulsar().getConfiguration().isBrokerDeduplicationEnabled()) {
this.deduplicationSnapshotMonitor =
- Executors.newSingleThreadScheduledExecutor(new DefaultThreadFactory("deduplication-snapshot-monitor"));
- deduplicationSnapshotMonitor.scheduleAtFixedRate(safeRun(() -> forEachTopic(Topic::checkDeduplicationSnapshot))
+ Executors.newSingleThreadScheduledExecutor(new DefaultThreadFactory(
+ "deduplication-snapshot-monitor"));
+ deduplicationSnapshotMonitor.scheduleAtFixedRate(safeRun(() -> forEachTopic(
+ Topic::checkDeduplicationSnapshot))
, interval, interval, TimeUnit.SECONDS);
}
}
@@ -476,15 +488,18 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
// Deduplication info checker
long duplicationCheckerIntervalInSeconds = TimeUnit.MINUTES
.toSeconds(pulsar().getConfiguration().getBrokerDeduplicationProducerInactivityTimeoutMinutes()) / 3;
- inactivityMonitor.scheduleAtFixedRate(safeRun(this::checkMessageDeduplicationInfo), duplicationCheckerIntervalInSeconds,
+ inactivityMonitor.scheduleAtFixedRate(safeRun(this::checkMessageDeduplicationInfo),
+ duplicationCheckerIntervalInSeconds,
duplicationCheckerIntervalInSeconds, TimeUnit.SECONDS);
// Inactive subscriber checker
if (pulsar().getConfiguration().getSubscriptionExpiryCheckIntervalInMinutes() > 0) {
long subscriptionExpiryCheckIntervalInSeconds =
- TimeUnit.MINUTES.toSeconds(pulsar().getConfiguration().getSubscriptionExpiryCheckIntervalInMinutes());
+ TimeUnit.MINUTES.toSeconds(pulsar().getConfiguration()
+ .getSubscriptionExpiryCheckIntervalInMinutes());
inactivityMonitor.scheduleAtFixedRate(safeRun(this::checkInactiveSubscriptions),
- subscriptionExpiryCheckIntervalInSeconds, subscriptionExpiryCheckIntervalInSeconds, TimeUnit.SECONDS);
+ subscriptionExpiryCheckIntervalInSeconds,
+ subscriptionExpiryCheckIntervalInSeconds, TimeUnit.SECONDS);
}
}
@@ -700,8 +715,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
* requests.</li>
* <li>Second it starts unloading namespace bundle one by one without closing the connection in order to avoid
* disruption for other namespacebundles which are sharing the same connection from the same client.</li>
- * <ul>
- *
+ * </ul>
*/
public void unloadNamespaceBundlesGracefully() {
try {
@@ -898,7 +912,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
private <T> CompletableFuture<T> futureWithDeadline() {
- return futureWithDeadline(60000L, TimeUnit.MILLISECONDS, new TimeoutException("Future didn't finish within deadline"));
+ return futureWithDeadline(60000L, TimeUnit.MILLISECONDS,
+ new TimeoutException("Future didn't finish within deadline"));
}
public PulsarClient getReplicationClient(String cluster) {
@@ -1009,13 +1024,15 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
*/
protected CompletableFuture<Optional<Topic>> loadOrCreatePersistentTopic(final String topic,
boolean createIfMissing) throws RuntimeException {
- final CompletableFuture<Optional<Topic>> topicFuture = futureWithDeadline(pulsar.getConfiguration().getTopicLoadTimeoutSeconds(),
+ final CompletableFuture<Optional<Topic>> topicFuture = futureWithDeadline(
+ pulsar.getConfiguration().getTopicLoadTimeoutSeconds(),
TimeUnit.SECONDS, new TimeoutException("Failed to load topic within timeout"));
if (!pulsar.getConfiguration().isEnablePersistentTopics()) {
if (log.isDebugEnabled()) {
log.debug("Broker is unable to load persistent topic {}", topic);
}
- topicFuture.completeExceptionally(new NotAllowedException("Broker is not unable to load persistent topic"));
+ topicFuture.completeExceptionally(new NotAllowedException(
+ "Broker is not unable to load persistent topic"));
return topicFuture;
}
@@ -1036,7 +1053,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
return null;
});
} else {
- pendingTopicLoadingQueue.add(new ImmutablePair<String, CompletableFuture<Optional<Topic>>>(topic, topicFuture));
+ pendingTopicLoadingQueue.add(new ImmutablePair<>(topic, topicFuture));
if (log.isDebugEnabled()) {
log.debug("topic-loading for {} added into pending queue", topic);
}
@@ -1046,7 +1063,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
return topicFuture;
}
- private void createPersistentTopic(final String topic, boolean createIfMissing, CompletableFuture<Optional<Topic>> topicFuture) {
+ private void createPersistentTopic(final String topic, boolean createIfMissing,
+ CompletableFuture<Optional<Topic>> topicFuture) {
final long topicCreateTimeMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
TopicName topicName = TopicName.get(topic);
@@ -1085,7 +1103,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
topicFuture.complete(Optional.of(persistentTopic));
}).exceptionally((ex) -> {
log.warn(
- "Replication or dedup check failed. Removing topic from topics list {}, {}",
+ "Replication or dedup check failed."
+ + " Removing topic from topics list {}, {}",
topic, ex);
persistentTopic.stopReplProducers().whenComplete((v, exception) -> {
topics.remove(topic, topicFuture);
@@ -1203,7 +1222,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
managedLedgerConfig.setPassword(serviceConfig.getManagedLedgerPassword());
managedLedgerConfig.setMaxUnackedRangesToPersist(serviceConfig.getManagedLedgerMaxUnackedRangesToPersist());
- managedLedgerConfig.setMaxUnackedRangesToPersistInZk(serviceConfig.getManagedLedgerMaxUnackedRangesToPersistInZooKeeper());
+ managedLedgerConfig.setMaxUnackedRangesToPersistInZk(
+ serviceConfig.getManagedLedgerMaxUnackedRangesToPersistInZooKeeper());
managedLedgerConfig.setMaxEntriesPerLedger(serviceConfig.getManagedLedgerMaxEntriesPerLedger());
managedLedgerConfig.setMinimumRolloverTime(serviceConfig.getManagedLedgerMinLedgerRolloverTimeMinutes(),
TimeUnit.MINUTES);
@@ -1247,8 +1267,10 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
managedLedgerConfig.setLedgerOffloader(pulsar.getManagedLedgerOffloader(namespace, offloadPolicies));
}
- managedLedgerConfig.setDeletionAtBatchIndexLevelEnabled(serviceConfig.isAcknowledgmentAtBatchIndexLevelEnabled());
- managedLedgerConfig.setNewEntriesCheckDelayInMillis(serviceConfig.getManagedLedgerNewEntriesCheckDelayInMillis());
+ managedLedgerConfig.setDeletionAtBatchIndexLevelEnabled(
+ serviceConfig.isAcknowledgmentAtBatchIndexLevelEnabled());
+ managedLedgerConfig.setNewEntriesCheckDelayInMillis(
+ serviceConfig.getManagedLedgerNewEntriesCheckDelayInMillis());
future.complete(managedLedgerConfig);
@@ -1424,7 +1446,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
/**
- * Iterates over all loaded topics in the broker
+ * Iterates over all loaded topics in the broker.
*/
public void forEachTopic(Consumer<Topic> consumer) {
topics.forEach((n, t) -> {
@@ -1509,13 +1531,15 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
/**
- * Unload all the topic served by the broker service under the given service unit
+ * Unload all the topic served by the broker service under the given service unit.
*
* @param serviceUnit
- * @param closeWithoutWaitingClientDisconnect don't wait for clients to disconnect and forcefully close managed-ledger
+ * @param closeWithoutWaitingClientDisconnect don't wait for clients to disconnect
+ * and forcefully close managed-ledger
* @return
*/
- private CompletableFuture<Integer> unloadServiceUnit(NamespaceBundle serviceUnit, boolean closeWithoutWaitingClientDisconnect) {
+ private CompletableFuture<Integer> unloadServiceUnit(NamespaceBundle serviceUnit,
+ boolean closeWithoutWaitingClientDisconnect) {
List<CompletableFuture<Void>> closeFutures = Lists.newArrayList();
topics.forEach((name, topicFuture) -> {
TopicName topicName = TopicName.get(name);
@@ -1523,7 +1547,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
// Topic needs to be unloaded
log.info("[{}] Unloading topic", topicName);
closeFutures.add(topicFuture
- .thenCompose(t -> t.isPresent() ? t.get().close(closeWithoutWaitingClientDisconnect) : CompletableFuture.completedFuture(null)));
+ .thenCompose(t -> t.isPresent() ? t.get().close(closeWithoutWaitingClientDisconnect)
+ : CompletableFuture.completedFuture(null)));
}
});
@@ -1725,10 +1750,12 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
// (3) Listener Registration
// add listener on "maxConcurrentLookupRequest" value change
registerConfigurationListener("maxConcurrentLookupRequest",
- (maxConcurrentLookupRequest) -> lookupRequestSemaphore.set(new Semaphore((int) maxConcurrentLookupRequest, false)));
+ (maxConcurrentLookupRequest) -> lookupRequestSemaphore.set(
+ new Semaphore((int) maxConcurrentLookupRequest, false)));
// add listener on "maxConcurrentTopicLoadRequest" value change
registerConfigurationListener("maxConcurrentTopicLoadRequest",
- (maxConcurrentTopicLoadRequest) -> topicLoadRequestSemaphore.set(new Semaphore((int) maxConcurrentTopicLoadRequest, false)));
+ (maxConcurrentTopicLoadRequest) -> topicLoadRequestSemaphore.set(
+ new Semaphore((int) maxConcurrentTopicLoadRequest, false)));
registerConfigurationListener("loadManagerClassName", className -> {
try {
final LoadManager newLoadManager = LoadManager.create(pulsar);
@@ -1762,31 +1789,35 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
});
// add listener to update message-dispatch-rate in msg for replicator
- registerConfigurationListener("dispatchThrottlingRatePerReplicatorInMsg", (dispatchRatePerTopicInMsg) -> {
- updateReplicatorMessageDispatchRate();
- });
+ registerConfigurationListener("dispatchThrottlingRatePerReplicatorInMsg",
+ (dispatchRatePerTopicInMsg) -> {
+ updateReplicatorMessageDispatchRate();
+ });
// add listener to update message-dispatch-rate in byte for replicator
- registerConfigurationListener("dispatchThrottlingRatePerReplicatorInByte", (dispatchRatePerTopicInByte) -> {
- updateReplicatorMessageDispatchRate();
- });
+ registerConfigurationListener("dispatchThrottlingRatePerReplicatorInByte",
+ (dispatchRatePerTopicInByte) -> {
+ updateReplicatorMessageDispatchRate();
+ });
// add listener to notify broker publish-rate monitoring
- registerConfigurationListener("brokerPublisherThrottlingTickTimeMillis", (publisherThrottlingTickTimeMillis) -> {
- setupBrokerPublishRateLimiterMonitor();
- });
+ registerConfigurationListener("brokerPublisherThrottlingTickTimeMillis",
+ (publisherThrottlingTickTimeMillis) -> {
+ setupBrokerPublishRateLimiterMonitor();
+ });
// add listener to notify broker publish-rate dynamic config
registerConfigurationListener("brokerPublisherThrottlingMaxMessageRate",
- (brokerPublisherThrottlingMaxMessageRate) ->
- updateBrokerPublisherThrottlingMaxRate());
+ (brokerPublisherThrottlingMaxMessageRate) ->
+ updateBrokerPublisherThrottlingMaxRate());
registerConfigurationListener("brokerPublisherThrottlingMaxByteRate",
- (brokerPublisherThrottlingMaxByteRate) ->
- updateBrokerPublisherThrottlingMaxRate());
+ (brokerPublisherThrottlingMaxByteRate) ->
+ updateBrokerPublisherThrottlingMaxRate());
// add listener to notify topic publish-rate monitoring
if (!preciseTopicPublishRateLimitingEnable) {
- registerConfigurationListener("topicPublisherThrottlingTickTimeMillis", (publisherThrottlingTickTimeMillis) -> {
- setupTopicPublishRateLimiterMonitor();
- });
+ registerConfigurationListener("topicPublisherThrottlingTickTimeMillis",
+ (publisherThrottlingTickTimeMillis) -> {
+ setupTopicPublishRateLimiterMonitor();
+ });
}
// add more listeners here
@@ -1879,7 +1910,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
/**
* Allows a listener to listen on update of {@link ServiceConfiguration} change, so listener can take appropriate
* action if any specific config-field value has been changed.
- * </p>
+ *
* On notification, listener should first check if config value has been changed and after taking appropriate
* action, listener should update config value with new value if it has been changed (so, next time listener can
* compare values on configMap change).
@@ -2081,8 +2112,9 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
- public CompletableFuture<PartitionedTopicMetadata> fetchPartitionedTopicMetadataCheckAllowAutoCreationAsync(TopicName topicName) {
- if(pulsar.getNamespaceService() == null){
+ public CompletableFuture<PartitionedTopicMetadata> fetchPartitionedTopicMetadataCheckAllowAutoCreationAsync(
+ TopicName topicName) {
+ if (pulsar.getNamespaceService() == null) {
return FutureUtil.failedFuture(new NamingException("namespace service is not ready"));
}
return pulsar.getNamespaceService().checkTopicExists(topicName)
@@ -2107,8 +2139,10 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
private CompletableFuture<PartitionedTopicMetadata> createDefaultPartitionedTopicAsync(TopicName topicName) {
final int defaultNumPartitions = pulsar.getBrokerService().getDefaultNumPartitions(topicName);
final int maxPartitions = pulsar().getConfig().getMaxNumPartitionsPerPartitionedTopic();
- checkArgument(defaultNumPartitions > 0, "Default number of partitions should be more than 0");
- checkArgument(maxPartitions <= 0 || defaultNumPartitions <= maxPartitions, "Number of partitions should be less than or equal to " + maxPartitions);
+ checkArgument(defaultNumPartitions > 0,
+ "Default number of partitions should be more than 0");
+ checkArgument(maxPartitions <= 0 || defaultNumPartitions <= maxPartitions,
+ "Number of partitions should be less than or equal to " + maxPartitions);
PartitionedTopicMetadata configMetadata = new PartitionedTopicMetadata(defaultNumPartitions);
CompletableFuture<PartitionedTopicMetadata> partitionedTopicFuture = futureWithDeadline();
@@ -2164,13 +2198,14 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
return topicOrderedExecutor;
}
- public ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, Topic>>> getMultiLayerTopicMap() {
+ public ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, Topic>>>
+ getMultiLayerTopicMap() {
return multiLayerTopicsMap;
}
/**
* If per-broker unacked message reached to limit then it blocks dispatcher if its unacked message limit has been
- * reached to {@link #maxUnackedMsgsPerDispatcher}
+ * reached to {@link #maxUnackedMsgsPerDispatcher}.
*
* @param dispatcher
* @param numberOfMessages
@@ -2235,8 +2270,9 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
forEachTopic(topic -> {
topic.getSubscriptions().forEach((subName, persistentSubscription) -> {
if (persistentSubscription.getDispatcher() instanceof PersistentDispatcherMultipleConsumers) {
- PersistentDispatcherMultipleConsumers dispatcher = (PersistentDispatcherMultipleConsumers) persistentSubscription
- .getDispatcher();
+ PersistentDispatcherMultipleConsumers dispatcher =
+ (PersistentDispatcherMultipleConsumers) persistentSubscription
+ .getDispatcher();
int dispatcherUnAckMsgs = dispatcher.getTotalUnackedMessages();
if (dispatcherUnAckMsgs > maxUnackedMsgsPerDispatcher) {
log.info("[{}] Blocking dispatcher due to reached max broker limit {}",
@@ -2253,7 +2289,7 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
/**
- * Unblocks the dispatchers and removes it from the {@link #blockedDispatchers} list
+ * Unblocks the dispatchers and removes it from the {@link #blockedDispatchers} list.
*
* @param dispatcherList
*/
@@ -2386,7 +2422,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
} catch (Throwable t) {
// Ignoring since if we don't have policies, we fallback on the default
- log.warn("Got exception when reading autoTopicCreateOverride policy for {}: {};", topicName, t.getMessage(), t);
+ log.warn("Got exception when reading autoTopicCreateOverride policy for {}: {};",
+ topicName, t.getMessage(), t);
return null;
}
log.debug("No autoTopicCreateOverride policy found for {}", topicName);
@@ -2399,7 +2436,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
public boolean isAllowAutoSubscriptionCreation(final TopicName topicName) {
- AutoSubscriptionCreationOverride autoSubscriptionCreationOverride = getAutoSubscriptionCreationOverride(topicName);
+ AutoSubscriptionCreationOverride autoSubscriptionCreationOverride =
+ getAutoSubscriptionCreationOverride(topicName);
if (autoSubscriptionCreationOverride != null) {
return autoSubscriptionCreationOverride.allowAutoSubscriptionCreation;
} else {
@@ -2417,7 +2455,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
}
} catch (Throwable t) {
// Ignoring since if we don't have policies, we fallback on the default
- log.warn("Got exception when reading autoSubscriptionCreateOverride policy for {}: {};", topicName, t.getMessage(), t);
+ log.warn("Got exception when reading autoSubscriptionCreateOverride policy for {}: {};",
+ topicName, t.getMessage(), t);
return null;
}
log.debug("No autoSubscriptionCreateOverride policy found for {}", topicName);
@@ -2444,8 +2483,8 @@ public class BrokerService implements Closeable, ZooKeeperCacheListener<Policies
log.warn("Topic {} policies cache have not init.", topicName.getPartitionedTopicName());
return null;
} catch (RestException | NullPointerException e) {
- log.warn("Topic level policies are not enabled. " +
- "Please refer to systemTopicEnabled and topicLevelPoliciesEnabled on broker.conf");
+ log.warn("Topic level policies are not enabled. "
+ + "Please refer to systemTopicEnabled and topicLevelPoliciesEnabled on broker.conf");
return null;
}
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerServiceException.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerServiceException.java
index 75d8b39..8c391ef 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerServiceException.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerServiceException.java
@@ -26,9 +26,7 @@ import org.apache.pulsar.transaction.common.exception.TransactionConflictExcepti
import org.apache.pulsar.transaction.coordinator.exceptions.CoordinatorException;
/**
- * Base type of exception thrown by Pulsar Broker Service
- *
- *
+ * Base type of exception thrown by Pulsar Broker Service.
*/
@SuppressWarnings("serial")
public class BrokerServiceException extends Exception {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java
index 2762748..cb25716 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Consumer.java
@@ -60,7 +60,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A Consumer is a consumer currently connected and associated with a Subscription
+ * A Consumer is a consumer currently connected and associated with a Subscription.
*/
public class Consumer {
private final Subscription subscription;
@@ -207,8 +207,10 @@ public class Consumer {
*
* @return a SendMessageInfo object that contains the detail of what was sent to consumer
*/
- public Future<Void> sendMessages(final List<Entry> entries, EntryBatchSizes batchSizes, EntryBatchIndexesAcks batchIndexesAcks,
- int totalMessages, long totalBytes, long totalChunkedMessages, RedeliveryTracker redeliveryTracker) {
+ public Future<Void> sendMessages(final List<Entry> entries, EntryBatchSizes batchSizes,
+ EntryBatchIndexesAcks batchIndexesAcks,
+ int totalMessages, long totalBytes, long totalChunkedMessages,
+ RedeliveryTracker redeliveryTracker) {
this.lastConsumedTimestamp = System.currentTimeMillis();
if (entries.isEmpty() || totalMessages == 0) {
@@ -240,8 +242,8 @@ public class Consumer {
// calculate avg message per entry
int tmpAvgMessagesPerEntry = AVG_MESSAGES_PER_ENTRY.get(this);
- tmpAvgMessagesPerEntry = (int) Math.round(tmpAvgMessagesPerEntry * avgPercent +
- (1 - avgPercent) * totalMessages / entries.size());
+ tmpAvgMessagesPerEntry = (int) Math.round(tmpAvgMessagesPerEntry * avgPercent
+ + (1 - avgPercent) * totalMessages / entries.size());
AVG_MESSAGES_PER_ENTRY.set(this, tmpAvgMessagesPerEntry);
// reduce permit and increment unackedMsg count with total number of messages in batch-msgs
@@ -311,7 +313,7 @@ public class Consumer {
public CompletableFuture<Void> messageAcked(CommandAck ack) {
this.lastAckedTimestamp = System.currentTimeMillis();
- Map<String,Long> properties = Collections.emptyMap();
+ Map<String, Long> properties = Collections.emptyMap();
if (ack.getPropertiesCount() > 0) {
properties = ack.getPropertiesList().stream()
.collect(Collectors.toMap(PulsarApi.KeyLongValue::getKey,
@@ -324,20 +326,23 @@ public class Consumer {
}
if (Subscription.isIndividualAckMode(subType)) {
- log.warn("[{}] [{}] Received cumulative ack on shared subscription, ignoring", subscription, consumerId);
+ log.warn("[{}] [{}] Received cumulative ack on shared subscription, ignoring",
+ subscription, consumerId);
}
PositionImpl position = PositionImpl.earliest;
if (ack.getMessageIdCount() == 1) {
MessageIdData msgId = ack.getMessageId(0);
if (msgId.getAckSetCount() > 0) {
- position = PositionImpl.get(msgId.getLedgerId(), msgId.getEntryId(), SafeCollectionUtils.longListToArray(msgId.getAckSetList()));
+ position = PositionImpl.get(msgId.getLedgerId(), msgId.getEntryId(),
+ SafeCollectionUtils.longListToArray(msgId.getAckSetList()));
} else {
position = PositionImpl.get(msgId.getLedgerId(), msgId.getEntryId());
}
}
if (ack.hasTxnidMostBits() && ack.hasTxnidLeastBits()) {
List<PositionImpl> positionsAcked = Collections.singletonList(position);
- return transactionCumulativeAcknowledge(ack.getTxnidMostBits(), ack.getTxnidLeastBits(), positionsAcked);
+ return transactionCumulativeAcknowledge(ack.getTxnidMostBits(),
+ ack.getTxnidLeastBits(), positionsAcked);
} else {
List<Position> positionsAcked = Collections.singletonList(position);
subscription.acknowledgeMessage(positionsAcked, AckType.Cumulative, properties);
@@ -353,7 +358,7 @@ public class Consumer {
}
//this method is for individual ack not carry the transaction
- private CompletableFuture<Void> individualAckNormal(CommandAck ack, Map<String,Long> properties) {
+ private CompletableFuture<Void> individualAckNormal(CommandAck ack, Map<String, Long> properties) {
List<Position> positionsAcked = new ArrayList<>();
List<PositionImpl> checkBatchPositions = null;
for (int i = 0; i < ack.getMessageIdCount(); i++) {
@@ -640,7 +645,8 @@ public class Consumer {
Consumer ackOwnedConsumer = null;
if (pendingAcks.get(position.getLedgerId(), position.getEntryId()) == null) {
for (Consumer consumer : subscription.getConsumers()) {
- if (!consumer.equals(this) && consumer.getPendingAcks().containsKey(position.getLedgerId(), position.getEntryId())) {
+ if (!consumer.equals(this) && consumer.getPendingAcks().containsKey(position.getLedgerId(),
+ position.getEntryId())) {
ackOwnedConsumer = consumer;
break;
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Dispatcher.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Dispatcher.java
index 9db773a..b3f3406 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Dispatcher.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Dispatcher.java
@@ -33,7 +33,7 @@ public interface Dispatcher {
void removeConsumer(Consumer consumer) throws BrokerServiceException;
/**
- * Indicates that this consumer is now ready to receive more messages
+ * Indicates that this consumer is now ready to receive more messages.
*
* @param consumer
*/
@@ -46,7 +46,7 @@ public interface Dispatcher {
boolean canUnsubscribe(Consumer consumer);
/**
- * mark dispatcher closed to stop new incoming requests and disconnect all consumers
+ * mark dispatcher closed to stop new incoming requests and disconnect all consumers.
*
* @return
*/
@@ -55,12 +55,12 @@ public interface Dispatcher {
boolean isClosed();
/**
- * Disconnect active consumers
+ * Disconnect active consumers.
*/
CompletableFuture<Void> disconnectActiveConsumers(boolean isResetCursor);
/**
- * disconnect all consumers
+ * disconnect all consumers.
*
* @return
*/
@@ -73,7 +73,7 @@ public interface Dispatcher {
void resetCloseFuture();
/**
- * mark dispatcher open to serve new incoming requests
+ * mark dispatcher open to serve new incoming requests.
*/
void reset();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeAutoSplitStickyKeyConsumerSelector.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeAutoSplitStickyKeyConsumerSelector.java
index 4f5afba..e1cc2b8 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeAutoSplitStickyKeyConsumerSelector.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeAutoSplitStickyKeyConsumerSelector.java
@@ -156,7 +156,9 @@ public class HashRangeAutoSplitStickyKeyConsumerSelector implements StickyKeyCon
}
private boolean is2Power(int num) {
- if(num < 2) return false;
+ if (num < 2) {
+ return false;
+ }
return (num & num - 1) == 0;
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeExclusiveStickyKeyConsumerSelector.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeExclusiveStickyKeyConsumerSelector.java
index 87a4c5b..bec93cc 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeExclusiveStickyKeyConsumerSelector.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/HashRangeExclusiveStickyKeyConsumerSelector.java
@@ -122,11 +122,13 @@ public class HashRangeExclusiveStickyKeyConsumerSelector implements StickyKeyCon
Map.Entry<Integer, Consumer> floorEntry = rangeMap.floorEntry(intRange.getEnd());
if (floorEntry != null && floorEntry.getKey() >= intRange.getStart()) {
- throw new BrokerServiceException.ConsumerAssignException("Range conflict with consumer " + floorEntry.getValue());
+ throw new BrokerServiceException.ConsumerAssignException("Range conflict with consumer "
+ + floorEntry.getValue());
}
if (ceilingEntry != null && ceilingEntry.getKey() <= intRange.getEnd()) {
- throw new BrokerServiceException.ConsumerAssignException("Range conflict with consumer " + ceilingEntry.getValue());
+ throw new BrokerServiceException.ConsumerAssignException("Range conflict with consumer "
+ + ceilingEntry.getValue());
}
if (ceilingEntry != null && floorEntry != null && ceilingEntry.getValue().equals(floorEntry.getValue())) {
@@ -135,7 +137,8 @@ public class HashRangeExclusiveStickyKeyConsumerSelector implements StickyKeyCon
int start = Math.max(intRange.getStart(), range.getStart());
int end = Math.min(intRange.getEnd(), range.getEnd());
if (end >= start) {
- throw new BrokerServiceException.ConsumerAssignException("Range conflict with consumer " + ceilingEntry.getValue());
+ throw new BrokerServiceException.ConsumerAssignException("Range conflict with consumer "
+ + ceilingEntry.getValue());
}
}
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/InMemoryRedeliveryTracker.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/InMemoryRedeliveryTracker.java
index c851576..92df7b3 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/InMemoryRedeliveryTracker.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/InMemoryRedeliveryTracker.java
@@ -41,7 +41,7 @@ public class InMemoryRedeliveryTracker implements RedeliveryTracker {
public int getRedeliveryCount(Position position) {
PositionImpl positionImpl = (PositionImpl) position;
LongPair count = trackerCache.get(positionImpl.getLedgerId(), positionImpl.getEntryId());
- return (int) (count!=null ? count.first : 0);
+ return (int) (count != null ? count.first : 0);
}
@Override
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PrecisPublishLimiter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PrecisPublishLimiter.java
index 6e8b3de..4db6bf2 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PrecisPublishLimiter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PrecisPublishLimiter.java
@@ -78,7 +78,8 @@ public class PrecisPublishLimiter implements PublishRateLimiter {
this.publishMaxMessageRate = Math.max(maxPublishRate.publishThrottlingRateInMsg, 0);
this.publishMaxByteRate = Math.max(maxPublishRate.publishThrottlingRateInByte, 0);
if (this.publishMaxMessageRate > 0) {
- topicPublishRateLimiterOnMessage = new RateLimiter(publishMaxMessageRate, 1, TimeUnit.SECONDS, rateLimitFunction);
+ topicPublishRateLimiterOnMessage =
+ new RateLimiter(publishMaxMessageRate, 1, TimeUnit.SECONDS, rateLimitFunction);
}
if (this.publishMaxByteRate > 0) {
topicPublishRateLimiterOnByte = new RateLimiter(publishMaxByteRate, 1, TimeUnit.SECONDS);
@@ -94,7 +95,7 @@ public class PrecisPublishLimiter implements PublishRateLimiter {
@Override
public boolean tryAcquire(int numbers, long bytes) {
- return (topicPublishRateLimiterOnMessage == null || topicPublishRateLimiterOnMessage.tryAcquire(numbers)) &&
- (topicPublishRateLimiterOnByte == null || topicPublishRateLimiterOnByte.tryAcquire(bytes));
+ return (topicPublishRateLimiterOnMessage == null || topicPublishRateLimiterOnMessage.tryAcquire(numbers))
+ && (topicPublishRateLimiterOnByte == null || topicPublishRateLimiterOnByte.tryAcquire(bytes));
}
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Producer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Producer.java
index 21a9cd1..c69f9ba 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Producer.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Producer.java
@@ -56,7 +56,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Represents a currently connected producer
+ * Represents a currently connected producer.
*/
public class Producer {
private final Topic topic;
@@ -185,7 +185,8 @@ public class Producer {
if (!verifyChecksum(headersAndPayload)) {
cnx.execute(() -> {
- cnx.getCommandSender().sendSendError(producerId, sequenceId, ServerError.ChecksumError, "Checksum failed on the broker");
+ cnx.getCommandSender().sendSendError(producerId, sequenceId, ServerError.ChecksumError,
+ "Checksum failed on the broker");
cnx.completedSendOperation(isNonPersistentTopic, headersAndPayload.readableBytes());
});
return false;
@@ -216,13 +217,16 @@ public class Producer {
private void publishMessageToTopic(ByteBuf headersAndPayload, long sequenceId, long batchSize, boolean isChunked) {
topic.publishMessage(headersAndPayload,
- MessagePublishContext.get(this, sequenceId, msgIn, headersAndPayload.readableBytes(), batchSize,
+ MessagePublishContext.get(this, sequenceId, msgIn,
+ headersAndPayload.readableBytes(), batchSize,
isChunked, System.nanoTime()));
}
- private void publishMessageToTopic(ByteBuf headersAndPayload, long lowestSequenceId, long highestSequenceId, long batchSize, boolean isChunked) {
+ private void publishMessageToTopic(ByteBuf headersAndPayload, long lowestSequenceId, long highestSequenceId,
+ long batchSize, boolean isChunked) {
topic.publishMessage(headersAndPayload,
- MessagePublishContext.get(this, lowestSequenceId, highestSequenceId, msgIn, headersAndPayload.readableBytes(), batchSize,
+ MessagePublishContext.get(this, lowestSequenceId,
+ highestSequenceId, msgIn, headersAndPayload.readableBytes(), batchSize,
isChunked, System.nanoTime()));
}
@@ -280,7 +284,8 @@ public class Producer {
}
/**
- * Return the sequence id of
+ * Return the sequence id of.
+ *
* @return the sequence id
*/
public long getLastSequenceId() {
@@ -361,7 +366,7 @@ public class Producer {
}
/**
- * Executed from managed ledger thread when the message is persisted
+ * Executed from managed ledger thread when the message is persisted.
*/
@Override
public void completed(Exception exception, long ledgerId, long entryId) {
@@ -405,7 +410,7 @@ public class Producer {
}
/**
- * Executed from I/O thread when sending receipt back to client
+ * Executed from I/O thread when sending receipt back to client.
*/
@Override
public void run() {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PublishRateLimiter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PublishRateLimiter.java
index b121cda..ec23b26 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PublishRateLimiter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PublishRateLimiter.java
@@ -65,9 +65,10 @@ public interface PublishRateLimiter {
void update(PublishRate maxPublishRate);
/**
- * try to acquire permit
+ * try to acquire permit.
+ *
* @param numbers
* @param bytes
- * */
+ */
boolean tryAcquire(int numbers, long bytes);
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSender.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSender.java
index d1ad3d3..fd841ad 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSender.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSender.java
@@ -19,10 +19,8 @@
package org.apache.pulsar.broker.service;
import io.netty.util.concurrent.Future;
-
import java.util.List;
import java.util.Optional;
-
import org.apache.bookkeeper.mledger.Entry;
import org.apache.pulsar.common.api.proto.PulsarApi;
import org.apache.pulsar.common.protocol.schema.SchemaVersion;
@@ -61,7 +59,8 @@ public interface PulsarCommandSender {
void sendConnectedResponse(int clientProtocolVersion, int maxMessageSize);
void sendLookupResponse(String brokerServiceUrl, String brokerServiceUrlTls, boolean authoritative,
- PulsarApi.CommandLookupTopicResponse.LookupType response, long requestId, boolean proxyThroughServiceUrl);
+ PulsarApi.CommandLookupTopicResponse.LookupType response, long requestId,
+ boolean proxyThroughServiceUrl);
void sendLookupResponse(PulsarApi.ServerError error, String errorMsg, long requestId);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.java
index ad0b828..49352f2 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarCommandSenderImpl.java
@@ -22,12 +22,9 @@ import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
-
import java.util.List;
import java.util.Optional;
-
import lombok.extern.slf4j.Slf4j;
-
import org.apache.bookkeeper.mledger.Entry;
import org.apache.bookkeeper.mledger.impl.PositionImpl;
import org.apache.pulsar.broker.intercept.BrokerInterceptor;
@@ -176,7 +173,8 @@ public class PulsarCommandSenderImpl implements PulsarCommandSender {
@Override
public void sendGetOrCreateSchemaErrorResponse(long requestId, PulsarApi.ServerError error, String errorMessage) {
- PulsarApi.BaseCommand command = Commands.newGetOrCreateSchemaResponseErrorCommand(requestId, error, errorMessage);
+ PulsarApi.BaseCommand command =
+ Commands.newGetOrCreateSchemaResponseErrorCommand(requestId, error, errorMessage);
safeIntercept(command, cnx);
ByteBuf outBuf = Commands.serializeWithSize(command);
command.getGetOrCreateSchemaResponse().recycle();
@@ -196,7 +194,8 @@ public class PulsarCommandSenderImpl implements PulsarCommandSender {
@Override
public void sendLookupResponse(String brokerServiceUrl, String brokerServiceUrlTls, boolean authoritative,
- PulsarApi.CommandLookupTopicResponse.LookupType response, long requestId, boolean proxyThroughServiceUrl) {
+ PulsarApi.CommandLookupTopicResponse.LookupType response,
+ long requestId, boolean proxyThroughServiceUrl) {
PulsarApi.BaseCommand command = Commands.newLookupResponseCommand(brokerServiceUrl, brokerServiceUrlTls,
authoritative, response, requestId, proxyThroughServiceUrl);
safeIntercept(command, cnx);
@@ -279,7 +278,8 @@ public class PulsarCommandSenderImpl implements PulsarCommandSender {
.build();
ByteBuf metadataAndPayload = entry.getDataBuffer();
- // increment ref-count of data and release at the end of process: so, we can get chance to call entry.release
+ // increment ref-count of data and release at the end of process:
+ // so, we can get chance to call entry.release
metadataAndPayload.retain();
// skip checksum by incrementing reader-index if consumer-client doesn't support checksum verification
if (cnx.getRemoteEndpointProtocolVersion() < ProtocolVersion.v11.getNumber()) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarStats.java
index 5b350d2..5ebabb5 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarStats.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarStats.java
@@ -92,7 +92,8 @@ public class PulsarStats implements Closeable {
}
public synchronized void updateStats(
- ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, Topic>>> topicsMap) {
+ ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, ConcurrentOpenHashMap<String, Topic>>>
+ topicsMap) {
StatsOutputStream topicStatsStream = new StatsOutputStream(tempTopicStatsBuf);
@@ -131,12 +132,13 @@ public class PulsarStats implements Closeable {
topic.updateRates(nsStats, currentBundleStats, topicStatsStream,
clusterReplicationMetrics, namespaceName, exposePublisherStats);
} catch (Exception e) {
- log.error("Failed to generate topic stats for topic {}: {}", name, e.getMessage(), e);
+ log.error("Failed to generate topic stats for topic {}: {}",
+ name, e.getMessage(), e);
}
// this task: helps to activate inactive-backlog-cursors which have caught up and
// connected, also deactivate active-backlog-cursors which has backlog
- ((PersistentTopic) topic).checkBackloggedCursors();
- }else if (topic instanceof NonPersistentTopic) {
+ topic.checkBackloggedCursors();
+ } else if (topic instanceof NonPersistentTopic) {
tempNonPersistentTopics.add((NonPersistentTopic) topic);
} else {
log.warn("Unsupported type of topic {}", topic.getClass().getName());
@@ -145,15 +147,16 @@ public class PulsarStats implements Closeable {
// end persistent topics section
topicStatsStream.endObject();
- if(!tempNonPersistentTopics.isEmpty()) {
- // start non-persistent topic
+ if (!tempNonPersistentTopics.isEmpty()) {
+ // start non-persistent topic
topicStatsStream.startObject("non-persistent");
tempNonPersistentTopics.forEach(topic -> {
try {
topic.updateRates(nsStats, currentBundleStats, topicStatsStream,
clusterReplicationMetrics, namespaceName, exposePublisherStats);
} catch (Exception e) {
- log.error("Failed to generate topic stats for topic {}: {}", topic.getName(), e.getMessage(), e);
+ log.error("Failed to generate topic stats for topic {}: {}",
+ topic.getName(), e.getMessage(), e);
}
});
// end non-persistent topics section
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ServerCnx.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ServerCnx.java
index ed8c445..125a801 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ServerCnx.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/ServerCnx.java
@@ -156,7 +156,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
private final String replicatorPrefix;
private String clientVersion = null;
private int nonPersistentPendingMessages = 0;
- private final int MaxNonPersistentPendingMessages;
+ private final int maxNonPersistentPendingMessages;
private String originalPrincipal = null;
private Set<String> proxyRoles;
private boolean authenticateOriginalAuthData;
@@ -192,7 +192,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
this.producers = new ConcurrentLongHashMap<>(8, 1);
this.consumers = new ConcurrentLongHashMap<>(8, 1);
this.replicatorPrefix = service.pulsar().getConfiguration().getReplicatorPrefix();
- this.MaxNonPersistentPendingMessages = service.pulsar().getConfiguration()
+ this.maxNonPersistentPendingMessages = service.pulsar().getConfiguration()
.getMaxConcurrentNonPersistentMessagePerConnection();
this.proxyRoles = service.pulsar().getConfiguration().getProxyRoles();
this.authenticateOriginalAuthData = service.pulsar().getConfiguration().isAuthenticateOriginalAuthData();
@@ -271,14 +271,16 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
}
/*
- * If authentication and authorization is enabled(and not sasl) and if the authRole is one of proxyRoles we want to enforce
+ * If authentication and authorization is enabled(and not sasl) and
+ * if the authRole is one of proxyRoles we want to enforce
* - the originalPrincipal is given while connecting
* - originalPrincipal is not blank
* - originalPrincipal is not a proxy principal
*/
private boolean invalidOriginalPrincipal(String originalPrincipal) {
return (service.isAuthenticationEnabled() && service.isAuthorizationEnabled()
- && proxyRoles.contains(authRole) && (StringUtils.isBlank(originalPrincipal) || proxyRoles.contains(originalPrincipal)));
+ && proxyRoles.contains(authRole) && (StringUtils.isBlank(originalPrincipal)
+ || proxyRoles.contains(originalPrincipal)));
}
// ////
@@ -304,17 +306,18 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
return isProxyAuthorizedFuture.thenCombine(isAuthorizedFuture, (isProxyAuthorized, isAuthorized) -> {
if (!isProxyAuthorized) {
log.warn("OriginalRole {} is not authorized to perform operation {} on topic {}",
- originalPrincipal, operation, topicName);
+ originalPrincipal, operation, topicName);
}
if (!isAuthorized) {
log.warn("Role {} is not authorized to perform operation {} on topic {}",
- authRole, operation, topicName);
+ authRole, operation, topicName);
}
return isProxyAuthorized && isAuthorized;
});
}
- private CompletableFuture<Boolean> isTopicOperationAllowed(TopicName topicName, String subscriptionName, TopicOperation operation) {
+ private CompletableFuture<Boolean> isTopicOperationAllowed(TopicName topicName, String subscriptionName,
+ TopicOperation operation) {
CompletableFuture<Boolean> isProxyAuthorizedFuture;
CompletableFuture<Boolean> isAuthorizedFuture;
if (service.isAuthorizationEnabled()) {
@@ -442,7 +445,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (ex instanceof PulsarClientException) {
log.warn("Failed to authorize {} at [{}] on topic {} : {}", getRole(),
remoteAddress, topicName, ex.getMessage());
- commandSender.sendPartitionMetadataResponse(ServerError.AuthorizationError, ex.getMessage(), requestId);
+ commandSender.sendPartitionMetadataResponse(ServerError.AuthorizationError,
+ ex.getMessage(), requestId);
} else {
log.warn("Failed to get Partitioned Metadata [{}] {}: {}", remoteAddress,
topicName, ex.getMessage(), ex);
@@ -467,7 +471,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
}).exceptionally(ex -> {
final String msg = "Exception occurred while trying to authorize get Partition Metadata";
log.warn("[{}] {} with role {} on topic {}", remoteAddress, msg, getPrincipal(), topicName);
- ctx.writeAndFlush(Commands.newPartitionMetadataResponse(ServerError.AuthorizationError, msg, requestId));
+ ctx.writeAndFlush(Commands.newPartitionMetadataResponse(ServerError.AuthorizationError, msg,
+ requestId));
lookupSemaphore.release();
return null;
});
@@ -495,7 +500,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (consumer == null) {
log.error(
- "Failed to get consumer-stats response - Consumer not found for CommandConsumerStats[remoteAddress = {}, requestId = {}, consumerId = {}]",
+ "Failed to get consumer-stats response - Consumer not found for"
+ + " CommandConsumerStats[remoteAddress = {}, requestId = {}, consumerId = {}]",
remoteAddress, requestId, consumerId);
msg = Commands.newConsumerStatsResponse(ServerError.ConsumerNotFound,
"Consumer " + consumerId + " not found", requestId);
@@ -619,22 +625,26 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
return;
} else if (originalPrincipal != null && originalAuthState == null) {
log.info(
- "[{}] Cannot revalidate user credential when using proxy and not forwarding the credentials. Closing connection",
+ "[{}] Cannot revalidate user credential when using proxy and"
+ + " not forwarding the credentials. Closing connection",
remoteAddress);
return;
}
ctx.executor().execute(SafeRun.safeRun(() -> {
- log.info("[{}] Refreshing authentication credentials for originalPrincipal {} and authRole {}", remoteAddress, originalPrincipal, this.authRole);
+ log.info("[{}] Refreshing authentication credentials for originalPrincipal {} and authRole {}",
+ remoteAddress, originalPrincipal, this.authRole);
if (!supportsAuthenticationRefresh()) {
- log.warn("[{}] Closing connection because client doesn't support auth credentials refresh", remoteAddress);
+ log.warn("[{}] Closing connection because client doesn't support auth credentials refresh",
+ remoteAddress);
ctx.close();
return;
}
if (pendingAuthChallengeResponse) {
- log.warn("[{}] Closing connection after timeout on refreshing auth credentials", remoteAddress);
+ log.warn("[{}] Closing connection after timeout on refreshing auth credentials",
+ remoteAddress);
ctx.close();
return;
}
@@ -741,8 +751,9 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
.getAuthenticationProvider(originalAuthMethod);
if (originalAuthenticationProvider == null) {
- throw new AuthenticationException(String.format("Can't find AuthenticationProvider for original role" +
- " using auth method [%s] is not available", originalAuthMethod));
+ throw new AuthenticationException(
+ String.format("Can't find AuthenticationProvider for original role"
+ + " using auth method [%s] is not available", originalAuthMethod));
}
originalAuthState = originalAuthenticationProvider.newAuthState(
@@ -840,20 +851,23 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
? subscribe.getStartMessageRollbackDurationSec()
: -1;
final SchemaData schema = subscribe.hasSchema() ? getSchema(subscribe.getSchema()) : null;
- final boolean isReplicated = subscribe.hasReplicateSubscriptionState() && subscribe.getReplicateSubscriptionState();
+ final boolean isReplicated = subscribe.hasReplicateSubscriptionState()
+ && subscribe.getReplicateSubscriptionState();
final boolean forceTopicCreation = subscribe.getForceTopicCreation();
- final PulsarApi.KeySharedMeta keySharedMeta = subscribe.hasKeySharedMeta() ? subscribe.getKeySharedMeta() : null;
+ final PulsarApi.KeySharedMeta keySharedMeta = subscribe.hasKeySharedMeta()
+ ? subscribe.getKeySharedMeta() : null;
CompletableFuture<Boolean> isAuthorizedFuture = isTopicOperationAllowed(
- topicName,
- subscriptionName,
- TopicOperation.CONSUME
+ topicName,
+ subscriptionName,
+ TopicOperation.CONSUME
);
isAuthorizedFuture.thenApply(isAuthorized -> {
- if (isAuthorized) {
- if (log.isDebugEnabled()) {
- log.debug("[{}] Client is authorized to subscribe with role {}", remoteAddress, getPrincipal());
- }
+ if (isAuthorized) {
+ if (log.isDebugEnabled()) {
+ log.debug("[{}] Client is authorized to subscribe with role {}",
+ remoteAddress, getPrincipal());
+ }
log.info("[{}] Subscribing on topic {} / {}", remoteAddress, topicName, subscriptionName);
try {
@@ -880,12 +894,12 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
// client timeout is lower the broker timeouts. We need to wait until the previous
// consumer
// creation request either complete or fails.
- log.warn("[{}][{}][{}] Consumer with id {} is already present on the connection", remoteAddress,
- topicName, subscriptionName, consumerId);
+ log.warn("[{}][{}][{}] Consumer with id {} is already present on the connection",
+ remoteAddress, topicName, subscriptionName, consumerId);
ServerError error = null;
- if(!existingConsumerFuture.isDone()) {
+ if (!existingConsumerFuture.isDone()) {
error = ServerError.ServiceNotReady;
- }else {
+ } else {
error = getErrorCode(existingConsumerFuture);
consumers.remove(consumerId);
}
@@ -913,15 +927,19 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (rejectSubscriptionIfDoesNotExist) {
return FutureUtil
- .failedFuture(new SubscriptionNotFoundException("Subscription does not exist"));
+ .failedFuture(
+ new SubscriptionNotFoundException(
+ "Subscription does not exist"));
}
if (schema != null) {
return topic.addSchemaIfIdleOrCheckCompatible(schema)
- .thenCompose(v -> topic.subscribe(ServerCnx.this, subscriptionName, consumerId,
- subType, priorityLevel, consumerName, isDurable,
- startMessageId, metadata,
- readCompacted, initialPosition, startMessageRollbackDurationSec, isReplicated, keySharedMeta));
+ .thenCompose(v -> topic.subscribe(
+ ServerCnx.this, subscriptionName, consumerId,
+ subType, priorityLevel, consumerName, isDurable,
+ startMessageId, metadata,
+ readCompacted, initialPosition, startMessageRollbackDurationSec,
+ isReplicated, keySharedMeta));
} else {
return topic.subscribe(ServerCnx.this, subscriptionName, consumerId,
subType, priorityLevel, consumerName, isDurable,
@@ -931,8 +949,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
})
.thenAccept(consumer -> {
if (consumerFuture.complete(consumer)) {
- log.info("[{}] Created subscription on topic {} / {}", remoteAddress, topicName,
- subscriptionName);
+ log.info("[{}] Created subscription on topic {} / {}",
+ remoteAddress, topicName, subscriptionName);
commandSender.sendSuccessResponse(requestId);
} else {
// The consumer future was completed before by a close command
@@ -942,7 +960,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
remoteAddress, consumer);
} catch (BrokerServiceException e) {
log.warn(
- "[{}] Error closing consumer created after timeout on client side {}: {}",
+ "[{}] Error closing consumer created"
+ + " after timeout on client side {}: {}",
remoteAddress, consumer, e.getMessage());
}
consumers.remove(consumerId, consumerFuture);
@@ -953,7 +972,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (exception.getCause() instanceof ConsumerBusyException) {
if (log.isDebugEnabled()) {
log.debug(
- "[{}][{}][{}] Failed to create consumer because exclusive consumer is already connected: {}",
+ "[{}][{}][{}] Failed to create consumer because exclusive consumer"
+ + " is already connected: {}",
remoteAddress, topicName, subscriptionName,
exception.getCause().getMessage());
}
@@ -1026,7 +1046,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
final SchemaData schema = cmdProducer.hasSchema() ? getSchema(cmdProducer.getSchema()) : null;
final ProducerAccessMode producerAccessMode = cmdProducer.getProducerAccessMode();
- final Optional<Long> topicEpoch = cmdProducer.hasTopicEpoch() ? Optional.of(cmdProducer.getTopicEpoch()) : Optional.empty();
+ final Optional<Long> topicEpoch = cmdProducer.hasTopicEpoch()
+ ? Optional.of(cmdProducer.getTopicEpoch()) : Optional.empty();
TopicName topicName = validateTopicName(cmdProducer.getTopic(), requestId, cmdProducer);
if (topicName == null) {
@@ -1047,7 +1068,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
isAuthorizedFuture.thenApply(isAuthorized -> {
if (isAuthorized) {
if (log.isDebugEnabled()) {
- log.debug("[{}] Client is authorized to Produce with role {}", remoteAddress, getPrincipal());
+ log.debug("[{}] Client is authorized to Produce with role {}",
+ remoteAddress, getPrincipal());
}
CompletableFuture<Producer> producerFuture = new CompletableFuture<>();
CompletableFuture<Producer> existingProducerFuture = producers.putIfAbsent(producerId,
@@ -1070,15 +1092,15 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
// request
// either complete or fails.
ServerError error = null;
- if(!existingProducerFuture.isDone()) {
+ if (!existingProducerFuture.isDone()) {
error = ServerError.ServiceNotReady;
} else {
error = getErrorCode(existingProducerFuture);
// remove producer with producerId as it's already completed with exception
producers.remove(producerId);
}
- log.warn("[{}][{}] Producer with id {} is already present on the connection", remoteAddress,
- producerId, topicName);
+ log.warn("[{}][{}] Producer with id {} is already present on the connection",
+ remoteAddress, producerId, topicName);
commandSender.sendErrorResponse(requestId, error,
"Producer is already present on the connection");
return null;
@@ -1095,7 +1117,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
"Cannot create producer on topic with backlog quota exceeded");
BacklogQuota.RetentionPolicy retentionPolicy = topic.getBacklogQuota().getPolicy();
if (retentionPolicy == BacklogQuota.RetentionPolicy.producer_request_hold) {
- commandSender.sendErrorResponse(requestId, ServerError.ProducerBlockedQuotaExceededError,
+ commandSender.sendErrorResponse(requestId,
+ ServerError.ProducerBlockedQuotaExceededError,
illegalStateException.getMessage());
} else if (retentionPolicy == BacklogQuota.RetentionPolicy.producer_exception) {
commandSender.sendErrorResponse(requestId,
@@ -1129,34 +1152,39 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
});
schemaVersionFuture.thenAccept(schemaVersion -> {
- Producer producer = new Producer(topic, ServerCnx.this, producerId, producerName, getPrincipal(),
- isEncrypted, metadata, schemaVersion, epoch, userProvidedProducerName, producerAccessMode, topicEpoch);
-
- topic.addProducer(producer).thenAccept(newTopicEpoch -> {
- if (isActive()) {
- if (producerFuture.complete(producer)) {
- log.info("[{}] Created new producer: {}", remoteAddress, producer);
- commandSender.sendProducerSuccessResponse(requestId, producerName,
- producer.getLastSequenceId(), producer.getSchemaVersion(), newTopicEpoch);
- return;
- } else {
- // The producer's future was completed before by
- // a close command
- producer.closeNow(true);
- log.info("[{}] Cleared producer created after timeout on client side {}",
+ Producer producer = new Producer(topic, ServerCnx.this, producerId, producerName,
+ getPrincipal(), isEncrypted, metadata, schemaVersion, epoch,
+ userProvidedProducerName, producerAccessMode, topicEpoch);
+
+ topic.addProducer(producer).thenAccept(newTopicEpoch -> {
+ if (isActive()) {
+ if (producerFuture.complete(producer)) {
+ log.info("[{}] Created new producer: {}", remoteAddress, producer);
+ commandSender.sendProducerSuccessResponse(requestId, producerName,
+ producer.getLastSequenceId(), producer.getSchemaVersion(),
+ newTopicEpoch);
+ return;
+ } else {
+ // The producer's future was completed before by
+ // a close command
+ producer.closeNow(true);
+ log.info("[{}] Cleared producer created after"
+ + " timeout on client side {}",
remoteAddress, producer);
- }
+ }
} else {
producer.closeNow(true);
- log.info("[{}] Cleared producer created after connection was closed: {}",
+ log.info("[{}] Cleared producer created after connection was closed: {}",
remoteAddress, producer);
- producerFuture.completeExceptionally(
- new IllegalStateException("Producer created after connection was closed"));
+ producerFuture.completeExceptionally(
+ new IllegalStateException(
+ "Producer created after connection was closed"));
}
producers.remove(producerId, producerFuture);
}).exceptionally(ex -> {
- log.warn("[{}] Failed to add producer {}: {}", remoteAddress, producer, ex.getMessage());
+ log.warn("[{}] Failed to add producer {}: {}",
+ remoteAddress, producer, ex.getMessage());
producer.closeNow(true);
if (producerFuture.completeExceptionally(ex)) {
commandSender.sendErrorResponse(requestId,
@@ -1220,7 +1248,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (producer.isNonPersistentTopic()) {
// avoid processing non-persist message if reached max concurrent-message limit
- if (nonPersistentPendingMessages > MaxNonPersistentPendingMessages) {
+ if (nonPersistentPendingMessages > maxNonPersistentPendingMessages) {
final long producerId = send.getProducerId();
final long sequenceId = send.getSequenceId();
final long highestSequenceId = send.getHighestSequenceId();
@@ -1258,9 +1286,11 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
MessageMetadata msgMetadata = Commands.parseMessageMetadata(headersAndPayload);
headersAndPayload.resetReaderIndex();
if (log.isDebugEnabled()) {
- log.debug("[{}] Received send message request. producer: {}:{} {}:{} size: {}, partition key is: {}, ordering key is {}",
- remoteAddress, send.getProducerId(), send.getSequenceId(), msgMetadata.getProducerName(), msgMetadata.getSequenceId(),
- headersAndPayload.readableBytes(), msgMetadata.getPartitionKey(), msgMetadata.getOrderingKey());
+ log.debug("[{}] Received send message request. producer: {}:{} {}:{} size: {},"
+ + " partition key is: {}, ordering key is {}",
+ remoteAddress, send.getProducerId(), send.getSequenceId(), msgMetadata.getProducerName(),
+ msgMetadata.getSequenceId(), headersAndPayload.readableBytes(), msgMetadata.getPartitionKey(),
+ msgMetadata.getOrderingKey());
}
msgMetadata.recycle();
}
@@ -1338,7 +1368,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (consumerFuture != null && consumerFuture.isDone() && !consumerFuture.isCompletedExceptionally()) {
consumerFuture.getNow(null).doUnsubscribe(unsubscribe.getRequestId());
} else {
- commandSender.sendErrorResponse(unsubscribe.getRequestId(), ServerError.MetadataError, "Consumer not found");
+ commandSender.sendErrorResponse(unsubscribe.getRequestId(), ServerError.MetadataError,
+ "Consumer not found");
}
}
@@ -1349,11 +1380,13 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
CompletableFuture<Consumer> consumerFuture = consumers.get(seek.getConsumerId());
if (!seek.hasMessageId() && !seek.hasMessagePublishTime()) {
- commandSender.sendErrorResponse(requestId, ServerError.MetadataError, "Message id and message publish time were not present");
+ commandSender.sendErrorResponse(requestId, ServerError.MetadataError,
+ "Message id and message publish time were not present");
return;
}
- boolean consumerCreated = consumerFuture != null && consumerFuture.isDone() && !consumerFuture.isCompletedExceptionally();
+ boolean consumerCreated = consumerFuture != null
+ && consumerFuture.isDone() && !consumerFuture.isCompletedExceptionally();
if (consumerCreated && seek.hasMessageId()) {
Consumer consumer = consumerFuture.getNow(null);
@@ -1374,7 +1407,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
subscription.getTopic().getName(), subscription.getName(), position);
commandSender.sendSuccessResponse(requestId);
}).exceptionally(ex -> {
- log.warn("[{}][{}] Failed to reset subscription: {}", remoteAddress, subscription, ex.getMessage(), ex);
+ log.warn("[{}][{}] Failed to reset subscription: {}",
+ remoteAddress, subscription, ex.getMessage(), ex);
commandSender.sendErrorResponse(requestId, ServerError.UnknownError,
"Error when resetting subscription: " + ex.getCause().getMessage());
return null;
@@ -1389,7 +1423,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
subscription.getTopic().getName(), subscription.getName(), timestamp);
commandSender.sendSuccessResponse(requestId);
}).exceptionally(ex -> {
- log.warn("[{}][{}] Failed to reset subscription: {}", remoteAddress, subscription, ex.getMessage(), ex);
+ log.warn("[{}][{}] Failed to reset subscription: {}", remoteAddress,
+ subscription, ex.getMessage(), ex);
commandSender.sendErrorResponse(requestId, ServerError.UnknownError,
"Reset subscription to publish time error: " + ex.getCause().getMessage());
return null;
@@ -1507,7 +1542,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
consumer.getSubscription().getName());
} else {
- ctx.writeAndFlush(Commands.newError(getLastMessageId.getRequestId(), ServerError.MetadataError, "Consumer not found"));
+ ctx.writeAndFlush(Commands.newError(getLastMessageId.getRequestId(),
+ ServerError.MetadataError, "Consumer not found"));
}
}
@@ -1556,7 +1592,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
batchSizeFuture.whenComplete((batchSize, e) -> {
if (e != null) {
ctx.writeAndFlush(Commands.newError(
- requestId, ServerError.MetadataError, "Failed to get batch size for entry " + e.getMessage()));
+ requestId, ServerError.MetadataError,
+ "Failed to get batch size for entry " + e.getMessage()));
} else {
int largestBatchIndex = batchSize > 0 ? batchSize - 1 : -1;
@@ -1659,7 +1696,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
commandSender.sendGetOrCreateSchemaResponse(requestId, schemaVersion);
});
} else {
- commandSender.sendGetOrCreateSchemaErrorResponse(requestId, ServerError.TopicNotFound, "Topic not found");
+ commandSender.sendGetOrCreateSchemaErrorResponse(requestId, ServerError.TopicNotFound,
+ "Topic not found");
}
}).exceptionally(ex -> {
ServerError errorCode = BrokerServiceException.getClientErrorCode(ex);
@@ -1673,7 +1711,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
final long requestId = command.getRequestId();
final TransactionCoordinatorID tcId = TransactionCoordinatorID.get(command.getTcId());
if (log.isDebugEnabled()) {
- log.debug("Receive new txn request {} to transaction meta store {} from {}.", requestId, tcId, remoteAddress);
+ log.debug("Receive new txn request {} to transaction meta store {} from {}.",
+ requestId, tcId, remoteAddress);
}
service.pulsar().getTransactionMetadataStoreService().newTransaction(tcId, command.getTxnTtlSeconds())
.whenComplete(((txnID, ex) -> {
@@ -1681,12 +1720,14 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (log.isDebugEnabled()) {
log.debug("Send response {} for new txn request {}", tcId.getId(), requestId);
}
- ctx.writeAndFlush(Commands.newTxnResponse(requestId, txnID.getLeastSigBits(), txnID.getMostSigBits()));
+ ctx.writeAndFlush(Commands.newTxnResponse(requestId, txnID.getLeastSigBits(),
+ txnID.getMostSigBits()));
} else {
if (log.isDebugEnabled()) {
log.debug("Send response error for new txn request {}", requestId, ex);
}
- ctx.writeAndFlush(Commands.newTxnResponse(requestId, tcId.getId(), BrokerServiceException.getClientErrorCode(ex), ex.getMessage()));
+ ctx.writeAndFlush(Commands.newTxnResponse(requestId, tcId.getId(),
+ BrokerServiceException.getClientErrorCode(ex), ex.getMessage()));
}
}));
}
@@ -1696,19 +1737,22 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
final TxnID txnID = new TxnID(command.getTxnidMostBits(), command.getTxnidLeastBits());
final long requestId = command.getRequestId();
if (log.isDebugEnabled()) {
- log.debug("Receive add published partition to txn request {} from {} with txnId {}", requestId, remoteAddress, txnID);
+ log.debug("Receive add published partition to txn request {} from {} with txnId {}",
+ requestId, remoteAddress, txnID);
}
- service.pulsar().getTransactionMetadataStoreService().addProducedPartitionToTxn(txnID, command.getPartitionsList())
- .whenComplete(((v, ex) -> {
- if (ex == null) {
- if (log.isDebugEnabled()) {
- log.debug("Send response success for add published partition to txn request {}", requestId);
- }
- ctx.writeAndFlush(Commands.newAddPartitionToTxnResponse(requestId,
- txnID.getLeastSigBits(), txnID.getMostSigBits()));
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Send response error for add published partition to txn request {}", requestId, ex);
+ service.pulsar().getTransactionMetadataStoreService().addProducedPartitionToTxn(txnID,
+ command.getPartitionsList())
+ .whenComplete(((v, ex) -> {
+ if (ex == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Send response success for add published partition to txn request {}", requestId);
+ }
+ ctx.writeAndFlush(Commands.newAddPartitionToTxnResponse(requestId,
+ txnID.getLeastSigBits(), txnID.getMostSigBits()));
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Send response error for add published partition to txn request {}", requestId,
+ ex);
}
ctx.writeAndFlush(Commands.newAddPartitionToTxnResponse(requestId, txnID.getMostSigBits(),
BrokerServiceException.getClientErrorCode(ex), ex.getMessage()));
@@ -1789,7 +1833,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
ctx.writeAndFlush(Commands.newEndTxnOnSubscriptionResponse(
requestId, txnidLeastBits, txnidMostBits,
ServerError.UnknownError,
- "Topic " + optionalTopic.get().getName() + " subscription " + subName + " is not exist."));
+ "Topic " + optionalTopic.get().getName()
+ + " subscription " + subName + " is not exist."));
return;
}
@@ -1909,7 +1954,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
/**
* It closes the connection with client which triggers {@code channelInactive()} which clears all producers and
- * consumers from connection-map
+ * consumers from connection-map.
*/
protected void close() {
ctx.close();
@@ -1952,7 +1997,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
MSG_PUBLISH_BUFFER_SIZE_UPDATER.getAndAdd(this, msgSize);
boolean isPublishRateExceeded = false;
if (preciseTopicPublishRateLimitingEnable) {
- boolean isPreciseTopicPublishRateExceeded = producer.getTopic().isTopicPublishRateExceeded(numMessages, msgSize);
+ boolean isPreciseTopicPublishRateExceeded =
+ producer.getTopic().isTopicPublishRateExceeded(numMessages, msgSize);
if (isPreciseTopicPublishRateExceeded) {
producer.getTopic().disableCnxAutoRead();
return;
@@ -1994,8 +2040,8 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
// we can add check (&& pendingSendRequest < MaxPendingSendRequests) here but then it requires
// pendingSendRequest to be volatile and it can be expensive while writing. also this will be called on if
// throttling is enable on the topic. so, avoid pendingSendRequest check will be fine.
- if (ctx != null && !ctx.channel().config().isAutoRead() &&
- !autoReadDisabledRateLimiting && !autoReadDisabledPublishBufferLimiting) {
+ if (ctx != null && !ctx.channel().config().isAutoRead()
+ && !autoReadDisabledRateLimiting && !autoReadDisabledPublishBufferLimiting) {
// Resume reading from socket if pending-request is not reached to threshold
ctx.channel().config().setAutoRead(true);
// triggers channel read
@@ -2005,7 +2051,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
@Override
public void disableCnxAutoRead() {
- if (ctx != null && ctx.channel().config().isAutoRead() ) {
+ if (ctx != null && ctx.channel().config().isAutoRead()) {
ctx.channel().config().setAutoRead(false);
}
}
@@ -2040,7 +2086,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
if (producerName != null && producerName.startsWith(replicatorPrefix)) {
// Re-enable nagle algorithm on connections used for replication purposes
try {
- if (ctx.channel().config().getOption(ChannelOption.TCP_NODELAY).booleanValue() == true) {
+ if (ctx.channel().config().getOption(ChannelOption.TCP_NODELAY)) {
ctx.channel().config().setOption(ChannelOption.TCP_NODELAY, false);
}
} catch (Throwable t) {
@@ -2091,7 +2137,7 @@ public class ServerCnx extends PulsarHandler implements TransportCnx {
private static final Logger log = LoggerFactory.getLogger(ServerCnx.class);
/**
- * Helper method for testability
+ * Helper method for testability.
*
* @return the connection state
*/
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/StickyKeyConsumerSelector.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/StickyKeyConsumerSelector.java
index fc500c5..7197261 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/StickyKeyConsumerSelector.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/StickyKeyConsumerSelector.java
@@ -27,19 +27,20 @@ public interface StickyKeyConsumerSelector {
int DEFAULT_RANGE_SIZE = 2 << 15;
/**
- * Add a new consumer
+ * Add a new consumer.
+ *
* @param consumer new consumer
*/
void addConsumer(Consumer consumer) throws ConsumerAssignException;
/**
- * Remove the consumer
+ * Remove the consumer.
* @param consumer consumer to be removed
*/
void removeConsumer(Consumer consumer);
/**
- * Select a consumer by sticky key
+ * Select a consumer by sticky key.
*
* @param stickyKey sticky key
* @return consumer
@@ -47,7 +48,7 @@ public interface StickyKeyConsumerSelector {
Consumer select(byte[] stickyKey);
/**
- * Get key hash ranges handled by each consumer
+ * Get key hash ranges handled by each consumer.
* @return A map where key is a consumer name and value is list of hash range it receiving message for.
*/
Map<String, List<String>> getConsumerKeyHashRanges();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Subscription.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Subscription.java
index 8a0bd06..7ad8a90 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Subscription.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Subscription.java
@@ -44,7 +44,7 @@ public interface Subscription {
void consumerFlow(Consumer consumer, int additionalNumberOfMessages);
- void acknowledgeMessage(List<Position> positions, AckType ackType, Map<String,Long> properties);
+ void acknowledgeMessage(List<Position> positions, AckType ackType, Map<String, Long> properties);
String getTopicName();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesService.java
index a224bcd..b5461b6 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesService.java
@@ -57,7 +57,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
private final Map<NamespaceName, AtomicInteger> ownedBundlesCountPerNamespace = new ConcurrentHashMap<>();
- private final Map<NamespaceName, CompletableFuture<SystemTopicClient.Reader>> readerCaches = new ConcurrentHashMap<>();
+ private final Map<NamespaceName, CompletableFuture<SystemTopicClient.Reader>>
+ readerCaches = new ConcurrentHashMap<>();
private final Map<NamespaceName, Boolean> policyCacheInitMap = new ConcurrentHashMap<>();
@@ -70,8 +71,9 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
CompletableFuture<Void> result = new CompletableFuture<>();
createSystemTopicFactoryIfNeeded();
- SystemTopicClient systemTopicClient = namespaceEventsSystemTopicFactory.createSystemTopic(topicName.getNamespaceObject(),
- EventType.TOPIC_POLICY);
+ SystemTopicClient systemTopicClient =
+ namespaceEventsSystemTopicFactory.createSystemTopic(topicName.getNamespaceObject(),
+ EventType.TOPIC_POLICY);
CompletableFuture<SystemTopicClient.Writer> writerFuture = systemTopicClient.newWriterAsync();
writerFuture.whenComplete((writer, ex) -> {
@@ -79,8 +81,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
result.completeExceptionally(ex);
} else {
writer.writeAsync(
- PulsarEvent.builder()
- .actionType(ActionType.UPDATE)
+ PulsarEvent.builder()
+ .actionType(ActionType.UPDATE)
.eventType(EventType.TOPIC_POLICY)
.topicPoliciesEvent(
TopicPoliciesEvent.builder()
@@ -121,10 +123,11 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
return;
}
TopicPoliciesEvent event = msg.getValue().getTopicPoliciesEvent();
- TopicName topicName = TopicName.get(event.getDomain(), event.getTenant(), event.getNamespace(), event.getTopic());
- if (listeners.get(topicName) != null) {
+ TopicName topicName = TopicName.get(event.getDomain(), event.getTenant(),
+ event.getNamespace(), event.getTopic());
+ if (LISTENERS.get(topicName) != null) {
TopicPolicies policies = event.getPolicies();
- for (TopicPolicyListener<TopicPolicies> listener : listeners.get(topicName)) {
+ for (TopicPolicyListener<TopicPolicies> listener : LISTENERS.get(topicName)) {
listener.onUpdate(policies);
}
}
@@ -153,8 +156,9 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
result.complete(null);
return result;
}
- SystemTopicClient systemTopicClient = namespaceEventsSystemTopicFactory.createSystemTopic(topicName.getNamespaceObject()
- , EventType.TOPIC_POLICY);
+ SystemTopicClient systemTopicClient = namespaceEventsSystemTopicFactory
+ .createSystemTopic(topicName.getNamespaceObject()
+ , EventType.TOPIC_POLICY);
systemTopicClient.newReaderAsync().thenAccept(r ->
fetchTopicPoliciesAsyncAndCloseReader(r, topicName, null, result));
return result;
@@ -174,7 +178,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
, EventType.TOPIC_POLICY);
ownedBundlesCountPerNamespace.putIfAbsent(namespace, new AtomicInteger(1));
policyCacheInitMap.put(namespace, false);
- CompletableFuture<SystemTopicClient.Reader> readerCompletableFuture = systemTopicClient.newReaderAsync();
+ CompletableFuture<SystemTopicClient.Reader> readerCompletableFuture =
+ systemTopicClient.newReaderAsync();
readerCaches.put(namespace, readerCompletableFuture);
readerCompletableFuture.whenComplete((reader, ex) -> {
if (ex != null) {
@@ -208,17 +213,18 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
@Override
public void start() {
- pulsarService.getNamespaceService().addNamespaceBundleOwnershipListener(new NamespaceBundleOwnershipListener() {
+ pulsarService.getNamespaceService().addNamespaceBundleOwnershipListener(
+ new NamespaceBundleOwnershipListener() {
- @Override
- public void onLoad(NamespaceBundle bundle) {
- addOwnedNamespaceBundleAsync(bundle);
- }
+ @Override
+ public void onLoad(NamespaceBundle bundle) {
+ addOwnedNamespaceBundleAsync(bundle);
+ }
- @Override
- public void unLoad(NamespaceBundle bundle) {
- removeOwnedNamespaceBundleAsync(bundle);
- }
+ @Override
+ public void unLoad(NamespaceBundle bundle) {
+ removeOwnedNamespaceBundleAsync(bundle);
+ }
@Override
public boolean test(NamespaceBundle namespaceBundle) {
@@ -245,7 +251,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
});
} else {
future.complete(null);
- policyCacheInitMap.computeIfPresent(reader.getSystemTopic().getTopicName().getNamespaceObject(), (k, v) -> true);
+ policyCacheInitMap.computeIfPresent(
+ reader.getSystemTopic().getTopicName().getNamespaceObject(), (k, v) -> true);
}
});
}
@@ -284,7 +291,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
synchronized (this) {
if (namespaceEventsSystemTopicFactory == null) {
try {
- namespaceEventsSystemTopicFactory = new NamespaceEventsSystemTopicFactory(pulsarService.getClient());
+ namespaceEventsSystemTopicFactory =
+ new NamespaceEventsSystemTopicFactory(pulsarService.getClient());
} catch (PulsarServerException e) {
log.error("Create namespace event system topic factory error.", e);
}
@@ -293,7 +301,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
}
}
- private void fetchTopicPoliciesAsyncAndCloseReader(SystemTopicClient.Reader reader, TopicName topicName, TopicPolicies policies,
+ private void fetchTopicPoliciesAsyncAndCloseReader(SystemTopicClient.Reader reader, TopicName topicName,
+ TopicPolicies policies,
CompletableFuture<TopicPolicies> future) {
reader.hasMoreEventsAsync().whenComplete((hasMore, ex) -> {
if (ex != null) {
@@ -312,7 +321,8 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
topicPoliciesEvent.getNamespace(),
topicPoliciesEvent.getTopic()))
) {
- fetchTopicPoliciesAsyncAndCloseReader(reader, topicName, topicPoliciesEvent.getPolicies(), future);
+ fetchTopicPoliciesAsyncAndCloseReader(reader, topicName,
+ topicPoliciesEvent.getPolicies(), future);
} else {
fetchTopicPoliciesAsyncAndCloseReader(reader, topicName, policies, future);
}
@@ -351,12 +361,12 @@ public class SystemTopicBasedTopicPoliciesService implements TopicPoliciesServic
@Override
public void registerListener(TopicName topicName, TopicPolicyListener<TopicPolicies> listener) {
- listeners.computeIfAbsent(topicName, k -> Lists.newCopyOnWriteArrayList()).add(listener);
+ LISTENERS.computeIfAbsent(topicName, k -> Lists.newCopyOnWriteArrayList()).add(listener);
}
@Override
public void unregisterListener(TopicName topicName, TopicPolicyListener<TopicPolicies> listener) {
- listeners.computeIfAbsent(topicName, k -> Lists.newCopyOnWriteArrayList()).remove(listener);
+ LISTENERS.computeIfAbsent(topicName, k -> Lists.newCopyOnWriteArrayList()).remove(listener);
}
private static final Logger log = LoggerFactory.getLogger(SystemTopicBasedTopicPoliciesService.class);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Topic.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Topic.java
index 8f86c24..9e50fcf 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Topic.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/Topic.java
@@ -105,14 +105,17 @@ public interface Topic {
void removeProducer(Producer producer);
/**
- * record add-latency
+ * record add-latency.
*/
void recordAddLatency(long latency, TimeUnit unit);
CompletableFuture<Consumer> subscribe(TransportCnx cnx, String subscriptionName, long consumerId, SubType subType,
- int priorityLevel, String consumerName, boolean isDurable, MessageId startMessageId,
- Map<String, String> metadata, boolean readCompacted, InitialPosition initialPosition,
- long startMessageRollbackDurationSec, boolean replicateSubscriptionState, PulsarApi.KeySharedMeta keySharedMeta);
+ int priorityLevel, String consumerName, boolean isDurable,
+ MessageId startMessageId,
+ Map<String, String> metadata, boolean readCompacted,
+ InitialPosition initialPosition,
+ long startMessageRollbackDurationSec, boolean replicateSubscriptionState,
+ PulsarApi.KeySharedMeta keySharedMeta);
CompletableFuture<Subscription> createSubscription(String subscriptionName, InitialPosition initialPosition,
boolean replicateSubscriptionState);
@@ -242,11 +245,11 @@ public interface Topic {
CompletableFuture<TransactionBuffer> getTransactionBuffer(boolean createIfMissing);
/**
- * Publish Transaction message to this Topic's TransactionBuffer
+ * Publish Transaction message to this Topic's TransactionBuffer.
*
- * @param txnID Transaction Id
+ * @param txnID Transaction Id
* @param headersAndPayload Message data
- * @param publishContext Publish context
+ * @param publishContext Publish context
*/
void publishTxnMessage(TxnID txnID, ByteBuf headersAndPayload, PublishContext publishContext);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TopicPoliciesService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TopicPoliciesService.java
index 05d3b02..9b6d282 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TopicPoliciesService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TopicPoliciesService.java
@@ -29,29 +29,30 @@ import org.apache.pulsar.common.policies.data.TopicPolicies;
import org.apache.pulsar.common.util.FutureUtil;
/**
- * Topic policies service
+ * Topic policies service.
*/
public interface TopicPoliciesService {
TopicPoliciesService DISABLED = new TopicPoliciesServiceDisabled();
- Map<TopicName, List<TopicPolicyListener<TopicPolicies>>> listeners = new ConcurrentHashMap<>();
+ Map<TopicName, List<TopicPolicyListener<TopicPolicies>>> LISTENERS = new ConcurrentHashMap<>();
/**
- * Update policies for a topic async
+ * Update policies for a topic async.
+ *
* @param topicName topic name
- * @param policies policies for the topic name
+ * @param policies policies for the topic name
*/
CompletableFuture<Void> updateTopicPoliciesAsync(TopicName topicName, TopicPolicies policies);
/**
- * Get policies for a topic async
+ * Get policies for a topic async.
* @param topicName topic name
* @return future of the topic policies
*/
TopicPolicies getTopicPolicies(TopicName topicName) throws TopicPoliciesCacheNotInitException;
/**
- * Get policies for a topic without cache async
+ * Get policies for a topic without cache async.
* @param topicName topic name
* @return future of the topic policies
*/
@@ -77,7 +78,7 @@ public interface TopicPoliciesService {
void start();
/**
- * whether the cache has been initialized
+ * whether the cache has been initialized.
* @param topicName
* @return
*/
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TransportCnx.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TransportCnx.java
index fbfa966..6247401 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TransportCnx.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/TransportCnx.java
@@ -36,7 +36,8 @@ public interface TransportCnx {
boolean isBatchMessageCompatibleVersion();
/**
- * The security role for this connection
+ * The security role for this connection.
+ *
* @return the role
*/
String getAuthRole();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcher.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcher.java
index 613a7b1..1b08807 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcher.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcher.java
@@ -33,7 +33,7 @@ public interface NonPersistentDispatcher extends Dispatcher {
void addConsumer(Consumer consumer) throws BrokerServiceException;
- void removeConsumer(Consumer consumer) throws BrokerServiceException ;
+ void removeConsumer(Consumer consumer) throws BrokerServiceException;
boolean isConsumerConnected();
@@ -41,7 +41,7 @@ public interface NonPersistentDispatcher extends Dispatcher {
boolean canUnsubscribe(Consumer consumer);
- CompletableFuture<Void> close() ;
+ CompletableFuture<Void> close();
CompletableFuture<Void> disconnectAllConsumers(boolean isResetCursor);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java
index e222940..446b9c3 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java
@@ -50,7 +50,8 @@ public class NonPersistentDispatcherMultipleConsumers extends AbstractDispatcher
private CompletableFuture<Void> closeFuture = null;
private final String name;
protected final Rate msgDrop;
- protected static final AtomicIntegerFieldUpdater<NonPersistentDispatcherMultipleConsumers> TOTAL_AVAILABLE_PERMITS_UPDATER = AtomicIntegerFieldUpdater
+ protected static final AtomicIntegerFieldUpdater<NonPersistentDispatcherMultipleConsumers>
+ TOTAL_AVAILABLE_PERMITS_UPDATER = AtomicIntegerFieldUpdater
.newUpdater(NonPersistentDispatcherMultipleConsumers.class, "totalAvailablePermits");
@SuppressWarnings("unused")
private volatile int totalAvailablePermits = 0;
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java
index c77346d..3544649 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherSingleActiveConsumer.java
@@ -40,7 +40,8 @@ import org.apache.pulsar.common.protocol.Commands;
import org.apache.pulsar.common.stats.Rate;
@Slf4j
-public final class NonPersistentDispatcherSingleActiveConsumer extends AbstractDispatcherSingleActiveConsumer implements NonPersistentDispatcher {
+public final class NonPersistentDispatcherSingleActiveConsumer extends AbstractDispatcherSingleActiveConsumer
+ implements NonPersistentDispatcher {
private final NonPersistentTopic topic;
private final Rate msgDrop;
@@ -49,7 +50,7 @@ public final class NonPersistentDispatcherSingleActiveConsumer extends AbstractD
private final RedeliveryTracker redeliveryTracker;
public NonPersistentDispatcherSingleActiveConsumer(SubType subscriptionType, int partitionIndex,
- NonPersistentTopic topic, Subscription subscription) {
+ NonPersistentTopic topic, Subscription subscription) {
super(subscriptionType, partitionIndex, topic.getName(), subscription);
this.topic = topic;
this.subscription = subscription;
@@ -100,8 +101,8 @@ public final class NonPersistentDispatcherSingleActiveConsumer extends AbstractD
}
if (maxConsumersPerSubscription == null) {
- maxConsumersPerSubscription = policies.max_consumers_per_subscription > 0 ?
- policies.max_consumers_per_subscription :
+ maxConsumersPerSubscription = policies.max_consumers_per_subscription > 0
+ ? policies.max_consumers_per_subscription :
serviceConfig.getMaxConsumersPerSubscription();
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentReplicator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentReplicator.java
index 8c7d543..5b06a06 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentReplicator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentReplicator.java
@@ -65,7 +65,8 @@ public class NonPersistentReplicator extends AbstractReplicator implements Repli
backOff.reset();
} else {
log.info(
- "[{}][{} -> {}] Replicator was stopped while creating the producer. Closing it. Replicator state: {}",
+ "[{}][{} -> {}] Replicator was stopped while creating the producer."
+ + " Closing it. Replicator state: {}",
topicName, localCluster, remoteCluster, STATE_UPDATER.get(this));
STATE_UPDATER.set(this, State.Stopping);
closeProducerAsync();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java
index 5c91cba..cd52dfb 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumers.java
@@ -65,12 +65,13 @@ public class NonPersistentStickyKeyDispatcherMultipleConsumers extends NonPersis
return SubType.Key_Shared;
}
- private static final FastThreadLocal<Map<Consumer, List<Entry>>> localGroupedEntries = new FastThreadLocal<Map<Consumer, List<Entry>>>() {
- @Override
- protected Map<Consumer, List<Entry>> initialValue() throws Exception {
- return new HashMap<>();
- }
- };
+ private static final FastThreadLocal<Map<Consumer, List<Entry>>> localGroupedEntries =
+ new FastThreadLocal<Map<Consumer, List<Entry>>>() {
+ @Override
+ protected Map<Consumer, List<Entry>> initialValue() throws Exception {
+ return new HashMap<>();
+ }
+ };
@Override
public void sendMessages(List<Entry> entries) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentSubscription.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentSubscription.java
index a4d2d6f..90ff723 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentSubscription.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentSubscription.java
@@ -58,8 +58,9 @@ public class NonPersistentSubscription implements Subscription {
private static final int FALSE = 0;
private static final int TRUE = 1;
- private static final AtomicIntegerFieldUpdater<NonPersistentSubscription> IS_FENCED_UPDATER = AtomicIntegerFieldUpdater
- .newUpdater(NonPersistentSubscription.class, "isFenced");
+ private static final AtomicIntegerFieldUpdater<NonPersistentSubscription> IS_FENCED_UPDATER =
+ AtomicIntegerFieldUpdater
+ .newUpdater(NonPersistentSubscription.class, "isFenced");
@SuppressWarnings("unused")
private volatile int isFenced = FALSE;
@@ -130,7 +131,8 @@ public class NonPersistentSubscription implements Subscription {
case Key_Shared:
if (dispatcher == null || dispatcher.getType() != SubType.Key_Shared) {
previousDispatcher = dispatcher;
- KeySharedMeta ksm = consumer.getKeySharedMeta() != null ? consumer.getKeySharedMeta() : KeySharedMeta.getDefaultInstance();
+ KeySharedMeta ksm = consumer.getKeySharedMeta() != null
+ ? consumer.getKeySharedMeta() : KeySharedMeta.getDefaultInstance();
switch (ksm.getKeySharedMode()) {
case STICKY:
@@ -258,7 +260,7 @@ public class NonPersistentSubscription implements Subscription {
@Override
public CompletableFuture<Entry> peekNthMessage(int messagePosition) {
// No-op
- return CompletableFuture.completedFuture(null);// TODO: throw exception
+ return CompletableFuture.completedFuture(null); // TODO: throw exception
}
@Override
@@ -279,7 +281,7 @@ public class NonPersistentSubscription implements Subscription {
}
/**
- * Disconnect all consumers attached to the dispatcher and close this subscription
+ * Disconnect all consumers attached to the dispatcher and close this subscription.
*
* @return CompletableFuture indicating the completion of disconnect operation
*/
@@ -389,10 +391,9 @@ public class NonPersistentSubscription implements Subscription {
/**
* Handle unsubscribe command from the client API Check with the dispatcher is this consumer can proceed with
- * unsubscribe
+ * unsubscribe.
*
- * @param consumer
- * consumer object that is initiating the unsubscribe operation
+ * @param consumer consumer object that is initiating the unsubscribe operation
* @return CompletableFuture indicating the completion of ubsubscribe operation
*/
@Override
@@ -482,7 +483,8 @@ public class NonPersistentSubscription implements Subscription {
@Override
public CompletableFuture<Void> endTxn(long txnidMostBits, long txnidLeastBits, int txnAction) {
CompletableFuture<Void> completableFuture = new CompletableFuture<>();
- completableFuture.completeExceptionally(new Exception("Unsupported operation end txn for NonPersistentSubscription"));
+ completableFuture.completeExceptionally(
+ new Exception("Unsupported operation end txn for NonPersistentSubscription"));
return completableFuture;
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
index 8feb799..004e656 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentTopic.java
@@ -94,8 +94,8 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
private final ConcurrentOpenHashMap<String, NonPersistentReplicator> replicators;
// Ever increasing counter of entries added
- private static final AtomicLongFieldUpdater<NonPersistentTopic> ENTRIES_ADDED_COUNTER_UPDATER = AtomicLongFieldUpdater
- .newUpdater(NonPersistentTopic.class, "entriesAddedCounter");
+ private static final AtomicLongFieldUpdater<NonPersistentTopic> ENTRIES_ADDED_COUNTER_UPDATER =
+ AtomicLongFieldUpdater.newUpdater(NonPersistentTopic.class, "entriesAddedCounter");
private volatile long entriesAddedCounter = 0;
private static final FastThreadLocal<TopicStats> threadLocalTopicStats = new FastThreadLocal<TopicStats>() {
@@ -217,9 +217,12 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
@Override
public CompletableFuture<Consumer> subscribe(final TransportCnx cnx, String subscriptionName, long consumerId,
- SubType subType, int priorityLevel, String consumerName, boolean isDurable, MessageId startMessageId,
- Map<String, String> metadata, boolean readCompacted, InitialPosition initialPosition,
- long resetStartMessageBackInSec, boolean replicateSubscriptionState, PulsarApi.KeySharedMeta keySharedMeta) {
+ SubType subType, int priorityLevel, String consumerName,
+ boolean isDurable, MessageId startMessageId,
+ Map<String, String> metadata, boolean readCompacted,
+ InitialPosition initialPosition,
+ long resetStartMessageBackInSec, boolean replicateSubscriptionState,
+ PulsarApi.KeySharedMeta keySharedMeta) {
final CompletableFuture<Consumer> future = new CompletableFuture<>();
@@ -398,10 +401,9 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
}
/**
- * Close this topic - close all producers and subscriptions associated with this topic
+ * Close this topic - close all producers and subscriptions associated with this topic.
*
- * @param closeWithoutWaitingClientDisconnect
- * don't wait for client disconnect and forcefully close managed-ledger
+ * @param closeWithoutWaitingClientDisconnect don't wait for client disconnect and forcefully close managed-ledger
* @return Completable future indicating completion of close operation
*/
@Override
@@ -427,8 +429,9 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
producers.values().forEach(producer -> futures.add(producer.disconnect()));
subscriptions.forEach((s, sub) -> futures.add(sub.disconnect()));
- CompletableFuture<Void> clientCloseFuture = closeWithoutWaitingClientDisconnect ? CompletableFuture.completedFuture(null)
- : FutureUtil.waitForAll(futures);
+ CompletableFuture<Void> clientCloseFuture =
+ closeWithoutWaitingClientDisconnect ? CompletableFuture.completedFuture(null)
+ : FutureUtil.waitForAll(futures);
clientCloseFuture.thenRun(() -> {
log.info("[{}] Topic closed", topic);
@@ -741,7 +744,7 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
NonPersistentTopicStats stats = new NonPersistentTopicStats();
- ObjectObjectHashMap<String, PublisherStats> remotePublishersStats = new ObjectObjectHashMap<String, PublisherStats>();
+ ObjectObjectHashMap<String, PublisherStats> remotePublishersStats = new ObjectObjectHashMap<>();
producers.values().forEach(producer -> {
NonPersistentPublisherStats publisherStats = (NonPersistentPublisherStats) producer.getStats();
@@ -869,7 +872,8 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
: policies.subscription_expiration_time_minutes);
if (expirationTimeMillis > 0) {
subscriptions.forEach((subName, sub) -> {
- if (sub.getDispatcher() != null && sub.getDispatcher().isConsumerConnected() || sub.isReplicated()) {
+ if (sub.getDispatcher() != null
+ && sub.getDispatcher().isConsumerConnected() || sub.isReplicated()) {
return;
}
if (System.currentTimeMillis() - sub.getLastActive() > expirationTimeMillis) {
@@ -917,7 +921,8 @@ public class NonPersistentTopic extends AbstractTopic implements Topic {
} else {
ServiceConfiguration cfg = brokerService.getPulsar().getConfiguration();
resetInactiveTopicPolicies(cfg.getBrokerDeleteInactiveTopicsMode()
- , cfg.getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds(), cfg.isBrokerDeleteInactiveTopicsEnabled());
+ , cfg.getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds(),
+ cfg.isBrokerDeleteInactiveTopicsEnabled());
}
return checkReplicationAndRetryOnFailure();
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/CompactorSubscription.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/CompactorSubscription.java
index bc0eafd..dc887d1 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/CompactorSubscription.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/CompactorSubscription.java
@@ -54,7 +54,7 @@ public class CompactorSubscription extends PersistentSubscription {
}
@Override
- public void acknowledgeMessage(List<Position> positions, AckType ackType, Map<String,Long> properties) {
+ public void acknowledgeMessage(List<Position> positions, AckType ackType, Map<String, Long> properties) {
checkArgument(ackType == AckType.Cumulative);
checkArgument(positions.size() == 1);
checkArgument(properties.containsKey(Compactor.COMPACTED_TOPIC_LEDGER_PROPERTY));
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/DispatchRateLimiter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/DispatchRateLimiter.java
index f723642..7fb4d43 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/DispatchRateLimiter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/DispatchRateLimiter.java
@@ -66,7 +66,7 @@ public class DispatchRateLimiter {
}
/**
- * returns available msg-permit if msg-dispatch-throttling is enabled else it returns -1
+ * returns available msg-permit if msg-dispatch-throttling is enabled else it returns -1.
*
* @return
*/
@@ -149,7 +149,7 @@ public class DispatchRateLimiter {
public void updateDispatchRate() {
Optional<DispatchRate> dispatchRate = getTopicPolicyDispatchRate(brokerService, topicName, type);
if (!dispatchRate.isPresent()) {
- dispatchRate =Optional.ofNullable(getPoliciesDispatchRate(brokerService));
+ dispatchRate = Optional.ofNullable(getPoliciesDispatchRate(brokerService));
if (!dispatchRate.isPresent()) {
dispatchRate = Optional.of(createDispatchRate());
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/MessageDeduplication.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/MessageDeduplication.java
index 7cf84f9..0b05620 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/MessageDeduplication.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/MessageDeduplication.java
@@ -52,7 +52,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Class that contains all the logic to control and perform the deduplication on the broker side
+ * Class that contains all the logic to control and perform the deduplication on the broker side.
*/
public class MessageDeduplication {
@@ -154,10 +154,9 @@ public class MessageDeduplication {
/**
* Read all the entries published from the cursor position until the most recent and update the highest sequence id
- * from each producer
+ * from each producer.
*
- * @param future
- * future to trigger when the replay is complete
+ * @param future future to trigger when the replay is complete
*/
private void replayCursor(CompletableFuture<Void> future) {
managedCursor.asyncReadEntries(100, new ReadEntriesCallback() {
@@ -211,18 +210,19 @@ public class MessageDeduplication {
}
if (status == Status.Initialized && !shouldBeEnabled) {
status = Status.Removing;
- managedLedger.asyncDeleteCursor(PersistentTopic.DEDUPLICATION_CURSOR_NAME, new DeleteCursorCallback() {
- @Override
- public void deleteCursorComplete(Object ctx) {
- status = Status.Disabled;
- log.info("[{}] Deleted deduplication cursor", topic.getName());
- }
+ managedLedger.asyncDeleteCursor(PersistentTopic.DEDUPLICATION_CURSOR_NAME,
+ new DeleteCursorCallback() {
+ @Override
+ public void deleteCursorComplete(Object ctx) {
+ status = Status.Disabled;
+ log.info("[{}] Deleted deduplication cursor", topic.getName());
+ }
- @Override
- public void deleteCursorFailed(ManagedLedgerException exception, Object ctx) {
- if (exception instanceof ManagedLedgerException.CursorNotFoundException) {
- status = Status.Disabled;
- } else {
+ @Override
+ public void deleteCursorFailed(ManagedLedgerException exception, Object ctx) {
+ if (exception instanceof ManagedLedgerException.CursorNotFoundException) {
+ status = Status.Disabled;
+ } else {
log.error("[{}] Deleted deduplication cursor error", topic.getName(), exception);
}
}
@@ -347,8 +347,10 @@ public class MessageDeduplication {
}
// Also need to check sequence ids that has been persisted.
- // If current message's seq id is smaller or equals to the lastSequenceIdPersisted than its definitely a dup
- // If current message's seq id is between lastSequenceIdPersisted and lastSequenceIdPushed, then we cannot be sure whether the message is a dup or not
+ // If current message's seq id is smaller or equals to the
+ // lastSequenceIdPersisted than its definitely a dup
+ // If current message's seq id is between lastSequenceIdPersisted and
+ // lastSequenceIdPushed, then we cannot be sure whether the message is a dup or not
// we should return an error to the producer for the latter case so that it can retry at a future time
Long lastSequenceIdPersisted = highestSequencedPersisted.get(producerName);
if (lastSequenceIdPersisted != null && sequenceId <= lastSequenceIdPersisted) {
@@ -363,7 +365,7 @@ public class MessageDeduplication {
}
/**
- * Call this method whenever a message is persisted to get the chance to trigger a snapshot
+ * Call this method whenever a message is persisted to get the chance to trigger a snapshot.
*/
public void recordMessagePersisted(PublishContext publishContext, PositionImpl position) {
if (!isEnabled()) {
@@ -444,7 +446,7 @@ public class MessageDeduplication {
}
/**
- * Topic will call this method whenever a producer connects
+ * Topic will call this method whenever a producer connects.
*/
public synchronized void producerAdded(String producerName) {
// Producer is no-longer inactive
@@ -452,7 +454,7 @@ public class MessageDeduplication {
}
/**
- * Topic will call this method whenever a producer disconnects
+ * Topic will call this method whenever a producer disconnects.
*/
public synchronized void producerRemoved(String producerName) {
// Producer is no-longer active
@@ -460,7 +462,7 @@ public class MessageDeduplication {
}
/**
- * Remove from hash maps all the producers that were inactive for more than the configured amount of time
+ * Remove from hash maps all the producers that were inactive for more than the configured amount of time.
*/
public synchronized void purgeInactiveProducers() {
long minimumActiveTimestamp = System.currentTimeMillis() - TimeUnit.MINUTES
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java
index f04c512..9c7d80a 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumers.java
@@ -69,8 +69,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
+ *
*/
-public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMultipleConsumers implements Dispatcher, ReadEntriesCallback {
+public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMultipleConsumers
+ implements Dispatcher, ReadEntriesCallback {
protected final PersistentTopic topic;
protected final ManagedCursor cursor;
@@ -87,17 +89,24 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
private boolean shouldRewindBeforeReadingOrReplaying = false;
protected final String name;
- protected static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> TOTAL_AVAILABLE_PERMITS_UPDATER =
- AtomicIntegerFieldUpdater.newUpdater(PersistentDispatcherMultipleConsumers.class, "totalAvailablePermits");
+ protected static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers>
+ TOTAL_AVAILABLE_PERMITS_UPDATER =
+ AtomicIntegerFieldUpdater.newUpdater(PersistentDispatcherMultipleConsumers.class,
+ "totalAvailablePermits");
protected volatile int totalAvailablePermits = 0;
private volatile int readBatchSize;
- private final Backoff readFailureBackoff = new Backoff(15, TimeUnit.SECONDS, 1, TimeUnit.MINUTES, 0, TimeUnit.MILLISECONDS);
- private static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> TOTAL_UNACKED_MESSAGES_UPDATER =
- AtomicIntegerFieldUpdater.newUpdater(PersistentDispatcherMultipleConsumers.class, "totalUnackedMessages");
+ private final Backoff readFailureBackoff = new Backoff(15, TimeUnit.SECONDS,
+ 1, TimeUnit.MINUTES, 0, TimeUnit.MILLISECONDS);
+ private static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers>
+ TOTAL_UNACKED_MESSAGES_UPDATER =
+ AtomicIntegerFieldUpdater.newUpdater(PersistentDispatcherMultipleConsumers.class,
+ "totalUnackedMessages");
private volatile int totalUnackedMessages = 0;
private volatile int blockedDispatcherOnUnackedMsgs = FALSE;
- private static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers> BLOCKED_DISPATCHER_ON_UNACKMSG_UPDATER =
- AtomicIntegerFieldUpdater.newUpdater(PersistentDispatcherMultipleConsumers.class, "blockedDispatcherOnUnackedMsgs");
+ private static final AtomicIntegerFieldUpdater<PersistentDispatcherMultipleConsumers>
+ BLOCKED_DISPATCHER_ON_UNACKMSG_UPDATER =
+ AtomicIntegerFieldUpdater.newUpdater(PersistentDispatcherMultipleConsumers.class,
+ "blockedDispatcherOnUnackedMsgs");
protected final ServiceConfiguration serviceConfig;
protected Optional<DispatchRateLimiter> dispatchRateLimiter = Optional.empty();
@@ -105,7 +114,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
Normal, Replay
}
- public PersistentDispatcherMultipleConsumers(PersistentTopic topic, ManagedCursor cursor, Subscription subscription) {
+ public PersistentDispatcherMultipleConsumers(PersistentTopic topic, ManagedCursor cursor,
+ Subscription subscription) {
super(subscription);
this.serviceConfig = topic.getBrokerService().pulsar().getConfiguration();
this.cursor = cursor;
@@ -157,7 +167,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
.orElse(null);
if (maxConsumersPerSubscription == null) {
- // Use getDataIfPresent from zk cache to make the call non-blocking and prevent deadlocks in addConsumer
+ // Use getDataIfPresent from zk cache to make the call non-blocking and
+ // prevent deadlocks in addConsumer
policies = topic.getBrokerService().pulsar().getConfigurationCache().policiesCache()
.getDataIfPresent(AdminResource.path(POLICIES, TopicName.get(topic.getName()).getNamespace()));
if (policies == null) {
@@ -169,9 +180,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
}
if (maxConsumersPerSubscription == null) {
- maxConsumersPerSubscription = policies.max_consumers_per_subscription > 0 ?
- policies.max_consumers_per_subscription :
- serviceConfig.getMaxConsumersPerSubscription();
+ maxConsumersPerSubscription = policies.max_consumers_per_subscription > 0
+ ? policies.max_consumers_per_subscription : serviceConfig.getMaxConsumersPerSubscription();
}
if (maxConsumersPerSubscription > 0 && maxConsumersPerSubscription <= consumerList.size()) {
@@ -242,7 +252,9 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
Consumer c = getRandomConsumer();
// if turn on precise dispatcher flow control, adjust the record to read
if (c != null && c.isPreciseDispatcherFlowControl()) {
- messagesToRead = Math.min((int) Math.ceil(currentTotalAvailablePermits * 1.0 / c.getAvgMessagesPerEntry()), readBatchSize);
+ messagesToRead = Math.min(
+ (int) Math.ceil(currentTotalAvailablePermits * 1.0 / c.getAvgMessagesPerEntry()),
+ readBatchSize);
}
if (!isConsumerWritable()) {
@@ -257,7 +269,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
// active-cursor reads message from cache rather from bookkeeper (2) if topic has reached message-rate
// threshold: then schedule the read after MESSAGE_RATE_BACKOFF_MS
if (serviceConfig.isDispatchThrottlingOnNonBacklogConsumerEnabled() || !cursor.isActive()) {
- if (topic.getDispatchRateLimiter().isPresent() && topic.getDispatchRateLimiter().get().isDispatchRateLimitingEnabled()) {
+ if (topic.getDispatchRateLimiter().isPresent()
+ && topic.getDispatchRateLimiter().get().isDispatchRateLimitingEnabled()) {
DispatchRateLimiter topicRateLimiter = topic.getDispatchRateLimiter().get();
if (!topicRateLimiter.hasMessageDispatchPermit()) {
if (log.isDebugEnabled()) {
@@ -280,9 +293,11 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
if (dispatchRateLimiter.isPresent() && dispatchRateLimiter.get().isDispatchRateLimitingEnabled()) {
if (!dispatchRateLimiter.get().hasMessageDispatchPermit()) {
if (log.isDebugEnabled()) {
- log.debug("[{}] message-read exceeded subscription message-rate {}/{}, schedule after a {}", name,
- dispatchRateLimiter.get().getDispatchRateOnMsg(), dispatchRateLimiter.get().getDispatchRateOnByte(),
- MESSAGE_RATE_BACKOFF_MS);
+ log.debug("[{}] message-read exceeded subscription message-rate {}/{},"
+ + " schedule after a {}", name,
+ dispatchRateLimiter.get().getDispatchRateOnMsg(),
+ dispatchRateLimiter.get().getDispatchRateOnByte(),
+ MESSAGE_RATE_BACKOFF_MS);
}
topic.getBrokerService().executor().schedule(() -> readMoreEntries(), MESSAGE_RATE_BACKOFF_MS,
TimeUnit.MILLISECONDS);
@@ -316,8 +331,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
}
havePendingReplayRead = true;
- Set<? extends Position> deletedMessages = topic.isDelayedDeliveryEnabled() ?
- asyncReplayEntriesInOrder(messagesToReplayNow) : asyncReplayEntries(messagesToReplayNow);
+ Set<? extends Position> deletedMessages = topic.isDelayedDeliveryEnabled()
+ ? asyncReplayEntriesInOrder(messagesToReplayNow) : asyncReplayEntries(messagesToReplayNow);
// clear already acked positions from replay bucket
deletedMessages.forEach(position -> messagesToRedeliver.remove(((PositionImpl) position).getLedgerId(),
@@ -337,7 +352,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
consumerList.size());
}
havePendingRead = true;
- cursor.asyncReadEntriesOrWait(messagesToRead, serviceConfig.getDispatcherMaxReadSizeBytes(), this,
+ cursor.asyncReadEntriesOrWait(messagesToRead, serviceConfig.getDispatcherMaxReadSizeBytes(),
+ this,
ReadType.Normal);
} else {
log.debug("[{}] Cannot schedule next read until previous one is done", name);
@@ -519,7 +535,8 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
int msgSent = sendMessageInfo.getTotalMessages();
start += messagesForC;
entriesToDispatch -= messagesForC;
- TOTAL_AVAILABLE_PERMITS_UPDATER.addAndGet(this, -(msgSent - batchIndexesAcks.getTotalAckedIndexCount()));
+ TOTAL_AVAILABLE_PERMITS_UPDATER.addAndGet(this,
+ -(msgSent - batchIndexesAcks.getTotalAckedIndexCount()));
totalMessagesSent += sendMessageInfo.getTotalMessages();
totalBytesSent += sendMessageInfo.getTotalBytes();
}
@@ -622,7 +639,7 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
/**
* returns true only if {@link AbstractDispatcherMultipleConsumers#consumerList}
- * has atleast one unblocked consumer and have available permits
+ * has atleast one unblocked consumer and have available permits.
*
* @return
*/
@@ -631,7 +648,7 @@ public class PersistentDispatcherMultipleConsumers extends AbstractDispatcherMul
// abort read if no consumers are connected or if disconnect is initiated
return false;
}
- for(Consumer consumer : consumerList) {
+ for (Consumer consumer : consumerList) {
if (isConsumerAvailable(consumer)) {
return true;
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java
index 5d55b1d..aefeb30 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherSingleActiveConsumer.java
@@ -60,7 +60,8 @@ import org.apache.pulsar.common.util.collections.LongPairSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public final class PersistentDispatcherSingleActiveConsumer extends AbstractDispatcherSingleActiveConsumer implements Dispatcher, ReadEntriesCallback {
+public final class PersistentDispatcherSingleActiveConsumer extends AbstractDispatcherSingleActiveConsumer
+ implements Dispatcher, ReadEntriesCallback {
private final PersistentTopic topic;
private final ManagedCursor cursor;
@@ -70,7 +71,8 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
private volatile boolean havePendingRead = false;
private volatile int readBatchSize;
- private final Backoff readFailureBackoff = new Backoff(15, TimeUnit.SECONDS, 1, TimeUnit.MINUTES, 0, TimeUnit.MILLISECONDS);
+ private final Backoff readFailureBackoff = new Backoff(15, TimeUnit.SECONDS,
+ 1, TimeUnit.MINUTES, 0, TimeUnit.MILLISECONDS);
private final ServiceConfiguration serviceConfig;
private volatile ScheduledFuture<?> readOnActiveConsumerTask = null;
@@ -79,7 +81,7 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
private volatile boolean havePendingReplayRead = false;
public PersistentDispatcherSingleActiveConsumer(ManagedCursor cursor, SubType subscriptionType, int partitionIndex,
- PersistentTopic topic, Subscription subscription) {
+ PersistentTopic topic, Subscription subscription) {
super(subscriptionType, partitionIndex, topic.getName(), subscription);
this.topic = topic;
this.name = topic.getName() + " / " + (cursor.getName() != null ? Codec.decode(cursor.getName())
@@ -161,9 +163,8 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
}
if (maxConsumersPerSubscription == null) {
- maxConsumersPerSubscription = policies.max_consumers_per_subscription > 0 ?
- policies.max_consumers_per_subscription :
- serviceConfig.getMaxConsumersPerSubscription();
+ maxConsumersPerSubscription = policies.max_consumers_per_subscription > 0
+ ? policies.max_consumers_per_subscription : serviceConfig.getMaxConsumersPerSubscription();
}
if (maxConsumersPerSubscription > 0 && maxConsumersPerSubscription <= consumers.size()) {
@@ -260,7 +261,8 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
topic.getDispatchRateLimiter().get().tryDispatchPermit(totalMessages, totalBytes);
}
- dispatchRateLimiter.ifPresent(rateLimiter -> rateLimiter.tryDispatchPermit(totalMessages, totalBytes));
+ dispatchRateLimiter.ifPresent(rateLimiter ->
+ rateLimiter.tryDispatchPermit(totalMessages, totalBytes));
}
// Schedule a new read batch operation only after the previous batch has been written to the
@@ -272,11 +274,10 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
if (newConsumer != null && !havePendingRead) {
readMoreEntries(newConsumer);
} else {
- if (log.isDebugEnabled()) {
- log.debug(
- "[{}-{}] Ignoring write future complete. consumerAvailable={} havePendingRead={}",
- name, newConsumer, newConsumer != null, havePendingRead);
- }
+ log.debug(
+ "[{}-{}] Ignoring write future complete."
+ + " consumerAvailable={} havePendingRead={}",
+ name, newConsumer, newConsumer != null, havePendingRead);
}
}
}));
@@ -405,8 +406,9 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
readMoreEntries(currentConsumer);
} else {
if (log.isDebugEnabled()) {
- log.debug("[{}] Skipping read retry for topic: Current Consumer {}, havePendingRead {}",
- topic.getName(), currentConsumer, havePendingRead);
+ log.debug("[{}] Skipping read retry for topic: Current Consumer {},"
+ + " havePendingRead {}",
+ topic.getName(), currentConsumer, havePendingRead);
}
}
}, MESSAGE_RATE_BACKOFF_MS, TimeUnit.MILLISECONDS);
@@ -423,9 +425,11 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
if (dispatchRateLimiter.isPresent() && dispatchRateLimiter.get().isDispatchRateLimitingEnabled()) {
if (!dispatchRateLimiter.get().hasMessageDispatchPermit()) {
if (log.isDebugEnabled()) {
- log.debug("[{}] message-read exceeded subscription message-rate {}/{}, schedule after a {}", name,
- dispatchRateLimiter.get().getDispatchRateOnMsg(), dispatchRateLimiter.get().getDispatchRateOnByte(),
- MESSAGE_RATE_BACKOFF_MS);
+ log.debug("[{}] message-read exceeded subscription message-rate {}/{},"
+ + " schedule after a {}",
+ name, dispatchRateLimiter.get().getDispatchRateOnMsg(),
+ dispatchRateLimiter.get().getDispatchRateOnByte(),
+ MESSAGE_RATE_BACKOFF_MS);
}
topic.getBrokerService().executor().schedule(() -> {
Consumer currentConsumer = ACTIVE_CONSUMER_UPDATER.get(this);
@@ -476,7 +480,8 @@ public final class PersistentDispatcherSingleActiveConsumer extends AbstractDisp
} else if (consumer.readCompacted()) {
topic.getCompactedTopic().asyncReadEntriesOrWait(cursor, messagesToRead, this, consumer);
} else {
- cursor.asyncReadEntriesOrWait(messagesToRead, serviceConfig.getDispatcherMaxReadSizeBytes(), this, consumer);
+ cursor.asyncReadEntriesOrWait(messagesToRead,
+ serviceConfig.getDispatcherMaxReadSizeBytes(), this, consumer);
}
} else {
if (log.isDebugEnabled()) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java
index fcbe7aa..c044512 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageExpiryMonitor.java
@@ -46,10 +46,12 @@ public class PersistentMessageExpiryMonitor implements FindEntryCallback {
private static final int TRUE = 1;
@SuppressWarnings("unused")
private volatile int expirationCheckInProgress = FALSE;
- private static final AtomicIntegerFieldUpdater<PersistentMessageExpiryMonitor> expirationCheckInProgressUpdater = AtomicIntegerFieldUpdater
+ private static final AtomicIntegerFieldUpdater<PersistentMessageExpiryMonitor>
+ expirationCheckInProgressUpdater = AtomicIntegerFieldUpdater
.newUpdater(PersistentMessageExpiryMonitor.class, "expirationCheckInProgress");
- public PersistentMessageExpiryMonitor(String topicName, String subscriptionName, ManagedCursor cursor, PersistentSubscription subscription) {
+ public PersistentMessageExpiryMonitor(String topicName, String subscriptionName, ManagedCursor cursor,
+ PersistentSubscription subscription) {
this.topicName = topicName;
this.cursor = cursor;
this.subName = subscriptionName;
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageFinder.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageFinder.java
index 5eba681..ab89615 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageFinder.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentMessageFinder.java
@@ -31,8 +31,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- *
- * given a timestamp find the first message (position) (published) at or before the timestamp
+ * given a timestamp find the first message (position) (published) at or before the timestamp.
*/
public class PersistentMessageFinder implements AsyncCallbacks.FindEntryCallback {
private final ManagedCursor cursor;
@@ -44,8 +43,9 @@ public class PersistentMessageFinder implements AsyncCallbacks.FindEntryCallback
private static final int TRUE = 1;
@SuppressWarnings("unused")
private volatile int messageFindInProgress = FALSE;
- private static final AtomicIntegerFieldUpdater<PersistentMessageFinder> messageFindInProgressUpdater = AtomicIntegerFieldUpdater
- .newUpdater(PersistentMessageFinder.class, "messageFindInProgress");
+ private static final AtomicIntegerFieldUpdater<PersistentMessageFinder> messageFindInProgressUpdater =
+ AtomicIntegerFieldUpdater
+ .newUpdater(PersistentMessageFinder.class, "messageFindInProgress");
public PersistentMessageFinder(String topicName, ManagedCursor cursor) {
this.topicName = topicName;
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentReplicator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentReplicator.java
index 2324a35..d6b167a 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentReplicator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentReplicator.java
@@ -64,7 +64,8 @@ import org.apache.pulsar.common.util.Codec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class PersistentReplicator extends AbstractReplicator implements Replicator, ReadEntriesCallback, DeleteCallback {
+public class PersistentReplicator extends AbstractReplicator
+ implements Replicator, ReadEntriesCallback, DeleteCallback {
private final PersistentTopic topic;
private final String replicatorName;
@@ -78,15 +79,17 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
private final int producerQueueThreshold;
- private static final AtomicIntegerFieldUpdater<PersistentReplicator> PENDING_MESSAGES_UPDATER = AtomicIntegerFieldUpdater
- .newUpdater(PersistentReplicator.class, "pendingMessages");
+ private static final AtomicIntegerFieldUpdater<PersistentReplicator> PENDING_MESSAGES_UPDATER =
+ AtomicIntegerFieldUpdater
+ .newUpdater(PersistentReplicator.class, "pendingMessages");
private volatile int pendingMessages = 0;
private static final int FALSE = 0;
private static final int TRUE = 1;
- private static final AtomicIntegerFieldUpdater<PersistentReplicator> HAVE_PENDING_READ_UPDATER = AtomicIntegerFieldUpdater
- .newUpdater(PersistentReplicator.class, "havePendingRead");
+ private static final AtomicIntegerFieldUpdater<PersistentReplicator> HAVE_PENDING_READ_UPDATER =
+ AtomicIntegerFieldUpdater
+ .newUpdater(PersistentReplicator.class, "havePendingRead");
private volatile int havePendingRead = FALSE;
private final Rate msgOut = new Rate();
@@ -94,7 +97,8 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
private int messageTTLInSeconds = 0;
- private final Backoff readFailureBackoff = new Backoff(1, TimeUnit.SECONDS, 1, TimeUnit.MINUTES, 0, TimeUnit.MILLISECONDS);
+ private final Backoff readFailureBackoff = new Backoff(1, TimeUnit.SECONDS,
+ 1, TimeUnit.MINUTES, 0, TimeUnit.MILLISECONDS);
private PersistentMessageExpiryMonitor expiryMonitor;
// for connected subscriptions, message expiry will be checked if the backlog is greater than this threshold
@@ -104,19 +108,20 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
// Only for test
public PersistentReplicator(PersistentTopic topic, ManagedCursor cursor, String localCluster, String remoteCluster,
- BrokerService brokerService) throws NamingException {
+ BrokerService brokerService) throws NamingException {
super(topic.getName(), topic.getReplicatorPrefix(), localCluster, remoteCluster, brokerService);
this.replicatorName = cursor.getName();
this.ledger = cursor.getManagedLedger();
this.cursor = cursor;
this.topic = topic;
- this.expiryMonitor = new PersistentMessageExpiryMonitor(topicName, Codec.decode(cursor.getName()), cursor, null);
+ this.expiryMonitor = new PersistentMessageExpiryMonitor(topicName,
+ Codec.decode(cursor.getName()), cursor, null);
HAVE_PENDING_READ_UPDATER.set(this, FALSE);
PENDING_MESSAGES_UPDATER.set(this, 0);
readBatchSize = Math.min(
- producerQueueSize,
- topic.getBrokerService().pulsar().getConfiguration().getDispatcherMaxReadBatchSize());
+ producerQueueSize,
+ topic.getBrokerService().pulsar().getConfiguration().getDispatcherMaxReadBatchSize());
readMaxSizeBytes = topic.getBrokerService().pulsar().getConfiguration().getDispatcherMaxReadSizeBytes();
producerQueueThreshold = (int) (producerQueueSize * 0.9);
@@ -163,7 +168,8 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
readMoreEntries();
} else {
log.info(
- "[{}][{} -> {}] Replicator was stopped while creating the producer. Closing it. Replicator state: {}",
+ "[{}][{} -> {}] Replicator was stopped while creating the producer."
+ + " Closing it. Replicator state: {}",
topicName, localCluster, remoteCluster, STATE_UPDATER.get(this));
STATE_UPDATER.set(this, State.Stopping);
closeProducerAsync();
@@ -193,7 +199,8 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
if (cursor != null) {
log.info("[{}][{} -> {}] Using the exists cursor for replicator", topicName, localCluster, remoteCluster);
if (expiryMonitor == null) {
- this.expiryMonitor = new PersistentMessageExpiryMonitor(topicName, Codec.decode(cursor.getName()), cursor, null);
+ this.expiryMonitor = new PersistentMessageExpiryMonitor(topicName,
+ Codec.decode(cursor.getName()), cursor, null);
}
return CompletableFuture.completedFuture(null);
}
@@ -203,13 +210,15 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
public void openCursorComplete(ManagedCursor cursor, Object ctx) {
log.info("[{}][{} -> {}] Open cursor succeed for replicator", topicName, localCluster, remoteCluster);
PersistentReplicator.this.cursor = cursor;
- PersistentReplicator.this.expiryMonitor = new PersistentMessageExpiryMonitor(topicName, Codec.decode(cursor.getName()), cursor, null);
+ PersistentReplicator.this.expiryMonitor = new PersistentMessageExpiryMonitor(topicName,
+ Codec.decode(cursor.getName()), cursor, null);
res.complete(null);
}
@Override
public void openCursorFailed(ManagedLedgerException exception, Object ctx) {
- log.warn("[{}][{} -> {}] Open cursor failed for replicator", topicName, localCluster, remoteCluster, exception);
+ log.warn("[{}][{} -> {}] Open cursor failed for replicator", topicName,
+ localCluster, remoteCluster, exception);
res.completeExceptionally(new PersistenceException(exception));
}
@@ -244,10 +253,12 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
// no permits from rate limit
if (!rateLimiter.hasMessageDispatchPermit()) {
if (log.isDebugEnabled()) {
- log.debug("[{}][{} -> {}] message-read exceeded topic replicator message-rate {}/{}, schedule after a {}",
- topicName, localCluster, remoteCluster,
- rateLimiter.getDispatchRateOnMsg(), rateLimiter.getDispatchRateOnByte(),
- MESSAGE_RATE_BACKOFF_MS);
+ log.debug("[{}][{} -> {}] message-read exceeded topic replicator message-rate {}/{},"
+ + " schedule after a {}",
+ topicName, localCluster, remoteCluster,
+ rateLimiter.getDispatchRateOnMsg(),
+ rateLimiter.getDispatchRateOnByte(),
+ MESSAGE_RATE_BACKOFF_MS);
}
return -1;
}
@@ -325,7 +336,8 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
readFailureBackoff.reduceToHalf();
boolean atLeastOneMessageSentForReplication = false;
- boolean isEnableReplicatedSubscriptions = brokerService.pulsar().getConfiguration().isEnableReplicatedSubscriptions();
+ boolean isEnableReplicatedSubscriptions =
+ brokerService.pulsar().getConfiguration().isEnableReplicatedSubscriptions();
try {
// This flag is set to true when we skip atleast one local message,
@@ -534,7 +546,8 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
@Override
public void readEntriesFailed(ManagedLedgerException exception, Object ctx) {
if (STATE_UPDATER.get(this) != State.Started) {
- log.info("[{}][{} -> {}] Replicator was stopped while reading entries. Stop reading. Replicator state: {}",
+ log.info("[{}][{} -> {}] Replicator was stopped while reading entries."
+ + " Stop reading. Replicator state: {}",
topic, localCluster, remoteCluster, STATE_UPDATER.get(this));
return;
}
@@ -544,14 +557,17 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
long waitTimeMillis = readFailureBackoff.next();
- if(exception instanceof CursorAlreadyClosedException) {
- log.error("[{}][{} -> {}] Error reading entries because replicator is already deleted and cursor is already closed {}, ({})", topic, localCluster,
+ if (exception instanceof CursorAlreadyClosedException) {
+ log.error("[{}][{} -> {}] Error reading entries because replicator is"
+ + " already deleted and cursor is already closed {}, ({})",
+ topic, localCluster,
remoteCluster, ctx, exception.getMessage(), exception);
// replicator is already deleted and cursor is already closed so, producer should also be stopped
closeProducerAsync();
return;
- }else if (!(exception instanceof TooManyRequestsException)) {
- log.error("[{}][{} -> {}] Error reading entries at {}. Retrying to read in {}s. ({})", topic, localCluster,
+ } else if (!(exception instanceof TooManyRequestsException)) {
+ log.error("[{}][{} -> {}] Error reading entries at {}. Retrying to read in {}s. ({})",
+ topic, localCluster,
remoteCluster, ctx, waitTimeMillis / 1000.0, exception.getMessage(), exception);
} else {
if (log.isDebugEnabled()) {
@@ -764,7 +780,7 @@ public class PersistentReplicator extends AbstractReplicator implements Replicat
future.complete(null);
}).exceptionally(ex -> {
Throwable t = (ex instanceof CompletionException ? ex.getCause() : ex);
- if (t instanceof TopicBusyException == false) {
+ if (!(t instanceof TopicBusyException)) {
log.error("[{}][{} -> {}] Failed to close dispatch rate limiter: {}", topicName, localCluster,
remoteCluster, ex.getMessage());
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java
index 1d5a031..11b6f9f 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentStickyKeyDispatcherMultipleConsumers.java
@@ -133,12 +133,13 @@ public class PersistentStickyKeyDispatcherMultipleConsumers extends PersistentDi
}
}
- private static final FastThreadLocal<Map<Consumer, List<Entry>>> localGroupedEntries = new FastThreadLocal<Map<Consumer, List<Entry>>>() {
- @Override
- protected Map<Consumer, List<Entry>> initialValue() throws Exception {
- return new HashMap<>();
- }
- };
+ private static final FastThreadLocal<Map<Consumer, List<Entry>>> localGroupedEntries =
+ new FastThreadLocal<Map<Consumer, List<Entry>>>() {
+ @Override
+ protected Map<Consumer, List<Entry>> initialValue() throws Exception {
+ return new HashMap<>();
+ }
+ };
@Override
protected void sendMessagesToConsumers(ReadType readType, List<Entry> entries) {
@@ -176,7 +177,8 @@ public class PersistentStickyKeyDispatcherMultipleConsumers extends PersistentDi
int entriesWithSameKeyCount = entriesWithSameKey.size();
final int availablePermits = Math.max(consumer.getAvailablePermits(), 0);
int maxMessagesForC = Math.min(entriesWithSameKeyCount, availablePermits);
- int messagesForC = getRestrictedMaxEntriesForConsumer(consumer, entriesWithSameKey, maxMessagesForC, readType);
+ int messagesForC = getRestrictedMaxEntriesForConsumer(consumer, entriesWithSameKey,
+ maxMessagesForC, readType);
if (log.isDebugEnabled()) {
log.debug("[{}] select consumer {} with messages num {}, read type is {}",
name, consumer.consumerName(), messagesForC, readType);
@@ -208,15 +210,17 @@ public class PersistentStickyKeyDispatcherMultipleConsumers extends PersistentDi
filterEntriesForConsumer(entriesWithSameKey, batchSizes, sendMessageInfo, batchIndexesAcks, cursor,
readType == ReadType.Replay);
- consumer.sendMessages(entriesWithSameKey, batchSizes, batchIndexesAcks, sendMessageInfo.getTotalMessages(),
+ consumer.sendMessages(entriesWithSameKey, batchSizes, batchIndexesAcks,
+ sendMessageInfo.getTotalMessages(),
sendMessageInfo.getTotalBytes(), sendMessageInfo.getTotalChunkedMessages(),
getRedeliveryTracker()).addListener(future -> {
- if (future.isSuccess() && keyNumbers.decrementAndGet() == 0) {
- readMoreEntries();
- }
- });
+ if (future.isSuccess() && keyNumbers.decrementAndGet() == 0) {
+ readMoreEntries();
+ }
+ });
- TOTAL_AVAILABLE_PERMITS_UPDATER.getAndAdd(this, -(sendMessageInfo.getTotalMessages() - batchIndexesAcks.getTotalAckedIndexCount()));
+ TOTAL_AVAILABLE_PERMITS_UPDATER.getAndAdd(this,
+ -(sendMessageInfo.getTotalMessages() - batchIndexesAcks.getTotalAckedIndexCount()));
totalMessagesSent += sendMessageInfo.getTotalMessages();
totalBytesSent += sendMessageInfo.getTotalBytes();
}
@@ -253,12 +257,14 @@ public class PersistentStickyKeyDispatcherMultipleConsumers extends PersistentDi
isDispatcherStuckOnReplays = true;
stuckConsumers.addAll(nextStuckConsumers);
}
- // readMoreEntries should run regardless whether or not stuck is caused by stuckConsumers for avoid stopping dispatch.
+ // readMoreEntries should run regardless whether or not stuck is caused by
+ // stuckConsumers for avoid stopping dispatch.
readMoreEntries();
}
}
- private int getRestrictedMaxEntriesForConsumer(Consumer consumer, List<Entry> entries, int maxMessages, ReadType readType) {
+ private int getRestrictedMaxEntriesForConsumer(Consumer consumer, List<Entry> entries,
+ int maxMessages, ReadType readType) {
if (maxMessages == 0) {
// the consumer was stuck
nextStuckConsumers.add(consumer);
@@ -287,15 +293,19 @@ public class PersistentStickyKeyDispatcherMultipleConsumers extends PersistentDi
// For example, we have 10 messages [0,1,2,3,4,5,6,7,8,9]
// If the consumer0 get message 0 and 1, and does not acked message 0, then consumer1 joined,
// when consumer1 get message 2,3, the broker will not dispatch messages to consumer1
- // because of the mark delete position did not move forward. So message 2,3 will stored in the redeliver tracker.
- // Now, consumer2 joined, it will read new messages from the cursor, so the recentJoinedPosition is 4 for consumer2
+ // because of the mark delete position did not move forward.
+ // So message 2,3 will stored in the redeliver tracker.
+ // Now, consumer2 joined, it will read new messages from the cursor,
+ // so the recentJoinedPosition is 4 for consumer2
// Because of there are messages need to redeliver, so the broker will read the redelivery message first [2,3]
- // message [2,3] is lower than the recentJoinedPosition 4, so the message [2,3] will dispatched to the consumer2
+ // message [2,3] is lower than the recentJoinedPosition 4,
+ // so the message [2,3] will dispatched to the consumer2
// But the message [2,3] should not dispatch to consumer2.
if (readType == ReadType.Replay) {
PositionImpl minReadPositionForRecentJoinedConsumer = recentlyJoinedConsumers.values().iterator().next();
- if (minReadPositionForRecentJoinedConsumer != null && minReadPositionForRecentJoinedConsumer.compareTo(maxReadPosition) < 0) {
+ if (minReadPositionForRecentJoinedConsumer != null
+ && minReadPositionForRecentJoinedConsumer.compareTo(maxReadPosition) < 0) {
maxReadPosition = minReadPositionForRecentJoinedConsumer;
}
}
@@ -327,7 +337,8 @@ public class PersistentStickyKeyDispatcherMultipleConsumers extends PersistentDi
boolean hasConsumerRemovedFromTheRecentJoinedConsumers = false;
PositionImpl mdp = (PositionImpl) cursor.getMarkDeletedPosition();
if (mdp != null) {
- PositionImpl nextPositionOfTheMarkDeletePosition = ((ManagedLedgerImpl)cursor.getManagedLedger()).getNextValidPosition(mdp);
+ PositionImpl nextPositionOfTheMarkDeletePosition =
+ ((ManagedLedgerImpl) cursor.getManagedLedger()).getNextValidPosition(mdp);
while (itr.hasNext()) {
Map.Entry<Consumer, PositionImpl> entry = itr.next();
if (entry.getValue().compareTo(nextPositionOfTheMarkDeletePosition) <= 0) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java
index 491542a..3922f0f 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentSubscription.java
@@ -174,7 +174,8 @@ public class PersistentSubscription implements Subscription {
case Exclusive:
if (dispatcher == null || dispatcher.getType() != SubType.Exclusive) {
previousDispatcher = dispatcher;
- dispatcher = new PersistentDispatcherSingleActiveConsumer(cursor, SubType.Exclusive, 0, topic, this);
+ dispatcher = new PersistentDispatcherSingleActiveConsumer(cursor,
+ SubType.Exclusive, 0, topic, this);
}
break;
case Shared:
@@ -193,8 +194,8 @@ public class PersistentSubscription implements Subscription {
if (dispatcher == null || dispatcher.getType() != SubType.Failover) {
previousDispatcher = dispatcher;
- dispatcher = new PersistentDispatcherSingleActiveConsumer(cursor, SubType.Failover, partitionIndex,
- topic, this);
+ dispatcher = new PersistentDispatcherSingleActiveConsumer(cursor,
+ SubType.Failover, partitionIndex, topic, this);
}
break;
case Key_Shared:
@@ -291,7 +292,7 @@ public class PersistentSubscription implements Subscription {
}
@Override
- public void acknowledgeMessage(List<Position> positions, AckType ackType, Map<String,Long> properties) {
+ public void acknowledgeMessage(List<Position> positions, AckType ackType, Map<String, Long> properties) {
Position previousMarkDeletePosition = cursor.getMarkDeletedPosition();
if (ackType == AckType.Cumulative) {
@@ -305,7 +306,8 @@ public class PersistentSubscription implements Subscription {
if (log.isDebugEnabled()) {
log.debug("[{}][{}] Cumulative ack on {}", topicName, subName, position);
}
- cursor.asyncMarkDelete(position, mergeCursorProperties(properties), markDeleteCallback, previousMarkDeletePosition);
+ cursor.asyncMarkDelete(position, mergeCursorProperties(properties),
+ markDeleteCallback, previousMarkDeletePosition);
} else {
if (log.isDebugEnabled()) {
@@ -320,7 +322,7 @@ public class PersistentSubscription implements Subscription {
});
}
- if(dispatcher != null){
+ if (dispatcher != null) {
dispatcher.getRedeliveryTracker().removeBatch(positions);
}
}
@@ -350,13 +352,13 @@ public class PersistentSubscription implements Subscription {
if (topic.getManagedLedger().isTerminated() && cursor.getNumberOfEntriesInBacklog(false) == 0) {
// Notify all consumer that the end of topic was reached
- if(dispatcher != null){
+ if (dispatcher != null) {
dispatcher.getConsumers().forEach(Consumer::reachedEndOfTopic);
}
}
}
- private void deleteTransactionMarker(PositionImpl position, AckType ackType, Map<String,Long> properties) {
+ private void deleteTransactionMarker(PositionImpl position, AckType ackType, Map<String, Long> properties) {
if (position != null) {
ManagedLedgerImpl managedLedger = ((ManagedLedgerImpl) cursor.getManagedLedger());
PositionImpl nextPosition = managedLedger.getNextValidPosition(position);
@@ -385,8 +387,9 @@ public class PersistentSubscription implements Subscription {
}
}
- public CompletableFuture<Void> transactionIndividualAcknowledge(TxnID txnId,
- List<MutablePair<PositionImpl, Integer>> positions) {
+ public CompletableFuture<Void> transactionIndividualAcknowledge(
+ TxnID txnId,
+ List<MutablePair<PositionImpl, Integer>> positions) {
return pendingAckHandle.individualAcknowledgeMessage(txnId, positions);
}
@@ -400,7 +403,8 @@ public class PersistentSubscription implements Subscription {
PositionImpl oldMD = (PositionImpl) ctx;
PositionImpl newMD = (PositionImpl) cursor.getMarkDeletedPosition();
if (log.isDebugEnabled()) {
- log.debug("[{}][{}] Mark deleted messages to position {} from position {}", topicName, subName, newMD, oldMD);
+ log.debug("[{}][{}] Mark deleted messages to position {} from position {}",
+ topicName, subName, newMD, oldMD);
}
// Signal the dispatchers to give chance to take extra actions
notifyTheMarkDeletePositionMoveForwardIfNeeded(oldMD);
@@ -434,7 +438,7 @@ public class PersistentSubscription implements Subscription {
private void notifyTheMarkDeletePositionMoveForwardIfNeeded(Position oldPosition) {
PositionImpl oldMD = (PositionImpl) oldPosition;
PositionImpl newMD = (PositionImpl) cursor.getMarkDeletedPosition();
- if(dispatcher != null && newMD.compareTo(oldMD) > 0){
+ if (dispatcher != null && newMD.compareTo(oldMD) > 0) {
dispatcher.markDeletePositionMoveForward();
}
}
@@ -552,14 +556,17 @@ public class PersistentSubscription implements Subscription {
// that spans beyond the retention limits (time/size)
finalPosition = cursor.getFirstPosition();
if (finalPosition == null) {
- log.warn("[{}][{}] Unable to find position for timestamp {}. Unable to reset cursor to first position",
+ log.warn("[{}][{}] Unable to find position for timestamp {}."
+ + " Unable to reset cursor to first position",
topicName, subName, timestamp);
future.completeExceptionally(
- new SubscriptionInvalidCursorPosition("Unable to find position for specified timestamp"));
+ new SubscriptionInvalidCursorPosition(
+ "Unable to find position for specified timestamp"));
return;
}
log.info(
- "[{}][{}] Unable to find position for timestamp {}. Resetting cursor to first position {} in ledger",
+ "[{}][{}] Unable to find position for timestamp {}."
+ + " Resetting cursor to first position {} in ledger",
topicName, subName, timestamp, finalPosition);
} else {
finalPosition = position.getNext();
@@ -568,7 +575,8 @@ public class PersistentSubscription implements Subscription {
}
@Override
- public void findEntryFailed(ManagedLedgerException exception, Optional<Position> failedReadPosition, Object ctx) {
+ public void findEntryFailed(ManagedLedgerException exception,
+ Optional<Position> failedReadPosition, Object ctx) {
// todo - what can go wrong here that needs to be retried?
if (exception instanceof ConcurrentFindCursorPositionException) {
future.completeExceptionally(new SubscriptionBusyException(exception.getMessage()));
@@ -721,7 +729,7 @@ public class PersistentSubscription implements Subscription {
}
/**
- * Disconnect all consumers attached to the dispatcher and close this subscription
+ * Disconnect all consumers attached to the dispatcher and close this subscription.
*
* @return CompletableFuture indicating the completion of disconnect operation
*/
@@ -831,10 +839,9 @@ public class PersistentSubscription implements Subscription {
/**
* Handle unsubscribe command from the client API Check with the dispatcher is this consumer can proceed with
- * unsubscribe
+ * unsubscribe.
*
- * @param consumer
- * consumer object that is initiating the unsubscribe operation
+ * @param consumer consumer object that is initiating the unsubscribe operation
* @return CompletableFuture indicating the completion of unsubscribe operation
*/
@Override
@@ -890,8 +897,8 @@ public class PersistentSubscription implements Subscription {
subStats.lastConsumedFlowTimestamp = lastConsumedFlowTimestamp;
Dispatcher dispatcher = this.dispatcher;
if (dispatcher != null) {
- Map<String, List<String>> consumerKeyHashRanges = getType() == SubType.Key_Shared?
- ((PersistentStickyKeyDispatcherMultipleConsumers)dispatcher).getConsumerKeyHashRanges(): null;
+ Map<String, List<String>> consumerKeyHashRanges = getType() == SubType.Key_Shared
+ ? ((PersistentStickyKeyDispatcherMultipleConsumers) dispatcher).getConsumerKeyHashRanges() : null;
dispatcher.getConsumers().forEach(consumer -> {
ConsumerStats consumerStats = consumer.getStats();
subStats.consumers.add(consumerStats);
@@ -902,7 +909,8 @@ public class PersistentSubscription implements Subscription {
subStats.msgRateRedeliver += consumerStats.msgRateRedeliver;
subStats.chuckedMessageRate += consumerStats.chuckedMessageRate;
subStats.unackedMessages += consumerStats.unackedMessages;
- subStats.lastConsumedTimestamp = Math.max(subStats.lastConsumedTimestamp, consumerStats.lastConsumedTimestamp);
+ subStats.lastConsumedTimestamp =
+ Math.max(subStats.lastConsumedTimestamp, consumerStats.lastConsumedTimestamp);
subStats.lastAckedTimestamp = Math.max(subStats.lastAckedTimestamp, consumerStats.lastAckedTimestamp);
if (consumerKeyHashRanges != null && consumerKeyHashRanges.containsKey(consumer.consumerName())) {
consumerStats.keyHashRanges = consumerKeyHashRanges.get(consumer.consumerName());
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
index 4a5f4e8..e53e090 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
@@ -26,10 +26,8 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
import io.netty.buffer.ByteBuf;
import io.netty.util.concurrent.FastThreadLocal;
-
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -45,7 +43,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.BiFunction;
import javax.ws.rs.core.Response;
-
import org.apache.bookkeeper.mledger.AsyncCallbacks;
import org.apache.bookkeeper.mledger.AsyncCallbacks.AddEntryCallback;
import org.apache.bookkeeper.mledger.AsyncCallbacks.CloseCallback;
@@ -140,7 +137,8 @@ import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCallback, TopicPolicyListener<TopicPolicies> {
+public class PersistentTopic extends AbstractTopic
+ implements Topic, AddEntryCallback, TopicPolicyListener<TopicPolicies> {
// Managed ledger associated with the topic
protected final ManagedLedger ledger;
@@ -174,16 +172,17 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
private final CompactedTopic compactedTopic;
private CompletableFuture<MessageIdImpl> currentOffload = CompletableFuture.completedFuture(
- (MessageIdImpl)MessageId.earliest);
+ (MessageIdImpl) MessageId.earliest);
private volatile Optional<ReplicatedSubscriptionsController> replicatedSubscriptionsController = Optional.empty();
- private static final FastThreadLocal<TopicStatsHelper> threadLocalTopicStats = new FastThreadLocal<TopicStatsHelper>() {
- @Override
- protected TopicStatsHelper initialValue() {
- return new TopicStatsHelper();
- }
- };
+ private static final FastThreadLocal<TopicStatsHelper> threadLocalTopicStats =
+ new FastThreadLocal<TopicStatsHelper>() {
+ @Override
+ protected TopicStatsHelper initialValue() {
+ return new TopicStatsHelper();
+ }
+ };
private final AtomicLong pendingWriteOps = new AtomicLong(0);
private volatile double lastUpdatedAvgPublishRateInMsg = 0;
@@ -225,8 +224,10 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
this.subscriptions = new ConcurrentOpenHashMap<>(16, 1);
this.replicators = new ConcurrentOpenHashMap<>(16, 1);
this.delayedDeliveryEnabled = brokerService.pulsar().getConfiguration().isDelayedDeliveryEnabled();
- this.delayedDeliveryTickTimeMillis = brokerService.pulsar().getConfiguration().getDelayedDeliveryTickTimeMillis();
- this.backloggedCursorThresholdEntries = brokerService.pulsar().getConfiguration().getManagedLedgerCursorBackloggedThreshold();
+ this.delayedDeliveryTickTimeMillis =
+ brokerService.pulsar().getConfiguration().getDelayedDeliveryTickTimeMillis();
+ this.backloggedCursorThresholdEntries =
+ brokerService.pulsar().getConfiguration().getManagedLedgerCursorBackloggedThreshold();
initializeDispatchRateLimiterIfNeeded(Optional.empty());
registerTopicPolicyListener();
@@ -238,14 +239,15 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
if (cursor.getName().startsWith(replicatorPrefix)) {
String localCluster = brokerService.pulsar().getConfiguration().getClusterName();
String remoteCluster = PersistentReplicator.getRemoteCluster(cursor.getName());
- boolean isReplicatorStarted = addReplicationCluster(remoteCluster, this, cursor.getName(), localCluster);
+ boolean isReplicatorStarted = addReplicationCluster(remoteCluster,
+ this, cursor.getName(), localCluster);
if (!isReplicatorStarted) {
throw new NamingException(
- PersistentTopic.this.getName() + " Failed to start replicator " + remoteCluster);
+ PersistentTopic.this.getName() + " Failed to start replicator " + remoteCluster);
}
} else if (cursor.getName().equals(DEDUPLICATION_CURSOR_NAME)) {
- // This is not a regular subscription, we are going to ignore it for now and let the message dedup logic
- // to take care of it
+ // This is not a regular subscription, we are going to
+ // ignore it for now and let the message dedup logic to take care of it
} else {
final String subscriptionName = Codec.decode(cursor.getName());
subscriptions.put(subscriptionName, createPersistentSubscription(subscriptionName, cursor,
@@ -274,7 +276,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
maxUnackedMessagesOnConsumer = unackedMessagesExceededOnConsumer(policies);
maxUnackedMessagesOnSubscription = unackedMessagesExceededOnSubscription(policies);
} catch (Exception e) {
- log.warn("[{}] Error getting policies {} and isEncryptionRequired will be set to false", topic, e.getMessage());
+ log.warn("[{}] Error getting policies {} and isEncryptionRequired will be set to false",
+ topic, e.getMessage());
isEncryptionRequired = false;
}
@@ -284,16 +287,19 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
checkReplicatedSubscriptionControllerState();
}
+
// for testing purposes
@VisibleForTesting
- PersistentTopic(String topic, BrokerService brokerService, ManagedLedger ledger, MessageDeduplication messageDeduplication) {
+ PersistentTopic(String topic, BrokerService brokerService, ManagedLedger ledger,
+ MessageDeduplication messageDeduplication) {
super(topic, brokerService);
this.ledger = ledger;
this.messageDeduplication = messageDeduplication;
this.subscriptions = new ConcurrentOpenHashMap<>(16, 1);
this.replicators = new ConcurrentOpenHashMap<>(16, 1);
this.compactedTopic = new CompactedTopicImpl(brokerService.pulsar().getBookKeeperClient());
- this.backloggedCursorThresholdEntries = brokerService.pulsar().getConfiguration().getManagedLedgerCursorBackloggedThreshold();
+ this.backloggedCursorThresholdEntries =
+ brokerService.pulsar().getConfiguration().getManagedLedgerCursorBackloggedThreshold();
}
private void initializeDispatchRateLimiterIfNeeded(Optional<Policies> policies) {
@@ -347,7 +353,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
return;
}
- MessageDeduplication.MessageDupStatus status = messageDeduplication.isDuplicate(publishContext, headersAndPayload);
+ MessageDeduplication.MessageDupStatus status =
+ messageDeduplication.isDuplicate(publishContext, headersAndPayload);
switch (status) {
case NotDup:
ledger.asyncAddEntry(headersAndPayload, this, publishContext);
@@ -366,28 +373,30 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
public void asyncReadEntry(PositionImpl position, AsyncCallbacks.ReadEntryCallback callback, Object ctx) {
if (ledger instanceof ManagedLedgerImpl) {
- ((ManagedLedgerImpl)ledger).asyncReadEntry(position, callback, ctx);
+ ((ManagedLedgerImpl) ledger).asyncReadEntry(position, callback, ctx);
} else {
- callback.readEntryFailed(new ManagedLedgerException("Unexpected managedledger implementation, doesn't support " +
- "direct read entry operation.") ,ctx);
+ callback.readEntryFailed(new ManagedLedgerException(
+ "Unexpected managedledger implementation, doesn't support "
+ + "direct read entry operation."), ctx);
}
}
public PositionImpl getPositionAfterN(PositionImpl startPosition, long n) throws ManagedLedgerException {
if (ledger instanceof ManagedLedgerImpl) {
- return ((ManagedLedgerImpl)ledger).getPositionAfterN(startPosition, n, ManagedLedgerImpl.PositionBound.startExcluded);
+ return ((ManagedLedgerImpl) ledger).getPositionAfterN(startPosition, n,
+ ManagedLedgerImpl.PositionBound.startExcluded);
} else {
- throw new ManagedLedgerException("Unexpected managedledger implementation, doesn't support " +
- "getPositionAfterN operation.");
+ throw new ManagedLedgerException("Unexpected managedledger implementation, doesn't support "
+ + "getPositionAfterN operation.");
}
}
public PositionImpl getFirstPosition() throws ManagedLedgerException {
if (ledger instanceof ManagedLedgerImpl) {
- return ((ManagedLedgerImpl)ledger).getFirstPosition();
+ return ((ManagedLedgerImpl) ledger).getFirstPosition();
} else {
- throw new ManagedLedgerException("Unexpected managedledger implementation, doesn't support " +
- "getFirstPosition operation.");
+ throw new ManagedLedgerException("Unexpected managedledger implementation, doesn't support "
+ + "getFirstPosition operation.");
}
}
@@ -553,9 +562,13 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
@Override
public CompletableFuture<Consumer> subscribe(final TransportCnx cnx, String subscriptionName, long consumerId,
- SubType subType, int priorityLevel, String consumerName, boolean isDurable, MessageId startMessageId,
- Map<String, String> metadata, boolean readCompacted, InitialPosition initialPosition,
- long startMessageRollbackDurationSec, boolean replicatedSubscriptionState, PulsarApi.KeySharedMeta keySharedMeta) {
+ SubType subType, int priorityLevel, String consumerName,
+ boolean isDurable, MessageId startMessageId,
+ Map<String, String> metadata, boolean readCompacted,
+ InitialPosition initialPosition,
+ long startMessageRollbackDurationSec,
+ boolean replicatedSubscriptionState,
+ PulsarApi.KeySharedMeta keySharedMeta) {
final CompletableFuture<Consumer> future = new CompletableFuture<>();
@@ -612,11 +625,13 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
if (cnx.clientAddress() != null && cnx.clientAddress().toString().contains(":")) {
SubscribeRateLimiter.ConsumerIdentifier consumer = new SubscribeRateLimiter.ConsumerIdentifier(
cnx.clientAddress().toString().split(":")[0], consumerName, consumerId);
- if (subscribeRateLimiter.isPresent() && !subscribeRateLimiter.get().subscribeAvailable(consumer) || !subscribeRateLimiter.get().tryAcquire(consumer)) {
+ if (subscribeRateLimiter.isPresent() && !subscribeRateLimiter.get().subscribeAvailable(consumer)
+ || !subscribeRateLimiter.get().tryAcquire(consumer)) {
log.warn("[{}] Failed to create subscription for {} {} limited by {}, available {}",
topic, subscriptionName, consumer, subscribeRateLimiter.get().getSubscribeRate(),
subscribeRateLimiter.get().getAvailableSubscribeRateLimit(consumer));
- future.completeExceptionally(new NotAllowedException("Subscribe limited by subscribe rate limit per consumer."));
+ future.completeExceptionally(
+ new NotAllowedException("Subscribe limited by subscribe rate limit per consumer."));
return future;
}
@@ -635,8 +650,10 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
CompletableFuture<? extends Subscription> subscriptionFuture = isDurable ? //
- getDurableSubscription(subscriptionName, initialPosition, startMessageRollbackDurationSec, replicatedSubscriptionState) //
- : getNonDurableSubscription(subscriptionName, startMessageId, initialPosition, startMessageRollbackDurationSec);
+ getDurableSubscription(subscriptionName, initialPosition, startMessageRollbackDurationSec,
+ replicatedSubscriptionState) //
+ : getNonDurableSubscription(subscriptionName, startMessageId, initialPosition,
+ startMessageRollbackDurationSec);
int maxUnackedMessages = isDurable
? getMaxUnackedMessagesOnConsumer()
@@ -645,7 +662,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
subscriptionFuture.thenAccept(subscription -> {
try {
Consumer consumer = new Consumer(subscription, subType, topic, consumerId, priorityLevel, consumerName,
- maxUnackedMessages, cnx, cnx.getAuthRole(), metadata, readCompacted, initialPosition, keySharedMeta);
+ maxUnackedMessages, cnx, cnx.getAuthRole(), metadata,
+ readCompacted, initialPosition, keySharedMeta);
addConsumerToSubscription(subscription, consumer);
checkBackloggedCursors();
@@ -687,17 +705,17 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
private int unackedMessagesExceededOnSubscription(Policies data) {
- final int maxUnackedMessages = data.max_unacked_messages_per_subscription > -1 ?
- data.max_unacked_messages_per_subscription :
- brokerService.pulsar().getConfiguration().getMaxUnackedMessagesPerSubscription();
+ final int maxUnackedMessages = data.max_unacked_messages_per_subscription > -1
+ ? data.max_unacked_messages_per_subscription
+ : brokerService.pulsar().getConfiguration().getMaxUnackedMessagesPerSubscription();
return maxUnackedMessages;
}
private int unackedMessagesExceededOnConsumer(Policies data) {
- final int maxUnackedMessages = data.max_unacked_messages_per_consumer > -1 ?
- data.max_unacked_messages_per_consumer :
- brokerService.pulsar().getConfiguration().getMaxUnackedMessagesPerConsumer();
+ final int maxUnackedMessages = data.max_unacked_messages_per_consumer > -1
+ ? data.max_unacked_messages_per_consumer
+ : brokerService.pulsar().getConfiguration().getMaxUnackedMessagesPerConsumer();
return maxUnackedMessages;
}
@@ -733,7 +751,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
@Override
public void openCursorFailed(ManagedLedgerException exception, Object ctx) {
- log.warn("[{}] Failed to create subscription for {}: {}", topic, subscriptionName, exception.getMessage());
+ log.warn("[{}] Failed to create subscription for {}: {}", topic, subscriptionName,
+ exception.getMessage());
decrementUsageCount();
subscriptionFuture.completeExceptionally(new PersistenceException(exception));
if (exception instanceof ManagedLedgerFencedException) {
@@ -808,15 +827,16 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
@Override
- public CompletableFuture<Subscription> createSubscription(String subscriptionName, InitialPosition initialPosition, boolean replicateSubscriptionState) {
- return getDurableSubscription(subscriptionName, initialPosition, 0 /*avoid reseting cursor*/, replicateSubscriptionState);
+ public CompletableFuture<Subscription> createSubscription(String subscriptionName, InitialPosition initialPosition,
+ boolean replicateSubscriptionState) {
+ return getDurableSubscription(subscriptionName, initialPosition,
+ 0 /*avoid reseting cursor*/, replicateSubscriptionState);
}
/**
- * Delete the cursor ledger for a given subscription
+ * Delete the cursor ledger for a given subscription.
*
- * @param subscriptionName
- * Subscription for which the cursor ledger is to be deleted
+ * @param subscriptionName Subscription for which the cursor ledger is to be deleted
* @return Completable future indicating completion of unsubscribe operation Completed exceptionally with:
* ManagedLedgerException if cursor ledger delete fails
*/
@@ -852,7 +872,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
/**
- * Delete the managed ledger associated with this topic
+ * Delete the managed ledger associated with this topic.
*
* @return Completable future indicating completion of delete operation Completed exceptionally with:
* IllegalStateException if topic is still active ManagedLedgerException if ledger delete operation fails
@@ -862,7 +882,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
return delete(false, false, false);
}
- private CompletableFuture<Void> delete(boolean failIfHasSubscriptions, boolean failIfHasBacklogs, boolean deleteSchema) {
+ private CompletableFuture<Void> delete(boolean failIfHasSubscriptions,
+ boolean failIfHasBacklogs, boolean deleteSchema) {
return delete(failIfHasSubscriptions, failIfHasBacklogs, false, deleteSchema);
}
@@ -879,15 +900,16 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
/**
- * Delete the managed ledger associated with this topic
+ * Delete the managed ledger associated with this topic.
*
* @param failIfHasSubscriptions
* Flag indicating whether delete should succeed if topic still has unconnected subscriptions. Set to
* false when called from admin API (it will delete the subs too), and set to true when called from GC
* thread
* @param closeIfClientsConnected
- * Flag indicate whether explicitly close connected producers/consumers/replicators before trying to delete topic. If
- * any client is connected to a topic and if this flag is disable then this operation fails.
+ * Flag indicate whether explicitly close connected
+ * producers/consumers/replicators before trying to delete topic.
+ * If any client is connected to a topic and if this flag is disable then this operation fails.
* @param deleteSchema
* Flag indicating whether delete the schema defined for topic if exist.
*
@@ -936,9 +958,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
// 2. We want to kick out everyone and forcefully delete the topic.
// In this case, we shouldn't care if the usageCount is 0 or not, just proceed
if (currentUsageCount() == 0 || (closeIfClientsConnected && !failIfHasSubscriptions)) {
- CompletableFuture<SchemaVersion> deleteSchemaFuture = deleteSchema ?
- deleteSchema()
- : CompletableFuture.completedFuture(null);
+ CompletableFuture<SchemaVersion> deleteSchemaFuture =
+ deleteSchema ? deleteSchema() : CompletableFuture.completedFuture(null);
deleteSchemaFuture.whenComplete((v, ex) -> {
if (ex != null) {
@@ -955,7 +976,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
subscribeRateLimiter.ifPresent(SubscribeRateLimiter::close);
- brokerService.pulsar().getTopicPoliciesService().unregisterListener(TopicName.get(topic), getPersistentTopic());
+ brokerService.pulsar().getTopicPoliciesService()
+ .unregisterListener(TopicName.get(topic), getPersistentTopic());
log.info("[{}] Topic deleted", topic);
deleteFuture.complete(null);
}
@@ -997,7 +1019,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
/**
- * Close this topic - close all producers and subscriptions associated with this topic
+ * Close this topic - close all producers and subscriptions associated with this topic.
*
* @param closeWithoutWaitingClientDisconnect don't wait for client disconnect and forcefully close managed-ledger
* @return Completable future indicating completion of close operation
@@ -1027,7 +1049,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
producers.values().forEach(producer -> futures.add(producer.disconnect()));
subscriptions.forEach((s, sub) -> futures.add(sub.disconnect()));
- CompletableFuture<Void> clientCloseFuture = closeWithoutWaitingClientDisconnect ? CompletableFuture.completedFuture(null)
+ CompletableFuture<Void> clientCloseFuture = closeWithoutWaitingClientDisconnect
+ ? CompletableFuture.completedFuture(null)
: FutureUtil.waitForAll(futures);
clientCloseFuture.thenRun(() -> {
@@ -1044,7 +1067,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
subscribeRateLimiter.ifPresent(SubscribeRateLimiter::close);
- brokerService.pulsar().getTopicPoliciesService().unregisterListener(TopicName.get(topic), getPersistentTopic());
+ brokerService.pulsar().getTopicPoliciesService()
+ .unregisterListener(TopicName.get(topic), getPersistentTopic());
log.info("[{}] Topic closed", topic);
closeFuture.complete(null);
}
@@ -1183,11 +1207,12 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
public void checkMessageExpiry() {
try {
//If topic level policy or message ttl is not set, fall back to namespace level config.
- int message_ttl_in_seconds = getMessageTTL();
+ int messageTtlInSeconds = getMessageTTL();
- if (message_ttl_in_seconds != 0) {
- subscriptions.forEach((subName, sub) -> sub.expireMessages(message_ttl_in_seconds));
- replicators.forEach((region, replicator) -> ((PersistentReplicator)replicator).expireMessages(message_ttl_in_seconds));
+ if (messageTtlInSeconds != 0) {
+ subscriptions.forEach((subName, sub) -> sub.expireMessages(messageTtlInSeconds));
+ replicators.forEach((region, replicator)
+ -> ((PersistentReplicator) replicator).expireMessages(messageTtlInSeconds));
}
} catch (Exception e) {
if (log.isDebugEnabled()) {
@@ -1249,23 +1274,26 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
String replicatorName = PersistentReplicator.getReplicatorName(replicatorPrefix, remoteCluster);
String localCluster = brokerService.pulsar().getConfiguration().getClusterName();
- boolean isReplicatorStarted = addReplicationCluster(remoteCluster, PersistentTopic.this, replicatorName, localCluster);
+ boolean isReplicatorStarted = addReplicationCluster(remoteCluster,
+ PersistentTopic.this, replicatorName, localCluster);
if (isReplicatorStarted) {
future.complete(null);
} else {
future.completeExceptionally(new NamingException(
- PersistentTopic.this.getName() + " Failed to start replicator " + remoteCluster));
+ PersistentTopic.this.getName() + " Failed to start replicator " + remoteCluster));
}
return future;
}
- protected boolean addReplicationCluster(String remoteCluster, PersistentTopic persistentTopic, String replicatorName,
- String localCluster) {
+ protected boolean addReplicationCluster(String remoteCluster, PersistentTopic persistentTopic,
+ String replicatorName,
+ String localCluster) {
AtomicBoolean isReplicatorStarted = new AtomicBoolean(true);
replicators.computeIfAbsent(remoteCluster, r -> {
try {
- return new PersistentReplicator(PersistentTopic.this, replicatorName, localCluster, remoteCluster,
+ return new PersistentReplicator(PersistentTopic.this, replicatorName, localCluster,
+ remoteCluster,
brokerService, ledger);
} catch (NamingException e) {
isReplicatorStarted.set(false);
@@ -1348,8 +1376,9 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
@Override
- public void updateRates(NamespaceStats nsStats, NamespaceBundleStats bundleStats, StatsOutputStream topicStatsStream,
- ClusterReplicationMetrics replStats, String namespace, boolean hydratePublishers) {
+ public void updateRates(NamespaceStats nsStats, NamespaceBundleStats bundleStats,
+ StatsOutputStream topicStatsStream,
+ ClusterReplicationMetrics replStats, String namespace, boolean hydratePublishers) {
TopicStatsHelper topicStatsHelper = threadLocalTopicStats.get();
topicStatsHelper.reset();
@@ -1486,19 +1515,25 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
topicStatsStream.endList();
// Populate subscription specific stats here
- topicStatsStream.writePair("msgBacklog", subscription.getNumberOfEntriesInBacklog(false));
+ topicStatsStream.writePair("msgBacklog",
+ subscription.getNumberOfEntriesInBacklog(false));
topicStatsStream.writePair("msgRateExpired", subscription.getExpiredMessageRate());
topicStatsStream.writePair("msgRateOut", subMsgRateOut);
topicStatsStream.writePair("msgThroughputOut", subMsgThroughputOut);
topicStatsStream.writePair("msgRateRedeliver", subMsgRateRedeliver);
- topicStatsStream.writePair("numberOfEntriesSinceFirstNotAckedMessage", subscription.getNumberOfEntriesSinceFirstNotAckedMessage());
- topicStatsStream.writePair("totalNonContiguousDeletedMessagesRange", subscription.getTotalNonContiguousDeletedMessagesRange());
+ topicStatsStream.writePair("numberOfEntriesSinceFirstNotAckedMessage",
+ subscription.getNumberOfEntriesSinceFirstNotAckedMessage());
+ topicStatsStream.writePair("totalNonContiguousDeletedMessagesRange",
+ subscription.getTotalNonContiguousDeletedMessagesRange());
topicStatsStream.writePair("type", subscription.getTypeString());
if (Subscription.isIndividualAckMode(subscription.getType())) {
- if(subscription.getDispatcher() instanceof PersistentDispatcherMultipleConsumers) {
- PersistentDispatcherMultipleConsumers dispatcher = (PersistentDispatcherMultipleConsumers)subscription.getDispatcher();
- topicStatsStream.writePair("blockedSubscriptionOnUnackedMsgs", dispatcher.isBlockedDispatcherOnUnackedMsgs());
- topicStatsStream.writePair("unackedMessages", dispatcher.getTotalUnackedMessages());
+ if (subscription.getDispatcher() instanceof PersistentDispatcherMultipleConsumers) {
+ PersistentDispatcherMultipleConsumers dispatcher =
+ (PersistentDispatcherMultipleConsumers) subscription.getDispatcher();
+ topicStatsStream.writePair("blockedSubscriptionOnUnackedMsgs",
+ dispatcher.isBlockedDispatcherOnUnackedMsgs());
+ topicStatsStream.writePair("unackedMessages",
+ dispatcher.getTotalUnackedMessages());
}
}
@@ -1568,7 +1603,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
TopicStats stats = new TopicStats();
- ObjectObjectHashMap<String, PublisherStats> remotePublishersStats = new ObjectObjectHashMap<String, PublisherStats>();
+ ObjectObjectHashMap<String, PublisherStats> remotePublishersStats = new ObjectObjectHashMap<>();
producers.values().forEach(producer -> {
PublisherStats publisherStats = producer.getStats();
@@ -1671,8 +1706,9 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
info.size = -1;
try {
- Optional<CompactedTopicImpl.CompactedTopicContext> compactedTopicContext = ((CompactedTopicImpl) compactedTopic)
- .getCompactedTopicContext();
+ Optional<CompactedTopicImpl.CompactedTopicContext> compactedTopicContext =
+ ((CompactedTopicImpl) compactedTopic)
+ .getCompactedTopicContext();
if (compactedTopicContext.isPresent()) {
CompactedTopicImpl.CompactedTopicContext ledgerContext = compactedTopicContext.get();
info.ledgerId = ledgerContext.getLedger().getId();
@@ -1831,7 +1867,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
, topicName.getDomain().value());
Set<String> cache = null;
try {
- cache = brokerService.pulsar().getLocalZkCacheService().managedLedgerListCache().get(managedPath);
+ cache = brokerService.pulsar().getLocalZkCacheService()
+ .managedLedgerListCache().get(managedPath);
} catch (Exception e) {
deleteMetadataFuture.completeExceptionally(e);
}
@@ -1957,7 +1994,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
@Override
public CompletableFuture<Void> onPoliciesUpdate(Policies data) {
if (log.isDebugEnabled()) {
- log.debug("[{}] isEncryptionRequired changes: {} -> {}", topic, isEncryptionRequired, data.encryption_required);
+ log.debug("[{}] isEncryptionRequired changes: {} -> {}", topic, isEncryptionRequired,
+ data.encryption_required);
}
isEncryptionRequired = data.encryption_required;
@@ -1982,7 +2020,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
} else {
ServiceConfiguration cfg = brokerService.getPulsar().getConfiguration();
resetInactiveTopicPolicies(cfg.getBrokerDeleteInactiveTopicsMode()
- , cfg.getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds(), cfg.isBrokerDeleteInactiveTopicsEnabled());
+ , cfg.getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds(),
+ cfg.isBrokerDeleteInactiveTopicsEnabled());
}
initializeDispatchRateLimiterIfNeeded(Optional.ofNullable(data));
@@ -2131,7 +2170,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
/**
- * Clears backlog for all cursors in the topic
+ * Clears backlog for all cursors in the topic.
*
* @return
*/
@@ -2267,7 +2306,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
new OffloadCallback() {
@Override
public void offloadComplete(Position pos, Object ctx) {
- PositionImpl impl = (PositionImpl)pos;
+ PositionImpl impl = (PositionImpl) pos;
log.info("[{}] Completed successfully offload operation at messageId {}", topic, messageId);
promise.complete(new MessageIdImpl(impl.getLedgerId(), impl.getEntryId(), -1));
}
@@ -2327,13 +2366,14 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
public CompletableFuture<Void> addSchemaIfIdleOrCheckCompatible(SchemaData schema) {
return hasSchema()
.thenCompose((hasSchema) -> {
- if (hasSchema || isActive(InactiveTopicDeleteMode.delete_when_no_subscriptions) || ledger.getTotalSize() != 0) {
- return checkSchemaCompatibleForConsumer(schema);
- } else {
- return addSchema(schema).thenCompose(schemaVersion ->
- CompletableFuture.completedFuture(null));
- }
- });
+ if (hasSchema || isActive(InactiveTopicDeleteMode.delete_when_no_subscriptions)
+ || ledger.getTotalSize() != 0) {
+ return checkSchemaCompatibleForConsumer(schema);
+ } else {
+ return addSchema(schema).thenCompose(schemaVersion ->
+ CompletableFuture.completedFuture(null));
+ }
+ });
}
private synchronized void checkReplicatedSubscriptionControllerState() {
@@ -2344,7 +2384,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
});
- if (shouldBeEnabled.get() == false) {
+ if (!shouldBeEnabled.get()) {
log.info("[{}] There are no replicated subscriptions on the topic", topic);
}
@@ -2353,7 +2393,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
private synchronized void checkReplicatedSubscriptionControllerState(boolean shouldBeEnabled) {
boolean isCurrentlyEnabled = replicatedSubscriptionsController.isPresent();
- boolean isEnableReplicatedSubscriptions = brokerService.pulsar().getConfiguration().isEnableReplicatedSubscriptions();
+ boolean isEnableReplicatedSubscriptions =
+ brokerService.pulsar().getConfiguration().isEnableReplicatedSubscriptions();
if (shouldBeEnabled && !isCurrentlyEnabled && isEnableReplicatedSubscriptions) {
log.info("[{}] Enabling replicated subscriptions controller", topic);
@@ -2465,7 +2506,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
return;
}
- MessageDeduplication.MessageDupStatus status = messageDeduplication.isDuplicate(publishContext, headersAndPayload);
+ MessageDeduplication.MessageDupStatus status =
+ messageDeduplication.isDuplicate(publishContext, headersAndPayload);
switch (status) {
case NotDup:
getTransactionBuffer(true)
@@ -2474,7 +2516,7 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
.thenAccept(position -> {
decrementPendingWriteOpsAndCheck();
publishContext.completed(null,
- ((PositionImpl)position).getLedgerId(), ((PositionImpl)position).getEntryId());
+ ((PositionImpl) position).getLedgerId(), ((PositionImpl) position).getEntryId());
})
.exceptionally(throwable -> {
decrementPendingWriteOpsAndCheck();
@@ -2603,7 +2645,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
//namespace-level policies is null , so use broker level
ServiceConfiguration cfg = brokerService.getPulsar().getConfiguration();
resetInactiveTopicPolicies(cfg.getBrokerDeleteInactiveTopicsMode()
- , cfg.getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds(), cfg.isBrokerDeleteInactiveTopicsEnabled());
+ , cfg.getBrokerDeleteInactiveTopicsMaxInactiveDurationSeconds(),
+ cfg.isBrokerDeleteInactiveTopicsEnabled());
}
initializeTopicSubscribeRateLimiterIfNeeded(Optional.ofNullable(policies));
@@ -2627,8 +2670,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
private void initializeTopicSubscribeRateLimiterIfNeeded(Optional<TopicPolicies> policies) {
synchronized (subscribeRateLimiter) {
- if (!subscribeRateLimiter.isPresent() && policies.isPresent() &&
- policies.get().getSubscribeRate() != null) {
+ if (!subscribeRateLimiter.isPresent() && policies.isPresent()
+ && policies.get().getSubscribeRate() != null) {
this.subscribeRateLimiter = Optional.of(new SubscribeRateLimiter(this));
}
}
@@ -2639,8 +2682,8 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
}
private void registerTopicPolicyListener() {
- if (brokerService.pulsar().getConfig().isSystemTopicEnabled() &&
- brokerService.pulsar().getConfig().isTopicLevelPoliciesEnabled()) {
+ if (brokerService.pulsar().getConfig().isSystemTopicEnabled()
+ && brokerService.pulsar().getConfig().isTopicLevelPoliciesEnabled()) {
TopicName topicName = TopicName.get(topic);
TopicName cloneTopicName = topicName;
if (topicName.isPartitioned()) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionSnapshotCache.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionSnapshotCache.java
index a49e5a4..f69af32 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionSnapshotCache.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionSnapshotCache.java
@@ -26,7 +26,7 @@ import org.apache.pulsar.common.api.proto.PulsarMarkers.MessageIdData;
import org.apache.pulsar.common.api.proto.PulsarMarkers.ReplicatedSubscriptionsSnapshot;
/**
- * Store the last N snapshots that were scanned by a particular subscription
+ * Store the last N snapshots that were scanned by a particular subscription.
*/
@Slf4j
public class ReplicatedSubscriptionSnapshotCache {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsController.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsController.java
index 69d2b38..73350c3 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsController.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsController.java
@@ -57,7 +57,8 @@ public class ReplicatedSubscriptionsController implements AutoCloseable, Topic.P
private final ScheduledFuture<?> timer;
- private final ConcurrentMap<String, ReplicatedSubscriptionsSnapshotBuilder> pendingSnapshots = new ConcurrentHashMap<>();
+ private final ConcurrentMap<String, ReplicatedSubscriptionsSnapshotBuilder> pendingSnapshots =
+ new ConcurrentHashMap<>();
private final static Gauge pendingSnapshotsMetric = Gauge
.build("pulsar_replicated_subscriptions_pending_snapshots",
@@ -229,7 +230,7 @@ public class ReplicatedSubscriptionsController implements AutoCloseable, Topic.P
}
/**
- * From Topic.PublishContext
+ * From Topic.PublishContext.
*/
@Override
public void completed(Exception e, long ledgerId, long entryId) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SubscribeRateLimiter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SubscribeRateLimiter.java
index 9a6797d..ae26b45 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SubscribeRateLimiter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SubscribeRateLimiter.java
@@ -62,7 +62,8 @@ public class SubscribeRateLimiter {
// get subscribeRate from broker.conf
if (this.subscribeRate == null) {
- this.subscribeRate = new SubscribeRate(brokerService.pulsar().getConfiguration().getSubscribeThrottlingRatePerConsumer(),
+ this.subscribeRate = new SubscribeRate(brokerService.pulsar()
+ .getConfiguration().getSubscribeThrottlingRatePerConsumer(),
brokerService.pulsar().getConfiguration().getSubscribeRatePeriodPerConsumerInSecond());
}
@@ -73,12 +74,13 @@ public class SubscribeRateLimiter {
}
/**
- * returns available subscribes if subscribe-throttling is enabled else it returns -1
+ * returns available subscribes if subscribe-throttling is enabled else it returns -1.
*
* @return
*/
public long getAvailableSubscribeRateLimit(ConsumerIdentifier consumerIdentifier) {
- return subscribeRateLimiter.get(consumerIdentifier) == null ? -1 : subscribeRateLimiter.get(consumerIdentifier).getAvailablePermits();
+ return subscribeRateLimiter.get(consumerIdentifier)
+ == null ? -1 : subscribeRateLimiter.get(consumerIdentifier).getAvailablePermits();
}
/**
@@ -88,20 +90,24 @@ public class SubscribeRateLimiter {
*/
public synchronized boolean tryAcquire(ConsumerIdentifier consumerIdentifier) {
addSubscribeLimiterIfAbsent(consumerIdentifier);
- return subscribeRateLimiter.get(consumerIdentifier) == null || subscribeRateLimiter.get(consumerIdentifier).tryAcquire();
+ return subscribeRateLimiter.get(consumerIdentifier)
+ == null || subscribeRateLimiter.get(consumerIdentifier).tryAcquire();
}
/**
- * checks if subscribe-rate limit is configured and if it's configured then check if subscribe are available or not.
+ * checks if subscribe-rate limit is configured and if it's configured then check if
+ * subscribe are available or not.
*
* @return
*/
public boolean subscribeAvailable(ConsumerIdentifier consumerIdentifier) {
- return (subscribeRateLimiter.get(consumerIdentifier) == null|| subscribeRateLimiter.get(consumerIdentifier).getAvailablePermits() > 0);
+ return (subscribeRateLimiter.get(consumerIdentifier)
+ == null || subscribeRateLimiter.get(consumerIdentifier).getAvailablePermits() > 0);
}
/**
- * Update subscribe-throttling-rate. gives first priority to namespace-policy configured subscribe rate else applies
+ * Update subscribe-throttling-rate. gives first priority to
+ * namespace-policy configured subscribe rate else applies
* default broker subscribe-throttling-rate
*/
private synchronized void addSubscribeLimiterIfAbsent(ConsumerIdentifier consumerIdentifier) {
@@ -132,11 +138,13 @@ public class SubscribeRateLimiter {
// update subscribe-rateLimiter
if (ratePerConsumer > 0) {
if (this.subscribeRateLimiter.get(consumerIdentifier) == null) {
- this.subscribeRateLimiter.put(consumerIdentifier, new RateLimiter(brokerService.pulsar().getExecutor(), ratePerConsumer,
- ratePeriod, TimeUnit.SECONDS, null));
+ this.subscribeRateLimiter.put(consumerIdentifier,
+ new RateLimiter(brokerService.pulsar().getExecutor(), ratePerConsumer,
+ ratePeriod, TimeUnit.SECONDS, null));
} else {
- this.subscribeRateLimiter.get(consumerIdentifier).setRate(ratePerConsumer, ratePeriod, TimeUnit.SECONDS,
- null);
+ this.subscribeRateLimiter.get(consumerIdentifier)
+ .setRate(ratePerConsumer, ratePeriod, TimeUnit.SECONDS,
+ null);
}
} else {
// subscribe-rate should be disable and close
@@ -245,7 +253,8 @@ public class SubscribeRateLimiter {
* @return
*/
public long getSubscribeRatePerConsumer(ConsumerIdentifier consumerIdentifier) {
- return subscribeRateLimiter.get(consumerIdentifier) != null ? subscribeRateLimiter.get(consumerIdentifier).getRate() : -1;
+ return subscribeRateLimiter.get(consumerIdentifier)
+ != null ? subscribeRateLimiter.get(consumerIdentifier).getRate() : -1;
}
private static boolean isSubscribeRateEnabled(SubscribeRate subscribeRate) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SystemTopic.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SystemTopic.java
index 0b714c6..5735247 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SystemTopic.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/SystemTopic.java
@@ -25,7 +25,8 @@ import org.apache.pulsar.broker.service.BrokerServiceException;
public class SystemTopic extends PersistentTopic {
- public SystemTopic(String topic, ManagedLedger ledger, BrokerService brokerService) throws BrokerServiceException.NamingException {
+ public SystemTopic(String topic, ManagedLedger ledger, BrokerService brokerService)
+ throws BrokerServiceException.NamingException {
super(topic, ledger, brokerService);
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AlwaysSchemaValidator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AlwaysSchemaValidator.java
index e979828..ed5b4b4 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AlwaysSchemaValidator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AlwaysSchemaValidator.java
@@ -25,7 +25,7 @@ import org.apache.avro.SchemaValidator;
* A schema validator that always reports as compatible.
*/
class AlwaysSchemaValidator implements SchemaValidator {
- static AlwaysSchemaValidator INSTANCE = new AlwaysSchemaValidator();
+ final static AlwaysSchemaValidator INSTANCE = new AlwaysSchemaValidator();
@Override
public void validate(Schema toValidate, Iterable<Schema> existing) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java
index 0ac6fcf..ce4bb2a 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java
@@ -39,12 +39,14 @@ import org.apache.pulsar.common.protocol.schema.SchemaData;
abstract class AvroSchemaBasedCompatibilityCheck implements SchemaCompatibilityCheck {
@Override
- public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
checkCompatible(Collections.singletonList(from), to, strategy);
}
@Override
- public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
LinkedList<Schema> fromList = new LinkedList<>();
checkArgument(from != null, "check compatibility list is null");
try {
@@ -67,7 +69,7 @@ abstract class AvroSchemaBasedCompatibilityCheck implements SchemaCompatibilityC
}
}
- static SchemaValidator createSchemaValidator(SchemaCompatibilityStrategy compatibilityStrategy) throws IncompatibleSchemaException {
+ static SchemaValidator createSchemaValidator(SchemaCompatibilityStrategy compatibilityStrategy) {
final SchemaValidatorBuilder validatorBuilder = new SchemaValidatorBuilder();
switch (compatibilityStrategy) {
case BACKWARD_TRANSITIVE:
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/BookkeeperSchemaStorage.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/BookkeeperSchemaStorage.java
index afafab6..475e6f9 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/BookkeeperSchemaStorage.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/BookkeeperSchemaStorage.java
@@ -79,7 +79,8 @@ public class BookkeeperSchemaStorage implements SchemaStorage {
// schemaId => ledgers of the schemaId
private final Map<String, List<Long>> schemaLedgers = new ConcurrentHashMap<>();
- private final ConcurrentMap<String, CompletableFuture<StoredSchema>> readSchemaOperations = new ConcurrentHashMap<>();
+ private final ConcurrentMap<String, CompletableFuture<StoredSchema>> readSchemaOperations =
+ new ConcurrentHashMap<>();
@VisibleForTesting
BookkeeperSchemaStorage(PulsarService pulsar) {
@@ -266,22 +267,25 @@ public class BookkeeperSchemaStorage implements SchemaStorage {
//don't check the schema whether already exist
return readSchemaEntry(locator.getIndexList().get(0).getPosition())
- .thenCompose(schemaEntry -> addNewSchemaEntryToStore(schemaId, locator.getIndexList(), data).thenCompose(
- position -> {
- CompletableFuture<Long> future = new CompletableFuture<>();
- updateSchemaLocator(schemaId, optLocatorEntry.get(), position, hash)
- .thenAccept(future::complete)
- .exceptionally(ex -> {
- if (ex.getCause() instanceof KeeperException.BadVersionException) {
- // There was a race condition on the schema creation. Since it has now been created,
- // retry the whole operation so that we have a chance to recover without bubbling error
- putSchema(schemaId, data, hash)
- .thenAccept(future::complete)
- .exceptionally(ex2 -> {
- future.completeExceptionally(ex2);
- return null;
- });
- } else {
+ .thenCompose(schemaEntry -> addNewSchemaEntryToStore(schemaId,
+ locator.getIndexList(), data).thenCompose(
+ position -> {
+ CompletableFuture<Long> future = new CompletableFuture<>();
+ updateSchemaLocator(schemaId, optLocatorEntry.get(), position, hash)
+ .thenAccept(future::complete)
+ .exceptionally(ex -> {
+ if (ex.getCause() instanceof KeeperException.BadVersionException) {
+ // There was a race condition on the schema creation.
+ // Since it has now been created,
+ // retry the whole operation so that we have a chance to
+ // recover without bubbling error
+ putSchema(schemaId, data, hash)
+ .thenAccept(future::complete)
+ .exceptionally(ex2 -> {
+ future.completeExceptionally(ex2);
+ return null;
+ });
+ } else {
// For other errors, just fail the operation
future.completeExceptionally(ex);
}
@@ -296,8 +300,8 @@ public class BookkeeperSchemaStorage implements SchemaStorage {
createNewSchema(schemaId, data, hash)
.thenAccept(future::complete)
.exceptionally(ex -> {
- if (ex.getCause() instanceof NodeExistsException ||
- ex.getCause() instanceof KeeperException.BadVersionException) {
+ if (ex.getCause() instanceof NodeExistsException
+ || ex.getCause() instanceof KeeperException.BadVersionException) {
// There was a race condition on the schema creation. Since it has now been created,
// retry the whole operation so that we have a chance to recover without bubbling error
// back to producer/consumer
@@ -472,7 +476,8 @@ public class BookkeeperSchemaStorage implements SchemaStorage {
}
@NotNull
- private CompletableFuture<Void> updateSchemaLocator(String id, SchemaStorageFormat.SchemaLocator schema, int version) {
+ private CompletableFuture<Void> updateSchemaLocator(String id,
+ SchemaStorageFormat.SchemaLocator schema, int version) {
CompletableFuture<Void> future = new CompletableFuture<>();
zooKeeper.setData(id, schema.toByteArray(), version, (rc, path, ctx, stat) -> {
Code code = Code.get(rc);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java
index f12b6e5..ea4b537 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java
@@ -41,7 +41,8 @@ public class JsonSchemaCompatibilityCheck extends AvroSchemaBasedCompatibilityCh
}
@Override
- public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
if (isAvroSchema(from)) {
if (isAvroSchema(to)) {
// if both producer and broker have the schema in avro format
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/KeyValueSchemaCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/KeyValueSchemaCompatibilityCheck.java
index 9da4674..2bea472 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/KeyValueSchemaCompatibilityCheck.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/KeyValueSchemaCompatibilityCheck.java
@@ -55,12 +55,14 @@ public class KeyValueSchemaCompatibilityCheck implements SchemaCompatibilityChec
}
@Override
- public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
checkCompatible(Collections.singletonList(from), to, strategy);
}
@Override
- public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
if (strategy == SchemaCompatibilityStrategy.ALWAYS_COMPATIBLE) {
return;
}
@@ -80,12 +82,14 @@ public class KeyValueSchemaCompatibilityCheck implements SchemaCompatibilityChec
}
fromKeyValue = decodeKeyValueSchemaData(schemaData);
if (fromKeyValue.getKey().getType() != toKeyType || fromKeyValue.getValue().getType() != toValueType) {
- throw new IncompatibleSchemaException(String.format("Key schemas or Value schemas are different schema type, " +
- "from key schema type is %s and to key schema is %s, from value schema is %s and to value schema is %s",
- fromKeyValue.getKey().getType(),
- toKeyType,
- fromKeyValue.getValue().getType(),
- toValueType));
+ throw new IncompatibleSchemaException(
+ String.format("Key schemas or Value schemas are different schema type, "
+ + "from key schema type is %s and to key schema is %s,"
+ + " from value schema is %s and to value schema is %s",
+ fromKeyValue.getKey().getType(),
+ toKeyType,
+ fromKeyValue.getValue().getType(),
+ toValueType));
}
fromKeyList.addFirst(fromKeyValue.getKey());
fromValueList.addFirst(fromKeyValue.getValue());
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/NeverSchemaValidator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/NeverSchemaValidator.java
index fe2b547..81ef0d7 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/NeverSchemaValidator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/NeverSchemaValidator.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
*/
class NeverSchemaValidator implements SchemaValidator {
private final static Logger log = LoggerFactory.getLogger(NeverSchemaValidator.class);
- static NeverSchemaValidator INSTANCE = new NeverSchemaValidator();
+ final static NeverSchemaValidator INSTANCE = new NeverSchemaValidator();
@Override
public void validate(Schema toValidate, Iterable<Schema> existing)
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/ProtobufNativeSchemaCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/ProtobufNativeSchemaCompatibilityCheck.java
index b0f4644..58545370 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/ProtobufNativeSchemaCompatibilityCheck.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/ProtobufNativeSchemaCompatibilityCheck.java
@@ -36,7 +36,8 @@ public class ProtobufNativeSchemaCompatibilityCheck implements SchemaCompatibili
}
@Override
- public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
Descriptor fromDescriptor = ProtobufNativeSchemaUtils.deserialize(from.getData());
Descriptor toDescriptor = ProtobufNativeSchemaUtils.deserialize(to.getData());
switch (strategy) {
@@ -56,7 +57,8 @@ public class ProtobufNativeSchemaCompatibilityCheck implements SchemaCompatibili
}
@Override
- public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
for (SchemaData schemaData : from) {
checkCompatible(schemaData, to, strategy);
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaCompatibilityCheck.java
index 9b6ffcc..ade8e72 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaCompatibilityCheck.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaCompatibilityCheck.java
@@ -28,21 +28,20 @@ public interface SchemaCompatibilityCheck {
SchemaType getSchemaType();
/**
- *
- * @param from the current schema i.e. schema that the broker has
- * @param to the future schema i.e. the schema sent by the producer
+ * @param from the current schema i.e. schema that the broker has
+ * @param to the future schema i.e. the schema sent by the producer
* @param strategy the strategy to use when comparing schemas
*/
- void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException;
+ void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException;
/**
- *
- * @param from the current schemas i.e. schemas that the broker has
- * @param to the future schema i.e. the schema sent by the producer
+ * @param from the current schemas i.e. schemas that the broker has
+ * @param to the future schema i.e. the schema sent by the producer
* @param strategy the strategy to use when comparing schemas
- * @return whether the schemas are compatible
*/
- void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException;
+ void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException;
default boolean isCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) {
try {
@@ -70,14 +69,16 @@ public interface SchemaCompatibilityCheck {
}
@Override
- public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(SchemaData from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
if (strategy == SchemaCompatibilityStrategy.ALWAYS_INCOMPATIBLE) {
throw new IncompatibleSchemaException("Schema compatibility strategy is ALWAYS_INCOMPATIBLE");
}
}
@Override
- public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy) throws IncompatibleSchemaException {
+ public void checkCompatible(Iterable<SchemaData> from, SchemaData to, SchemaCompatibilityStrategy strategy)
+ throws IncompatibleSchemaException {
if (strategy == SchemaCompatibilityStrategy.ALWAYS_INCOMPATIBLE) {
throw new IncompatibleSchemaException("Schema compatibility strategy is ALWAYS_INCOMPATIBLE");
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistry.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistry.java
index 0470c02..b756869 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistry.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistry.java
@@ -79,9 +79,9 @@ public interface SchemaRegistry extends AutoCloseable {
return false;
}
SchemaAndMetadata that = (SchemaAndMetadata) o;
- return version == that.version &&
- Objects.equals(id, that.id) &&
- Objects.equals(schema, that.schema);
+ return version == that.version
+ && Objects.equals(id, that.id)
+ && Objects.equals(schema, that.schema);
}
@Override
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryService.java
index 5c9b33c..1d29cc0 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryService.java
@@ -28,7 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public interface SchemaRegistryService extends SchemaRegistry {
- Logger log = LoggerFactory.getLogger(SchemaRegistryService.class);
+ Logger LOG = LoggerFactory.getLogger(SchemaRegistryService.class);
long NO_SCHEMA_VERSION = -1L;
static Map<SchemaType, SchemaCompatibilityCheck> getCheckers(Set<String> checkerClasses) throws Exception {
@@ -49,7 +49,7 @@ public interface SchemaRegistryService extends SchemaRegistry {
return SchemaRegistryServiceWithSchemaDataValidator.of(
new SchemaRegistryServiceImpl(schemaStorage, checkers));
} catch (Exception e) {
- log.warn("Unable to create schema registry storage, defaulting to empty storage", e);
+ LOG.warn("Unable to create schema registry storage, defaulting to empty storage", e);
}
}
return new DefaultSchemaRegistryService();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryServiceImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryServiceImpl.java
index ddba602..d16f362 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryServiceImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/SchemaRegistryServiceImpl.java
@@ -61,14 +61,16 @@ public class SchemaRegistryServiceImpl implements SchemaRegistryService {
private final Clock clock;
@VisibleForTesting
- SchemaRegistryServiceImpl(SchemaStorage schemaStorage, Map<SchemaType, SchemaCompatibilityCheck> compatibilityChecks, Clock clock) {
+ SchemaRegistryServiceImpl(SchemaStorage schemaStorage,
+ Map<SchemaType, SchemaCompatibilityCheck> compatibilityChecks, Clock clock) {
this.schemaStorage = schemaStorage;
this.compatibilityChecks = compatibilityChecks;
this.clock = clock;
}
@VisibleForTesting
- SchemaRegistryServiceImpl(SchemaStorage schemaStorage, Map<SchemaType, SchemaCompatibilityCheck> compatibilityChecks) {
+ SchemaRegistryServiceImpl(SchemaStorage schemaStorage, Map<SchemaType, SchemaCompatibilityCheck>
+ compatibilityChecks) {
this(schemaStorage, compatibilityChecks, Clock.systemUTC());
}
@@ -178,7 +180,8 @@ public class SchemaRegistryServiceImpl implements SchemaRegistryService {
}
@Override
- public CompletableFuture<Boolean> isCompatible(String schemaId, SchemaData schema, SchemaCompatibilityStrategy strategy) {
+ public CompletableFuture<Boolean> isCompatible(String schemaId, SchemaData schema,
+ SchemaCompatibilityStrategy strategy) {
return checkCompatible(schemaId, schema, strategy).thenApply(v -> true);
}
@@ -232,8 +235,9 @@ public class SchemaRegistryServiceImpl implements SchemaRegistryService {
SchemaData existingSchemaData = existingSchema.schema;
if (existingSchemaData.getType().isPrimitive()) {
if (newSchema.getType() != existingSchemaData.getType()) {
- throw new IncompatibleSchemaException(String.format("Incompatible primitive schema: " +
- "exists schema type %s, new schema type %s", existingSchemaData.getType(), newSchema.getType()));
+ throw new IncompatibleSchemaException(String.format("Incompatible primitive schema: "
+ + "exists schema type %s, new schema type %s",
+ existingSchemaData.getType(), newSchema.getType()));
}
} else {
if (!newHash.equals(existingHash)) {
@@ -244,16 +248,17 @@ public class SchemaRegistryServiceImpl implements SchemaRegistryService {
}
public CompletableFuture<Long> findSchemaVersion(String schemaId, SchemaData schemaData) {
- return trimDeletedSchemaAndGetList(schemaId).thenCompose(schemaAndMetadataList -> {
- SchemaHash newHash = SchemaHash.of(schemaData);
- for (SchemaAndMetadata schemaAndMetadata:schemaAndMetadataList) {
- if (newHash.equals(SchemaHash.of(schemaAndMetadata.schema))) {
- return completedFuture(((LongSchemaVersion)schemaStorage
- .versionFromBytes(schemaAndMetadata.version.bytes())).getVersion());
- }
- }
- return completedFuture(NO_SCHEMA_VERSION);
- });
+ return trimDeletedSchemaAndGetList(schemaId)
+ .thenCompose(schemaAndMetadataList -> {
+ SchemaHash newHash = SchemaHash.of(schemaData);
+ for (SchemaAndMetadata schemaAndMetadata : schemaAndMetadataList) {
+ if (newHash.equals(SchemaHash.of(schemaAndMetadata.schema))) {
+ return completedFuture(((LongSchemaVersion) schemaStorage
+ .versionFromBytes(schemaAndMetadata.version.bytes())).getVersion());
+ }
+ }
+ return completedFuture(NO_SCHEMA_VERSION);
+ });
}
@Override
@@ -261,14 +266,14 @@ public class SchemaRegistryServiceImpl implements SchemaRegistryService {
SchemaCompatibilityStrategy strategy) {
return getSchema(schemaId).thenCompose(existingSchema -> {
if (existingSchema != null && !existingSchema.schema.isDeleted()) {
- if (strategy == SchemaCompatibilityStrategy.BACKWARD ||
- strategy == SchemaCompatibilityStrategy.FORWARD ||
- strategy == SchemaCompatibilityStrategy.FORWARD_TRANSITIVE ||
- strategy == SchemaCompatibilityStrategy.FULL) {
- return checkCompatibilityWithLatest(schemaId, schemaData, SchemaCompatibilityStrategy.BACKWARD);
- } else {
- return checkCompatibilityWithAll(schemaId, schemaData, strategy);
- }
+ if (strategy == SchemaCompatibilityStrategy.BACKWARD
+ || strategy == SchemaCompatibilityStrategy.FORWARD
+ || strategy == SchemaCompatibilityStrategy.FORWARD_TRANSITIVE
+ || strategy == SchemaCompatibilityStrategy.FULL) {
+ return checkCompatibilityWithLatest(schemaId, schemaData, SchemaCompatibilityStrategy.BACKWARD);
+ } else {
+ return checkCompatibilityWithAll(schemaId, schemaData, strategy);
+ }
} else {
return FutureUtil.failedFuture(new IncompatibleSchemaException("Topic does not have schema to check"));
}
@@ -323,10 +328,11 @@ public class SchemaRegistryServiceImpl implements SchemaRegistryService {
List<SchemaAndMetadata> schemaAndMetadataList) {
CompletableFuture<Void> result = new CompletableFuture<>();
try {
- compatibilityChecks.getOrDefault(schema.getType(), SchemaCompatibilityCheck.DEFAULT).checkCompatible(schemaAndMetadataList
- .stream()
- .map(schemaAndMetadata -> schemaAndMetadata.schema)
- .collect(Collectors.toList()), schema, strategy);
+ compatibilityChecks.getOrDefault(schema.getType(), SchemaCompatibilityCheck.DEFAULT)
+ .checkCompatible(schemaAndMetadataList
+ .stream()
+ .map(schemaAndMetadata -> schemaAndMetadata.schema)
+ .collect(Collectors.toList()), schema, strategy);
result.complete(null);
} catch (Exception e) {
if (e instanceof IncompatibleSchemaException) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/ProtobufNativeSchemaDataValidator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/ProtobufNativeSchemaDataValidator.java
index acf2878..cdd4081 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/ProtobufNativeSchemaDataValidator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/ProtobufNativeSchemaDataValidator.java
@@ -34,7 +34,9 @@ public class ProtobufNativeSchemaDataValidator implements SchemaDataValidator {
throw new InvalidSchemaDataException("deserialize ProtobufNative Schema failed", e);
}
if (descriptor == null) {
- throw new InvalidSchemaDataException("protobuf root message descriptor is null , please recheck rootMessageTypeName or rootFileDescriptorName conf. ");
+ throw new InvalidSchemaDataException(
+ "protobuf root message descriptor is null ,"
+ + " please recheck rootMessageTypeName or rootFileDescriptorName conf. ");
}
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/SchemaRegistryServiceWithSchemaDataValidator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/SchemaRegistryServiceWithSchemaDataValidator.java
index 4da77ee..99a33e0 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/SchemaRegistryServiceWithSchemaDataValidator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/SchemaRegistryServiceWithSchemaDataValidator.java
@@ -107,7 +107,8 @@ public class SchemaRegistryServiceWithSchemaDataValidator implements SchemaRegis
}
@Override
- public CompletableFuture<Boolean> isCompatible(String schemaId, SchemaData schema, SchemaCompatibilityStrategy strategy) {
+ public CompletableFuture<Boolean> isCompatible(String schemaId, SchemaData schema,
+ SchemaCompatibilityStrategy strategy) {
try {
SchemaDataValidator.validateSchemaData(schema);
} catch (InvalidSchemaDataException e) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/MBeanStatsGenerator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/MBeanStatsGenerator.java
index 663858f..6b5d63b 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/MBeanStatsGenerator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/MBeanStatsGenerator.java
@@ -102,7 +102,7 @@ public class MBeanStatsGenerator {
}
/**
- * Creates a MBean dimension key for metrics
+ * Creates a MBean dimension key for metrics.
*
* @param objectName
* @return
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/NamespaceStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/NamespaceStats.java
index 7ce1657..09db78d 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/NamespaceStats.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/NamespaceStats.java
@@ -49,9 +49,11 @@ public class NamespaceStats {
String key;
// example of key : "<metric_key>_0.0_0.5"
if (i == 0 && ENTRY_LATENCY_BUCKETS_USEC.length > 0) {
- key = String.format("%s_0.0_%1.1f", BRK_ADD_ENTRY_LATENCY_PREFIX, ENTRY_LATENCY_BUCKETS_USEC[i] / 1000.0);
+ key = String.format("%s_0.0_%1.1f",
+ BRK_ADD_ENTRY_LATENCY_PREFIX, ENTRY_LATENCY_BUCKETS_USEC[i] / 1000.0);
} else if (i < ENTRY_LATENCY_BUCKETS_USEC.length) {
- key = String.format("%s_%1.1f_%1.1f", BRK_ADD_ENTRY_LATENCY_PREFIX, ENTRY_LATENCY_BUCKETS_USEC[i - 1] / 1000.0,
+ key = String.format("%s_%1.1f_%1.1f",
+ BRK_ADD_ENTRY_LATENCY_PREFIX, ENTRY_LATENCY_BUCKETS_USEC[i - 1] / 1000.0,
ENTRY_LATENCY_BUCKETS_USEC[i] / 1000.0);
} else {
key = String.format("%s_OVERFLOW", BRK_ADD_ENTRY_LATENCY_PREFIX);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/AbstractMetrics.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/AbstractMetrics.java
index 2868a73..21b941e 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/AbstractMetrics.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/AbstractMetrics.java
@@ -39,7 +39,8 @@ abstract class AbstractMetrics {
protected static final Pattern V2_LEDGER_NAME_PATTERN = Pattern.compile("^(([^/]+)/([^/]+)/([^/]+))/(.*)$");
- protected static final double[] ENTRY_LATENCY_BUCKETS_MS = new double[ManagedLedgerMBeanImpl.ENTRY_LATENCY_BUCKETS_USEC.length];
+ protected static final double[] ENTRY_LATENCY_BUCKETS_MS =
+ new double[ManagedLedgerMBeanImpl.ENTRY_LATENCY_BUCKETS_USEC.length];
static {
// Convert buckets boundaries from usec to millis
@@ -48,7 +49,8 @@ abstract class AbstractMetrics {
}
}
- protected static final double[] ENTRY_SIZE_BUCKETS_BYTES = new double[ManagedLedgerMBeanImpl.ENTRY_SIZE_BUCKETS_BYTES.length];
+ protected static final double[] ENTRY_SIZE_BUCKETS_BYTES =
+ new double[ManagedLedgerMBeanImpl.ENTRY_SIZE_BUCKETS_BYTES.length];
static {
// Convert buckets boundaries from usec to millis
@@ -82,7 +84,7 @@ abstract class AbstractMetrics {
}
/**
- * Returns the managed ledger cache statistics from ML factory
+ * Returns the managed ledger cache statistics from ML factory.
*
* @return
*/
@@ -91,7 +93,7 @@ abstract class AbstractMetrics {
}
/**
- * Returns managed ledgers map from ML factory
+ * Returns managed ledgers map from ML factory.
*
* @return
*/
@@ -136,10 +138,9 @@ abstract class AbstractMetrics {
}
/**
- * Creates a dimension key for metrics
+ * Creates a dimension key for metrics.
*
- * @param namespace
- * Namespace of metric
+ * @param namespace Namespace of metric
* @return
*/
protected Metrics createMetricsByDimension(String namespace) {
@@ -151,7 +152,7 @@ abstract class AbstractMetrics {
}
/**
- * Creates a dimension key for replication metrics
+ * Creates a dimension key for replication metrics.
*
* @param namespace
* @param fromClusterName
@@ -217,7 +218,7 @@ abstract class AbstractMetrics {
}
/**
- * Helper to manage populating topics map
+ * Helper to manage populating topics map.
*
* @param ledgersByDimensionMap
* @param metrics
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/ManagedLedgerMetrics.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/ManagedLedgerMetrics.java
index 852b24b..273447c 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/ManagedLedgerMetrics.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/metrics/ManagedLedgerMetrics.java
@@ -52,7 +52,7 @@ public class ManagedLedgerMetrics extends AbstractMetrics {
}
/**
- * Aggregation by namespace (not thread-safe)
+ * Aggregation by namespace (not thread-safe).
*
* @param ledgersByDimension
* @return
@@ -73,7 +73,8 @@ public class ManagedLedgerMetrics extends AbstractMetrics {
for (ManagedLedgerImpl ledger : ledgers) {
ManagedLedgerMXBean lStats = ledger.getStats();
- populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_AddEntryBytesRate", lStats.getAddEntryBytesRate());
+ populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_AddEntryBytesRate",
+ lStats.getAddEntryBytesRate());
populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_AddEntryErrors",
(double) lStats.getAddEntryErrors());
@@ -89,7 +90,8 @@ public class ManagedLedgerMetrics extends AbstractMetrics {
lStats.getReadEntriesBytesRate());
populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_ReadEntriesErrors",
(double) lStats.getReadEntriesErrors());
- populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_ReadEntriesRate", lStats.getReadEntriesRate());
+ populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_ReadEntriesRate",
+ lStats.getReadEntriesRate());
populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_ReadEntriesSucceeded",
(double) lStats.getReadEntriesSucceeded());
populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_StoredMessagesSize",
@@ -97,15 +99,20 @@ public class ManagedLedgerMetrics extends AbstractMetrics {
// handle bucket entries initialization here
populateBucketEntries(tempAggregatedMetricsMap, "brk_ml_AddEntryLatencyBuckets",
- ENTRY_LATENCY_BUCKETS_MS, lStats.getAddEntryLatencyBuckets(), ManagedLedgerFactoryImpl.StatsPeriodSeconds);
+ ENTRY_LATENCY_BUCKETS_MS, lStats.getAddEntryLatencyBuckets(),
+ ManagedLedgerFactoryImpl.StatsPeriodSeconds);
populateBucketEntries(tempAggregatedMetricsMap, "brk_ml_LedgerAddEntryLatencyBuckets",
- ENTRY_LATENCY_BUCKETS_MS, lStats.getLedgerAddEntryLatencyBuckets(), ManagedLedgerFactoryImpl.StatsPeriodSeconds);
+ ENTRY_LATENCY_BUCKETS_MS, lStats.getLedgerAddEntryLatencyBuckets(),
+ ManagedLedgerFactoryImpl.StatsPeriodSeconds);
populateBucketEntries(tempAggregatedMetricsMap, "brk_ml_LedgerSwitchLatencyBuckets",
- ENTRY_LATENCY_BUCKETS_MS, lStats.getLedgerSwitchLatencyBuckets(), ManagedLedgerFactoryImpl.StatsPeriodSeconds);
-
- populateBucketEntries(tempAggregatedMetricsMap, "brk_ml_EntrySizeBuckets", ENTRY_SIZE_BUCKETS_BYTES,
- lStats.getEntrySizeBuckets(), ManagedLedgerFactoryImpl.StatsPeriodSeconds);
- populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_MarkDeleteRate", lStats.getMarkDeleteRate());
+ ENTRY_LATENCY_BUCKETS_MS, lStats.getLedgerSwitchLatencyBuckets(),
+ ManagedLedgerFactoryImpl.StatsPeriodSeconds);
+
+ populateBucketEntries(tempAggregatedMetricsMap, "brk_ml_EntrySizeBuckets",
+ ENTRY_SIZE_BUCKETS_BYTES, lStats.getEntrySizeBuckets(),
+ ManagedLedgerFactoryImpl.StatsPeriodSeconds);
+ populateAggregationMapWithSum(tempAggregatedMetricsMap, "brk_ml_MarkDeleteRate",
+ lStats.getMarkDeleteRate());
}
// SUM up collections of each metrics
@@ -122,7 +129,7 @@ public class ManagedLedgerMetrics extends AbstractMetrics {
}
/**
- * Build a map of dimensions key to list of topic stats (not thread-safe)
+ * Build a map of dimensions key to list of topic stats (not thread-safe).
* <p>
*
* @return
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedNamespaceStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedNamespaceStats.java
index 1fc0eb3..dd3fff7 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedNamespaceStats.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedNamespaceStats.java
@@ -137,7 +137,7 @@ public class AggregatedNamespaceStats {
storageWriteRate = 0;
storageReadRate = 0;
offloadedStorageUsed = 0;
- backlogQuotaLimit= 0;
+ backlogQuotaLimit = 0;
replicationStats.clear();
subscriptionStats.clear();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedReplicationStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedReplicationStats.java
index ac0b41a..b132e7e 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedReplicationStats.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedReplicationStats.java
@@ -30,7 +30,9 @@ public class AggregatedReplicationStats {
/** Total throughput delivered to the replication-subscriber. bytes/s */
public double msgThroughputOut;
- /** Number of messages pending to be replicated to remote cluster */
+ /**
+ * Number of messages pending to be replicated to remote cluster.
+ */
public long replicationBacklog;
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/NamespaceStatsAggregator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/NamespaceStatsAggregator.java
index 9307350..072d68a 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/NamespaceStatsAggregator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/NamespaceStatsAggregator.java
@@ -31,12 +31,13 @@ import org.apache.pulsar.common.util.SimpleTextOutputStream;
public class NamespaceStatsAggregator {
- private static FastThreadLocal<AggregatedNamespaceStats> localNamespaceStats = new FastThreadLocal<AggregatedNamespaceStats>() {
- @Override
- protected AggregatedNamespaceStats initialValue() throws Exception {
- return new AggregatedNamespaceStats();
- }
- };
+ private static FastThreadLocal<AggregatedNamespaceStats> localNamespaceStats =
+ new FastThreadLocal<AggregatedNamespaceStats>() {
+ @Override
+ protected AggregatedNamespaceStats initialValue() throws Exception {
+ return new AggregatedNamespaceStats();
+ }
+ };
private static FastThreadLocal<TopicStats> localTopicStats = new FastThreadLocal<TopicStats>() {
@Override
@@ -45,7 +46,8 @@ public class NamespaceStatsAggregator {
}
};
- public static void generate(PulsarService pulsar, boolean includeTopicMetrics, boolean includeConsumerMetrics, SimpleTextOutputStream stream) {
+ public static void generate(PulsarService pulsar, boolean includeTopicMetrics, boolean includeConsumerMetrics,
+ SimpleTextOutputStream stream) {
String cluster = pulsar.getConfiguration().getClusterName();
AggregatedNamespaceStats namespaceStats = localNamespaceStats.get();
TopicStats.resetTypes();
@@ -61,7 +63,8 @@ public class NamespaceStatsAggregator {
bundlesMap.forEach((bundle, topicsMap) -> {
topicsMap.forEach((name, topic) -> {
- getTopicStats(topic, topicStats, includeConsumerMetrics, pulsar.getConfiguration().isExposePreciseBacklogInPrometheus());
+ getTopicStats(topic, topicStats, includeConsumerMetrics,
+ pulsar.getConfiguration().isExposePreciseBacklogInPrometheus());
if (includeTopicMetrics) {
topicsCount.add(1);
@@ -82,7 +85,8 @@ public class NamespaceStatsAggregator {
});
}
- private static void getTopicStats(Topic topic, TopicStats stats, boolean includeConsumerMetrics, boolean getPreciseBacklog) {
+ private static void getTopicStats(Topic topic, TopicStats stats, boolean includeConsumerMetrics,
+ boolean getPreciseBacklog) {
stats.reset();
if (topic instanceof PersistentTopic) {
@@ -266,7 +270,8 @@ public class NamespaceStatsAggregator {
metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_le_100", ledgerWritelatencyBuckets[6]);
metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_le_200", ledgerWritelatencyBuckets[7]);
metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_le_1000", ledgerWritelatencyBuckets[8]);
- metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_overflow", ledgerWritelatencyBuckets[9]);
+ metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_overflow",
+ ledgerWritelatencyBuckets[9]);
metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_count",
stats.storageLedgerWriteLatencyBuckets.getCount());
metric(stream, cluster, namespace, "pulsar_storage_ledger_write_latency_sum",
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsGenerator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsGenerator.java
index 908ca77..7f7e217 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsGenerator.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsGenerator.java
@@ -73,16 +73,18 @@ public class PrometheusMetricsGenerator {
// metric to export pulsar version info
Gauge.build("pulsar_version_info", "-")
- .labelNames("version", "commit").create()
- .setChild(new Child() {
- @Override
- public double get() {
- return 1.0;
- }}, PulsarVersion.getVersion(), PulsarVersion.getGitSha())
- .register(CollectorRegistry.defaultRegistry);
+ .labelNames("version", "commit").create()
+ .setChild(new Child() {
+ @Override
+ public double get() {
+ return 1.0;
+ }
+ }, PulsarVersion.getVersion(), PulsarVersion.getGitSha())
+ .register(CollectorRegistry.defaultRegistry);
}
- public static void generate(PulsarService pulsar, boolean includeTopicMetrics, boolean includeConsumerMetrics, OutputStream out) throws IOException {
+ public static void generate(PulsarService pulsar, boolean includeTopicMetrics, boolean includeConsumerMetrics,
+ OutputStream out) throws IOException {
ByteBuf buf = ByteBufAllocator.DEFAULT.heapBuffer();
try {
SimpleTextOutputStream stream = new SimpleTextOutputStream(buf);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
index 7b7e623..5ec5215 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsServlet.java
@@ -63,7 +63,8 @@ public class PrometheusMetricsServlet extends HttpServlet {
try {
res.setStatus(HttpStatus.OK_200);
res.setContentType("text/plain");
- PrometheusMetricsGenerator.generate(pulsar, shouldExportTopicMetrics, shouldExportConsumerMetrics, res.getOutputStream());
+ PrometheusMetricsGenerator.generate(pulsar, shouldExportTopicMetrics, shouldExportConsumerMetrics,
+ res.getOutputStream());
context.complete();
} catch (IOException e) {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/TopicStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/TopicStats.java
index c7b08ec..9d42ad9 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/TopicStats.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/TopicStats.java
@@ -125,16 +125,26 @@ class TopicStats {
stats.storageWriteLatencyBuckets.getSum());
long[] ledgerWritelatencyBuckets = stats.storageLedgerWriteLatencyBuckets.getBuckets();
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_0_5", ledgerWritelatencyBuckets[0]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_1", ledgerWritelatencyBuckets[1]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_5", ledgerWritelatencyBuckets[2]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_10", ledgerWritelatencyBuckets[3]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_20", ledgerWritelatencyBuckets[4]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_50", ledgerWritelatencyBuckets[5]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_100", ledgerWritelatencyBuckets[6]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_200", ledgerWritelatencyBuckets[7]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_1000", ledgerWritelatencyBuckets[8]);
- metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_overflow", ledgerWritelatencyBuckets[9]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_0_5",
+ ledgerWritelatencyBuckets[0]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_1",
+ ledgerWritelatencyBuckets[1]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_5",
+ ledgerWritelatencyBuckets[2]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_10",
+ ledgerWritelatencyBuckets[3]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_20",
+ ledgerWritelatencyBuckets[4]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_50",
+ ledgerWritelatencyBuckets[5]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_100",
+ ledgerWritelatencyBuckets[6]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_200",
+ ledgerWritelatencyBuckets[7]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_le_1000",
+ ledgerWritelatencyBuckets[8]);
+ metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_overflow",
+ ledgerWritelatencyBuckets[9]);
metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_count",
stats.storageLedgerWriteLatencyBuckets.getCount());
metric(stream, cluster, namespace, topic, "pulsar_storage_ledger_write_latency_sum",
@@ -154,25 +164,44 @@ class TopicStats {
metric(stream, cluster, namespace, topic, "pulsar_entry_size_sum", stats.entrySizeBuckets.getSum());
stats.subscriptionStats.forEach((n, subsStats) -> {
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_back_log", subsStats.msgBacklog);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_back_log_no_delayed", subsStats.msgBacklogNoDelayed);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_delayed", subsStats.msgDelayed);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_msg_rate_redeliver", subsStats.msgRateRedeliver);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_unacked_messages", subsStats.unackedMessages);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_blocked_on_unacked_messages", subsStats.blockedSubscriptionOnUnackedMsgs ? 1 : 0);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_msg_rate_out", subsStats.msgRateOut);
- metric(stream, cluster, namespace, topic, n, "pulsar_subscription_msg_throughput_out", subsStats.msgThroughputOut);
- metric(stream, cluster, namespace, topic, n, "pulsar_out_bytes_total", subsStats.bytesOutCounter);
- metric(stream, cluster, namespace, topic, n, "pulsar_out_messages_total", subsStats.msgOutCounter);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_back_log",
+ subsStats.msgBacklog);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_back_log_no_delayed",
+ subsStats.msgBacklogNoDelayed);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_delayed",
+ subsStats.msgDelayed);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_msg_rate_redeliver",
+ subsStats.msgRateRedeliver);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_unacked_messages",
+ subsStats.unackedMessages);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_blocked_on_unacked_messages",
+ subsStats.blockedSubscriptionOnUnackedMsgs ? 1 : 0);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_msg_rate_out",
+ subsStats.msgRateOut);
+ metric(stream, cluster, namespace, topic, n, "pulsar_subscription_msg_throughput_out",
+ subsStats.msgThroughputOut);
+ metric(stream, cluster, namespace, topic, n, "pulsar_out_bytes_total",
+ subsStats.bytesOutCounter);
+ metric(stream, cluster, namespace, topic, n, "pulsar_out_messages_total",
+ subsStats.msgOutCounter);
subsStats.consumerStat.forEach((c, consumerStats) -> {
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_consumer_msg_rate_redeliver", consumerStats.msgRateRedeliver);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_consumer_unacked_messages", consumerStats.unackedMessages);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_consumer_blocked_on_unacked_messages", consumerStats.blockedSubscriptionOnUnackedMsgs ? 1 : 0);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_consumer_msg_rate_out", consumerStats.msgRateOut);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_consumer_msg_throughput_out", consumerStats.msgThroughputOut);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_consumer_available_permits", consumerStats.availablePermits);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_out_bytes_total", consumerStats.bytesOutCounter);
- metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(), "pulsar_out_messages_total", consumerStats.msgOutCounter);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_consumer_msg_rate_redeliver", consumerStats.msgRateRedeliver);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_consumer_unacked_messages", consumerStats.unackedMessages);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_consumer_blocked_on_unacked_messages",
+ consumerStats.blockedSubscriptionOnUnackedMsgs ? 1 : 0);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_consumer_msg_rate_out", consumerStats.msgRateOut);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_consumer_msg_throughput_out", consumerStats.msgThroughputOut);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_consumer_available_permits", consumerStats.availablePermits);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_out_bytes_total", consumerStats.bytesOutCounter);
+ metric(stream, cluster, namespace, topic, n, c.consumerName(), c.consumerId(),
+ "pulsar_out_messages_total", consumerStats.msgOutCounter);
});
});
@@ -214,42 +243,44 @@ class TopicStats {
stream.write(value).write(' ').write(System.currentTimeMillis()).write('\n');
}
- private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic, String subscription,
- String name, long value) {
+ private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic,
+ String subscription, String name, long value) {
metricType(stream, name);
stream.write(name).write("{cluster=\"").write(cluster).write("\",namespace=\"").write(namespace)
.write("\",topic=\"").write(topic).write("\",subscription=\"").write(subscription).write("\"} ");
stream.write(value).write(' ').write(System.currentTimeMillis()).write('\n');
}
- private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic, String subscription,
- String name, double value) {
+ private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic,
+ String subscription, String name, double value) {
metricType(stream, name);
stream.write(name).write("{cluster=\"").write(cluster).write("\",namespace=\"").write(namespace)
.write("\",topic=\"").write(topic).write("\",subscription=\"").write(subscription).write("\"} ");
stream.write(value).write(' ').write(System.currentTimeMillis()).write('\n');
}
- private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic, String subscription,
- String consumerName, long consumerId, String name, long value) {
+ private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic,
+ String subscription, String consumerName, long consumerId, String name, long value) {
metricType(stream, name);
stream.write(name).write("{cluster=\"").write(cluster).write("\", namespace=\"").write(namespace)
.write("\",topic=\"").write(topic).write("\",subscription=\"").write(subscription)
- .write("\",consumer_name=\"").write(consumerName).write("\",consumer_id=\"").write(consumerId).write("\"} ");
+ .write("\",consumer_name=\"").write(consumerName).write("\",consumer_id=\"").write(consumerId)
+ .write("\"} ");
stream.write(value).write(' ').write(System.currentTimeMillis()).write('\n');
}
- private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic, String subscription,
- String consumerName, long consumerId, String name, double value) {
+ private static void metric(SimpleTextOutputStream stream, String cluster, String namespace, String topic,
+ String subscription, String consumerName, long consumerId, String name, double value) {
metricType(stream, name);
stream.write(name).write("{cluster=\"").write(cluster).write("\",namespace=\"").write(namespace)
.write("\",topic=\"").write(topic).write("\",subscription=\"").write(subscription)
- .write("\",consumer_name=\"").write(consumerName).write("\",consumer_id=\"").write(consumerId).write("\"} ");
+ .write("\",consumer_name=\"").write(consumerName).write("\",consumer_id=\"")
+ .write(consumerId).write("\"} ");
stream.write(value).write(' ').write(System.currentTimeMillis()).write('\n');
}
private static void metricWithRemoteCluster(SimpleTextOutputStream stream, String cluster, String namespace,
- String topic,
+ String topic,
String name, String remoteCluster, double value) {
metricType(stream, name);
stream.write(name).write("{cluster=\"").write(cluster).write("\",namespace=\"").write(namespace);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java
index a0673b5..4efc73c 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java
@@ -50,7 +50,7 @@ public class PrometheusMetricsProvider implements StatsProvider {
private final CachingStatsProvider cachingStatsProvider;
/**
- * These acts a registry of the metrics defined in this provider
+ * These acts a registry of the metrics defined in this provider.
*/
final ConcurrentMap<String, LongAdderCounter> counters = new ConcurrentSkipListMap<>();
final ConcurrentMap<String, SimpleGauge<? extends Number>> gauges = new ConcurrentSkipListMap<>();
@@ -115,7 +115,8 @@ public class PrometheusMetricsProvider implements StatsProvider {
public void writeAllMetrics(Writer writer) throws IOException {
gauges.forEach((name, gauge) -> PrometheusTextFormatUtil.writeGauge(writer, name, cluster, gauge));
counters.forEach((name, counter) -> PrometheusTextFormatUtil.writeCounter(writer, name, cluster, counter));
- opStats.forEach((name, opStatLogger) -> PrometheusTextFormatUtil.writeOpStat(writer, name, cluster, opStatLogger));
+ opStats.forEach((name, opStatLogger) -> PrometheusTextFormatUtil.writeOpStat(writer, name, cluster,
+ opStatLogger));
}
@Override
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java
index e9345c0..bed78d3 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java
@@ -60,43 +60,57 @@ public class PrometheusTextFormatUtil {
static void writeOpStat(Writer w, String name, String cluster, DataSketchesOpStatsLogger opStat) {
// Example:
// # TYPE pulsar_bookie_client_bookkeeper_ml_workers_task_queued summary
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="0.5"} NaN
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="0.75"} NaN
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="0.95"} NaN
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="0.99"} NaN
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="0.999"} NaN
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="0.9999"} NaN
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false", quantile="1.0"} -Infinity
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="0.5"} NaN
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="0.75"} NaN
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="0.95"} NaN
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="0.99"} NaN
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="0.999"} NaN
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="0.9999"} NaN
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="false",
+ // quantile="1.0"} -Infinity
// pulsar_bookie_client_bookkeeper_ml_workers_task_queued_count{cluster="pulsar", success="false"} 0
// pulsar_bookie_client_bookkeeper_ml_workers_task_queued_sum{cluster="pulsar", success="false"} 0.0
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="0.5"} 0.031
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="0.75"} 0.043
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="0.95"} 0.061
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="0.99"} 0.064
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="0.999"} 0.073
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="0.9999"} 0.073
- // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true", quantile="1.0"} 0.552
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="0.5"} 0.031
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="0.75"} 0.043
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="0.95"} 0.061
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="0.99"} 0.064
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="0.999"} 0.073
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="0.9999"} 0.073
+ // pulsar_bookie_client_bookkeeper_ml_workers_task_queued{cluster="pulsar", success="true",
+ // quantile="1.0"} 0.552
// pulsar_bookie_client_bookkeeper_ml_workers_task_queued_count{cluster="pulsar", success="true"} 40911432
// pulsar_bookie_client_bookkeeper_ml_workers_task_queued_sum{cluster="pulsar", success="true"} 527.0
try {
w.append("# TYPE ").append(name).append(" summary\n");
- writeQuantile(w, opStat, name, cluster,false, 0.5);
+ writeQuantile(w, opStat, name, cluster, false, 0.5);
writeQuantile(w, opStat, name, cluster, false, 0.75);
- writeQuantile(w, opStat, name, cluster,false, 0.95);
- writeQuantile(w, opStat, name, cluster,false, 0.99);
- writeQuantile(w, opStat, name, cluster,false, 0.999);
- writeQuantile(w, opStat, name, cluster,false, 0.9999);
- writeQuantile(w, opStat, name, cluster,false, 1.0);
+ writeQuantile(w, opStat, name, cluster, false, 0.95);
+ writeQuantile(w, opStat, name, cluster, false, 0.99);
+ writeQuantile(w, opStat, name, cluster, false, 0.999);
+ writeQuantile(w, opStat, name, cluster, false, 0.9999);
+ writeQuantile(w, opStat, name, cluster, false, 1.0);
writeCount(w, opStat, name, cluster, false);
writeSum(w, opStat, name, cluster, false);
- writeQuantile(w, opStat, name, cluster,true, 0.5);
- writeQuantile(w, opStat, name, cluster,true, 0.75);
- writeQuantile(w, opStat, name, cluster,true, 0.95);
- writeQuantile(w, opStat, name, cluster,true, 0.99);
- writeQuantile(w, opStat, name, cluster,true, 0.999);
- writeQuantile(w, opStat, name, cluster,true, 0.9999);
- writeQuantile(w, opStat, name, cluster,true, 1.0);
+ writeQuantile(w, opStat, name, cluster, true, 0.5);
+ writeQuantile(w, opStat, name, cluster, true, 0.75);
+ writeQuantile(w, opStat, name, cluster, true, 0.95);
+ writeQuantile(w, opStat, name, cluster, true, 0.99);
+ writeQuantile(w, opStat, name, cluster, true, 0.999);
+ writeQuantile(w, opStat, name, cluster, true, 0.9999);
+ writeQuantile(w, opStat, name, cluster, true, 1.0);
writeCount(w, opStat, name, cluster, true);
writeSum(w, opStat, name, cluster, true);
@@ -108,7 +122,7 @@ public class PrometheusTextFormatUtil {
private static void writeQuantile(Writer w, DataSketchesOpStatsLogger opStat, String name, String cluster,
Boolean success, double quantile) throws IOException {
w.append(name).append("{cluster=\"").append(cluster).append("\", success=\"")
- .append(success.toString()).append("\",quantile=\"")
+ .append(success.toString()).append("\", quantile=\"")
.append(Double.toString(quantile)).append("\"} ")
.append(Double.toString(opStat.getQuantileValue(success, quantile))).append('\n');
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/SystemTopicClient.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/SystemTopicClient.java
index 9f6737c..4d869dd 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/SystemTopicClient.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/SystemTopicClient.java
@@ -29,7 +29,7 @@ import org.apache.pulsar.common.events.PulsarEvent;
import org.apache.pulsar.common.naming.TopicName;
/**
- * Pulsar system topic
+ * Pulsar system topic.
*/
public interface SystemTopicClient {
@@ -62,7 +62,7 @@ public interface SystemTopicClient {
CompletableFuture<Writer> newWriterAsync();
/**
- * Close the system topic
+ * Close the system topic.
*/
void close() throws Exception;
@@ -73,23 +73,24 @@ public interface SystemTopicClient {
CompletableFuture<Void> closeAsync();
/**
- * Get all writers of the system topic
+ * Get all writers of the system topic.
+ *
* @return writer list
*/
List<Writer> getWriters();
/**
- * Get all readers of the system topic
+ * Get all readers of the system topic.
* @return reader list
*/
List<Reader> getReaders();
/**
- * Writer for system topic
+ * Writer for system topic.
*/
interface Writer {
/**
- * Write event to the system topic
+ * Write event to the system topic.
* @param event pulsar event
* @return message id
* @throws PulsarClientException exception while write event cause
@@ -97,7 +98,7 @@ public interface SystemTopicClient {
MessageId write(PulsarEvent event) throws PulsarClientException;
/**
- * Async write event to the system topic
+ * Async write event to the system topic.
* @param event pulsar event
* @return message id future
*/
@@ -114,7 +115,7 @@ public interface SystemTopicClient {
CompletableFuture<Void> closeAsync();
/**
- * Get the system topic of the writer
+ * Get the system topic of the writer.
* @return system topic
*/
SystemTopicClient getSystemTopicClient();
@@ -122,18 +123,18 @@ public interface SystemTopicClient {
}
/**
- * Reader for system topic
+ * Reader for system topic.
*/
interface Reader {
/**
- * Read event from system topic
+ * Read event from system topic.
* @return pulsar event
*/
Message<PulsarEvent> readNext() throws PulsarClientException;
/**
- * Async read event from system topic
+ * Async read event from system topic.
* @return pulsar event future
*/
CompletableFuture<Message<PulsarEvent>> readNextAsync();
@@ -161,7 +162,7 @@ public interface SystemTopicClient {
CompletableFuture<Void> closeAsync();
/**
- * Get the system topic of the reader
+ * Get the system topic of the reader.
* @return system topic
*/
SystemTopicClient getSystemTopic();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/TopicPoliciesSystemTopicClient.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/TopicPoliciesSystemTopicClient.java
index a40eeee..c7dee0d 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/TopicPoliciesSystemTopicClient.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/TopicPoliciesSystemTopicClient.java
@@ -32,7 +32,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * System topic for topic policy
+ * System topic for topic policy.
*/
public class TopicPoliciesSystemTopicClient extends SystemTopicClientBase {
@@ -48,7 +48,8 @@ public class TopicPoliciesSystemTopicClient extends SystemTopicClientBase {
if (log.isDebugEnabled()) {
log.debug("[{}] A new writer is created", topicName);
}
- return CompletableFuture.completedFuture(new TopicPolicyWriter(producer, TopicPoliciesSystemTopicClient.this));
+ return CompletableFuture.completedFuture(new TopicPolicyWriter(producer,
+ TopicPoliciesSystemTopicClient.this));
});
}
@@ -62,7 +63,8 @@ public class TopicPoliciesSystemTopicClient extends SystemTopicClientBase {
if (log.isDebugEnabled()) {
log.debug("[{}] A new reader is created", topicName);
}
- return CompletableFuture.completedFuture(new TopicPolicyReader(reader, TopicPoliciesSystemTopicClient.this));
+ return CompletableFuture.completedFuture(new TopicPolicyReader(reader,
+ TopicPoliciesSystemTopicClient.this));
});
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/TransactionMeta.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/TransactionMeta.java
index f769c98..85e08c6 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/TransactionMeta.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/TransactionMeta.java
@@ -54,7 +54,7 @@ public interface TransactionMeta {
int numEntries();
/**
- * Return messages number in one transaction
+ * Return messages number in one transaction.
*
* @return the number of transaction messages
* @throws TransactionStatusException
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferClientImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferClientImpl.java
index cfb451f..76e9ba9 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferClientImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferClientImpl.java
@@ -45,24 +45,33 @@ public class TransactionBufferClientImpl implements TransactionBufferClient {
TransactionBufferHandler handler = new TransactionBufferHandlerImpl(connectionPool, namespaceService);
return new TransactionBufferClientImpl(handler);
}
+
@Override
- public CompletableFuture<TxnID> commitTxnOnTopic(String topic, long txnIdMostBits, long txnIdLeastBits, List<MessageId> messageIdList) {
- return tbHandler.endTxnOnTopic(topic, txnIdMostBits, txnIdLeastBits, PulsarApi.TxnAction.COMMIT, messageIdList);
+ public CompletableFuture<TxnID> commitTxnOnTopic(String topic, long txnIdMostBits, long txnIdLeastBits,
+ List<MessageId> messageIdList) {
+ return tbHandler.endTxnOnTopic(topic, txnIdMostBits, txnIdLeastBits, PulsarApi.TxnAction.COMMIT,
+ messageIdList);
}
@Override
- public CompletableFuture<TxnID> abortTxnOnTopic(String topic, long txnIdMostBits, long txnIdLeastBits, List<MessageId> messageIdList) {
- return tbHandler.endTxnOnTopic(topic, txnIdMostBits, txnIdLeastBits, PulsarApi.TxnAction.ABORT, messageIdList);
+ public CompletableFuture<TxnID> abortTxnOnTopic(String topic, long txnIdMostBits, long txnIdLeastBits,
+ List<MessageId> messageIdList) {
+ return tbHandler.endTxnOnTopic(topic, txnIdMostBits, txnIdLeastBits, PulsarApi.TxnAction.ABORT,
+ messageIdList);
}
@Override
- public CompletableFuture<TxnID> commitTxnOnSubscription(String topic, String subscription, long txnIdMostBits, long txnIdLeastBits) {
- return tbHandler.endTxnOnSubscription(topic, subscription, txnIdMostBits, txnIdLeastBits, PulsarApi.TxnAction.COMMIT);
+ public CompletableFuture<TxnID> commitTxnOnSubscription(String topic, String subscription, long txnIdMostBits,
+ long txnIdLeastBits) {
+ return tbHandler.endTxnOnSubscription(topic, subscription, txnIdMostBits, txnIdLeastBits,
+ PulsarApi.TxnAction.COMMIT);
}
@Override
- public CompletableFuture<TxnID> abortTxnOnSubscription(String topic, String subscription, long txnIdMostBits, long txnIdLeastBits) {
- return tbHandler.endTxnOnSubscription(topic, subscription, txnIdMostBits, txnIdLeastBits, PulsarApi.TxnAction.ABORT);
+ public CompletableFuture<TxnID> abortTxnOnSubscription(String topic, String subscription,
+ long txnIdMostBits, long txnIdLeastBits) {
+ return tbHandler.endTxnOnSubscription(topic, subscription, txnIdMostBits, txnIdLeastBits,
+ PulsarApi.TxnAction.ABORT);
}
@Override
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferHandlerImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferHandlerImpl.java
index d8ceead..d1ec809 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferHandlerImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionBufferHandlerImpl.java
@@ -75,7 +75,8 @@ public class TransactionBufferHandlerImpl implements TransactionBufferHandler, T
}
@Override
- public CompletableFuture<TxnID> endTxnOnTopic(String topic, long txnIdMostBits, long txnIdLeastBits, PulsarApi.TxnAction action, List<MessageId> messageIdList) {
+ public CompletableFuture<TxnID> endTxnOnTopic(String topic, long txnIdMostBits, long txnIdLeastBits,
+ PulsarApi.TxnAction action, List<MessageId> messageIdList) {
CompletableFuture<TxnID> cb = new CompletableFuture<>();
if (!canSendRequest(cb)) {
return cb;
@@ -89,7 +90,8 @@ public class TransactionBufferHandlerImpl implements TransactionBufferHandler, T
.setPartition(((MessageIdImpl) messageId).getPartitionIndex())
.build());
}
- ByteBuf cmd = Commands.newEndTxnOnPartition(requestId, txnIdLeastBits, txnIdMostBits, topic, action, messageIdDataList);
+ ByteBuf cmd = Commands.newEndTxnOnPartition(requestId, txnIdLeastBits, txnIdMostBits,
+ topic, action, messageIdDataList);
OpRequestSend op = OpRequestSend.create(requestId, topic, cmd, cb);
pendingRequests.put(requestId, op);
cmd.retain();
@@ -112,13 +114,15 @@ public class TransactionBufferHandlerImpl implements TransactionBufferHandler, T
}
@Override
- public CompletableFuture<TxnID> endTxnOnSubscription(String topic, String subscription, long txnIdMostBits, long txnIdLeastBits, PulsarApi.TxnAction action) {
+ public CompletableFuture<TxnID> endTxnOnSubscription(String topic, String subscription, long txnIdMostBits,
+ long txnIdLeastBits, PulsarApi.TxnAction action) {
CompletableFuture<TxnID> cb = new CompletableFuture<>();
if (!canSendRequest(cb)) {
return cb;
}
long requestId = requestIdGenerator.getAndIncrement();
- ByteBuf cmd = Commands.newEndTxnOnSubscription(requestId, txnIdLeastBits, txnIdMostBits, topic, subscription, action);
+ ByteBuf cmd = Commands.newEndTxnOnSubscription(requestId, txnIdLeastBits, txnIdMostBits,
+ topic, subscription, action);
OpRequestSend op = OpRequestSend.create(requestId, topic, cmd, cb);
pendingRequests.put(requestId, op);
cmd.retain();
@@ -158,14 +162,16 @@ public class TransactionBufferHandlerImpl implements TransactionBufferHandler, T
log.info("[{}] Got end txn on topic response for for request {}", op.topic, response.getRequestId());
op.cb.complete(new TxnID(response.getTxnidMostBits(), response.getTxnidLeastBits()));
} else {
- log.error("[{}] Got end txn on topic response for request {} error {}", op.topic, response.getRequestId(), response.getError());
+ log.error("[{}] Got end txn on topic response for request {} error {}", op.topic, response.getRequestId(),
+ response.getError());
op.cb.completeExceptionally(getException(response.getError(), response.getMessage()));
}
op.recycle();
}
@Override
- public void handleEndTxnOnSubscriptionResponse(long requestId, PulsarApi.CommandEndTxnOnSubscriptionResponse response) {
+ public void handleEndTxnOnSubscriptionResponse(long requestId,
+ PulsarApi.CommandEndTxnOnSubscriptionResponse response) {
OpRequestSend op = pendingRequests.remove(requestId);
if (op == null) {
if (log.isDebugEnabled()) {
@@ -177,11 +183,13 @@ public class TransactionBufferHandlerImpl implements TransactionBufferHandler, T
if (!response.hasError()) {
if (log.isDebugEnabled()) {
- log.debug("[{}] Got end txn on subscription response for for request {}", op.topic, response.getRequestId());
+ log.debug("[{}] Got end txn on subscription response for for request {}",
+ op.topic, response.getRequestId());
}
op.cb.complete(new TxnID(response.getTxnidMostBits(), response.getTxnidLeastBits()));
} else {
- log.error("[{}] Got end txn on subscription response for request {} error {}", op.topic, response.getRequestId(), response.getError());
+ log.error("[{}] Got end txn on subscription response for request {} error {}",
+ op.topic, response.getRequestId(), response.getError());
op.cb.completeExceptionally(getException(response.getError(), response.getMessage()));
}
op.recycle();
@@ -194,7 +202,8 @@ public class TransactionBufferHandlerImpl implements TransactionBufferHandler, T
return CompletableFuture.completedFuture(null);
}
URI uri = new URI(serviceUrl);
- return connectionPool.getConnection(InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())).thenCompose(clientCnx -> {
+ return connectionPool.getConnection(InetSocketAddress.createUnresolved(uri.getHost(),
+ uri.getPort())).thenCompose(clientCnx -> {
clientCnx.registerTransactionBufferHandler(TransactionBufferHandlerImpl.this);
return CompletableFuture.completedFuture(clientCnx);
});
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckHandle.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckHandle.java
index d43e93f..209cffb 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckHandle.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckHandle.java
@@ -53,7 +53,8 @@ public interface PendingAckHandle {
* @throws NotAllowedException if Use this method incorrectly eg. not use
* PositionImpl or cumulative ack with a list of positions.
*/
- CompletableFuture<Void> individualAcknowledgeMessage(TxnID txnID, List<MutablePair<PositionImpl, Integer>> positions);
+ CompletableFuture<Void> individualAcknowledgeMessage(TxnID txnID,
+ List<MutablePair<PositionImpl, Integer>> positions);
/**
* Acknowledge message(s) for an ongoing transaction.
@@ -82,11 +83,12 @@ public interface PendingAckHandle {
/**
* Commit a transaction.
*
- * @param txnID {@link TxnID} to identify the transaction.
- * @param properties Additional user-defined properties that can be associated with a particular cursor position.
+ * @param txnID {@link TxnID} to identify the transaction.
+ * @param properties Additional user-defined properties that can be
+ * associated with a particular cursor position.
* @return the future of this operation.
*/
- CompletableFuture<Void> commitTxn(TxnID txnID, Map<String,Long> properties);
+ CompletableFuture<Void> commitTxn(TxnID txnID, Map<String, Long> properties);
/**
* Abort a transaction.
@@ -117,4 +119,4 @@ public interface PendingAckHandle {
* @param position {@link Position} which position need to clear
*/
void clearIndividualPosition(Position position);
-}
\ No newline at end of file
+}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/PendingAckHandleImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/PendingAckHandleImpl.java
index 8812d4a..f21adaf 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/PendingAckHandleImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/PendingAckHandleImpl.java
@@ -115,8 +115,8 @@ public class PendingAckHandleImpl implements PendingAckHandle {
// If try to ack message already acked by committed transaction or normal acknowledge, throw exception.
if (((ManagedCursorImpl) persistentSubscription.getCursor())
.isMessageDeleted(position)) {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " try to ack message:" + position + " already acked before.";
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " try to ack message:" + position + " already acked before.";
log.error(errorMsg);
return FutureUtil.failedFuture(new TransactionConflictException(errorMsg));
}
@@ -133,23 +133,23 @@ public class PendingAckHandleImpl implements PendingAckHandle {
bitSetRecyclable.recycle();
if (isAckSetOverlap(ackSetOverlap,
((ManagedCursorImpl) persistentSubscription.getCursor()).getBatchPositionAckSet(position))) {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " try to ack message:" + position + " already acked before.";
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " try to ack message:" + position + " already acked before.";
log.error(errorMsg);
return FutureUtil.failedFuture(new TransactionConflictException(errorMsg));
}
if (this.individualAckPositions != null && individualAckPositions.containsKey(position)
&& isAckSetOverlap(individualAckPositions.get(position).getLeft().getAckSet(), ackSetOverlap)) {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " try to ack batch message:" + position + " in pending ack status.";
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " try to ack batch message:" + position + " in pending ack status.";
log.error(errorMsg);
return FutureUtil.failedFuture(new TransactionConflictException(errorMsg));
}
} else {
if (this.individualAckPositions != null && this.individualAckPositions.containsKey(position)) {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " try to ack message:" + position + " in pending ack status.";
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " try to ack message:" + position + " in pending ack status.";
log.error(errorMsg);
return FutureUtil.failedFuture(new TransactionConflictException(errorMsg));
}
@@ -211,8 +211,8 @@ public class PendingAckHandleImpl implements PendingAckHandle {
}
if (positions.size() != 1) {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " invalid cumulative ack received with multiple message ids.";
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " invalid cumulative ack received with multiple message ids.";
log.error(errorMsg);
return FutureUtil.failedFuture(new NotAllowedException(errorMsg));
}
@@ -220,9 +220,9 @@ public class PendingAckHandleImpl implements PendingAckHandle {
PositionImpl position = positions.get(0);
if (position.compareTo((PositionImpl) persistentSubscription.getCursor().getMarkDeletedPosition()) <= 0) {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " try to cumulative ack position: " + position + " within range of cursor's " +
- "markDeletePosition: " + persistentSubscription.getCursor().getMarkDeletedPosition();
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " try to cumulative ack position: " + position + " within range of cursor's "
+ + "markDeletePosition: " + persistentSubscription.getCursor().getMarkDeletedPosition();
log.error(errorMsg);
return FutureUtil.failedFuture(new TransactionConflictException(errorMsg));
}
@@ -238,9 +238,9 @@ public class PendingAckHandleImpl implements PendingAckHandle {
this.cumulativeAckOfTransaction.setValue(position);
} else {
- String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID +
- " try to cumulative batch ack position: " + position + " within range of current " +
- "currentPosition: " + this.cumulativeAckOfTransaction.getValue();
+ String errorMsg = "[" + topicName + "][" + subName + "] Transaction:" + txnID
+ + " try to cumulative batch ack position: " + position + " within range of current "
+ + "currentPosition: " + this.cumulativeAckOfTransaction.getValue();
log.error(errorMsg);
return FutureUtil.failedFuture(new TransactionConflictException(errorMsg));
}
@@ -353,4 +353,4 @@ public class PendingAckHandleImpl implements PendingAckHandle {
}
}
-}
\ No newline at end of file
+}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PreInterceptFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PreInterceptFilter.java
index 3685afa..5d6e614 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PreInterceptFilter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PreInterceptFilter.java
@@ -47,11 +47,12 @@ public class PreInterceptFilter implements Filter {
}
@Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+ public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
+ FilterChain filterChain) throws IOException, ServletException {
if (log.isDebugEnabled()) {
log.debug("PreInterceptFilter: path {}, type {}",
- servletRequest.getServletContext().getContextPath(),
- servletRequest.getContentType());
+ servletRequest.getServletContext().getContextPath(),
+ servletRequest.getContentType());
}
if (MediaType.MULTIPART_FORM_DATA.equalsIgnoreCase(servletRequest.getContentType())) {
// skip multipart request at this moment
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PulsarWebResource.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PulsarWebResource.java
index 1d06840..db9304f 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PulsarWebResource.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/PulsarWebResource.java
@@ -125,7 +125,7 @@ public abstract class PulsarWebResource {
}
/**
- * Gets a caller id (IP + role)
+ * Gets a caller id (IP + role).
*
* @return the web service caller identification
*/
@@ -155,7 +155,8 @@ public abstract class PulsarWebResource {
// Request has come from a proxy
if (StringUtils.isBlank(originalPrincipal)) {
log.warn("Original principal empty in request authenticated as {}", authenticatedPrincipal);
- throw new RestException(Status.UNAUTHORIZED, "Original principal cannot be empty if the request is via proxy.");
+ throw new RestException(Status.UNAUTHORIZED,
+ "Original principal cannot be empty if the request is via proxy.");
}
if (proxyRoles.contains(originalPrincipal)) {
log.warn("Original principal {} cannot be a proxy role ({})", originalPrincipal, proxyRoles);
@@ -182,7 +183,7 @@ public abstract class PulsarWebResource {
protected void validateSuperUserAccess() {
if (config().isAuthenticationEnabled()) {
String appId = clientAppId();
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug("[{}] Check super user access: Authenticated: {} -- Role: {}", uri.getRequestUri(),
isClientAuthenticated(appId), appId);
}
@@ -209,7 +210,7 @@ public abstract class PulsarWebResource {
appId, originalPrincipal));
}
} catch (InterruptedException | ExecutionException e) {
- log.error("Error validating super-user access : "+ e.getMessage(), e);
+ log.error("Error validating super-user access : " + e.getMessage(), e);
throw new RestException(Status.INTERNAL_SERVER_ERROR, e.getMessage());
}
log.debug("Successfully authorized {} (proxied by {}) as super-user",
@@ -279,15 +280,19 @@ public abstract class PulsarWebResource {
AuthorizationService authorizationService = pulsar.getBrokerService().getAuthorizationService();
isProxySuperUserFuture = authorizationService.isSuperUser(clientAppId, authenticationData);
- isOriginalPrincipalSuperUserFuture = authorizationService.isSuperUser(originalPrincipal, authenticationData);
+ isOriginalPrincipalSuperUserFuture =
+ authorizationService.isSuperUser(originalPrincipal, authenticationData);
- boolean proxyAuthorized = isProxySuperUserFuture.get() || authorizationService.isTenantAdmin(tenant, clientAppId, tenantInfo, authenticationData).get();
- boolean originalPrincipalAuthorized
- = isOriginalPrincipalSuperUserFuture.get() || authorizationService.isTenantAdmin(tenant, originalPrincipal, tenantInfo, authenticationData).get();
+ boolean proxyAuthorized = isProxySuperUserFuture.get()
+ || authorizationService.isTenantAdmin(tenant, clientAppId,
+ tenantInfo, authenticationData).get();
+ boolean originalPrincipalAuthorized =
+ isOriginalPrincipalSuperUserFuture.get() || authorizationService.isTenantAdmin(tenant,
+ originalPrincipal, tenantInfo, authenticationData).get();
if (!proxyAuthorized || !originalPrincipalAuthorized) {
throw new RestException(Status.UNAUTHORIZED,
String.format("Proxy not authorized to access resource (proxy:%s,original:%s)",
- clientAppId, originalPrincipal));
+ clientAppId, originalPrincipal));
}
} catch (InterruptedException | ExecutionException e) {
throw new RestException(Status.INTERNAL_SERVER_ERROR, e.getMessage());
@@ -299,7 +304,8 @@ public abstract class PulsarWebResource {
.getAuthorizationService()
.isSuperUser(clientAppId, authenticationData)
.join()) {
- if (!pulsar.getBrokerService().getAuthorizationService().isTenantAdmin(tenant, clientAppId, tenantInfo, authenticationData).get()) {
+ if (!pulsar.getBrokerService().getAuthorizationService()
+ .isTenantAdmin(tenant, clientAppId, tenantInfo, authenticationData).get()) {
throw new RestException(Status.UNAUTHORIZED,
"Don't have permission to administrate resources on this tenant");
}
@@ -334,12 +340,10 @@ public abstract class PulsarWebResource {
}
/**
- * Check if the cluster exists and redirect the call to the owning cluster
+ * Check if the cluster exists and redirect the call to the owning cluster.
*
- * @param cluster
- * Cluster name
- * @throws Exception
- * In case the redirect happens
+ * @param cluster Cluster name
+ * @throws Exception In case the redirect happens
*/
protected void validateClusterOwnership(String cluster) throws WebApplicationException {
try {
@@ -487,16 +491,18 @@ public abstract class PulsarWebResource {
nsBundles.validateBundle(nsBundle);
return nsBundle;
} catch (IllegalArgumentException e) {
- log.error("[{}] Invalid bundle range {}/{}, {}", clientAppId(), fqnn.toString(), bundleRange, e.getMessage());
+ log.error("[{}] Invalid bundle range {}/{}, {}", clientAppId(), fqnn.toString(),
+ bundleRange, e.getMessage());
throw new RestException(Response.Status.PRECONDITION_FAILED, e.getMessage());
} catch (Exception e) {
- log.error("[{}] Failed to validate namespace bundle {}/{}", clientAppId(), fqnn.toString(), bundleRange, e);
+ log.error("[{}] Failed to validate namespace bundle {}/{}", clientAppId(),
+ fqnn.toString(), bundleRange, e);
throw new RestException(e);
}
}
/**
- * Checks whether a given bundle is currently loaded by any broker
+ * Checks whether a given bundle is currently loaded by any broker.
*/
protected boolean isBundleOwnedByAnyBroker(NamespaceName fqnn, BundlesData bundles,
String bundleRange) {
@@ -511,7 +517,8 @@ public abstract class PulsarWebResource {
try {
return nsService.getWebServiceUrl(nsBundle, options).isPresent();
} catch (Exception e) {
- log.error("[{}] Failed to check whether namespace bundle is owned {}/{}", clientAppId(), fqnn.toString(), bundleRange, e);
+ log.error("[{}] Failed to check whether namespace bundle is owned {}/{}", clientAppId(),
+ fqnn.toString(), bundleRange, e);
throw new RestException(e);
}
}
@@ -525,7 +532,8 @@ public abstract class PulsarWebResource {
} catch (WebApplicationException wae) {
throw wae;
} catch (Exception e) {
- log.error("[{}] Failed to validate namespace bundle {}/{}", clientAppId(), fqnn.toString(), bundleRange, e);
+ log.error("[{}] Failed to validate namespace bundle {}/{}", clientAppId(),
+ fqnn.toString(), bundleRange, e);
throw new RestException(e);
}
}
@@ -665,7 +673,8 @@ public abstract class PulsarWebResource {
URI redirect = getRedirectionUrl(peerClusterData);
// redirect to the cluster requested
if (log.isDebugEnabled()) {
- log.debug("[{}] Redirecting the rest call to {}: cluster={}", clientAppId(),redirect, peerClusterData);
+ log.debug("[{}] Redirecting the rest call to {}: cluster={}", clientAppId(),
+ redirect, peerClusterData);
}
throw new WebApplicationException(Response.temporaryRedirect(redirect).build());
@@ -776,7 +785,8 @@ public abstract class PulsarWebResource {
return;
}
// get zk policy manager
- if (!pulsarService.getBrokerService().getAuthorizationService().canLookup(topicName, role, authenticationData)) {
+ if (!pulsarService.getBrokerService().getAuthorizationService().canLookup(topicName, role,
+ authenticationData)) {
log.warn("[{}] Role {} is not allowed to lookup topic", topicName, role);
throw new RestException(Status.UNAUTHORIZED, "Don't have permission to connect to this namespace");
}
@@ -833,8 +843,9 @@ public abstract class PulsarWebResource {
clientAppId(), clientAuthData());
if (!isAuthorized) {
- throw new RestException(Status.FORBIDDEN, String.format("Unauthorized to validateNamespaceOperation for" +
- " operation [%s] on namespace [%s]", operation.toString(), namespaceName));
+ throw new RestException(Status.FORBIDDEN,
+ String.format("Unauthorized to validateNamespaceOperation for"
+ + " operation [%s] on namespace [%s]", operation.toString(), namespaceName));
}
}
}
@@ -853,8 +864,10 @@ public abstract class PulsarWebResource {
originalPrincipal(), clientAppId(), clientAuthData());
if (!isAuthorized) {
- throw new RestException(Status.FORBIDDEN, String.format("Unauthorized to validateNamespacePolicyOperation for" +
- " operation [%s] on namespace [%s] on policy [%s]", operation.toString(), namespaceName, policy.toString()));
+ throw new RestException(Status.FORBIDDEN,
+ String.format("Unauthorized to validateNamespacePolicyOperation for"
+ + " operation [%s] on namespace [%s] on policy [%s]",
+ operation.toString(), namespaceName, policy.toString()));
}
}
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
index 588721d..3681966 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ResponseHandlerFilter.java
@@ -34,7 +34,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Servlet filter that hooks up to handle outgoing response
+ * Servlet filter that hooks up to handle outgoing response.
*/
public class ResponseHandlerFilter implements Filter {
private static final Logger LOG = LoggerFactory.getLogger(ResponseHandlerFilter.class);
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java
index 35df375..7f9c580 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java
@@ -55,7 +55,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Web Service embedded into Pulsar
+ * Web Service embedded into Pulsar.
*/
public class WebService implements AutoCloseable {
@@ -136,7 +136,8 @@ public class WebService implements AutoCloseable {
server.setConnectors(connectors.toArray(new ServerConnector[connectors.size()]));
}
- public void addRestResources(String basePath, String javaPackages, boolean requiresAuthentication, Map<String,Object> attributeMap) {
+ public void addRestResources(String basePath, String javaPackages, boolean requiresAuthentication,
+ Map<String, Object> attributeMap) {
ResourceConfig config = new ResourceConfig();
config.packages("jersey.config.server.provider.packages", javaPackages);
config.register(JsonMapperProvider.class);
@@ -146,7 +147,8 @@ public class WebService implements AutoCloseable {
addServlet(basePath, servletHolder, requiresAuthentication, attributeMap);
}
- public void addServlet(String path, ServletHolder servletHolder, boolean requiresAuthentication, Map<String,Object> attributeMap) {
+ public void addServlet(String path, ServletHolder servletHolder, boolean requiresAuthentication,
+ Map<String, Object> attributeMap) {
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath(path);
context.addServlet(servletHolder, MATCH_ALL);
@@ -156,15 +158,16 @@ public class WebService implements AutoCloseable {
});
}
- if (!pulsar.getConfig().getBrokerInterceptors().isEmpty() || !pulsar.getConfig().isDisableBrokerInterceptors()) {
+ if (!pulsar.getConfig().getBrokerInterceptors().isEmpty()
+ || !pulsar.getConfig().isDisableBrokerInterceptors()) {
// Enable PreInterceptFilter only when interceptors are enabled
context.addFilter(new FilterHolder(new PreInterceptFilter(pulsar.getBrokerInterceptor())),
- MATCH_ALL, EnumSet.allOf(DispatcherType.class));
+ MATCH_ALL, EnumSet.allOf(DispatcherType.class));
}
if (requiresAuthentication && pulsar.getConfiguration().isAuthenticationEnabled()) {
FilterHolder filter = new FilterHolder(new AuthenticationFilter(
- pulsar.getBrokerService().getAuthenticationService()));
+ pulsar.getBrokerService().getAuthenticationService()));
context.addFilter(filter, MATCH_ALL, EnumSet.allOf(DispatcherType.class));
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawReaderImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawReaderImpl.java
index 6cdf62e..124c4c09 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawReaderImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/RawReaderImpl.java
@@ -109,16 +109,16 @@ public class RawReaderImpl implements RawReader {
RawConsumerImpl(PulsarClientImpl client, ConsumerConfigurationData<byte[]> conf,
CompletableFuture<Consumer<byte[]>> consumerFuture) {
super(client,
- conf.getSingleTopic(),
- conf,
- client.externalExecutorProvider().getExecutor(),
- TopicName.getPartitionIndex(conf.getSingleTopic()),
- false,
- consumerFuture,
- MessageId.earliest,
- 0 /* startMessageRollbackDurationInSec */,
- Schema.BYTES, null,
- true
+ conf.getSingleTopic(),
+ conf,
+ client.externalExecutorProvider().getExecutor(),
+ TopicName.getPartitionIndex(conf.getSingleTopic()),
+ false,
+ consumerFuture,
+ MessageId.earliest,
+ 0 /* startMessageRollbackDurationInSec */,
+ Schema.BYTES, null,
+ true
);
incomingRawMessages = new GrowableArrayBlockingQueue<>();
pendingRawReceives = new ConcurrentLinkedQueue<>();
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index 302f327..c9a5d9f 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -29,14 +29,15 @@ import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import com.google.common.collect.BoundType;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Range;
import com.google.common.collect.Sets;
import com.google.common.hash.Hashing;
-
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
import java.lang.reflect.Field;
import java.net.URL;
import java.util.ArrayList;
@@ -52,17 +53,11 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
-
import javax.ws.rs.client.InvocationCallback;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response.Status;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
-
import org.apache.bookkeeper.mledger.ManagedLedgerInfo;
import org.apache.bookkeeper.mledger.impl.PositionImpl;
import org.apache.pulsar.broker.ConfigHelper;
@@ -82,8 +77,8 @@ import org.apache.pulsar.client.admin.PulsarAdminException.NotAuthorizedExceptio
import org.apache.pulsar.client.admin.PulsarAdminException.NotFoundException;
import org.apache.pulsar.client.admin.PulsarAdminException.PreconditionFailedException;
import org.apache.pulsar.client.admin.internal.LookupImpl;
-import org.apache.pulsar.client.admin.internal.TopicsImpl;
import org.apache.pulsar.client.admin.internal.TenantsImpl;
+import org.apache.pulsar.client.admin.internal.TopicsImpl;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.ConsumerBuilder;
import org.apache.pulsar.client.api.Message;
@@ -120,11 +115,11 @@ import org.apache.pulsar.common.policies.data.PartitionedTopicInternalStats;
import org.apache.pulsar.common.policies.data.PartitionedTopicStats;
import org.apache.pulsar.common.policies.data.PersistencePolicies;
import org.apache.pulsar.common.policies.data.PersistentTopicInternalStats;
-import org.apache.pulsar.common.policies.data.SubscriptionStats;
-import org.apache.pulsar.common.policies.data.TopicStats;
import org.apache.pulsar.common.policies.data.Policies;
import org.apache.pulsar.common.policies.data.RetentionPolicies;
+import org.apache.pulsar.common.policies.data.SubscriptionStats;
import org.apache.pulsar.common.policies.data.TenantInfo;
+import org.apache.pulsar.common.policies.data.TopicStats;
import org.apache.pulsar.common.util.Codec;
import org.apache.pulsar.common.util.ObjectMapperFactory;
import org.apache.pulsar.compaction.Compactor;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest2.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest2.java
index c532c98..332bd92 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest2.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest2.java
@@ -18,9 +18,7 @@
*/
package org.apache.pulsar.broker.admin;
-import lombok.extern.slf4j.Slf4j;
import static org.apache.commons.lang3.StringUtils.isBlank;
-import org.apache.pulsar.client.api.MessageId;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
@@ -28,11 +26,9 @@ import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -45,9 +41,8 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.core.Response.Status;
-
import lombok.Cleanup;
-
+import lombok.extern.slf4j.Slf4j;
import org.apache.bookkeeper.mledger.impl.ManagedCursorImpl;
import org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl;
import org.apache.pulsar.broker.PulsarService;
@@ -63,6 +58,7 @@ import org.apache.pulsar.client.admin.PulsarAdminException;
import org.apache.pulsar.client.admin.PulsarAdminException.PreconditionFailedException;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Message;
+import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.MessageRoutingMode;
import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.ProxyProtocol;
@@ -83,10 +79,10 @@ import org.apache.pulsar.common.policies.data.NamespaceIsolationData;
import org.apache.pulsar.common.policies.data.PartitionedTopicStats;
import org.apache.pulsar.common.policies.data.PersistencePolicies;
import org.apache.pulsar.common.policies.data.PersistentTopicInternalStats;
-import org.apache.pulsar.common.policies.data.TopicStats;
-import org.apache.pulsar.common.policies.data.TenantInfo;
import org.apache.pulsar.common.policies.data.RetentionPolicies;
import org.apache.pulsar.common.policies.data.SubscriptionStats;
+import org.apache.pulsar.common.policies.data.TenantInfo;
+import org.apache.pulsar.common.policies.data.TopicStats;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/CreateSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/CreateSubscriptionTest.java
index 92e58668..bee3f78 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/CreateSubscriptionTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/CreateSubscriptionTest.java
@@ -20,12 +20,9 @@ package org.apache.pulsar.broker.admin;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
-
import com.google.common.collect.Lists;
-
import javax.ws.rs.ClientErrorException;
import javax.ws.rs.core.Response.Status;
-
import org.apache.pulsar.client.admin.PulsarAdminException.ConflictException;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Producer;
@@ -103,12 +100,12 @@ public class CreateSubscriptionTest extends ProducerConsumerBase {
Lists.newArrayList("sub-1"));
}
}
-
+
@Test
public void createSubscriptionOnPartitionedTopicWithPartialFailure() throws Exception {
String topic = "persistent://my-property/my-ns/my-partitioned-topic";
admin.topics().createPartitionedTopic(topic, 10);
-
+
// create subscription for one partition
final String partitionedTopic0 = topic+"-partition-0";
admin.topics().createSubscription(partitionedTopic0, "sub-1", MessageId.latest);
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/IncrementPartitionsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/IncrementPartitionsTest.java
index 84fa300..65def47 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/IncrementPartitionsTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/IncrementPartitionsTest.java
@@ -19,7 +19,10 @@
package org.apache.pulsar.broker.admin;
import static org.testng.Assert.assertEquals;
-
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import java.util.Collections;
+import lombok.Cleanup;
import org.apache.pulsar.broker.admin.AdminApiTest.MockedPulsarService;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
import org.apache.pulsar.client.api.Consumer;
@@ -34,13 +37,6 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-import java.util.Collections;
-
-import lombok.Cleanup;
-
public class IncrementPartitionsTest extends MockedPulsarServiceBaseTest {
private MockedPulsarService mockPulsarSetup;
@@ -142,8 +138,8 @@ public class IncrementPartitionsTest extends MockedPulsarServiceBaseTest {
@Cleanup
Reader<String> reader = pulsarClient.newReader(Schema.STRING)
- .topic(partitionedTopicName.getPartition(0).toString())
- .startMessageId(MessageId.earliest)
+ .topic(partitionedTopicName.getPartition(0).toString())
+ .startMessageId(MessageId.earliest)
.create();
admin.topics().updatePartitionedTopic(partitionedTopicName.toString(), 2);
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
index 67bf32b..8e490f1 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/PersistentTopicsTest.java
@@ -18,11 +18,31 @@
*/
package org.apache.pulsar.broker.admin;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.verify;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import java.lang.reflect.Field;
import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.container.AsyncResponse;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
import org.apache.pulsar.broker.admin.v2.NonPersistentTopics;
import org.apache.pulsar.broker.admin.v2.PersistentTopics;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
@@ -47,6 +67,7 @@ import org.apache.pulsar.common.policies.data.TenantInfo;
import org.apache.pulsar.zookeeper.ZooKeeperManagedLedgerCache;
import org.apache.zookeeper.KeeperException;
import org.mockito.ArgumentCaptor;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
@@ -54,29 +75,6 @@ import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import javax.ws.rs.container.AsyncResponse;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-import java.lang.reflect.Field;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-import org.powermock.core.classloader.annotations.PowerMockIgnore;
-
@PrepareForTest(PersistentTopics.class)
@PowerMockIgnore("com.sun.management.*")
public class PersistentTopicsTest extends MockedPulsarServiceBaseTest {
@@ -232,7 +230,7 @@ public class PersistentTopicsTest extends MockedPulsarServiceBaseTest {
Assert.assertEquals(responseCaptor.getValue().getStatus(), Response.Status.NO_CONTENT.getStatusCode());
// 5) Create a subscription
- response = mock(AsyncResponse.class);
+ response = mock(AsyncResponse.class);
persistentTopics.createSubscription(response, testTenant, testNamespace, testLocalTopicName, "test", true,
(MessageIdImpl) MessageId.earliest, false);
responseCaptor = ArgumentCaptor.forClass(Response.class);
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoSubscriptionCreationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoSubscriptionCreationTest.java
index 3d6242b..9d1c29e 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoSubscriptionCreationTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoSubscriptionCreationTest.java
@@ -18,6 +18,9 @@
*/
package org.apache.pulsar.broker.service;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.common.naming.TopicName;
@@ -27,10 +30,6 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
public class BrokerServiceAutoSubscriptionCreationTest extends BrokerTestBase {
@BeforeClass
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoTopicCreationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoTopicCreationTest.java
index 648fabf..16ec901 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoTopicCreationTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceAutoTopicCreationTest.java
@@ -18,12 +18,12 @@
*/
package org.apache.pulsar.broker.service;
-import org.apache.pulsar.client.api.MessageId;
-import org.apache.pulsar.client.api.PulsarClientException;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
+import org.apache.pulsar.client.api.MessageId;
+import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.common.naming.TopicName;
import org.apache.pulsar.common.policies.data.AutoTopicCreationOverride;
import org.apache.pulsar.common.policies.data.TopicType;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumedLedgersTrimTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumedLedgersTrimTest.java
index cc84de2..af3a589 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumedLedgersTrimTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ConsumedLedgersTrimTest.java
@@ -22,20 +22,19 @@ package org.apache.pulsar.broker.service;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import lombok.Cleanup;
import org.apache.bookkeeper.mledger.ManagedLedgerConfig;
import org.apache.bookkeeper.mledger.impl.ManagedLedgerImpl;
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Message;
+import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Producer;
import org.junit.Test;
-import org.testng.Assert;
-
-import java.util.concurrent.TimeUnit;
-import org.apache.pulsar.client.api.MessageId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testng.Assert;
public class ConsumedLedgersTrimTest extends BrokerTestBase {
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SubscriptionSeekTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SubscriptionSeekTest.java
index 3d9ce8b..b8dfbc8 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SubscriptionSeekTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SubscriptionSeekTest.java
@@ -24,9 +24,7 @@ import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import com.google.common.collect.Lists;
-
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -35,7 +33,6 @@ import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-
import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.broker.service.persistent.PersistentSubscription;
import org.apache.pulsar.broker.service.persistent.PersistentTopic;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicTerminationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicTerminationTest.java
index 2007ae8..61a50cc 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicTerminationTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicTerminationTest.java
@@ -23,7 +23,6 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BrokenBarrierException;
@@ -32,7 +31,6 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-
import org.apache.pulsar.client.admin.PulsarAdminException.NotAllowedException;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.Message;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthorizationProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthorizationProducerConsumerTest.java
index a7b63b2..933ad88 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthorizationProducerConsumerTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthorizationProducerConsumerTest.java
@@ -21,7 +21,6 @@ package org.apache.pulsar.client.api;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
import static org.mockito.Mockito.spy;
import static org.testng.Assert.fail;
-
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.io.IOException;
@@ -32,7 +31,6 @@ import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import javax.naming.AuthenticationException;
-
import lombok.Cleanup;
import org.apache.pulsar.broker.PulsarServerException;
import org.apache.pulsar.broker.ServiceConfiguration;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientDeduplicationFailureTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientDeduplicationFailureTest.java
index b433486..16e602a 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientDeduplicationFailureTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientDeduplicationFailureTest.java
@@ -23,11 +23,9 @@ import static org.mockito.Mockito.spy;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-
import java.lang.reflect.Method;
import java.net.URL;
import java.util.LinkedList;
@@ -40,9 +38,7 @@ import java.util.concurrent.CompletionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicLong;
-
import lombok.extern.slf4j.Slf4j;
-
import org.apache.pulsar.broker.PulsarService;
import org.apache.pulsar.broker.ServiceConfiguration;
import org.apache.pulsar.broker.loadbalance.impl.SimpleLoadManagerImpl;
@@ -234,7 +230,8 @@ public class ClientDeduplicationFailureTest {
producer.newMessage().sequenceId(producerThread.getLastSeqId() + 1).value("end").send();
producer.close();
- Reader<String> reader = pulsarClient.newReader(Schema.STRING).startMessageId(MessageId.earliest).topic(sourceTopic).create();
+ Reader<String> reader = pulsarClient.newReader(Schema.STRING).startMessageId(MessageId.earliest)
+ .topic(sourceTopic).create();
Message<String> prevMessage = null;
Message<String> message = null;
int count = 0;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleTypedProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleTypedProducerConsumerTest.java
index 03cdbc5..a1c9a00 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleTypedProducerConsumerTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleTypedProducerConsumerTest.java
@@ -21,11 +21,9 @@ package org.apache.pulsar.client.api;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import com.google.common.base.MoreObjects;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-
import java.time.Clock;
import java.util.Collections;
import java.util.HashMap;
@@ -33,10 +31,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
-
import lombok.Cleanup;
-
-import org.apache.pulsar.common.policies.data.SchemaCompatibilityStrategy;
import org.apache.pulsar.broker.service.schema.SchemaRegistry;
import org.apache.pulsar.broker.service.schema.exceptions.InvalidSchemaDataException;
import org.apache.pulsar.client.api.schema.GenericRecord;
@@ -44,6 +39,7 @@ import org.apache.pulsar.client.api.schema.SchemaDefinition;
import org.apache.pulsar.client.impl.schema.AvroSchema;
import org.apache.pulsar.client.impl.schema.JSONSchema;
import org.apache.pulsar.client.impl.schema.ProtobufSchema;
+import org.apache.pulsar.common.policies.data.SchemaCompatibilityStrategy;
import org.apache.pulsar.common.protocol.schema.SchemaData;
import org.apache.pulsar.common.schema.SchemaType;
import org.slf4j.Logger;
@@ -501,9 +497,9 @@ public class SimpleTypedProducerConsumerTest extends ProducerConsumerBase {
}
Reader<GenericRecord> reader = pulsarClient
- .newReader(Schema.AUTO_CONSUME())
- .topic("persistent://my-property/use/my-ns/my-topic1")
- .startMessageId(MessageId.earliest)
+ .newReader(Schema.AUTO_CONSUME())
+ .topic("persistent://my-property/use/my-ns/my-topic1")
+ .startMessageId(MessageId.earliest)
.create();
Message<GenericRecord> msg = null;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TopicReaderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TopicReaderTest.java
index ebc2889..f1b03b7 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TopicReaderTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TopicReaderTest.java
@@ -23,18 +23,22 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
-
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
-
import org.apache.bookkeeper.common.concurrent.FutureUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.pulsar.client.impl.BatchMessageIdImpl;
@@ -171,7 +175,8 @@ public class TopicReaderTest extends ProducerConsumerBase {
producer.send(message.getBytes());
}
- Reader<byte[]> reader = pulsarClient.newReader().topic("persistent://my-property/my-ns/testReaderAfterMessagesWerePublished")
+ Reader<byte[]> reader = pulsarClient.newReader()
+ .topic("persistent://my-property/my-ns/testReaderAfterMessagesWerePublished")
.startMessageId(MessageId.earliest).create();
Message<byte[]> msg = null;
@@ -645,9 +650,11 @@ public class TopicReaderTest extends ProducerConsumerBase {
@Test
public void testSimpleReaderReachEndOfTopic() throws Exception {
- Reader<byte[]> reader = pulsarClient.newReader().topic("persistent://my-property/my-ns/testSimpleReaderReachEndOfTopic")
+ Reader<byte[]> reader = pulsarClient.newReader()
+ .topic("persistent://my-property/my-ns/testSimpleReaderReachEndOfTopic")
.startMessageId(MessageId.earliest).create();
- Producer<byte[]> producer = pulsarClient.newProducer().topic("persistent://my-property/my-ns/testSimpleReaderReachEndOfTopic")
+ Producer<byte[]> producer = pulsarClient.newProducer()
+ .topic("persistent://my-property/my-ns/testSimpleReaderReachEndOfTopic")
.create();
// no data write, should return false
@@ -850,7 +857,7 @@ public class TopicReaderTest extends ProducerConsumerBase {
pulsarClient.newConsumer().topic(topic).subscriptionName("sub1").subscribe().close();
try (Reader<byte[]> reader = pulsarClient.newReader().topic(topic)
- .startMessageId(MessageId.earliest).create()) {
+ .startMessageId(MessageId.earliest).create()) {
assertFalse(reader.hasMessageAvailable());
}
@@ -859,7 +866,7 @@ public class TopicReaderTest extends ProducerConsumerBase {
}
try (Reader<byte[]> reader = pulsarClient.newReader().topic(topic)
- .startMessageId(MessageId.earliest).create()) {
+ .startMessageId(MessageId.earliest).create()) {
assertTrue(reader.hasMessageAvailable());
}
@@ -867,7 +874,7 @@ public class TopicReaderTest extends ProducerConsumerBase {
pulsar.getBrokerService().getTopicReference(topic).get().close(false).get();
try (Reader<byte[]> reader = pulsarClient.newReader().topic(topic)
- .startMessageId(MessageId.earliest).create()) {
+ .startMessageId(MessageId.earliest).create()) {
assertTrue(reader.hasMessageAvailable());
String readOut = new String(reader.readNext().getData());
@@ -886,7 +893,7 @@ public class TopicReaderTest extends ProducerConsumerBase {
pulsarClient.newConsumer().topic(topic).subscriptionName("sub2").subscribe().close();
try (Reader<byte[]> reader = pulsarClient.newReader().topic(topic)
- .startMessageId(MessageId.earliest).create()) {
+ .startMessageId(MessageId.earliest).create()) {
assertFalse(reader.hasMessageAvailable());
}
@@ -895,7 +902,7 @@ public class TopicReaderTest extends ProducerConsumerBase {
}
try (Reader<byte[]> reader = pulsarClient.newReader().topic(topic)
- .startMessageId(MessageId.earliest).create()) {
+ .startMessageId(MessageId.earliest).create()) {
assertTrue(reader.hasMessageAvailable());
}
@@ -909,7 +916,7 @@ public class TopicReaderTest extends ProducerConsumerBase {
});
try (Reader<byte[]> reader = pulsarClient.newReader().topic(topic)
- .startMessageId(MessageId.earliest).create()) {
+ .startMessageId(MessageId.earliest).create()) {
assertTrue(reader.hasMessageAvailable());
String readOut = new String(reader.readNext().getData());
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MultiTopicsReaderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MultiTopicsReaderTest.java
index 0675fdd..5786fac 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MultiTopicsReaderTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MultiTopicsReaderTest.java
@@ -18,6 +18,12 @@
*/
package org.apache.pulsar.client.impl;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -27,9 +33,6 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
import lombok.Cleanup;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
import org.apache.pulsar.broker.service.StickyKeyConsumerSelector;
@@ -53,11 +56,6 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
public class MultiTopicsReaderTest extends MockedPulsarServiceBaseTest {
private static final String subscription = "reader-multi-topics-sub";
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawReaderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawReaderTest.java
index 9a15ea5..9351663 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawReaderTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawReaderTest.java
@@ -19,9 +19,7 @@
package org.apache.pulsar.client.impl;
import com.google.common.collect.Sets;
-
import io.netty.buffer.ByteBuf;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -32,7 +30,6 @@ import java.util.concurrent.CancellationException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-
import org.apache.bookkeeper.mledger.ManagedLedger;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
@@ -42,10 +39,10 @@ import org.apache.pulsar.client.api.MessageRoutingMode;
import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.RawMessage;
import org.apache.pulsar.client.api.RawReader;
-import org.apache.pulsar.common.protocol.Commands;
import org.apache.pulsar.common.api.proto.PulsarApi.MessageMetadata;
import org.apache.pulsar.common.policies.data.ClusterData;
import org.apache.pulsar.common.policies.data.TenantInfo;
+import org.apache.pulsar.common.protocol.Commands;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ReaderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ReaderTest.java
index 62b6b8a..5328073 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ReaderTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ReaderTest.java
@@ -18,8 +18,20 @@
*/
package org.apache.pulsar.client.impl;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.broker.auth.MockedPulsarServiceBaseTest;
@@ -45,20 +57,6 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
@Slf4j
public class ReaderTest extends MockedPulsarServiceBaseTest {
@@ -278,14 +276,14 @@ public class ReaderTest extends MockedPulsarServiceBaseTest {
@Cleanup
Reader<byte[]> reader1 = pulsarClient.newReader()
- .topic(topic)
- .startMessageId(MessageId.earliest)
+ .topic(topic)
+ .startMessageId(MessageId.earliest)
.create();
@Cleanup
Reader<byte[]> reader2 = pulsarClient.newReader()
- .topic(topic)
- .startMessageId(MessageId.earliest)
+ .topic(topic)
+ .startMessageId(MessageId.earliest)
.create();
Assert.assertEquals(admin.topics().getStats(topic).subscriptions.size(), 2);
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionTest.java
index a88ea77..d7e9eb7 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionTest.java
@@ -25,10 +25,8 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
-
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
@@ -45,7 +43,6 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-
import org.apache.bookkeeper.client.BookKeeper;
import org.apache.bookkeeper.client.api.OpenBuilder;
import org.apache.bookkeeper.mledger.ManagedLedgerInfo;
@@ -1655,4 +1652,4 @@ public class CompactionTest extends MockedPulsarServiceBaseTest {
assertNull(none);
}
}
-}
\ No newline at end of file
+}
diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/OffloadProcessStatus.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/OffloadProcessStatus.java
index 7a8b70b..99a2495 100644
--- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/OffloadProcessStatus.java
+++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/OffloadProcessStatus.java
@@ -46,7 +46,7 @@ public class OffloadProcessStatus extends LongRunningProcessStatus {
public static OffloadProcessStatus forError(String lastError) {
return new OffloadProcessStatus(Status.ERROR, lastError,
- (MessageIdImpl) MessageId.earliest);
+ (MessageIdImpl) MessageId.earliest);
}
public static OffloadProcessStatus forSuccess(MessageIdImpl messageId) {
diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
index 7c3e149..2c857a6 100644
--- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
+++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/TopicsImpl.java
@@ -90,9 +90,9 @@ public class TopicsImpl extends BaseResource implements Topics {
private final WebTarget adminTopics;
private final WebTarget adminV2Topics;
// CHECKSTYLE.OFF: MemberName
- private final String BATCH_HEADER = "X-Pulsar-num-batch-message";
- private final String MESSAGE_ID = "X-Pulsar-Message-ID";
- private final String PUBLISH_TIME = "X-Pulsar-publish-time";
+ static private final String BATCH_HEADER = "X-Pulsar-num-batch-message";
+ static private final String MESSAGE_ID = "X-Pulsar-Message-ID";
+ static private final String PUBLISH_TIME = "X-Pulsar-publish-time";
// CHECKSTYLE.ON: MemberName
public TopicsImpl(WebTarget web, Authentication auth, long readTimeoutMs) {
diff --git a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
index 927ee73..f39916e 100644
--- a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
+++ b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
@@ -27,17 +27,14 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
-
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
import java.lang.reflect.Field;
import java.util.EnumSet;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
-
import org.apache.pulsar.client.admin.Bookies;
import org.apache.pulsar.client.admin.BrokerStats;
import org.apache.pulsar.client.admin.Brokers;
@@ -65,9 +62,11 @@ import org.apache.pulsar.common.policies.data.BookieAffinityGroupData;
import org.apache.pulsar.common.policies.data.BookieInfo;
import org.apache.pulsar.common.policies.data.BundlesData;
import org.apache.pulsar.common.policies.data.ClusterData;
-import org.apache.pulsar.common.policies.data.DispatchRate;
import org.apache.pulsar.common.policies.data.DelayedDeliveryPolicies;
+import org.apache.pulsar.common.policies.data.DispatchRate;
import org.apache.pulsar.common.policies.data.FailureDomain;
+import org.apache.pulsar.common.policies.data.InactiveTopicDeleteMode;
+import org.apache.pulsar.common.policies.data.InactiveTopicPolicies;
import org.apache.pulsar.common.policies.data.OffloadPolicies;
import org.apache.pulsar.common.policies.data.PersistencePolicies;
import org.apache.pulsar.common.policies.data.Policies;
@@ -77,8 +76,6 @@ import org.apache.pulsar.common.policies.data.RetentionPolicies;
import org.apache.pulsar.common.policies.data.SubscribeRate;
import org.apache.pulsar.common.policies.data.TenantInfo;
import org.apache.pulsar.common.policies.data.TopicType;
-import org.apache.pulsar.common.policies.data.InactiveTopicPolicies;
-import org.apache.pulsar.common.policies.data.InactiveTopicDeleteMode;
import org.apache.pulsar.common.util.ObjectMapperFactory;
import org.mockito.ArgumentMatcher;
import org.mockito.Mockito;
diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdPersistentTopics.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdPersistentTopics.java
index 4ab275d..d37c6bb 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdPersistentTopics.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdPersistentTopics.java
@@ -18,11 +18,19 @@
*/
package org.apache.pulsar.admin.cli;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+import com.beust.jcommander.converters.CommaParameterSplitter;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.buffer.Unpooled;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
import org.apache.pulsar.client.admin.LongRunningProcessStatus;
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.admin.PulsarAdminException;
@@ -33,17 +41,6 @@ import org.apache.pulsar.client.impl.BatchMessageIdImpl;
import org.apache.pulsar.client.impl.MessageIdImpl;
import org.apache.pulsar.common.util.RelativeTimeUtil;
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.Parameters;
-import com.beust.jcommander.converters.CommaParameterSplitter;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
-import io.netty.buffer.Unpooled;
-
@Parameters(commandDescription = "Operations on persistent topics. The persistent-topics " +
"has been deprecated in favor of topics", hidden = true)
public class CmdPersistentTopics extends CmdBase {
diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdTopics.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdTopics.java
index 4519568..6c6ed61 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdTopics.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/CmdTopics.java
@@ -19,7 +19,6 @@
package org.apache.pulsar.admin.cli;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
import com.beust.jcommander.Parameters;
@@ -28,17 +27,14 @@ import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
-
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
-
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-
import org.apache.pulsar.client.admin.LongRunningProcessStatus;
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.admin.PulsarAdminException;
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
index d15010d..9efa0d9 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
@@ -22,17 +22,15 @@ import static com.google.common.base.Preconditions.checkArgument;
import static com.scurrilous.circe.checksum.Crc32cIntChecksum.computeChecksum;
import static org.apache.pulsar.common.protocol.Commands.hasChecksum;
import static org.apache.pulsar.common.protocol.Commands.readChecksum;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Iterables;
import com.google.common.collect.Queues;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
-import io.netty.util.Timeout;
import io.netty.util.Recycler;
import io.netty.util.Recycler.Handle;
import io.netty.util.ReferenceCountUtil;
-
+import io.netty.util.Timeout;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
@@ -59,7 +57,6 @@ import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.stream.Collectors;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.pulsar.client.api.Consumer;
import org.apache.pulsar.client.api.ConsumerCryptoFailureAction;
@@ -71,19 +68,18 @@ import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Messages;
import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.PulsarClientException;
+import org.apache.pulsar.client.api.PulsarClientException.MessageAcknowledgeException;
+import org.apache.pulsar.client.api.PulsarClientException.TopicDoesNotExistException;
import org.apache.pulsar.client.api.Schema;
import org.apache.pulsar.client.api.SubscriptionInitialPosition;
import org.apache.pulsar.client.api.SubscriptionMode;
import org.apache.pulsar.client.api.SubscriptionType;
import org.apache.pulsar.client.api.TypedMessageBuilder;
-import org.apache.pulsar.client.api.PulsarClientException.MessageAcknowledgeException;
-import org.apache.pulsar.client.api.PulsarClientException.TopicDoesNotExistException;
import org.apache.pulsar.client.api.transaction.TxnID;
import org.apache.pulsar.client.impl.conf.ConsumerConfigurationData;
import org.apache.pulsar.client.impl.crypto.MessageCryptoBc;
import org.apache.pulsar.client.impl.transaction.TransactionImpl;
import org.apache.pulsar.client.util.RetryMessageUtil;
-import org.apache.pulsar.common.protocol.Commands;
import org.apache.pulsar.common.api.EncryptionContext;
import org.apache.pulsar.common.api.EncryptionContext.EncryptionKey;
import org.apache.pulsar.common.api.proto.PulsarApi;
@@ -99,6 +95,7 @@ import org.apache.pulsar.common.api.proto.PulsarApi.ProtocolVersion;
import org.apache.pulsar.common.compression.CompressionCodec;
import org.apache.pulsar.common.compression.CompressionCodecProvider;
import org.apache.pulsar.common.naming.TopicName;
+import org.apache.pulsar.common.protocol.Commands;
import org.apache.pulsar.common.schema.SchemaInfo;
import org.apache.pulsar.common.schema.SchemaType;
import org.apache.pulsar.common.util.FutureUtil;
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java
index 1a33f4d..9fa397b 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImpl.java
@@ -18,6 +18,8 @@
*/
package org.apache.pulsar.client.impl;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
@@ -25,25 +27,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Queues;
import io.netty.util.Timeout;
import io.netty.util.TimerTask;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.pulsar.client.api.Consumer;
-import org.apache.pulsar.client.api.ConsumerStats;
-import org.apache.pulsar.client.api.Message;
-import org.apache.pulsar.client.api.MessageId;
-import org.apache.pulsar.client.api.Messages;
-import org.apache.pulsar.client.api.PulsarClientException;
-import org.apache.pulsar.client.api.PulsarClientException.NotSupportedException;
-import org.apache.pulsar.client.api.Schema;
-import org.apache.pulsar.client.api.SubscriptionType;
-import org.apache.pulsar.client.impl.conf.ConsumerConfigurationData;
-import org.apache.pulsar.client.impl.transaction.TransactionImpl;
-import org.apache.pulsar.client.util.ConsumerName;
-import org.apache.pulsar.common.api.proto.PulsarApi.CommandAck.AckType;
-import org.apache.pulsar.common.naming.TopicName;
-import org.apache.pulsar.common.util.FutureUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -66,9 +49,24 @@ import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.pulsar.client.api.Consumer;
+import org.apache.pulsar.client.api.ConsumerStats;
+import org.apache.pulsar.client.api.Message;
+import org.apache.pulsar.client.api.MessageId;
+import org.apache.pulsar.client.api.Messages;
+import org.apache.pulsar.client.api.PulsarClientException;
+import org.apache.pulsar.client.api.PulsarClientException.NotSupportedException;
+import org.apache.pulsar.client.api.Schema;
+import org.apache.pulsar.client.api.SubscriptionType;
+import org.apache.pulsar.client.impl.conf.ConsumerConfigurationData;
+import org.apache.pulsar.client.impl.transaction.TransactionImpl;
+import org.apache.pulsar.client.util.ConsumerName;
+import org.apache.pulsar.common.api.proto.PulsarApi.CommandAck.AckType;
+import org.apache.pulsar.common.naming.TopicName;
+import org.apache.pulsar.common.util.FutureUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class MultiTopicsConsumerImpl<T> extends ConsumerBase<T> {
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PersistentAcknowledgmentsGroupingTracker.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PersistentAcknowledgmentsGroupingTracker.java
index aab4c52..3ae833b 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PersistentAcknowledgmentsGroupingTracker.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PersistentAcknowledgmentsGroupingTracker.java
@@ -20,7 +20,6 @@ package org.apache.pulsar.client.impl;
import io.netty.buffer.ByteBuf;
import io.netty.channel.EventLoopGroup;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -32,17 +31,15 @@ import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-
import lombok.extern.slf4j.Slf4j;
-
import org.apache.commons.lang3.tuple.Triple;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.transaction.TxnID;
import org.apache.pulsar.client.impl.conf.ConsumerConfigurationData;
import org.apache.pulsar.client.impl.transaction.TransactionImpl;
-import org.apache.pulsar.common.protocol.Commands;
import org.apache.pulsar.common.api.proto.PulsarApi.CommandAck.AckType;
import org.apache.pulsar.common.api.proto.PulsarApi.CommandAck.ValidationError;
+import org.apache.pulsar.common.protocol.Commands;
import org.apache.pulsar.common.util.collections.BitSetRecyclable;
import org.apache.pulsar.common.util.collections.ConcurrentBitSetRecyclable;
@@ -542,4 +539,4 @@ public class PersistentAcknowledgmentsGroupingTracker implements Acknowledgments
}
}
}
-}
\ No newline at end of file
+}
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ReaderBuilderImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ReaderBuilderImpl.java
index 743bd87..7987ec4 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ReaderBuilderImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ReaderBuilderImpl.java
@@ -18,14 +18,14 @@
*/
package org.apache.pulsar.client.impl;
+import static org.apache.pulsar.client.api.KeySharedPolicy.DEFAULT_HASH_RANGE_SIZE;
+import com.google.common.base.Preconditions;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
-
import lombok.AccessLevel;
import lombok.Getter;
-import com.google.common.base.Preconditions;
import org.apache.commons.lang3.StringUtils;
import org.apache.pulsar.client.api.ConsumerCryptoFailureAction;
import org.apache.pulsar.client.api.CryptoKeyReader;
@@ -39,7 +39,6 @@ import org.apache.pulsar.client.api.Schema;
import org.apache.pulsar.client.impl.conf.ConfigurationDataUtils;
import org.apache.pulsar.client.impl.conf.ReaderConfigurationData;
import org.apache.pulsar.common.util.FutureUtil;
-import static org.apache.pulsar.client.api.KeySharedPolicy.DEFAULT_HASH_RANGE_SIZE;
@Getter(AccessLevel.PUBLIC)
public class ReaderBuilderImpl<T> implements ReaderBuilder<T> {
diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BuildersTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BuildersTest.java
index 4f7554e..efd4e48 100644
--- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BuildersTest.java
+++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BuildersTest.java
@@ -22,12 +22,10 @@ import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotSame;
import static org.testng.Assert.assertTrue;
-
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
-
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.client.api.PulsarClientException;
@@ -106,7 +104,8 @@ public class BuildersTest {
@Test(expectedExceptions = {PulsarClientException.class}, expectedExceptionsMessageRegExp = ".* must be specified but they cannot be specified at the same time.*")
public void shouldNotSetTwoOptAtTheSameTime() throws Exception {
PulsarClient client = PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();
- try (Reader reader = client.newReader().topic("abc").startMessageId(MessageId.earliest).startMessageFromRollbackDuration(10, TimeUnit.HOURS).create()) {
+ try (Reader reader = client.newReader().topic("abc").startMessageId(MessageId.earliest)
+ .startMessageFromRollbackDuration(10, TimeUnit.HOURS).create()) {
// no-op
} finally {
client.close();
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailer.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailer.java
index 48f087f..f5fc56f 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailer.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailer.java
@@ -18,6 +18,9 @@
*/
package org.apache.pulsar.functions.worker;
+import java.io.IOException;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.client.api.Message;
@@ -26,10 +29,6 @@ import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.client.api.Reader;
import org.apache.pulsar.client.api.ReaderBuilder;
-import java.io.IOException;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-
/**
* This class is responsible for reading assignments from the 'assignments' functions internal topic.
* Only functions worker leader writes to the topic while other workers read from the topic.
@@ -53,7 +52,7 @@ public class FunctionAssignmentTailer implements AutoCloseable {
@Getter
private MessageId lastMessageId = null;
-
+
public FunctionAssignmentTailer(
FunctionRuntimeManager functionRuntimeManager,
ReaderBuilder readerBuilder,
@@ -128,7 +127,7 @@ public class FunctionAssignmentTailer implements AutoCloseable {
log.error("Failed to stop function assignment tailer", e);
}
}
-
+
private Reader<byte[]> createReader(MessageId startMessageId) throws PulsarClientException {
log.info("Assignment tailer will start reading from message id {}", startMessageId);
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionMetaDataManager.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionMetaDataManager.java
index dfb3a90..7416334 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionMetaDataManager.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionMetaDataManager.java
@@ -19,14 +19,6 @@
package org.apache.pulsar.functions.worker;
import com.google.common.annotations.VisibleForTesting;
-import lombok.extern.slf4j.Slf4j;
-import lombok.Getter;
-import org.apache.pulsar.client.api.*;
-import org.apache.pulsar.functions.proto.Function;
-import org.apache.pulsar.functions.proto.Function.FunctionMetaData;
-import org.apache.pulsar.functions.proto.Request;
-import org.apache.pulsar.functions.utils.FunctionCommon;
-
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
@@ -35,6 +27,19 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.pulsar.client.api.Message;
+import org.apache.pulsar.client.api.MessageId;
+import org.apache.pulsar.client.api.Producer;
+import org.apache.pulsar.client.api.PulsarClient;
+import org.apache.pulsar.client.api.PulsarClientException;
+import org.apache.pulsar.client.api.Reader;
+import org.apache.pulsar.client.api.TypedMessageBuilder;
+import org.apache.pulsar.functions.proto.Function;
+import org.apache.pulsar.functions.proto.Function.FunctionMetaData;
+import org.apache.pulsar.functions.proto.Request;
+import org.apache.pulsar.functions.utils.FunctionCommon;
/**
* FunctionMetaDataManager maintains a global state of all function metadata.
@@ -98,7 +103,7 @@ public class FunctionMetaDataManager implements AutoCloseable {
*/
public synchronized void initialize() {
try (Reader reader = FunctionMetaDataTopicTailer.createReader(
- workerConfig, pulsarClient.newReader(), MessageId.earliest)){
+ workerConfig, pulsarClient.newReader(), MessageId.earliest)) {
// read all existing messages
while (reader.hasMessageAvailable()) {
processMetaDataTopicMessage(reader.readNext());
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeManager.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeManager.java
index bb07115..009aaa9 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeManager.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeManager.java
@@ -19,6 +19,25 @@
package org.apache.pulsar.functions.worker;
import com.google.common.annotations.VisibleForTesting;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.TreeMap;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.UriBuilder;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
@@ -29,13 +48,13 @@ import org.apache.pulsar.client.admin.PulsarAdminException;
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Reader;
+import org.apache.pulsar.common.functions.AuthenticationConfig;
import org.apache.pulsar.common.functions.WorkerInfo;
import org.apache.pulsar.common.policies.data.ErrorData;
import org.apache.pulsar.common.policies.data.FunctionStats;
import org.apache.pulsar.common.util.ObjectMapperFactory;
import org.apache.pulsar.common.util.Reflections;
import org.apache.pulsar.functions.auth.FunctionAuthProvider;
-import org.apache.pulsar.common.functions.AuthenticationConfig;
import org.apache.pulsar.functions.proto.Function;
import org.apache.pulsar.functions.proto.Function.Assignment;
import org.apache.pulsar.functions.runtime.RuntimeCustomizer;
@@ -49,27 +68,6 @@ import org.apache.pulsar.functions.secretsproviderconfigurator.SecretsProviderCo
import org.apache.pulsar.functions.utils.FunctionCommon;
import org.apache.pulsar.functions.utils.FunctionInstanceId;
-import java.io.IOException;
-import java.net.URI;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.TreeMap;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriBuilder;
-
/**
* This class managers all aspects of functions assignments and running of function assignments for this worker
*/
@@ -227,11 +225,11 @@ public class FunctionRuntimeManager implements AutoCloseable{
* @return the message id of the message processed during init phase
*/
public MessageId initialize() {
- try (Reader<byte[]> reader = WorkerUtils.createReader (
- workerService.getClient().newReader(),
- workerConfig.getWorkerId() + "-function-assignment-initialize",
- workerConfig.getFunctionAssignmentTopic(),
- MessageId.earliest)) {
+ try (Reader<byte[]> reader = WorkerUtils.createReader(
+ workerService.getClient().newReader(),
+ workerConfig.getWorkerId() + "-function-assignment-initialize",
+ workerConfig.getFunctionAssignmentTopic(),
+ MessageId.earliest)) {
// start init phase
this.isInitializePhase = true;
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/SchedulerManager.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/SchedulerManager.java
index 05c3790..5019982 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/SchedulerManager.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/SchedulerManager.java
@@ -24,6 +24,25 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import io.netty.util.concurrent.DefaultThreadFactory;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
@@ -49,26 +68,6 @@ import org.apache.pulsar.functions.utils.Actions;
import org.apache.pulsar.functions.utils.FunctionCommon;
import org.apache.pulsar.functions.worker.scheduler.IScheduler;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.stream.Collectors;
-
@Slf4j
/**
* The scheduler manager is used to compute scheduling of function instances
@@ -102,7 +101,7 @@ public class SchedulerManager implements AutoCloseable {
private Producer<byte[]> producer;
private ScheduledExecutorService scheduledExecutorService;
-
+
private final PulsarAdmin admin;
@Getter
@@ -111,7 +110,7 @@ public class SchedulerManager implements AutoCloseable {
private volatile boolean isRunning = false;
AtomicBoolean isCompactionNeeded = new AtomicBoolean(false);
- private static final long DEFAULT_ADMIN_API_BACKOFF_SEC = 60;
+ private static final long DEFAULT_ADMIN_API_BACKOFF_SEC = 60;
public static final String HEARTBEAT_TENANT = "pulsar-function";
public static final String HEARTBEAT_NAMESPACE = "heartbeat";
@@ -252,7 +251,7 @@ public class SchedulerManager implements AutoCloseable {
throw new RebalanceInProgressException();
}
}
-
+
@VisibleForTesting
void invokeScheduler() {
long startTime = System.nanoTime();
@@ -281,7 +280,7 @@ public class SchedulerManager implements AutoCloseable {
if (deleted) {
Assignment assignment = entry.getValue();
MessageId messageId = publishNewAssignment(assignment.toBuilder().build(), true);
-
+
// Directly update in memory assignment cache since I am leader
log.info("Deleting assignment: {}", assignment);
functionRuntimeManager.deleteAssignment(fullyQualifiedInstanceId);
@@ -334,7 +333,7 @@ public class SchedulerManager implements AutoCloseable {
.flatMap(stringMapEntry -> stringMapEntry.getValue().values().stream())
.collect(Collectors.toList());
- Pair<List<Function.Instance>, List<Assignment>> unassignedInstances
+ Pair<List<Function.Instance>, List<Assignment>> unassignedInstances
= getUnassignedFunctionInstances(workerIdToAssignments, allInstances);
workerStatsManager.scheduleStrategyExecTimeStartStart();
@@ -555,7 +554,7 @@ public class SchedulerManager implements AutoCloseable {
schedulerLock.unlock();
}
}
-
+
static String checkHeartBeatFunction(Instance funInstance) {
if (funInstance.getFunctionMetaData() != null
&& funInstance.getFunctionMetaData().getFunctionDetails() != null) {
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerService.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerService.java
index 4255d89..bf4c24c 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerService.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerService.java
@@ -22,6 +22,9 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.annotations.VisibleForTesting;
import io.netty.util.concurrent.DefaultThreadFactory;
+import java.net.URI;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.bookkeeper.clients.StorageClientBuilder;
@@ -38,10 +41,6 @@ import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.client.api.PulsarClientException;
-import java.net.URI;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-
/**
* A service component contains everything to run a worker except rest server.
*/
@@ -182,7 +181,9 @@ public class WorkerService {
//create membership manager
String coordinationTopic = workerConfig.getClusterCoordinationTopic();
if (!brokerAdmin.topics().getSubscriptions(coordinationTopic).contains(MembershipManager.COORDINATION_TOPIC_SUBSCRIPTION)) {
- brokerAdmin.topics().createSubscription(coordinationTopic, MembershipManager.COORDINATION_TOPIC_SUBSCRIPTION, MessageId.earliest);
+ brokerAdmin.topics()
+ .createSubscription(coordinationTopic, MembershipManager.COORDINATION_TOPIC_SUBSCRIPTION,
+ MessageId.earliest);
}
this.membershipManager = new MembershipManager(this, client, brokerAdmin);
@@ -241,7 +242,7 @@ public class WorkerService {
// Start function assignment tailer
log.info("/** Starting Function Assignment Tailer **/");
functionAssignmentTailer.startFromMessage(lastAssignmentMessageId);
-
+
// start function metadata manager
log.info("/** Starting Metdata Manager **/");
functionMetaDataManager.start();
diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataTopicTailerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataTopicTailerTest.java
index 784b7ed..360f448 100644
--- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataTopicTailerTest.java
+++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataTopicTailerTest.java
@@ -25,16 +25,13 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
-
import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Reader;
import org.apache.pulsar.client.api.ReaderBuilder;
-import org.apache.pulsar.functions.proto.Request.ServiceRequest;
import org.apache.pulsar.functions.proto.Function.FunctionMetaData;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -63,7 +60,8 @@ public class FunctionMetaDataTopicTailerTest {
when(readerBuilder.subscriptionRolePrefix(anyString())).thenReturn(readerBuilder);
when(readerBuilder.create()).thenReturn(reader);
this.fsm = mock(FunctionMetaDataManager.class);
- this.fsc = new FunctionMetaDataTopicTailer(fsm, readerBuilder, new WorkerConfig(), MessageId.earliest, ErrorNotifier.getDefaultImpl() );
+ this.fsc = new FunctionMetaDataTopicTailer(fsm, readerBuilder, new WorkerConfig(), MessageId.earliest,
+ ErrorNotifier.getDefaultImpl());
}
@AfterMethod
diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/SchedulerManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/SchedulerManagerTest.java
index 66174fb..3b048dd 100644
--- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/SchedulerManagerTest.java
+++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/SchedulerManagerTest.java
@@ -31,11 +31,23 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
-
import com.google.common.collect.Sets;
import com.google.protobuf.InvalidProtocolBufferException;
import io.netty.util.concurrent.DefaultThreadFactory;
import io.prometheus.client.CollectorRegistry;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.client.api.CompressionType;
import org.apache.pulsar.client.api.MessageId;
@@ -59,20 +71,6 @@ import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
@Slf4j
public class SchedulerManagerTest {
diff --git a/pulsar-io/debezium/core/src/main/java/org/apache/pulsar/io/debezium/PulsarDatabaseHistory.java b/pulsar-io/debezium/core/src/main/java/org/apache/pulsar/io/debezium/PulsarDatabaseHistory.java
index ed7de1f..c3d95a7 100644
--- a/pulsar-io/debezium/core/src/main/java/org/apache/pulsar/io/debezium/PulsarDatabaseHistory.java
+++ b/pulsar-io/debezium/core/src/main/java/org/apache/pulsar/io/debezium/PulsarDatabaseHistory.java
@@ -19,7 +19,6 @@
package org.apache.pulsar.io.debezium;
import static org.apache.commons.lang.StringUtils.isBlank;
-
import io.debezium.annotation.ThreadSafe;
import io.debezium.config.Configuration;
import io.debezium.config.Field;
@@ -193,8 +192,8 @@ public final class PulsarDatabaseHistory extends AbstractDatabaseHistory {
protected void recoverRecords(Consumer<HistoryRecord> records) {
setupClientIfNeeded();
try (Reader<String> historyReader = pulsarClient.newReader(Schema.STRING)
- .topic(topicName)
- .startMessageId(MessageId.earliest)
+ .topic(topicName)
+ .startMessageId(MessageId.earliest)
.create()
) {
log.info("Scanning the database history topic '{}'", topicName);
@@ -240,8 +239,8 @@ public final class PulsarDatabaseHistory extends AbstractDatabaseHistory {
public boolean exists() {
setupClientIfNeeded();
try (Reader<String> historyReader = pulsarClient.newReader(Schema.STRING)
- .topic(topicName)
- .startMessageId(MessageId.earliest)
+ .topic(topicName)
+ .startMessageId(MessageId.earliest)
.create()
) {
return historyReader.hasMessageAvailable();
diff --git a/pulsar-io/kafka-connect-adaptor/src/main/java/org/apache/pulsar/io/kafka/connect/PulsarOffsetBackingStore.java b/pulsar-io/kafka-connect-adaptor/src/main/java/org/apache/pulsar/io/kafka/connect/PulsarOffsetBackingStore.java
index d7daf82..e616e84 100644
--- a/pulsar-io/kafka-connect-adaptor/src/main/java/org/apache/pulsar/io/kafka/connect/PulsarOffsetBackingStore.java
+++ b/pulsar-io/kafka-connect-adaptor/src/main/java/org/apache/pulsar/io/kafka/connect/PulsarOffsetBackingStore.java
@@ -21,7 +21,6 @@ package org.apache.pulsar.io.kafka.connect;
import static com.google.common.base.Preconditions.checkArgument;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.commons.lang.StringUtils.isBlank;
-
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
@@ -146,8 +145,8 @@ public class PulsarOffsetBackingStore implements OffsetBackingStore {
.create();
log.info("Successfully created producer to produce updates to topic {}", topic);
reader = client.newReader(Schema.BYTES)
- .topic(topic)
- .startMessageId(MessageId.earliest)
+ .topic(topic)
+ .startMessageId(MessageId.earliest)
.create();
log.info("Successfully created reader to replay updates from topic {}", topic);
CompletableFuture<Void> endFuture = new CompletableFuture<>();
diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceReader.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceReader.java
index 0d21196..61933ad 100644
--- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceReader.java
+++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceReader.java
@@ -20,7 +20,13 @@ package org.apache.pulsar.testclient;
import static org.apache.commons.lang3.StringUtils.isBlank;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.ParameterException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.RateLimiter;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.util.List;
@@ -28,7 +34,6 @@ import java.util.Properties;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.LongAdder;
-
import org.apache.pulsar.client.api.ClientBuilder;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.PulsarClient;
@@ -41,14 +46,6 @@ import org.apache.pulsar.common.util.FutureUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.beust.jcommander.JCommander;
-import com.beust.jcommander.Parameter;
-import com.beust.jcommander.ParameterException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.RateLimiter;
-
public class PerformanceReader {
private static final LongAdder messagesReceived = new LongAdder();
private static final LongAdder bytesReceived = new LongAdder();
diff --git a/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ReaderHandler.java b/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ReaderHandler.java
index dc98181..c34c0c0 100644
--- a/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ReaderHandler.java
+++ b/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ReaderHandler.java
@@ -19,7 +19,6 @@
package org.apache.pulsar.websocket;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.IOException;
import java.util.Base64;
diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java
index d95d1d3..6ca84b5 100644
--- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java
+++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java
@@ -18,7 +18,21 @@
*/
package org.apache.pulsar.tests.integration.functions;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import com.google.gson.Gson;
+import java.time.Duration;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import net.jodah.failsafe.Failsafe;
@@ -81,22 +95,6 @@ import org.testcontainers.shaded.com.google.common.collect.Sets;
import org.testng.annotations.Test;
import org.testng.collections.Maps;
-import java.time.Duration;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
/**
* A test base for testing sink.
*/
diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/proxy/TestProxy.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/proxy/TestProxy.java
index e0f95a6..4970aed 100644
--- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/proxy/TestProxy.java
+++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/proxy/TestProxy.java
@@ -19,11 +19,8 @@
package org.apache.pulsar.tests.integration.proxy;
import static org.testng.Assert.assertEquals;
-
import java.util.Collections;
-
import lombok.Cleanup;
-
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.Producer;
@@ -33,10 +30,9 @@ import org.apache.pulsar.common.policies.data.TenantInfo;
import org.apache.pulsar.common.policies.data.TopicStats;
import org.apache.pulsar.tests.integration.suites.PulsarTestSuite;
import org.apache.pulsar.tests.integration.topologies.PulsarClusterSpec;
-import org.testng.annotations.Test;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testng.annotations.Test;
/**
* Test cases for proxy.