From 701e1d8e9ab0cdfde8f79f9982de62f80c618caf Mon Sep 17 00:00:00 2001 From: Philipp Dolif <52791955+pdolif@users.noreply.github.com> Date: Mon, 30 Mar 2026 02:12:07 +0200 Subject: [PATCH 01/22] [fix][ml] Fix concurrent cursor properties update race (#25434) --- .../org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java index 3bb0269a1e9a5..1e5c57bb453ec 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java @@ -423,6 +423,8 @@ private CompletableFuture computeCursorProperties( final Function, Map> updateFunction) { CompletableFuture updateCursorPropertiesResult = new CompletableFuture<>(); + final Stat lastCursorLedgerStat = ManagedCursorImpl.this.cursorLedgerStat; + Map newProperties = updateFunction.apply(ManagedCursorImpl.this.cursorProperties); if (!isDurable()) { this.cursorProperties = Collections.unmodifiableMap(newProperties); @@ -434,7 +436,7 @@ private CompletableFuture computeCursorProperties( copy.copyFrom(ManagedCursorImpl.this.managedCursorInfo); copy.clearCursorProperties(); copy.addAllCursorProperties(buildStringPropertiesMap(newProperties)); - final Stat lastCursorLedgerStat = ManagedCursorImpl.this.cursorLedgerStat; + ledger.getStore().asyncUpdateCursorInfo(ledger.getName(), name, copy, lastCursorLedgerStat, new MetaStoreCallback<>() { @Override From 0f1d79046c9fcfd612d0711c16a932245f30a192 Mon Sep 17 00:00:00 2001 From: Cong Zhao Date: Mon, 30 Mar 2026 14:21:35 +0800 Subject: [PATCH 02/22] [feat][monitor] Add custom topic metric labels to OpenTelemetry metrics attributes (#25306) --- .../service/PersistentTopicAttributes.java | 133 +++++++++- .../service/persistent/PersistentTopic.java | 2 +- .../broker/stats/OpenTelemetryTopicStats.java | 98 ++++---- .../stats/OpenTelemetryCustomLabelsTest.java | 235 ++++++++++++++++++ 4 files changed, 424 insertions(+), 44 deletions(-) create mode 100644 pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryCustomLabelsTest.java diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PersistentTopicAttributes.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PersistentTopicAttributes.java index 51f5bdb354dc9..926314686dba4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PersistentTopicAttributes.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PersistentTopicAttributes.java @@ -18,14 +18,66 @@ */ package org.apache.pulsar.broker.service; +import static org.apache.pulsar.broker.service.AbstractTopic.getCustomMetricLabelsMap; import io.opentelemetry.api.common.Attributes; +import java.util.Map; import lombok.Getter; +import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.common.naming.TopicName; import org.apache.pulsar.opentelemetry.OpenTelemetryAttributes; @Getter public class PersistentTopicAttributes extends TopicAttributes { + @Getter + public static class MetricAttributes { + private final Attributes customAttributes; + private final Attributes resolvedCommonAttributes; + private final Attributes timeBasedQuotaAttributes; + private final Attributes sizeBasedQuotaAttributes; + private final Attributes compactionSuccessAttributes; + private final Attributes compactionFailureAttributes; + private final Attributes transactionActiveAttributes; + private final Attributes transactionCommittedAttributes; + private final Attributes transactionAbortedAttributes; + private final Attributes transactionBufferClientCommitSucceededAttributes; + private final Attributes transactionBufferClientCommitFailedAttributes; + private final Attributes transactionBufferClientAbortSucceededAttributes; + private final Attributes transactionBufferClientAbortFailedAttributes; + + private MetricAttributes(Attributes customAttributes, + Attributes resolvedCommonAttributes, + Attributes timeBasedQuotaAttributes, + Attributes sizeBasedQuotaAttributes, + Attributes compactionSuccessAttributes, + Attributes compactionFailureAttributes, + Attributes transactionActiveAttributes, + Attributes transactionCommittedAttributes, + Attributes transactionAbortedAttributes, + Attributes transactionBufferClientCommitSucceededAttributes, + Attributes transactionBufferClientCommitFailedAttributes, + Attributes transactionBufferClientAbortSucceededAttributes, + Attributes transactionBufferClientAbortFailedAttributes) { + this.customAttributes = customAttributes; + this.resolvedCommonAttributes = resolvedCommonAttributes; + this.timeBasedQuotaAttributes = timeBasedQuotaAttributes; + this.sizeBasedQuotaAttributes = sizeBasedQuotaAttributes; + this.compactionSuccessAttributes = compactionSuccessAttributes; + this.compactionFailureAttributes = compactionFailureAttributes; + this.transactionActiveAttributes = transactionActiveAttributes; + this.transactionCommittedAttributes = transactionCommittedAttributes; + this.transactionAbortedAttributes = transactionAbortedAttributes; + this.transactionBufferClientCommitSucceededAttributes = transactionBufferClientCommitSucceededAttributes; + this.transactionBufferClientCommitFailedAttributes = transactionBufferClientCommitFailedAttributes; + this.transactionBufferClientAbortSucceededAttributes = transactionBufferClientAbortSucceededAttributes; + this.transactionBufferClientAbortFailedAttributes = transactionBufferClientAbortFailedAttributes; + } + } + + private final TopicName topicName; + private final PulsarService pulsar; + + // Pre-built attributes with specific labels (without custom metric labels) private final Attributes timeBasedQuotaAttributes; private final Attributes sizeBasedQuotaAttributes; @@ -41,8 +93,10 @@ public class PersistentTopicAttributes extends TopicAttributes { private final Attributes transactionBufferClientAbortSucceededAttributes; private final Attributes transactionBufferClientAbortFailedAttributes; - public PersistentTopicAttributes(TopicName topicName) { + public PersistentTopicAttributes(TopicName topicName, PulsarService pulsar) { super(topicName); + this.topicName = topicName; + this.pulsar = pulsar; timeBasedQuotaAttributes = Attributes.builder() .putAll(commonAttributes) @@ -100,4 +154,81 @@ public PersistentTopicAttributes(TopicName topicName) { .putAll(OpenTelemetryAttributes.CompactionStatus.FAILURE.attributes) .build(); } + + /** + * Converts a custom metric label key to OpenTelemetry format. + * The conversion follows OpenTelemetry semantic conventions by converting to lowercase. + * + *

Examples: + *

    + *
  • {@code custom_label} → {@code custom_label}
  • + *
  • {@code MY_LABEL} → {@code my_label}
  • + *
+ * + * @param originalKey the original key of the custom metric label + * @return the OpenTelemetry-compliant attribute key + * @see OpenTelemetry Naming Conventions + */ + public static String toOpenTelemetryAttributeKey(String originalKey) { + return originalKey.toLowerCase(); + } + + /** + * Get custom attributes (metric labels) for this topic. + * This method dynamically fetches custom labels to ensure they are always up-to-date. + * Only supported for persistent topics. + * + * @return attributes containing only custom metric labels, or empty attributes if not available + */ + public Attributes getCustomAttributes() { + if (pulsar == null || !pulsar.getConfiguration().isExposeCustomTopicMetricLabelsEnabled()) { + return Attributes.empty(); + } + Map customLabels = getCustomMetricLabelsMap(pulsar, topicName); + if (customLabels.isEmpty()) { + return Attributes.empty(); + } + var builder = Attributes.builder(); + customLabels.forEach((key, value) -> builder.put(toOpenTelemetryAttributeKey(key), value)); + return builder.build(); + } + + /** + * Build attributes by merging custom attributes into the given base attributes. + * + * @param baseAttributes the base attributes to merge custom attributes into + * @param customAttributes the custom attributes to merge + * @return attributes with custom attributes merged + */ + public Attributes buildAttributesWithCustomLabels(Attributes baseAttributes, Attributes customAttributes) { + if (customAttributes.isEmpty()) { + return baseAttributes; + } + return Attributes.builder() + .putAll(baseAttributes) + .putAll(customAttributes) + .build(); + } + + /** + * Resolve all topic metric attributes for the current scrape cycle. + * The returned snapshot keeps the dynamic custom labels explicit while avoiding repeated merges. + */ + public MetricAttributes resolveMetricAttributes() { + var customAttributes = getCustomAttributes(); + return new MetricAttributes( + customAttributes, + buildAttributesWithCustomLabels(commonAttributes, customAttributes), + buildAttributesWithCustomLabels(timeBasedQuotaAttributes, customAttributes), + buildAttributesWithCustomLabels(sizeBasedQuotaAttributes, customAttributes), + buildAttributesWithCustomLabels(compactionSuccessAttributes, customAttributes), + buildAttributesWithCustomLabels(compactionFailureAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionActiveAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionCommittedAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionAbortedAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionBufferClientCommitSucceededAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionBufferClientCommitFailedAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionBufferClientAbortSucceededAttributes, customAttributes), + buildAttributesWithCustomLabels(transactionBufferClientAbortFailedAttributes, customAttributes)); + } } 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 386e49e49de4f..88d511217c473 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 @@ -4834,7 +4834,7 @@ public PersistentTopicAttributes getTopicAttributes() { return persistentTopicAttributes; } return PERSISTENT_TOPIC_ATTRIBUTES_FIELD_UPDATER.updateAndGet(this, - old -> old != null ? old : new PersistentTopicAttributes(TopicName.get(topic))); + old -> old != null ? old : new PersistentTopicAttributes(TopicName.get(topic), brokerService.pulsar())); } /** diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/OpenTelemetryTopicStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/OpenTelemetryTopicStats.java index 0274cb7a7d4a6..92cb0d03efcb1 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/OpenTelemetryTopicStats.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/OpenTelemetryTopicStats.java @@ -27,6 +27,7 @@ import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.broker.service.AbstractTopic; import org.apache.pulsar.broker.service.Dispatcher; +import org.apache.pulsar.broker.service.PersistentTopicAttributes; import org.apache.pulsar.broker.service.Subscription; import org.apache.pulsar.broker.service.Topic; import org.apache.pulsar.broker.service.persistent.PersistentTopic; @@ -393,10 +394,16 @@ public void close() { } private void recordMetricsForTopic(Topic topic) { - var topicAttributes = topic.getTopicAttributes(); - var attributes = topicAttributes.getCommonAttributes(); + PersistentTopic persistentTopic = null; + PersistentTopicAttributes.MetricAttributes persistentMetricAttributes = null; if (topic instanceof AbstractTopic abstractTopic) { + var attributes = topic.getTopicAttributes().getCommonAttributes(); + if (topic instanceof PersistentTopic pt) { + persistentTopic = pt; + persistentMetricAttributes = pt.getTopicAttributes().resolveMetricAttributes(); + attributes = persistentMetricAttributes.getResolvedCommonAttributes(); + } subscriptionCounter.record(abstractTopic.getSubscriptions().size(), attributes); producerCounter.record(abstractTopic.getProducers().size(), attributes); consumerCounter.record(abstractTopic.getNumberOfConsumers(), attributes); @@ -411,10 +418,11 @@ private void recordMetricsForTopic(Topic topic) { // Omitted: consumerMsgAckCounter } - if (topic instanceof PersistentTopic persistentTopic) { + if (persistentTopic != null) { + final var attributes = persistentMetricAttributes.getResolvedCommonAttributes(); + final var persistentAttributes = persistentMetricAttributes; + final var currentPersistentTopic = persistentTopic; var persistentTopicMetrics = persistentTopic.getPersistentTopicMetrics(); - - var persistentTopicAttributes = persistentTopic.getTopicAttributes(); var managedLedger = persistentTopic.getManagedLedger(); var managedLedgerStats = persistentTopic.getManagedLedger().getStats(); storageCounter.record(managedLedgerStats.getStoredMessagesSize(), attributes); @@ -425,62 +433,68 @@ private void recordMetricsForTopic(Topic topic) { storageOutCounter.record(managedLedgerStats.getAddEntrySucceedTotal(), attributes); backlogQuotaLimitSize.record( - topic.getBacklogQuota(BacklogQuota.BacklogQuotaType.destination_storage).getLimitSize(), - attributes); + topic.getBacklogQuota(BacklogQuota.BacklogQuotaType.destination_storage).getLimitSize(), + attributes); backlogQuotaLimitTime.record( - topic.getBacklogQuota(BacklogQuota.BacklogQuotaType.message_age).getLimitTime(), - attributes); - backlogQuotaAge.record(topic.getBestEffortOldestUnacknowledgedMessageAgeSeconds(), attributes); + topic.getBacklogQuota(BacklogQuota.BacklogQuotaType.message_age).getLimitTime(), + attributes); + backlogQuotaAge.record(topic.getBestEffortOldestUnacknowledgedMessageAgeSeconds(), + attributes); var backlogQuotaMetrics = persistentTopicMetrics.getBacklogQuotaMetrics(); backlogEvictionCounter.record(backlogQuotaMetrics.getSizeBasedBacklogQuotaExceededEvictionCount(), - persistentTopicAttributes.getSizeBasedQuotaAttributes()); + persistentAttributes.getSizeBasedQuotaAttributes()); backlogEvictionCounter.record(backlogQuotaMetrics.getTimeBasedBacklogQuotaExceededEvictionCount(), - persistentTopicAttributes.getTimeBasedQuotaAttributes()); + persistentAttributes.getTimeBasedQuotaAttributes()); var txnBuffer = persistentTopic.getTransactionBuffer(); transactionCounter.record(txnBuffer.getOngoingTxnCount(), - persistentTopicAttributes.getTransactionActiveAttributes()); + persistentAttributes.getTransactionActiveAttributes()); transactionCounter.record(txnBuffer.getCommittedTxnCount(), - persistentTopicAttributes.getTransactionCommittedAttributes()); + persistentAttributes.getTransactionCommittedAttributes()); transactionCounter.record(txnBuffer.getAbortedTxnCount(), - persistentTopicAttributes.getTransactionAbortedAttributes()); + persistentAttributes.getTransactionAbortedAttributes()); var txnBufferClientMetrics = persistentTopicMetrics.getTransactionBufferClientMetrics(); transactionBufferClientOperationCounter.record(txnBufferClientMetrics.getCommitSucceededCount().sum(), - persistentTopicAttributes.getTransactionBufferClientCommitSucceededAttributes()); + persistentAttributes.getTransactionBufferClientCommitSucceededAttributes()); transactionBufferClientOperationCounter.record(txnBufferClientMetrics.getCommitFailedCount().sum(), - persistentTopicAttributes.getTransactionBufferClientCommitFailedAttributes()); + persistentAttributes.getTransactionBufferClientCommitFailedAttributes()); transactionBufferClientOperationCounter.record(txnBufferClientMetrics.getAbortSucceededCount().sum(), - persistentTopicAttributes.getTransactionBufferClientAbortSucceededAttributes()); + persistentAttributes.getTransactionBufferClientAbortSucceededAttributes()); transactionBufferClientOperationCounter.record(txnBufferClientMetrics.getAbortFailedCount().sum(), - persistentTopicAttributes.getTransactionBufferClientAbortFailedAttributes()); + persistentAttributes.getTransactionBufferClientAbortFailedAttributes()); Optional.ofNullable(pulsar.getNullableCompactor()) - .map(Compactor::getStats) - .flatMap(compactorMXBean -> compactorMXBean.getCompactionRecordForTopic(topic.getName())) - .ifPresent(compactionRecord -> { - compactionRemovedCounter.record(compactionRecord.getCompactionRemovedEventCount(), attributes); - compactionOperationCounter.record(compactionRecord.getCompactionSucceedCount(), - persistentTopicAttributes.getCompactionSuccessAttributes()); - compactionOperationCounter.record(compactionRecord.getCompactionFailedCount(), - persistentTopicAttributes.getCompactionFailureAttributes()); - compactionDurationSeconds.record(MetricsUtil.convertToSeconds( - compactionRecord.getCompactionDurationTimeInMills(), TimeUnit.MILLISECONDS), attributes); - compactionBytesInCounter.record(compactionRecord.getCompactionReadBytes(), attributes); - compactionBytesOutCounter.record(compactionRecord.getCompactionWriteBytes(), attributes); - - persistentTopic.getCompactedTopicContext().map(CompactedTopicContext::getLedger) - .ifPresent(ledger -> { - compactionEntriesCounter.record(ledger.getLastAddConfirmed() + 1, attributes); - compactionBytesCounter.record(ledger.getLength(), attributes); - }); - }); + .map(Compactor::getStats) + .flatMap(compactorMXBean -> compactorMXBean.getCompactionRecordForTopic(topic.getName())) + .ifPresent(compactionRecord -> { + compactionRemovedCounter.record(compactionRecord.getCompactionRemovedEventCount(), + attributes); + compactionOperationCounter.record(compactionRecord.getCompactionSucceedCount(), + persistentAttributes.getCompactionSuccessAttributes()); + compactionOperationCounter.record(compactionRecord.getCompactionFailedCount(), + persistentAttributes.getCompactionFailureAttributes()); + compactionDurationSeconds.record(MetricsUtil.convertToSeconds( + compactionRecord.getCompactionDurationTimeInMills(), TimeUnit.MILLISECONDS), + attributes); + compactionBytesInCounter.record(compactionRecord.getCompactionReadBytes(), + attributes); + compactionBytesOutCounter.record(compactionRecord.getCompactionWriteBytes(), + attributes); + + currentPersistentTopic.getCompactedTopicContext().map(CompactedTopicContext::getLedger) + .ifPresent(ledger -> { + compactionEntriesCounter.record(ledger.getLastAddConfirmed() + 1, + attributes); + compactionBytesCounter.record(ledger.getLength(), attributes); + }); + }); var delayedMessages = topic.getSubscriptions().values().stream() - .map(Subscription::getDispatcher) - .filter(Objects::nonNull) - .mapToLong(Dispatcher::getNumberOfDelayedMessages) - .sum(); + .map(Subscription::getDispatcher) + .filter(Objects::nonNull) + .mapToLong(Dispatcher::getNumberOfDelayedMessages) + .sum(); delayedSubscriptionCounter.record(delayedMessages, attributes); } } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryCustomLabelsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryCustomLabelsTest.java new file mode 100644 index 0000000000000..153336c1b2d42 --- /dev/null +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryCustomLabelsTest.java @@ -0,0 +1,235 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pulsar.broker.stats; + +import static org.apache.pulsar.broker.stats.BrokerOpenTelemetryTestUtil.assertMetricLongSumValue; +import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.api.common.Attributes; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import lombok.Cleanup; +import org.apache.pulsar.broker.BrokerTestUtil; +import org.apache.pulsar.broker.ServiceConfiguration; +import org.apache.pulsar.broker.service.BrokerTestBase; +import org.apache.pulsar.broker.testcontext.PulsarTestContext; +import org.apache.pulsar.client.api.Consumer; +import org.apache.pulsar.client.api.Producer; +import org.apache.pulsar.opentelemetry.OpenTelemetryAttributes; +import org.awaitility.Awaitility; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +@Test(groups = "broker") +public class OpenTelemetryCustomLabelsTest extends BrokerTestBase { + + private static final Set ALLOWED_CUSTOM_METRIC_LABEL_KEYS = Set.of("SLA_TIER", "APP_OWNER"); + + @BeforeMethod(alwaysRun = true) + @Override + protected void setup() throws Exception { + super.baseSetup(); + } + + @AfterMethod(alwaysRun = true) + @Override + protected void cleanup() throws Exception { + super.internalCleanup(); + } + + @Override + protected void customizeMainPulsarTestContextBuilder(PulsarTestContext.Builder builder) { + super.customizeMainPulsarTestContextBuilder(builder); + builder.enableOpenTelemetry(true); + } + + @Override + protected ServiceConfiguration getDefaultConf() { + ServiceConfiguration conf = super.getDefaultConf(); + conf.setTopicLevelPoliciesEnabled(true); + conf.setSystemTopicEnabled(true); + conf.setExposeCustomTopicMetricLabelsEnabled(true); + conf.setAllowedTopicPropertyKeysForMetrics(ALLOWED_CUSTOM_METRIC_LABEL_KEYS); + conf.setBrokerShutdownTimeoutMs(5000L); + return conf; + } + + @Test(timeOut = 30_000) + public void testCustomLabelsInOpenTelemetryMetrics() throws Exception { + var topic1 = BrokerTestUtil.newUniqueName("persistent://prop/ns-abc/testCustomLabels1"); + var topic2 = BrokerTestUtil.newUniqueName("persistent://prop/ns-abc/testCustomLabels2"); + + admin.topics().createNonPartitionedTopic(topic1); + admin.topics().createPartitionedTopic(topic2, 2); + + @Cleanup + Producer p1 = pulsarClient.newProducer().topic(topic1).create(); + @Cleanup + Producer p2 = pulsarClient.newProducer().topic(topic2).create(); + + @Cleanup + Consumer c1 = pulsarClient.newConsumer() + .topic(topic1) + .subscriptionName("test") + .subscribe(); + @Cleanup + Consumer c2 = pulsarClient.newConsumer() + .topic(topic2) + .subscriptionName("test") + .subscribe(); + + // Produce and consume messages + for (int i = 0; i < 5; i++) { + p1.send(("message-" + i).getBytes()); + p2.send(("message-" + i).getBytes()); + } + for (int i = 0; i < 5; i++) { + c1.acknowledge(c1.receive()); + c2.acknowledge(c2.receive()); + } + + // Set custom metric labels for topic1 + Map labels1 = new HashMap<>(); + labels1.put("SLA_TIER", "gold"); + labels1.put("APP_OWNER", "team-a"); + admin.topics().updateProperties(topic1, labels1); + + // Set custom metric labels for topic2 + Map labels2 = new HashMap<>(); + labels2.put("SLA_TIER", "platinum"); + labels2.put("APP_OWNER", "team-b"); + admin.topics().updateProperties(topic2, labels2); + + // Wait for labels to be set + Awaitility.await().untilAsserted(() -> { + var retrievedLabels1 = admin.topics().getProperties(topic1); + assertThat(retrievedLabels1.get("SLA_TIER")).isEqualTo("gold"); + assertThat(retrievedLabels1.get("APP_OWNER")).isEqualTo("team-a"); + + var retrievedLabels2 = admin.topics().getProperties(topic2); + assertThat(retrievedLabels2.get("SLA_TIER")).isEqualTo("platinum"); + assertThat(retrievedLabels2.get("APP_OWNER")).isEqualTo("team-b"); + }); + + // Collect metrics and verify custom labels are present + var metrics = pulsarTestContext.getOpenTelemetryMetricReader().collectAllMetrics(); + + // Build expected attributes for topic1 with custom labels + var attributesTopic1 = Attributes.builder() + .put(OpenTelemetryAttributes.PULSAR_DOMAIN, "persistent") + .put(OpenTelemetryAttributes.PULSAR_TENANT, "prop") + .put(OpenTelemetryAttributes.PULSAR_NAMESPACE, "prop/ns-abc") + .put(OpenTelemetryAttributes.PULSAR_TOPIC, topic1) + .put("sla_tier", "gold") + .put("app_owner", "team-a") + .build(); + + // Build expected attributes for topic2 with custom labels + var attributesTopic2 = Attributes.builder() + .put(OpenTelemetryAttributes.PULSAR_DOMAIN, "persistent") + .put(OpenTelemetryAttributes.PULSAR_TENANT, "prop") + .put(OpenTelemetryAttributes.PULSAR_NAMESPACE, "prop/ns-abc") + .put(OpenTelemetryAttributes.PULSAR_TOPIC, topic2) + .put("sla_tier", "platinum") + .put("app_owner", "team-b") + .build(); + + // Verify shared topic metrics contain custom labels for topic1 + assertMetricLongSumValue(metrics, OpenTelemetryTopicStats.MESSAGE_IN_COUNTER, attributesTopic1, 5); + assertMetricLongSumValue(metrics, OpenTelemetryTopicStats.PRODUCER_COUNTER, attributesTopic1, 1); + + // Verify persistent-topic metrics contain custom labels for topic1 + assertMetricLongSumValue(metrics, OpenTelemetryTopicStats.STORAGE_COUNTER, attributesTopic1, + actual -> assertThat(actual).isPositive()); + assertMetricLongSumValue(metrics, OpenTelemetryTopicStats.STORAGE_OUT_COUNTER, attributesTopic1, 5); + + // Verify metrics contain custom labels for topic2 (partitioned topic) + // For partitioned topics, metrics are reported per partition + boolean foundTopic2Metrics = metrics.stream() + .filter(metric -> metric.getName().equals(OpenTelemetryTopicStats.STORAGE_COUNTER)) + .flatMap(metric -> metric.getLongSumData().getPoints().stream()) + .anyMatch(point -> { + var attrs = point.getAttributes(); + return attrs.get(OpenTelemetryAttributes.PULSAR_TOPIC).equals(topic2) + && "platinum".equals(attrs.get(io.opentelemetry.api.common.AttributeKey + .stringKey("sla_tier"))) + && "team-b".equals(attrs.get(io.opentelemetry.api.common.AttributeKey + .stringKey("app_owner"))); + }); + assertThat(foundTopic2Metrics).isTrue(); + } + + @Test(timeOut = 30_000) + public void testCustomLabelsDisabled() throws Exception { + // Create a new test with custom labels disabled + var topic = BrokerTestUtil.newUniqueName("persistent://prop/ns-abc/testCustomLabelsDisabled"); + admin.topics().createNonPartitionedTopic(topic); + + @Cleanup + Producer producer = pulsarClient.newProducer().topic(topic).create(); + producer.send("test".getBytes()); + + // Set custom metric labels + Map labels = new HashMap<>(); + labels.put("SLA_TIER", "gold"); + admin.topics().updateProperties(topic, labels); + + // Wait for labels to be set + Awaitility.await().untilAsserted(() -> { + var retrievedLabels = admin.topics().getProperties(topic); + assertThat(retrievedLabels.get("SLA_TIER")).isEqualTo("gold"); + }); + + // Temporarily disable custom labels + pulsar.getConfiguration().setExposeCustomTopicMetricLabelsEnabled(false); + + try { + // Collect metrics + var metrics = pulsarTestContext.getOpenTelemetryMetricReader().collectAllMetrics(); + + // Build expected attributes without custom labels + var attributesWithoutCustomLabels = Attributes.builder() + .put(OpenTelemetryAttributes.PULSAR_DOMAIN, "persistent") + .put(OpenTelemetryAttributes.PULSAR_TENANT, "prop") + .put(OpenTelemetryAttributes.PULSAR_NAMESPACE, "prop/ns-abc") + .put(OpenTelemetryAttributes.PULSAR_TOPIC, topic) + .build(); + + // Verify shared topic metrics do NOT contain custom labels + assertMetricLongSumValue(metrics, OpenTelemetryTopicStats.MESSAGE_IN_COUNTER, attributesWithoutCustomLabels, + 1); + + // Verify persistent-topic metrics do NOT contain custom labels + assertMetricLongSumValue(metrics, OpenTelemetryTopicStats.STORAGE_COUNTER, attributesWithoutCustomLabels, + actual -> assertThat(actual).isPositive()); + + // Verify no metrics contain the custom label + boolean foundCustomLabel = metrics.stream() + .filter(metric -> metric.getName().equals(OpenTelemetryTopicStats.STORAGE_COUNTER)) + .flatMap(metric -> metric.getLongSumData().getPoints().stream()) + .anyMatch(point -> point.getAttributes() + .get(io.opentelemetry.api.common.AttributeKey.stringKey("sla_tier")) != null); + assertThat(foundCustomLabel).isFalse(); + } finally { + // Re-enable custom labels for other tests + pulsar.getConfiguration().setExposeCustomTopicMetricLabelsEnabled(true); + } + } +} From 7c26e12a29bd1e6c9068d3b93a5e651989f4133f Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 06:40:14 -0700 Subject: [PATCH 03/22] [improve][test] Suppress deprecation compile warnings in test code (#25432) --- .../client/TlsProducerConsumerBase.java | 1 + .../impl/ManagedLedgerInfoMetadataTest.java | 1 + .../mledger/impl/ManagedLedgerTest.java | 2 ++ .../impl/cache/InflightReadsLimiterTest.java | 1 + ...ticationProviderOpenIDIntegrationTest.java | 2 ++ .../AuthenticationProviderOpenIDTest.java | 12 ++++++++++ .../authentication/SaslAuthenticateTest.java | 2 ++ .../AuthenticationProviderListTest.java | 7 ++++++ .../AuthenticationProviderTokenTest.java | 19 +++++++++++++++ .../OneStageAuthenticationStateTest.java | 1 + ...tiRolesTokenAuthorizationProviderTest.java | 8 +++++++ .../broker/resources/TopicResourcesTest.java | 1 + ...CustomizedManagedLedgerStorageForTest.java | 1 + .../impl/CustomizedManagedLedgerTest.java | 1 + .../MockTokenAuthenticationProvider.java | 3 +++ .../pulsar/PulsarBrokerStarterTest.java | 3 +++ .../broker/BrokerAdditionalServletTest.java | 1 + .../apache/pulsar/broker/ConfigHelper.java | 1 + .../pulsar/broker/EmbeddedPulsarCluster.java | 1 + ...thParamsLookupAutoClusterFailoverTest.java | 1 + .../pulsar/broker/admin/AdminApi2Test.java | 4 ++++ .../admin/AdminApiDelayedDeliveryTest.java | 1 + .../admin/AdminApiMaxUnackedMessagesTest.java | 1 + .../admin/AdminApiMultiBrokersTest.java | 2 ++ .../broker/admin/AdminApiOffloadTest.java | 3 +++ .../admin/AdminApiSchemaAutoUpdateTest.java | 4 ++++ .../broker/admin/AdminApiSchemaTest.java | 4 ++++ .../admin/AdminApiSchemaWithAuthTest.java | 1 + .../pulsar/broker/admin/AdminApiTest.java | 10 ++++++++ .../apache/pulsar/broker/admin/AdminTest.java | 5 ++++ .../admin/GetPartitionMetadataTest.java | 1 + .../broker/admin/MaxUnackedMessagesTest.java | 6 +++++ .../broker/admin/NamespaceAuthZTest.java | 1 + .../pulsar/broker/admin/NamespacesTest.java | 4 ++++ .../broker/admin/PersistentTopicsTest.java | 3 +++ .../broker/admin/TopicMessageTTLTest.java | 5 ++++ .../admin/TopicPoliciesDisableTest.java | 12 ++++++++++ .../broker/admin/TopicPoliciesTest.java | 3 +++ .../pulsar/broker/admin/TopicsAuthTest.java | 4 ++++ .../AdminApiTransactionMultiBrokerTest.java | 1 + .../auth/AuthenticationServiceTest.java | 15 ++++++++++++ .../auth/AuthorizationWithAuthDataTest.java | 1 + .../broker/auth/MockAuthentication.java | 2 ++ .../auth/MockAuthenticationProvider.java | 2 ++ .../MockMultiStageAuthenticationState.java | 2 ++ .../auth/MockMutableAuthenticationState.java | 2 ++ .../broker/auth/MockOIDCIdentityProvider.java | 1 + .../auth/MockedPulsarServiceBaseTest.java | 1 + ...stractBrokerEntryCacheMultiBrokerTest.java | 1 + .../broker/cache/BrokerEntryCacheTest.java | 1 + .../BucketDelayedDeliveryTrackerTest.java | 2 ++ .../BrokerInterceptorWithClassLoaderTest.java | 1 + .../intercept/CounterBrokerInterceptor.java | 2 ++ .../ModularLoadManagerStrategyTest.java | 2 ++ .../SimpleLoadManagerImplTest.java | 1 + .../ExtensibleLoadManagerImplBaseTest.java | 1 + .../ExtensibleLoadManagerImplTest.java | 3 +++ .../channel/ServiceUnitStateChannelTest.java | 3 +++ .../extensions/data/BrokerLoadDataTest.java | 2 ++ .../LeastResourceUsageWithWeightTest.java | 1 + .../namespace/NamespaceServiceTest.java | 7 ++++++ .../broker/namespace/OwnershipCacheTest.java | 1 + .../service/AbstractReplicatorTest.java | 1 + .../BacklogQuotaManagerConfigurationTest.java | 3 +++ .../service/BacklogQuotaManagerTest.java | 24 +++++++++++++++++++ .../broker/service/BrokerBkEnsemblesTest.java | 7 ++++++ .../service/BrokerBookieIsolationTest.java | 4 ++++ .../service/BrokerEntryMetadataE2ETest.java | 2 ++ .../broker/service/BrokerServiceTest.java | 4 ++++ .../service/BrokerServiceThrottlingTest.java | 3 +++ .../broker/service/BusyWaitServiceTest.java | 1 + .../broker/service/ClusterMigrationTest.java | 6 +++++ .../service/InactiveTopicDeleteTest.java | 4 ++++ .../service/OpportunisticStripingTest.java | 1 + .../broker/service/PeerReplicatorTest.java | 2 ++ ...sistentDispatcherFailoverConsumerTest.java | 1 + .../service/PersistentTopicE2ETest.java | 1 + .../broker/service/PersistentTopicTest.java | 1 + .../PublishRateLimiterOverconsumingTest.java | 1 + .../pulsar/broker/service/RackAwareTest.java | 1 + .../service/ReplicatedSubscriptionTest.java | 11 +++++++++ .../service/ReplicatorGlobalNSTest.java | 1 + .../service/ReplicatorRateLimiterTest.java | 7 ++++++ .../service/ReplicatorRemoveClusterTest.java | 1 + .../pulsar/broker/service/ReplicatorTest.java | 11 ++++++++- .../broker/service/ReplicatorTestBase.java | 5 ++++ .../pulsar/broker/service/ServerCnxTest.java | 8 +++++++ .../broker/service/SharedPulsarCluster.java | 1 + ...temTopicBasedTopicPoliciesServiceTest.java | 1 + .../pulsar/broker/service/TopicOwnerTest.java | 3 ++- .../persistent/DelayedDeliveryTest.java | 3 +++ ...atcherMultipleConsumersReadLimitsTest.java | 1 + .../PersistentSubscriptionTest.java | 1 + .../persistent/TopicDuplicationTest.java | 6 +++++ .../validator/SchemaDataValidatorTest.java | 1 + .../stats/AuthenticatedConsumerStatsTest.java | 1 + .../broker/stats/ConsumerStatsTest.java | 1 + .../broker/stats/MetadataStoreStatsTest.java | 1 + .../OpenTelemetryAuthenticationStatsTest.java | 1 + .../stats/PrometheusMetricsLabelsTest.java | 1 + .../broker/stats/PrometheusMetricsTest.java | 4 ++++ .../TransactionBatchWriterMetricsTest.java | 1 + .../systopic/PartitionedSystemTopicTest.java | 2 ++ .../broker/testcontext/PulsarTestContext.java | 1 + ...icatedTransactionProducerConsumerTest.java | 1 + .../TopicTransactionBufferRecoverTest.java | 2 ++ .../broker/transaction/TransactionTest.java | 4 ++++ .../transaction/TransactionTestBase.java | 1 + .../buffer/TopicTransactionBufferTest.java | 1 + .../buffer/TransactionBufferCloseTest.java | 1 + .../buffer/TransactionStablePositionTest.java | 1 + .../TransactionMetaStoreAssignmentTest.java | 1 + .../AuthenticatedProducerConsumerTest.java | 9 +++++++ ...enticationTlsHostnameVerificationTest.java | 1 + .../AuthorizationProducerConsumerTest.java | 2 ++ .../client/api/BrokerServiceLookupTest.java | 1 + .../api/ClientDeduplicationFailureTest.java | 1 + .../pulsar/client/api/ClientErrorsTest.java | 1 + .../client/api/ConsumerCleanupTest.java | 1 + .../client/api/DeadLetterTopicTest.java | 2 ++ .../pulsar/client/api/InterceptorsTest.java | 3 +++ ...tiRolesTokenAuthorizationProviderTest.java | 2 ++ .../client/api/MultiTopicsConsumerTest.java | 1 + .../client/api/MutualAuthenticationTest.java | 3 +++ .../client/api/NonPersistentTopicTest.java | 1 + .../api/PartitionedProducerConsumerTest.java | 2 ++ ...cherBackPressureMultipleConsumersTest.java | 1 + .../client/api/ProducerQueueSizeTest.java | 1 + .../pulsar/client/api/ProxyProtocolTest.java | 2 ++ ...ListenersWithInternalListenerNameTest.java | 1 + .../pulsar/client/api/RetryTopicTest.java | 1 + .../client/api/ServiceUrlProviderTest.java | 2 ++ .../api/SimpleProducerConsumerStatTest.java | 6 +++++ .../api/SimpleProducerConsumerTest.java | 2 ++ .../pulsar/client/api/SimpleSchemaTest.java | 1 + .../client/api/TlsProducerConsumerBase.java | 1 + .../client/api/TlsProducerConsumerTest.java | 4 ++++ ...okenAuthenticatedProducerConsumerTest.java | 2 ++ .../TokenExpirationProduceConsumerTest.java | 4 ++++ ...uth2AuthenticatedProducerConsumerTest.java | 2 ++ .../pulsar/client/api/TopicReaderTest.java | 1 + .../client/api/UnloadSubscriptionTest.java | 1 + .../impl/AdminApiKeyStoreTlsAuthTest.java | 1 + .../AutoCloseUselessClientConSupports.java | 1 + ...essClientConTopicsPatternConsumerTest.java | 1 + .../impl/BrokerClientIntegrationTest.java | 4 ++++ .../pulsar/client/impl/ClientCnxTest.java | 1 + .../pulsar/client/impl/ConsumerAckTest.java | 1 + ...reTlsProducerConsumerTestWithAuthTest.java | 2 ++ ...lsProducerConsumerTestWithoutAuthTest.java | 1 + .../pulsar/client/impl/LookupRetryTest.java | 1 + .../client/impl/MessageChunkingTest.java | 1 + .../pulsar/client/impl/MessageParserTest.java | 1 + .../PatternTopicsConsumerImplAuthTest.java | 2 ++ .../impl/PulsarMultiHostClientTest.java | 3 +++ .../pulsar/client/impl/SchemaDeleteTest.java | 1 + .../pulsar/client/impl/TableViewTest.java | 7 ++++++ .../client/impl/TopicsConsumerImplTest.java | 1 + .../client/impl/TransactionEndToEndTest.java | 1 + .../naming/ServiceConfigurationTest.java | 2 ++ .../pulsar/compaction/CompactedTopicTest.java | 1 + .../compaction/CompactionRetentionTest.java | 1 + .../pulsar/compaction/CompactionTest.java | 1 + .../GetLastMessageIdCompactedTest.java | 8 +++++++ .../ServiceUnitStateCompactionTest.java | 3 +++ .../compaction/StrategicCompactionTest.java | 1 + .../worker/PulsarFunctionE2ESecurityTest.java | 2 ++ .../worker/PulsarFunctionLocalRunTest.java | 3 +++ .../worker/PulsarFunctionPublishTest.java | 4 ++++ .../worker/PulsarFunctionTlsTest.java | 2 ++ .../worker/PulsarWorkerAssignmentTest.java | 1 + .../pulsar/io/AbstractPulsarE2ETest.java | 2 ++ .../pulsar/io/PulsarFunctionAdminTest.java | 2 ++ .../pulsar/io/PulsarFunctionE2ETest.java | 3 +++ .../pulsar/io/PulsarFunctionTlsTest.java | 3 +++ .../org/apache/pulsar/schema/SchemaTest.java | 1 + ...ypeCompatibilityCheckOnTopicLevelTest.java | 1 + .../security/MockedPulsarStandalone.java | 3 +++ .../utils/auth/tokens/TokensCliUtilsTest.java | 2 ++ .../proxy/MockAuthenticationProvider.java | 2 ++ .../websocket/proxy/ProxyRoleAuthTest.java | 1 + .../internal/PulsarAdminBuilderImplTest.java | 2 ++ .../pulsar/admin/cli/PulsarAdminToolTest.java | 3 +++ .../pulsar/admin/cli/TestCmdTopics.java | 6 +++++ .../pulsar/client/api/MessageRouterTest.java | 1 + .../client/impl/BatchMessageIdImplTest.java | 1 + .../pulsar/client/impl/BuildersTest.java | 1 + .../client/impl/ClientBuilderImplTest.java | 2 ++ .../client/impl/ClientInitializationTest.java | 1 + .../client/impl/MessageIdCompareToTest.java | 2 ++ .../impl/MultiTopicsConsumerImplTest.java | 1 + .../client/impl/ProducerBuilderImplTest.java | 3 +++ .../client/impl/TopicMessageIdImplTest.java | 1 + .../impl/auth/AuthenticationTokenTest.java | 1 + .../client/impl/auth/MockAuthentication.java | 2 ++ ...EncodedAuthenticationParameterSupport.java | 2 ++ .../AuthenticationFactoryOAuth2Test.java | 1 + .../common/protocol/ByteBufPairTest.java | 1 + .../ConcurrentBitSetRecyclableTest.java | 2 ++ .../instance/JavaInstanceRunnableTest.java | 2 ++ .../instance/ProducerBuilderFactoryTest.java | 2 ++ .../source/PulsarFunctionRecordTest.java | 1 + .../windowing/WindowFunctionExecutorTest.java | 1 + ...ubernetesSecretsTokenAuthProviderTest.java | 6 +++++ .../functions/runtime/RuntimeUtilsTest.java | 1 + .../utils/FunctionConfigUtilsTest.java | 5 ++++ .../functions/utils/SinkConfigUtilsTest.java | 3 +++ .../worker/FunctionRuntimeManagerTest.java | 2 ++ .../worker/rest/api/FunctionsImplTest.java | 1 + .../api/v2/FunctionApiV2ResourceTest.java | 1 + .../api/v3/FunctionApiV3ResourceTest.java | 1 + .../rest/api/v3/SourceApiV3ResourceTest.java | 1 + .../AuditorCheckAllLedgersTaskTest.java | 1 + .../replication/AuditorLedgerCheckerTest.java | 1 + .../AuditorPlacementPolicyCheckTest.java | 7 ++++++ .../replication/AuditorReplicasCheckTest.java | 1 + .../replication/BookieLedgerIndexTest.java | 2 +- .../replication/TestReplicationWorker.java | 2 ++ .../BacklogQuotaCompatibilityTest.java | 1 + .../metadata/BaseMetadataStoreTest.java | 1 + .../apache/pulsar/metadata/TestZKServer.java | 1 + .../LedgerUnderreplicationManagerTest.java | 1 + .../PulsarRegistrationClientTest.java | 1 + .../impl/RocksdbMetadataStoreTest.java | 1 + .../BookKeeperPackagesStorageTest.java | 1 + .../FileSystemPackagesStorageTest.java | 1 + .../AutoCloseUselessClientConProxyTest.java | 1 + .../server/ProxyAdditionalServletTest.java | 2 ++ ...roxyAuthenticatedProducerConsumerTest.java | 1 + .../proxy/server/ProxyAuthenticationTest.java | 5 ++++ .../proxy/server/ProxyConfigurationTest.java | 1 + .../server/ProxyKeyStoreTlsWithAuthTest.java | 1 + .../ProxyKeyStoreTlsWithoutAuthTest.java | 1 + .../pulsar/proxy/server/ProxyParserTest.java | 1 + .../proxy/server/ProxyRefreshAuthTest.java | 2 ++ .../server/ProxyRolesEnforcementTest.java | 4 ++++ .../proxy/server/ProxyServiceStarterTest.java | 2 ++ .../apache/pulsar/proxy/server/ProxyTest.java | 2 ++ .../server/ProxyWithAuthorizationTest.java | 2 ++ .../server/ProxyWithJwtAuthorizationTest.java | 6 +++++ .../ProxyWithoutServiceDiscoveryTest.java | 2 ++ .../Oauth2PerformanceTransactionTest.java | 1 + .../testclient/PerfClientUtilsTest.java | 1 + .../PerformanceTransactionTest.java | 1 + ...ebSocketHttpServletRequestWrapperTest.java | 1 + .../admin/WebSocketWebResourceTest.java | 1 + .../jcloud/impl/MockManagedLedger.java | 1 + 247 files changed, 610 insertions(+), 3 deletions(-) diff --git a/bouncy-castle/bcfips-include-test/src/test/java/org/apache/pulsar/client/TlsProducerConsumerBase.java b/bouncy-castle/bcfips-include-test/src/test/java/org/apache/pulsar/client/TlsProducerConsumerBase.java index 92de6ef1e9926..b3741d2a741b1 100644 --- a/bouncy-castle/bcfips-include-test/src/test/java/org/apache/pulsar/client/TlsProducerConsumerBase.java +++ b/bouncy-castle/bcfips-include-test/src/test/java/org/apache/pulsar/client/TlsProducerConsumerBase.java @@ -69,6 +69,7 @@ protected void internalSetUpForBroker() throws Exception { conf.setNumExecutorThreadPoolSize(5); } + @SuppressWarnings("deprecation") protected void internalSetUpForClient(boolean addCertificates, String lookupUrl) throws Exception { if (pulsarClient != null) { pulsarClient.close(); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerInfoMetadataTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerInfoMetadataTest.java index 008acf12a8811..4b62a6b1828b2 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerInfoMetadataTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerInfoMetadataTest.java @@ -53,6 +53,7 @@ private Object[][] compressionTypeProvider() { }; } + @SuppressWarnings("deprecation") private ManagedLedgerInfo generateManagedLedgerInfo(long ledgerId, int ledgerInfoNumber) { ManagedLedgerInfo managedLedgerInfo = new ManagedLedgerInfo(); for (int i = 0; i < ledgerInfoNumber; i++) { diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java index 353768a964ebc..22b0d7dc06c58 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java @@ -3479,6 +3479,7 @@ public void avoidUseSameOpAddEntryBetweenDifferentLedger() throws Exception { * @param checkOwnershipFlag * @throws Exception */ + @SuppressWarnings("deprecation") @Test(dataProvider = "checkOwnershipFlag") public void recoverMLWithBadVersion(boolean checkOwnershipFlag) throws Exception { @@ -3519,6 +3520,7 @@ public void recoverMLWithBadVersion(boolean checkOwnershipFlag) throws Exception log.info("Test completed"); } + @SuppressWarnings("deprecation") private boolean updateCusorMetadataByCreatingMetadataLedger(MutableObject cursor2) throws InterruptedException { MutableObject failed = new MutableObject<>(); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java index 98c9e939cc6fe..b4c5934e2b2f8 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java @@ -538,6 +538,7 @@ public void testAcquireExceedingMaxReadsWhenAllPermitsAvailable() throws Excepti .isEqualTo(maxReadsInFlightSize); } + @SuppressWarnings("deprecation") @Test public void testPrometheusMetrics() throws Exception { long maxReadsInFlightSize = 100; diff --git a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java index 1eede7059a441..5f96660f2f15f 100644 --- a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java +++ b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java @@ -87,6 +87,7 @@ public class AuthenticationProviderOpenIDIntegrationTest { String issuerK8s; WireMockServer server; + @SuppressWarnings("deprecation") @BeforeClass void beforeClass() throws IOException { @@ -578,6 +579,7 @@ public void testAuthenticationStateOpenIDForTokenExpiration() throws Exception { * both kinds of authentication work. * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testAuthenticationProviderListStateSuccess() throws Exception { ServiceConfiguration conf = new ServiceConfiguration(); diff --git a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java index 27b3908eaa757..0a6f137acef18 100644 --- a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java +++ b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java @@ -62,6 +62,7 @@ public class AuthenticationProviderOpenIDTest { // https://www.rfc-editor.org/rfc/rfc7518#section-3.1 + @SuppressWarnings("deprecation") private static final Set SUPPORTED_ALGORITHMS = Set.of( SignatureAlgorithm.RS256, SignatureAlgorithm.RS384, @@ -76,6 +77,7 @@ public static Object[][] supportedAlgorithms() { return buildDataProvider(SUPPORTED_ALGORITHMS); } + @SuppressWarnings("deprecation") @DataProvider(name = "unsupportedAlgorithms") public static Object[][] unsupportedAlgorithms() { var unsupportedAlgorithms = Set.of(SignatureAlgorithm.values()) @@ -109,6 +111,7 @@ public void cleanup() throws IOException { basicProvider.close(); } + @SuppressWarnings("deprecation") @Test public void testNullToken() throws IOException { @Cleanup @@ -124,6 +127,7 @@ public void testThatNullAlgFails() { .hasMessage("PublicKey algorithm cannot be null"); } + @SuppressWarnings("deprecation") @Test(dataProvider = "unsupportedAlgorithms") public void testThatUnsupportedAlgsThrowExceptions(SignatureAlgorithm unsupportedAlg) { var algorithm = unsupportedAlg.getValue(); @@ -133,6 +137,7 @@ public void testThatUnsupportedAlgsThrowExceptions(SignatureAlgorithm unsupporte .hasMessage("Unsupported algorithm: " + algorithm); } + @SuppressWarnings("deprecation") @Test(dataProvider = "supportedAlgorithms") public void testThatSupportedAlgsWork(SignatureAlgorithm alg) throws AuthenticationException { KeyPair keyPair = Keys.keyPairFor(alg); @@ -146,6 +151,7 @@ public void testThatSupportedAlgsWork(SignatureAlgorithm alg) throws Authenticat Assert.assertEquals(expectedValue, actualValue); } + @SuppressWarnings("deprecation") @Test public void testThatSupportedAlgWithMismatchedPublicKeyFromDifferentAlgFamilyFails() throws IOException { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -159,6 +165,7 @@ public void testThatSupportedAlgWithMismatchedPublicKeyFromDifferentAlgFamilyFai .hasMessage("Expected PublicKey alg [ES512] does match actual alg."); } + @SuppressWarnings("deprecation") @Test public void testThatSupportedAlgWithMismatchedPublicKeyFromSameAlgFamilyFails() { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -172,6 +179,7 @@ public void testThatSupportedAlgWithMismatchedPublicKeyFromSameAlgFamilyFails() .hasMessageStartingWith("JWT algorithm does not match Public Key algorithm"); } + @SuppressWarnings("deprecation") @Test public void ensureExpiredTokenFails() { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -184,6 +192,7 @@ public void ensureExpiredTokenFails() { () -> basicProvider.verifyJWT(keyPair.getPublic(), SignatureAlgorithm.RS256.getValue(), jwt)); } + @SuppressWarnings("deprecation") @Test public void ensureFutureNBFFails() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -197,6 +206,7 @@ public void ensureFutureNBFFails() throws Exception { () -> basicProvider.verifyJWT(keyPair.getPublic(), SignatureAlgorithm.RS256.getValue(), jwt)); } + @SuppressWarnings("deprecation") @Test public void ensureWithoutNBFSucceeds() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -211,6 +221,7 @@ public void ensureWithoutNBFSucceeds() throws Exception { basicProvider.verifyJWT(keyPair.getPublic(), SignatureAlgorithm.RS256.getValue(), jwt); } + @SuppressWarnings("deprecation") @Test public void ensureFutureIATFails() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -224,6 +235,7 @@ public void ensureFutureIATFails() throws Exception { () -> basicProvider.verifyJWT(keyPair.getPublic(), SignatureAlgorithm.RS256.getValue(), jwt)); } + @SuppressWarnings("deprecation") @Test public void ensureRecentlyExpiredTokenWithinConfiguredLeewaySucceeds() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); diff --git a/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java b/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java index 1ee427ec4d8b4..f46a946ebe2ed 100644 --- a/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java +++ b/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java @@ -164,6 +164,7 @@ public static void stopMiniKdc() throws IOException { assertFalse(kerberosWorkDir.exists()); } + @SuppressWarnings("deprecation") @BeforeMethod @Override protected void setup() throws Exception { @@ -261,6 +262,7 @@ public void testProducerAndConsumerPassed() throws Exception { } // Test sasl server/client auth. + @SuppressWarnings("deprecation") @Test public void testSaslServerAndClientAuth() throws Exception { log.info("-- {} -- start", methodName); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderListTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderListTest.java index f139bb384a4be..ac3fd0f55a5a9 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderListTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderListTest.java @@ -76,6 +76,7 @@ public class AuthenticationProviderListTest { private AuthenticationProviderList authProvider; + @SuppressWarnings("deprecation") @BeforeMethod public void setUp() throws Exception { this.keyPairA = Keys.keyPairFor(SignatureAlgorithm.ES256); @@ -190,6 +191,7 @@ public void testAuthenticateAsync() throws Exception { } + @SuppressWarnings("deprecation") private AuthenticationState newAuthState(String token, String expectedSubject) throws Exception { // Must pass the token to the newAuthState for legacy reasons. AuthenticationState authState = authProvider.newAuthState( @@ -204,6 +206,7 @@ private AuthenticationState newAuthState(String token, String expectedSubject) t return authState; } + @SuppressWarnings("deprecation") private void verifyAuthStateExpired(AuthenticationState authState, String expectedSubject) throws Exception { assertEquals(authState.getAuthRole(), expectedSubject); @@ -266,6 +269,7 @@ public void testAuthenticateHttpRequest() throws Exception { verify(requestBB).setAttribute(eq(AuthenticatedDataAttributeName), isA(AuthenticationDataSource.class)); } + @SuppressWarnings("deprecation") @Test public void testAuthenticateWithMultipleProviders() throws Exception { HttpServletRequest httpRequest = mock(HttpServletRequest.class); @@ -352,6 +356,7 @@ public String getAuthRole() { return subject; } + @SuppressWarnings("deprecation") @Override public AuthData authenticate(AuthData authData) { return null; @@ -362,6 +367,7 @@ public AuthenticationDataSource getAuthDataSource() { return null; } + @SuppressWarnings("deprecation") @Override public boolean isComplete() { return false; @@ -377,6 +383,7 @@ public boolean isComplete() { } } + @SuppressWarnings("deprecation") private void verifyAuthenticationStateSuccess(AuthenticationState authState, boolean isAsync, String expectedRole) throws Exception { assertThat(authState).isNotNull(); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTokenTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTokenTest.java index a2daace307ae0..e5be41035f95d 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTokenTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTokenTest.java @@ -82,6 +82,7 @@ public void testInvalidInitialize() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testSerializeSecretKey() { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -102,6 +103,7 @@ public void testSerializeSecretKey() { assertEquals(jwt.getBody().getSubject(), SUBJECT); } + @SuppressWarnings("deprecation") @Test public void testSerializeKeyPair() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -125,6 +127,7 @@ public void testSerializeKeyPair() throws Exception { assertEquals(jwt.getBody().getSubject(), SUBJECT); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKey() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -235,6 +238,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testTrimAuthSecretKeyFilePath() throws Exception { String space = " "; @@ -255,6 +259,7 @@ public void testTrimAuthSecretKeyFilePath() throws Exception { provider.initialize(AuthenticationProvider.Context.builder().config(conf).build()); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKeyFromFile() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -291,6 +296,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKeyFromValidFile() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -326,6 +332,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKeyFromDataBase64() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -358,6 +365,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKeyPair() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); @@ -397,6 +405,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKeyPairWithCustomClaim() throws Exception { String authRoleClaim = "customClaim"; @@ -422,6 +431,7 @@ public void testAuthSecretKeyPairWithCustomClaim() throws Exception { // Use private key to generate token PrivateKey privateKey = AuthTokenUtils.decodePrivateKey(Decoders.BASE64.decode(privateKeyStr), SignatureAlgorithm.RS256); + @SuppressWarnings("deprecation") String token = Jwts.builder() .setClaims(new HashMap() {{ put(authRoleClaim, authRole); @@ -447,6 +457,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testAuthSecretKeyPairWithECDSA() throws Exception { KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.ES256); @@ -564,6 +575,7 @@ public boolean hasDataFromHttp() { }); } + @SuppressWarnings("deprecation") @Test(expectedExceptions = AuthenticationException.class) public void testAuthenticateWhenInvalidTokenIsPassed() throws AuthenticationException, IOException { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -825,6 +837,7 @@ public void testMultiTokenAudienceNotInclude() throws Exception { testTokenAudienceWithDifferentConfig(properties, audienceClaim, audiences); } + @SuppressWarnings("deprecation") @Test public void testArrayTypeRoleClaim() throws Exception { String authRoleClaim = "customClaim"; @@ -850,6 +863,7 @@ public void testArrayTypeRoleClaim() throws Exception { // Use private key to generate token PrivateKey privateKey = AuthTokenUtils.decodePrivateKey(Decoders.BASE64.decode(privateKeyStr), SignatureAlgorithm.RS256); + @SuppressWarnings("deprecation") String token = Jwts.builder() .setClaims(new HashMap() {{ put(authRoleClaim, Arrays.asList(authRole, "other-role")); @@ -874,6 +888,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testTokenSettingPrefix() throws Exception { AuthenticationProviderToken provider = new AuthenticationProviderToken(); @@ -913,6 +928,7 @@ public void testTokenSettingPrefix() throws Exception { .getProperty(prefix + AuthenticationProviderToken.CONF_TOKEN_AUDIENCE); } + @SuppressWarnings("deprecation") @Test public void testTokenFromHttpParams() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -939,6 +955,7 @@ public void testTokenFromHttpParams() throws Exception { assertTrue(doFilter, "Authentication should have passed"); } + @SuppressWarnings("deprecation") @Test public void testTokenFromHttpHeaders() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -1005,6 +1022,7 @@ public void testTokenStateUpdatesAuthenticationDataSource() throws Exception { assertNotEquals(firstAuthDataSource, secondAuthDataSource); } + @SuppressWarnings("deprecation") private static String createTokenWithAudience(Key signingKey, String audienceClaim, List audience) { JwtBuilder builder = Jwts.builder() .setSubject(SUBJECT) @@ -1021,6 +1039,7 @@ private static void testTokenAudienceWithDifferentConfig(Properties properties, Lists.newArrayList(brokerAudience)); } + @SuppressWarnings("deprecation") private static void testTokenAudienceWithDifferentConfig(Properties properties, String audienceClaim, List audiences) throws Exception { @Cleanup diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/OneStageAuthenticationStateTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/OneStageAuthenticationStateTest.java index 128c6020c536f..07a0ccf639acd 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/OneStageAuthenticationStateTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authentication/OneStageAuthenticationStateTest.java @@ -42,6 +42,7 @@ public class OneStageAuthenticationStateTest { public static class CountingAuthenticationProvider implements AuthenticationProvider { public LongAdder authCallCount = new LongAdder(); + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProviderTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProviderTest.java index 690f8c75e8588..6c05264af7e7b 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProviderTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProviderTest.java @@ -41,6 +41,7 @@ public class MultiRolesTokenAuthorizationProviderTest { + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthz() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -84,6 +85,7 @@ public String getHttpHeader(String name) { }).get()); } + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthzWithEmptyRoles() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -112,6 +114,7 @@ public String getHttpHeader(String name) { assertFalse(provider.authorize("test", ads, role -> CompletableFuture.completedFuture(false)).get()); } + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthzWithSingleRole() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -146,6 +149,7 @@ public String getHttpHeader(String name) { }).get()); } + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthzWithoutClaim() throws Exception { final SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -227,6 +231,7 @@ public String getHttpHeader(String name) { assertFalse(provider.authorize("test", ads, role -> CompletableFuture.completedFuture(false)).get()); } + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthzWithCustomRolesClaims() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -267,6 +272,7 @@ public String getHttpHeader(String name) { }).get()); } + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthzWithSuperUser() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -315,6 +321,7 @@ public String getHttpHeader(String name) { * -> Returns true (exception is swallowed) * Scenario 2: All roles throw subscription prefix mismatch exception -> Returns false */ + @SuppressWarnings("deprecation") @Test public void testMultiRolesAuthzWithSubscriptionPrefixMismatchException() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -370,6 +377,7 @@ public String getHttpHeader(String name) { * Single role throws subscription prefix mismatch exception -> Should throw the original exception * (Single role keeps original behavior, does not swallow exception) */ + @SuppressWarnings("deprecation") @Test public void testSingleRoleAuthzWithSubscriptionPrefixMismatchException() throws Exception { SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java index 05632fba683ab..08e674ce5b878 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java @@ -151,6 +151,7 @@ public void testNamespaceContainsDotsShouldntMatchAny() { verify(listener).onTopicEvent("persistent://tenant/name.pace/topic", NotificationType.Created); } + @SuppressWarnings("deprecation") @Test public void testBiConsumerListenerNotInvokedAfterDeregistered() { BiConsumer listener = mock(BiConsumer.class); diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerStorageForTest.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerStorageForTest.java index bd42eaf5678e8..ff9d3ea8b44d9 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerStorageForTest.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerStorageForTest.java @@ -600,6 +600,7 @@ public void trimConsumedLedgersInBackground(CompletableFuture promise) { delegate.trimConsumedLedgersInBackground(promise); } + @SuppressWarnings("deprecation") @Override public void rollCurrentLedgerIfFull() { delegate.rollCurrentLedgerIfFull(); diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerTest.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerTest.java index 5ad1ee618c02a..0d5be37f21760 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerTest.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/CustomizedManagedLedgerTest.java @@ -55,6 +55,7 @@ protected void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") protected void doInitConf() throws Exception { super.doInitConf(); conf.setManagedLedgerStorageClassName( diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/MockTokenAuthenticationProvider.java b/pulsar-broker/src/test/java/org/apache/pulsar/MockTokenAuthenticationProvider.java index e2593c9fe408a..fcb756153789a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/MockTokenAuthenticationProvider.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/MockTokenAuthenticationProvider.java @@ -33,6 +33,7 @@ public class MockTokenAuthenticationProvider implements AuthenticationProvider { public static final String KEY = "role"; + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { @@ -43,6 +44,7 @@ public void initialize(ServiceConfiguration config) throws IOException { public String getAuthMethodName() { return "mock"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { @@ -60,6 +62,7 @@ public String authenticate(AuthenticationDataSource authData) throws Authenticat public void close() throws IOException { // No ops } + @SuppressWarnings("deprecation") public static class MockAuthentication implements Authentication { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java index 7501d5585095e..f10dcef9af50b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java @@ -96,6 +96,7 @@ private File createValidBrokerConfigFile() throws FileNotFoundException { * method returns a non-null {@link ServiceConfiguration} instance where all required settings are filled in and (2) * if the property variables inside the given property file are correctly referred to that returned object. */ + @SuppressWarnings("deprecation") public void testLoadConfig() throws SecurityException, NoSuchMethodException, IOException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { @@ -172,6 +173,7 @@ public void testLoadConfigWithException() throws Exception { * method returns a non-null {@link ServiceConfiguration} instance where all required settings are filled in and (2) * if the property variables inside the given property file are correctly referred to that returned object. */ + @SuppressWarnings("deprecation") @Test public void testLoadBalancerConfig() throws SecurityException, NoSuchMethodException, IOException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { @@ -221,6 +223,7 @@ public void testLoadBalancerConfig() throws SecurityException, NoSuchMethodExcep * method returns a non-null {@link ServiceConfiguration} instance where all required settings are filled in and (2) * if the property variables inside the given property file are correctly referred to that returned object. */ + @SuppressWarnings("deprecation") @Test public void testGlobalZooKeeperConfig() throws SecurityException, NoSuchMethodException, IOException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerAdditionalServletTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerAdditionalServletTest.java index 3457be30107b1..4355410b5e322 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerAdditionalServletTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerAdditionalServletTest.java @@ -118,6 +118,7 @@ public void close() { Mockito.when(pulsar.getBrokerAdditionalServlets()).thenReturn(brokerAdditionalServlets); } + @SuppressWarnings("deprecation") @Test public void test() throws IOException { int httpPort = pulsar.getWebService().getListenPortHTTP().get(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/ConfigHelper.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/ConfigHelper.java index 3999ba3f173ea..c74a246147c45 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/ConfigHelper.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/ConfigHelper.java @@ -35,6 +35,7 @@ public static Map backlogQuotaMap(S timeBacklogQuota(configuration)); } + @SuppressWarnings("deprecation") public static BacklogQuota sizeBacklogQuota(ServiceConfiguration configuration) { long backlogQuotaBytes = configuration.getBacklogQuotaDefaultLimitGB() > 0 ? ((long) (configuration.getBacklogQuotaDefaultLimitGB() * BacklogQuotaImpl.BYTES_IN_GIGABYTE)) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java index ff454f9c566c3..f66f5d8633544 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java @@ -99,6 +99,7 @@ public String getServiceUrl() { return serviceUrl; } + @SuppressWarnings("deprecation") private ServiceConfiguration getConf() { ServiceConfiguration conf = new ServiceConfiguration(); conf.setAdvertisedAddress("localhost"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/SameAuthParamsLookupAutoClusterFailoverTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/SameAuthParamsLookupAutoClusterFailoverTest.java index 0a2a74d9a22be..44afcb92a94c2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/SameAuthParamsLookupAutoClusterFailoverTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/SameAuthParamsLookupAutoClusterFailoverTest.java @@ -62,6 +62,7 @@ public Object[][] enabledTls () { {false} }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledTls", timeOut = 240 * 1000) public void testAutoClusterFailover(boolean enabledTls) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java index a2aa358cc0088..d1126f79ccc12 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java @@ -480,6 +480,7 @@ public void testTopicPoliciesWithMultiBroker() throws Exception { setTopicPoliciesAndValidate(admin2, admin3, topic2); } + @SuppressWarnings("deprecation") private void setTopicPoliciesAndValidate(PulsarAdmin admin2 , PulsarAdmin admin3, String topic) throws Exception { admin.topics().setMaxUnackedMessagesOnConsumer(topic, 100); @@ -505,6 +506,7 @@ private void setTopicPoliciesAndValidate(PulsarAdmin admin2 * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void nonPersistentTopics() throws Exception { final String topicName = "nonPersistentTopic"; @@ -1238,6 +1240,7 @@ public void namespaceAntiAffinity() throws PulsarAdminException { assertEquals(namespaces2.size(), 0); } + @SuppressWarnings("deprecation") @Test public void testPersistentTopicList() throws Exception { final String namespace = newUniqueName(defaultTenant + "/ns2"); @@ -3378,6 +3381,7 @@ public void testCompactionApi() throws Exception { Awaitility.await().untilAsserted(() -> assertNull(admin.namespaces().getCompactionThreshold(namespace))); } + @SuppressWarnings("deprecation") @Test(timeOut = 200000) public void testCompactionPriority() throws Exception { restartClusterAfterTest(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiDelayedDeliveryTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiDelayedDeliveryTest.java index 81a9513b4392b..c76a102ce73f3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiDelayedDeliveryTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiDelayedDeliveryTest.java @@ -142,6 +142,7 @@ public void testNamespaceDelayedDeliveryPolicyApi() throws Exception { -> assertNull(admin.namespaces().getDelayedDelivery(namespace))); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testDelayedDeliveryApplied() throws Exception { cleanup(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java index 1a0d4fa75b814..e1764622f8ff0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java @@ -125,6 +125,7 @@ public void testMaxUnackedMessagesOnSubscription() throws Exception { -> assertNull(admin.namespaces().getMaxUnackedMessagesPerSubscription(namespace))); } + @SuppressWarnings("deprecation") @Test public void testMaxUnackedMessagesPerConsumerPriority() throws Exception { int brokerLevelPolicy = 3; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMultiBrokersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMultiBrokersTest.java index ae6ef0b6ee6c4..f4c03012edd7d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMultiBrokersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMultiBrokersTest.java @@ -97,6 +97,7 @@ public Object[][] topicTypes(){ }; } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000, dataProvider = "topicTypes") public void testTopicLookup(TopicDomain topicDomain, boolean isPartition) throws Exception { PulsarAdmin admin0 = getAllAdmins().get(0); @@ -130,6 +131,7 @@ public void testTopicLookup(TopicDomain topicDomain, boolean isPartition) throws Assert.assertEquals(lookupResultSet.size(), 1); } + @SuppressWarnings("deprecation") @Test(groups = "flaky") public void testForceDeletePartitionedTopicWithSub() throws Exception { final int numPartitions = 10; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java index cadfd759c15e7..a98389d54c329 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiOffloadTest.java @@ -233,6 +233,7 @@ public void testOffloadPolicies() throws Exception { assertNull(offload3); } + @SuppressWarnings("deprecation") @Test public void testOffloadPoliciesApi() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -256,6 +257,7 @@ public void testOffloadPoliciesApi() throws Exception { assertNull(admin.topics().getOffloadPolicies(topicName)); } + @SuppressWarnings("deprecation") @Test public void testOffloadPoliciesAppliedApi() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -405,6 +407,7 @@ public void testTopicLevelOffloadNonPartitioned() throws Exception { testOffload(false); } + @SuppressWarnings("deprecation") private void testOffload(boolean isPartitioned) throws Exception { String topicName = testTopic + UUID.randomUUID().toString(); int partitionNum = 3; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaAutoUpdateTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaAutoUpdateTest.java index b0c2dc4827e06..d6e453cab92e5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaAutoUpdateTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaAutoUpdateTest.java @@ -57,6 +57,7 @@ public void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") private void testAutoUpdateBackward(String namespace, String topicName) throws Exception { Assert.assertNull(admin.namespaces().getSchemaAutoUpdateCompatibilityStrategy(namespace)); @@ -81,6 +82,7 @@ private void testAutoUpdateBackward(String namespace, String topicName) throws E } + @SuppressWarnings("deprecation") private void testAutoUpdateForward(String namespace, String topicName) throws Exception { Assert.assertNull(admin.namespaces().getSchemaAutoUpdateCompatibilityStrategy(namespace)); @@ -104,6 +106,7 @@ private void testAutoUpdateForward(String namespace, String topicName) throws Ex } } + @SuppressWarnings("deprecation") private void testAutoUpdateFull(String namespace, String topicName) throws Exception { Assert.assertNull(admin.namespaces().getSchemaAutoUpdateCompatibilityStrategy(namespace)); @@ -131,6 +134,7 @@ private void testAutoUpdateFull(String namespace, String topicName) throws Excep } } + @SuppressWarnings("deprecation") private void testAutoUpdateDisabled(String namespace, String topicName) throws Exception { Assert.assertNull(admin.namespaces().getSchemaAutoUpdateCompatibilityStrategy(namespace)); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java index 034194bea0f8c..d1d77f1dbdac0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java @@ -187,6 +187,7 @@ private void testSchemaInfoApi(Schema schema, } + @SuppressWarnings("deprecation") @Test(dataProvider = "version") public void testPostSchemaCompatibilityStrategy(ApiVersion version) throws PulsarAdminException { String namespace = format("%s%s%s", "schematest", "/", @@ -401,11 +402,13 @@ public void testGetSchemaCompatibilityStrategy() throws PulsarAdminException { SchemaCompatibilityStrategy.UNDEFINED); } + @SuppressWarnings("deprecation") @Test public void testGetSchemaAutoUpdateCompatibilityStrategy() throws PulsarAdminException { assertNull(admin.namespaces().getSchemaAutoUpdateCompatibilityStrategy(schemaCompatibilityNamespace)); } + @SuppressWarnings("deprecation") @Test public void testGetSchemaCompatibilityStrategyWhenSetSchemaAutoUpdateCompatibilityStrategy() throws PulsarAdminException { @@ -427,6 +430,7 @@ public void testGetSchemaCompatibilityStrategyWhenSetSchemaAutoUpdateCompatibili admin.namespaces().getSchemaCompatibilityStrategy(schemaCompatibilityNamespace))); } + @SuppressWarnings("deprecation") @Test public void testGetSchemaCompatibilityStrategyWhenSetBrokerLevelAndSchemaAutoUpdateCompatibilityStrategy() throws PulsarAdminException { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaWithAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaWithAuthTest.java index 81bdae3ebb9e9..2c2ad5d9844c0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaWithAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaWithAuthTest.java @@ -51,6 +51,7 @@ /** * Unit tests for schema admin api. */ +@SuppressWarnings("deprecation") @Slf4j @Test(groups = "broker-admin") public class AdminApiSchemaWithAuthTest extends MockedPulsarServiceBaseTest { 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 2b7b404e655b0..c7cbb63dc54eb 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 @@ -917,6 +917,7 @@ public void namespaces() throws Exception { // otheradmin.namespaces().unload("prop-xyz/use/ns2"); } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicName") public void persistentTopics(String topicName) throws Exception { final String subName = topicName; @@ -1012,6 +1013,7 @@ public void persistentTopics(String topicName) throws Exception { assertEquals(admin.topics().getList("prop-xyz/ns1"), new ArrayList<>()); } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicName") public void testSkipHoleMessages(String topicName) throws Exception { final String subName = topicName; @@ -1058,6 +1060,7 @@ public void received(Consumer consumer, Message msg) { assertEquals(topicStats.getSubscriptions().get(subName).getMsgBacklog(), msgBacklog - skipNumber); } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicType") public void testPartitionState(String topicType) throws Exception { final String namespace = "prop-xyz/ns1"; @@ -1103,6 +1106,7 @@ public void testPartitionState(String topicType) throws Exception { } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicType") public void testNonPartitionState(String topicType) throws Exception { final String namespace = "prop-xyz/ns1"; @@ -1141,6 +1145,7 @@ public void testNonPartitionState(String topicType) throws Exception { client.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicNamesForAllTypes") public void partitionedTopics(String topicType, String topicName) throws Exception { final String namespace = "prop-xyz/ns1"; @@ -2157,6 +2162,7 @@ public void testNamespaceBundleUnload(Integer numBundles) throws Exception { admin.topics().delete("persistent://prop-xyz/ns1-bundles/ds2"); } + @SuppressWarnings("deprecation") @Test public void testDeleteSubscription() throws Exception { final String subName = "test-sub"; @@ -2971,6 +2977,7 @@ public void partitionedTopicsCursorReset(String topicName) throws Exception { admin.topics().deletePartitionedTopic(topicName); } + @SuppressWarnings("deprecation") @Test public void persistentTopicsInvalidCursorReset() throws Exception { admin.namespaces().setRetention("prop-xyz/ns1", new RetentionPolicies(10, 10)); @@ -3059,6 +3066,7 @@ public void testObjectWithUnknownProperties() { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testPersistentTopicsExpireMessages() throws Exception { // Force to create a topic @@ -3146,6 +3154,7 @@ public void testPersistentTopicsExpireMessages() throws Exception { consumer3.close(); } + @SuppressWarnings("deprecation") @Test public void testPersistentTopicsExpireMessagesInvalidPartitionIndex() throws Exception { // Create a topic @@ -3178,6 +3187,7 @@ public void testPersistentTopicsExpireMessagesInvalidPartitionIndex() throws Exc * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testPersistentTopicExpireMessageOnPartitionTopic() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java index 88759522e6cb0..6c7ab152f5a23 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java @@ -194,6 +194,7 @@ public void cleanup() throws Exception { conf.setClusterName(configClusterName); } + @SuppressWarnings("deprecation") @Test public void internalConfiguration() throws Exception { ServiceConfiguration conf = pulsar.getConfiguration(); @@ -229,6 +230,7 @@ private static class OldInternalConfigurationData { * (before https://github.com/apache/pulsar/pull/14384) while the Worker already uses the new one. * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void internalConfigurationRetroCompatibility() throws Exception { OldInternalConfigurationData oldDataModel = new OldInternalConfigurationData( @@ -734,6 +736,7 @@ public void brokers() throws Exception { pulsar.getLeaderElectionService().getCurrentLeader().map(LeaderBroker::getBrokerId).get()); } + @SuppressWarnings("deprecation") @Test public void resourceQuotas() throws Exception { // get Default Resource Quota @@ -816,6 +819,7 @@ public void brokerStats() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void persistentTopics() throws Exception { @@ -939,6 +943,7 @@ public void testUpdatePartitionedTopicCoontainedInOldTopic() throws Exception { false, 10); } + @SuppressWarnings("deprecation") @Test public void test500Error() throws Exception { final String tenant = "prop-xyz"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/GetPartitionMetadataTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/GetPartitionMetadataTest.java index 5ff88205ce71b..e4e9a28d9c7bd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/GetPartitionMetadataTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/GetPartitionMetadataTest.java @@ -272,6 +272,7 @@ protected void modifyTopicAutoCreation(boolean allowAutoTopicCreation, doModifyTopicAutoCreation(admin1, pulsar1, allowAutoTopicCreation, allowAutoTopicCreationType, defaultNumPartitions); } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicDomains") public void testAutoCreatingMetadataWhenCallingOldAPI(TopicDomain topicDomain) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/MaxUnackedMessagesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/MaxUnackedMessagesTest.java index 7a67fb2219838..485b620653a6a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/MaxUnackedMessagesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/MaxUnackedMessagesTest.java @@ -47,6 +47,7 @@ @Test(groups = "broker-admin") public class MaxUnackedMessagesTest extends SharedPulsarBaseTest { + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testMaxUnackedMessagesOnSubscriptionApi() throws Exception { final String topicName = newTopicName(); @@ -64,6 +65,7 @@ public void testMaxUnackedMessagesOnSubscriptionApi() throws Exception { -> assertNull(admin.topics().getMaxUnackedMessagesOnSubscription(topicName))); assertNull(admin.topics().getMaxUnackedMessagesOnSubscription(topicName)); } + @SuppressWarnings("deprecation") // See https://github.com/apache/pulsar/issues/5438 @Test(timeOut = 20000) @@ -158,6 +160,7 @@ public void testMaxUnackedMessagesOnSubscription() throws Exception { } } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testMaxUnackedMessagesOnConsumerApi() throws Exception { final String topicName = newTopicName(); @@ -176,6 +179,7 @@ public void testMaxUnackedMessagesOnConsumerApi() throws Exception { assertNull(admin.topics().getMaxUnackedMessagesOnConsumer(topicName)); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testMaxUnackedMessagesOnConsumerAppliedApi() throws Exception { final String topicName = newTopicName(); @@ -204,6 +208,7 @@ public void testMaxUnackedMessagesOnConsumerAppliedApi() throws Exception { assertEquals(max.intValue(), 20); } + @SuppressWarnings("deprecation") @Test public void testMaxUnackedMessagesOnSubApplied() throws Exception { final String topicName = newTopicName(); @@ -233,6 +238,7 @@ public void testMaxUnackedMessagesOnSubApplied() throws Exception { Integer.valueOf(getConfig().getMaxUnackedMessagesPerSubscription())); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testMaxUnackedMessagesOnConsumer() throws Exception { final String topicName = newTopicName(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespaceAuthZTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespaceAuthZTest.java index aadcb8748645e..ca9f07c474bcf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespaceAuthZTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespaceAuthZTest.java @@ -2145,6 +2145,7 @@ public void testIsAllowAutoUpdateSchema() { Assert.assertTrue(execFlag.get()); } + @SuppressWarnings("deprecation") @Test @SneakyThrows public void testSchemaAutoUpdateCompatibilityStrategy() { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java index c40e8a84c5efc..27136f401ad41 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java @@ -952,6 +952,7 @@ public void testUnloadNamespaces() throws Exception { resetBroker(); } + @SuppressWarnings("deprecation") @Test public void testSplitBundles() throws Exception { URL localWebServiceUrl = new URL(pulsar.getSafeWebServiceAddress()); @@ -996,6 +997,7 @@ public void testSplitBundles() throws Exception { resetBroker(); } + @SuppressWarnings("deprecation") @Test public void testSplitBundleWithUnDividedRange() throws Exception { URL localWebServiceUrl = new URL(pulsar.getSafeWebServiceAddress()); @@ -1102,6 +1104,7 @@ public void testValidateAdminAccessOnTenant() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testRetention() throws Exception { try { @@ -1192,6 +1195,7 @@ public void testPersistenceUnauthorized() throws Exception { assertEquals(errorCaptor.getValue().getResponse().getStatus(), Response.Status.UNAUTHORIZED.getStatusCode()); } + @SuppressWarnings("deprecation") @Test public void testValidateTopicOwnership() throws Exception { URL localWebServiceUrl = new URL(pulsar.getSafeWebServiceAddress()); 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 1f80d9a1925fc..c8b5f55843c4f 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 @@ -644,6 +644,7 @@ public void testCreateNonPartitionedTopicWithInvalidName() { Response.Status.PRECONDITION_FAILED.getStatusCode()); } + @SuppressWarnings("deprecation") @Test public void testCreatePartitionedTopicHavingNonPartitionTopicWithPartitionSuffix() throws KeeperException, InterruptedException { @@ -1400,6 +1401,7 @@ public void testSetReplicatedSubscriptionStatus() { Assert.assertEquals(responseCaptor.getValue().getStatus(), Response.Status.NO_CONTENT.getStatusCode()); } + @SuppressWarnings("deprecation") @Test public void testGetMessageById() throws Exception { TenantInfoImpl tenantInfo = new TenantInfoImpl(Set.of("role1", "role2"), Set.of("test")); @@ -1438,6 +1440,7 @@ public void testGetMessageById() throws Exception { }); } + @SuppressWarnings("deprecation") @Test public void testGetMessageById4SpecialPropsInMsg() throws Exception { TenantInfoImpl tenantInfo = new TenantInfoImpl(Set.of("role1", "role2"), Set.of("test")); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java index 8ecd37a931d0f..5ac0e327f71d5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java @@ -68,6 +68,7 @@ public void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") @Test public void testSetThenRemoveMessageTTL() throws Exception { admin.topics().setMessageTTL(testTopic, 100); @@ -85,6 +86,7 @@ public void testSetThenRemoveMessageTTL() throws Exception { Assert.assertNull(messageTTL); } + @SuppressWarnings("deprecation") @Test public void testSetInvalidMessageTTL() throws Exception { try { @@ -102,6 +104,7 @@ public void testSetInvalidMessageTTL() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testGetMessageTTL() throws Exception { // Check default topic level message TTL. @@ -117,6 +120,7 @@ public void testGetMessageTTL() throws Exception { log.info("Message TTL {} get on topic: {}", testTopic, messageTTL); Assert.assertEquals(messageTTL.intValue(), 200); } + @SuppressWarnings("deprecation") @Test public void testTopicPolicyDisabled() throws Exception { @@ -184,6 +188,7 @@ public void testNamespaceTTL() throws Exception { -> Assert.assertNull(admin.namespaces().getNamespaceMessageTTL(myNamespace))); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testDifferentLevelPolicyApplied() throws Exception { final String topicName = testTopic + UUID.randomUUID(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesDisableTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesDisableTest.java index 98465e233b853..93b610baf99c6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesDisableTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesDisableTest.java @@ -67,6 +67,7 @@ public void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") @Test public void testBacklogQuotaDisabled() { BacklogQuota backlogQuota = BacklogQuota.builder() @@ -97,6 +98,7 @@ public void testBacklogQuotaDisabled() { } } + @SuppressWarnings("deprecation") @Test public void testRetentionDisabled() { RetentionPolicies retention = new RetentionPolicies(); @@ -117,6 +119,7 @@ public void testRetentionDisabled() { } } + @SuppressWarnings("deprecation") @Test public void testPersistenceDisabled() { PersistencePolicies persistencePolicies = new PersistencePolicies(); @@ -137,6 +140,7 @@ public void testPersistenceDisabled() { } } + @SuppressWarnings("deprecation") @Test public void testDispatchRateDisabled() throws Exception { DispatchRate dispatchRate = DispatchRate.builder().build(); @@ -157,6 +161,7 @@ public void testDispatchRateDisabled() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testSubscriptionDispatchRateDisabled() throws Exception { DispatchRate dispatchRate = DispatchRate.builder() @@ -181,6 +186,7 @@ public void testSubscriptionDispatchRateDisabled() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testCompactionThresholdDisabled() { Long compactionThreshold = 10000L; @@ -201,6 +207,7 @@ public void testCompactionThresholdDisabled() { } } + @SuppressWarnings("deprecation") @Test public void testMaxConsumersPerSubscription() throws Exception { int maxConsumersPerSubscription = 10; @@ -228,6 +235,7 @@ public void testMaxConsumersPerSubscription() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testSubscriptionExpirationTimeDisabled() throws Exception { int subscriptionExpirationTime = 10; @@ -255,6 +263,7 @@ public void testSubscriptionExpirationTimeDisabled() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testPublishRateDisabled() throws Exception { PublishRate publishRate = new PublishRate(10000, 1024 * 1024 * 5); @@ -275,6 +284,7 @@ public void testPublishRateDisabled() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testMaxProducersDisabled() { log.info("MaxProducers will set to the topic: {}", testTopic); @@ -293,6 +303,7 @@ public void testMaxProducersDisabled() { } } + @SuppressWarnings("deprecation") @Test public void testMaxConsumersDisabled() { log.info("MaxConsumers will set to the topic: {}", testTopic); @@ -311,6 +322,7 @@ public void testMaxConsumersDisabled() { } } + @SuppressWarnings("deprecation") @Test public void testSubscribeRateDisabled() throws Exception { SubscribeRate subscribeRate = new SubscribeRate(10, 30); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java index 47b0d63aba635..df8e93f59f03b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java @@ -3149,6 +3149,7 @@ public void testAutoCreationDisabled() throws Exception { assertNull(admin.topicPolicies().getMessageTTL(topic)); } + @SuppressWarnings("deprecation") @Test public void testSubscriptionTypesWithPartitionedTopic() throws Exception { final String topic = "persistent://" + myNamespace + "/test-" + UUID.randomUUID(); @@ -4074,6 +4075,7 @@ public void testDelayedDeliveryPolicy() throws Exception { admin.topics().delete(topic, true); } + @SuppressWarnings("deprecation") @Test public void testUpdateRetentionWithPartialFailure() throws Exception { String tpName = BrokerTestUtil.newUniqueName("persistent://" + myNamespace + "/tp"); @@ -4460,6 +4462,7 @@ public void testTopicPersistencePoliciesWithManagedLedgerMaxMarkDeleteRate() thr }); } + @SuppressWarnings("deprecation") @Test public void testGetAppliedOffloadPoliciesWithLegacyNamespacePolicies() throws Exception { String topicName = testTopic + UUID.randomUUID().toString(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsAuthTest.java index 35f1740893a66..cb2629d0684a8 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsAuthTest.java @@ -64,10 +64,14 @@ public class TopicsAuthTest extends MockedPulsarServiceBaseTest { private final String testTenant = "my-tenant"; private final String testNamespace = "my-namespace"; private final String testTopicName = "my-topic"; +@SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); + @SuppressWarnings("deprecation") private static final String ADMIN_TOKEN = Jwts.builder().setSubject("admin").signWith(SECRET_KEY).compact(); + @SuppressWarnings("deprecation") private static final String PRODUCE_TOKEN = Jwts.builder().setSubject("producer").signWith(SECRET_KEY).compact(); + @SuppressWarnings("deprecation") private static final String CONSUME_TOKEN = Jwts.builder().setSubject("consumer").signWith(SECRET_KEY).compact(); @Override diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionMultiBrokerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionMultiBrokerTest.java index a7c8598438eac..46b9fbd56f05b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionMultiBrokerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionMultiBrokerTest.java @@ -66,6 +66,7 @@ protected void cleanup() throws Exception { * 4. Create a admin connected to broker x, and use the admin to call ` getCoordinatorInternalStats`. *

*/ + @SuppressWarnings("deprecation") @Test public void testRedirectOfGetCoordinatorInternalStats() throws Exception { PulsarAdmin localAdmin = this.admin; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthenticationServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthenticationServiceTest.java index 3c90d573919ca..916ab11128e03 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthenticationServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthenticationServiceTest.java @@ -54,6 +54,7 @@ public class AuthenticationServiceTest { private static final String s_authentication_success = "authenticated"; + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testAuthenticationHttp() throws Exception { ServiceConfiguration config = new ServiceConfiguration(); @@ -70,6 +71,7 @@ public void testAuthenticationHttp() throws Exception { service.close(); } + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testAuthenticationHttpWithMultipleProviders() throws Exception { ServiceConfiguration config = new ServiceConfiguration(); @@ -178,6 +180,7 @@ public void testAuthenticationHttpRequestResponseWithAnonymousRole() throws Exce service.close(); } + @SuppressWarnings("deprecation") @Test public void testHttpRequestWithMultipleProviders() throws Exception { ServiceConfiguration config = new ServiceConfiguration(); @@ -256,6 +259,7 @@ public static class MockHttpAuthenticationProvider implements AuthenticationProv public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } @@ -276,6 +280,7 @@ private String getRole(HttpServletRequest request) { return null; } + @SuppressWarnings("deprecation") @Override public boolean authenticateHttpRequest(HttpServletRequest request, HttpServletResponse response) { String role = getRole(request); @@ -285,11 +290,13 @@ public boolean authenticateHttpRequest(HttpServletRequest request, HttpServletRe throw new RuntimeException("test authentication failed"); } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { return authData.getCommandData(); } + @SuppressWarnings("deprecation") @Override public AuthenticationState newHttpAuthState(HttpServletRequest request) throws AuthenticationException { String role = getRole(request); @@ -300,6 +307,7 @@ public String getAuthRole() throws AuthenticationException { return role; } + @SuppressWarnings("deprecation") @Override public AuthData authenticate(AuthData authData) throws AuthenticationException { return null; @@ -310,6 +318,7 @@ public AuthenticationDataSource getAuthDataSource() { return new AuthenticationDataCommand(role); } + @SuppressWarnings("deprecation") @Override public boolean isComplete() { return true; @@ -331,6 +340,7 @@ public static class MockAuthenticationProvider implements AuthenticationProvider public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } @@ -340,6 +350,7 @@ public String getAuthMethodName() { return "auth"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { return s_authentication_success; @@ -352,6 +363,7 @@ public static class MockAuthenticationProviderWithDifferentName implements Authe public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } @@ -361,6 +373,7 @@ public String getAuthMethodName() { return "customAuthProvider"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { return s_authentication_success; @@ -373,6 +386,7 @@ public static class MockAuthenticationProviderAlwaysFail implements Authenticati public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } @@ -382,6 +396,7 @@ public String getAuthMethodName() { return "auth"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { throw new AuthenticationException("I failed"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthorizationWithAuthDataTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthorizationWithAuthDataTest.java index 66c033eb05f64..387a68aa6ce41 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthorizationWithAuthDataTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/AuthorizationWithAuthDataTest.java @@ -60,6 +60,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +@SuppressWarnings("deprecation") @Test(groups = "broker") public class AuthorizationWithAuthDataTest extends MockedPulsarServiceBaseTest { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthentication.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthentication.java index 72567f04a3a18..79dc517a0a8b4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthentication.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthentication.java @@ -46,6 +46,7 @@ public String getAuthMethodName() { return "mock"; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { return new AuthenticationDataProvider() { @@ -72,6 +73,7 @@ public String getCommandData() { }; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { this.user = authParams.get("user"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthenticationProvider.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthenticationProvider.java index f896ecefbc9c7..a1b274ed899e3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthenticationProvider.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockAuthenticationProvider.java @@ -32,6 +32,7 @@ public class MockAuthenticationProvider implements AuthenticationProvider { @Override public void close() throws IOException {} + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException {} @@ -41,6 +42,7 @@ public String getAuthMethodName() { return "mock"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { String principal = "unknown"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMultiStageAuthenticationState.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMultiStageAuthenticationState.java index abd786ea4b6fd..8ce5131959ac5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMultiStageAuthenticationState.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMultiStageAuthenticationState.java @@ -46,6 +46,7 @@ public String getAuthRole() throws AuthenticationException { return null; } + @SuppressWarnings("deprecation") @Override public AuthData authenticate(AuthData authData) throws AuthenticationException { String data = new String(authData.getBytes(), UTF_8); @@ -68,6 +69,7 @@ public AuthenticationDataSource getAuthDataSource() { return null; } + @SuppressWarnings("deprecation") @Override public boolean isComplete() { return authRole != null; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMutableAuthenticationState.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMutableAuthenticationState.java index b9fdc2c5bd7b5..01d4ff18448d8 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMutableAuthenticationState.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockMutableAuthenticationState.java @@ -45,6 +45,7 @@ public String getAuthRole() throws AuthenticationException { return authRole; } + @SuppressWarnings("deprecation") @Override public AuthData authenticate(AuthData authData) throws AuthenticationException { return null; @@ -69,6 +70,7 @@ public AuthenticationDataSource getAuthDataSource() { return authenticationDataSource; } + @SuppressWarnings("deprecation") @Override public boolean isComplete() { return true; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockOIDCIdentityProvider.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockOIDCIdentityProvider.java index 5d29c443d2bde..c03c475df601d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockOIDCIdentityProvider.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockOIDCIdentityProvider.java @@ -51,6 +51,7 @@ public class MockOIDCIdentityProvider { private final WireMockServer server; private final PublicKey publicKey; private final String audience; + @SuppressWarnings("deprecation") public MockOIDCIdentityProvider(String clientSecret, String audience, long tokenTTLMillis) { this.audience = audience; KeyPair keyPair = Keys.keyPairFor(SignatureAlgorithm.RS256); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java index 73bb407f52ad1..b7c0f8ddac816 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java @@ -204,6 +204,7 @@ protected final void internalSetup(ServiceConfiguration serviceConfiguration) th internalSetup(); } + @SuppressWarnings("deprecation") protected PulsarClient newPulsarClient(String url, int intervalInSecs) throws PulsarClientException { ClientBuilder clientBuilder = PulsarClient.builder() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/AbstractBrokerEntryCacheMultiBrokerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/AbstractBrokerEntryCacheMultiBrokerTest.java index b525440d16382..4507098cddb23 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/AbstractBrokerEntryCacheMultiBrokerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/AbstractBrokerEntryCacheMultiBrokerTest.java @@ -256,6 +256,7 @@ String serviceUrlForFixedPorts() { } + @SuppressWarnings("deprecation") protected PulsarClientImpl createPulsarClient(EventLoopGroup eventLoopGroup, LongSupplier connectionDelaySupplier) throws Exception { return InjectedClientCnxClientBuilder.builder() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java index f857c5c2ef658..124924748feb5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java @@ -300,6 +300,7 @@ public void testTailingReadsKeySharedSlowConsumer() throws Exception { } // change enabled to true to run the test + @SuppressWarnings("deprecation") @Test(enabled = false) public void testCatchUpReadsWithFailureProxyDisconnectingAllConnections() throws Exception { final String topicName = "persistent://my-property/my-ns/cache-catchup-test-topic"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java index 6ff98fa7f7004..dd5eb5ad64445 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java @@ -265,6 +265,7 @@ public void testRoaringBitmapSerialize() { assertNotSame(array, array2); } + @SuppressWarnings("deprecation") @Test(dataProvider = "delayedTracker") public void testMergeSnapshot(final BucketDelayedDeliveryTracker tracker) throws Exception { for (int i = 1; i <= 110; i++) { @@ -318,6 +319,7 @@ public void testMergeSnapshot(final BucketDelayedDeliveryTracker tracker) throws tracker2.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "delayedTracker") public void testWithBkException(final BucketDelayedDeliveryTracker tracker) throws Exception { MockBucketSnapshotStorage mockBucketSnapshotStorage = (MockBucketSnapshotStorage) bucketSnapshotStorage; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoaderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoaderTest.java index 2860df84dac3f..6686cceb50795 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoaderTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoaderTest.java @@ -64,6 +64,7 @@ public void testWrapper() throws Exception { @Test public void testClassLoaderSwitcher() throws Exception { NarClassLoader narLoader = mock(NarClassLoader.class); + @SuppressWarnings("deprecation") BrokerInterceptor interceptor = new BrokerInterceptor() { @Override public void beforeSendMessage(Subscription subscription, Entry entry, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/CounterBrokerInterceptor.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/CounterBrokerInterceptor.java index a13a3671b2d1d..51e5b637c77a6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/CounterBrokerInterceptor.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/CounterBrokerInterceptor.java @@ -175,11 +175,13 @@ public void messageDispatched(ServerCnx cnx, Consumer consumer, long ledgerId, messageDispatchCount.incrementAndGet(); } + @SuppressWarnings("deprecation") @Override public void messageAcked(ServerCnx cnx, Consumer consumer, CommandAck ack) { messageAckCount.incrementAndGet(); } + @SuppressWarnings("deprecation") @Override public void beforeSendMessage(Subscription subscription, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java index fae01b0adc0ff..cbfab56e99192 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java @@ -114,6 +114,7 @@ public void testLeastLongTermMessageRate() { } // Test that least resource usage with weight works correctly. + @SuppressWarnings("deprecation") public void testLeastResourceUsageWithWeight() { BundleData bundleData = new BundleData(); BrokerData brokerData1 = initBrokerData(10, 100); @@ -192,6 +193,7 @@ public void testLeastResourceUsageWithWeight() { assertEquals(strategy.selectBroker(candidates, bundleData, loadData, conf), Optional.of("3")); } + @SuppressWarnings("deprecation") public void testLeastResourceUsageWithWeightWithArithmeticException() throws NoSuchFieldException, IllegalAccessException { BundleData bundleData = new BundleData(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java index d5ae598e527b6..15e54e6bbb741 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java @@ -439,6 +439,7 @@ public void testDoLoadShedding() throws Exception { } // Test that bundles belonging to the same namespace are evenly distributed. + @SuppressWarnings("deprecation") @Test public void testEvenBundleDistribution() throws Exception { final NamespaceBundle[] bundles = LoadBalancerTestingUtils diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java index 4dedba4f995b8..71ebaf3944823 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java @@ -156,6 +156,7 @@ protected void setup() throws Exception { } } + @SuppressWarnings("deprecation") private static PulsarClient pulsarClient(String url, int intervalInMillis) throws PulsarClientException { return PulsarClient.builder() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java index 82fed30cb356e..9327c1b95e4a3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java @@ -692,6 +692,7 @@ public void testUnloadClientReconnectionWithLookup(TopicDomain topicDomain, admin, lookupUrl.toString(), pulsar1); } + @SuppressWarnings("deprecation") @Test(enabled = false) public static void testUnloadClientReconnectionWithLookup(List clients, TopicDomain topicDomain, @@ -786,6 +787,7 @@ public void testOptimizeUnloadDisable(TopicDomain topicDomain) throws Exception pulsar2); } + @SuppressWarnings("deprecation") @Test(enabled = false) public static void testOptimizeUnloadDisable(List clients, TopicDomain topicDomain, @@ -1823,6 +1825,7 @@ public void testRoleChange() throws Exception { .get(3, TimeUnit.SECONDS); } + @SuppressWarnings("deprecation") @Test(priority = Integer.MIN_VALUE) public void testGetMetrics() throws Exception { { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java index 108c4a3910659..ea9e36a65bfab 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java @@ -2101,6 +2101,7 @@ private static ConcurrentHashMap> getCleanupJobs } + @SuppressWarnings("deprecation") private static void waitUntilNewChannelOwner(ServiceUnitStateChannel channel, String oldOwner) { Awaitility.await() .pollInterval(200, TimeUnit.MILLISECONDS) @@ -2115,6 +2116,7 @@ private static void waitUntilNewChannelOwner(ServiceUnitStateChannel channel, St }); } + @SuppressWarnings("deprecation") private static void waitUntilOwnerChanges(ServiceUnitStateChannel channel, String serviceUnit, String oldOwner) { Awaitility.await() .pollInterval(200, TimeUnit.MILLISECONDS) @@ -2128,6 +2130,7 @@ private static void waitUntilOwnerChanges(ServiceUnitStateChannel channel, Strin }); } + @SuppressWarnings("deprecation") private static void waitUntilNewOwner(ServiceUnitStateChannel channel, String serviceUnit, String newOwner) { Awaitility.await() .pollInterval(200, TimeUnit.MILLISECONDS) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadDataTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadDataTest.java index 66f82050cc723..8a1e4a14effd8 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadDataTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadDataTest.java @@ -33,6 +33,7 @@ @Test(groups = "broker") public class BrokerLoadDataTest { + @SuppressWarnings("deprecation") @Test public void testUpdateBySystemResourceUsage() { @@ -118,6 +119,7 @@ public void testUpdateBySystemResourceUsage() { assertEquals(data, new BrokerLoadData()); } + @SuppressWarnings("deprecation") @Test public void testUpdateByBrokerLoadData() { ServiceConfiguration conf = new ServiceConfiguration(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/LeastResourceUsageWithWeightTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/LeastResourceUsageWithWeightTest.java index 9be991e34ad87..9bef3dc9d1fb1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/LeastResourceUsageWithWeightTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/LeastResourceUsageWithWeightTest.java @@ -190,6 +190,7 @@ private void updateLoad(LoadManagerContext ctx, String broker, double usage) { 1, 1, 1, 1, 1, 1, ctx.brokerConfiguration()); } + @SuppressWarnings("deprecation") public static LoadManagerContext getContext() { var ctx = mock(LoadManagerContext.class); var conf = new ServiceConfiguration(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java index a80bdbea51074..6dcb69dc831a5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java @@ -123,6 +123,7 @@ protected void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") @Test public void testSplitAndOwnBundles() throws Exception { @@ -194,6 +195,7 @@ public void testSplitAndOwnBundles() throws Exception { } + @SuppressWarnings("deprecation") @Test public void testSplitMapWithRefreshedStatMap() throws Exception { @@ -250,6 +252,7 @@ public void testSplitMapWithRefreshedStatMap() throws Exception { } + @SuppressWarnings("deprecation") @Test public void testIsServiceUnitDisabled() throws Exception { @@ -274,6 +277,7 @@ public void testIsServiceUnitDisabled() throws Exception { } + @SuppressWarnings("deprecation") @Test public void testRemoveOwnershipNamespaceBundle() throws Exception { @@ -428,6 +432,7 @@ public void testCreateLookupResult() throws Exception { System.out.println(withListener); } + @SuppressWarnings("deprecation") @Test public void testCreateNamespaceWithDefaultNumberOfBundles() throws Exception { OwnershipCache mockOwnershipCache = spy(pulsar.getNamespaceService().getOwnershipCache()); @@ -491,6 +496,7 @@ public void testCreateNamespaceWithDefaultNumberOfBundles() throws Exception { } + @SuppressWarnings("deprecation") @Test public void testRemoveOwnershipAndSplitBundle() throws Exception { OwnershipCache ownershipCache = spy(pulsar.getNamespaceService().getOwnershipCache()); @@ -538,6 +544,7 @@ public void testRemoveOwnershipAndSplitBundle() throws Exception { } + @SuppressWarnings("deprecation") @Test public void testSplitBundleAndRemoveOldBundleFromOwnerShipCache() throws Exception { OwnershipCache ownershipCache = spy(pulsar.getNamespaceService().getOwnershipCache()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnershipCacheTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnershipCacheTest.java index 4b64cf7d290e4..f6605a4ab3ce7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnershipCacheTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/OwnershipCacheTest.java @@ -125,6 +125,7 @@ public void testConstructor() { assertNotNull(cache.getOwnedBundles()); } + @SuppressWarnings("deprecation") @Test public void testDisableOwnership() throws Exception { OwnershipCache cache = new OwnershipCache(this.pulsar, nsService); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java index 5f1d3a8a6c50b..c4e580c076063 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java @@ -58,6 +58,7 @@ @Test(groups = "broker-replication") public class AbstractReplicatorTest { + @SuppressWarnings("deprecation") @Test public void testRetryStartProducerStoppedByTopicRemove() throws Exception { final String localCluster = "localCluster"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerConfigurationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerConfigurationTest.java index 2e68025066d18..7cab7c339026a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerConfigurationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerConfigurationTest.java @@ -40,6 +40,7 @@ public void setup() { pulsarService = getPulsarService(); } + @SuppressWarnings("deprecation") @Test public void testBacklogQuotaDefaultLimitGBConversion() { serviceConfiguration.setBacklogQuotaDefaultLimitGB(1.6); @@ -49,6 +50,7 @@ public void testBacklogQuotaDefaultLimitGBConversion() { assertEquals(backlogQuotaManager.getDefaultQuota().getLimitSize(), 1717986918); } + @SuppressWarnings("deprecation") @Test public void testBacklogQuotaDefaultLimitPrecedence() { serviceConfiguration.setBacklogQuotaDefaultLimitGB(1.6); @@ -59,6 +61,7 @@ public void testBacklogQuotaDefaultLimitPrecedence() { assertEquals(backlogQuotaManager.getDefaultQuota().getLimitSize(), 1717986918); } + @SuppressWarnings("deprecation") @Test public void testBacklogQuotaDefaultLimitBytes() { serviceConfiguration.setBacklogQuotaDefaultLimitGB(0); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java index 13562fafdf830..123aad3aee079 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java @@ -223,6 +223,7 @@ private void rolloverStats() { /** * Readers should not affect backlog quota. */ + @SuppressWarnings("deprecation") @Test public void testBacklogQuotaWithReader() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -310,6 +311,7 @@ private TopicStats getTopicStats(String topic1, boolean getPreciseBacklog) throw admin.topics().getStats(topic1, GetStatsOptions.builder().getPreciseBacklog(getPreciseBacklog).build()); return stats; } + @SuppressWarnings("deprecation") @Test public void testTriggerBacklogQuotaSizeWithReader() throws Exception { @@ -380,6 +382,7 @@ public void testTriggerBacklogQuotaSizeWithReader() throws Exception { reader.close(); } } + @SuppressWarnings("deprecation") @Test public void backlogsStatsPrecise() throws PulsarAdminException, PulsarClientException, InterruptedException { @@ -557,6 +560,7 @@ public void backlogsStatsPrecise() throws PulsarAdminException, PulsarClientExce assertNotNull(producer2); } } + @SuppressWarnings("deprecation") @Test public void backlogsStatsPreciseWithNoBacklog() throws PulsarAdminException, @@ -632,6 +636,7 @@ public void backlogsStatsPreciseWithNoBacklog() throws PulsarAdminException, config.setPreciseTimeBasedBacklogQuotaCheck(false); config.setExposePreciseBacklogInPrometheus(false); } + @SuppressWarnings("deprecation") @Test public void backlogsAgeMetricsPreciseWithoutBacklogQuota() throws Exception { @@ -695,6 +700,7 @@ public void backlogsAgeMetricsPreciseWithoutBacklogQuota() throws Exception { } config.setPreciseTimeBasedBacklogQuotaCheck(false); } + @SuppressWarnings("deprecation") @Test public void backlogsAgeMetricsNoPreciseWithoutBacklogQuota() throws Exception { @@ -777,6 +783,7 @@ private long getReadEntries(String topic1) { return ((PersistentTopic) pulsar.getBrokerService().getTopicReference(topic1).get()) .getManagedLedger().getStats().getEntriesReadTotalCount(); } + @SuppressWarnings("deprecation") @Test public void backlogsStatsNotPrecise() throws PulsarAdminException, PulsarClientException, InterruptedException { @@ -886,6 +893,7 @@ public void backlogsStatsNotPrecise() throws PulsarAdminException, PulsarClientE config.setManagedLedgerMaxEntriesPerLedger(MAX_ENTRIES_PER_LEDGER); } } + @SuppressWarnings("deprecation") @Test public void backlogsStatsNotPreciseWithNoBacklog() throws PulsarAdminException, @@ -1023,6 +1031,7 @@ private java.util.OptionalLong getQuotaCheckCount() { * and can't do message age check against the quota. * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testTriggerBacklogTimeQuotaWithReader() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1092,6 +1101,7 @@ public void testTriggerBacklogTimeQuotaWithReader() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testConsumerBacklogEvictionSizeQuota() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1145,6 +1155,7 @@ public void testConsumerBacklogEvictionSizeQuota() throws Exception { 1); } + @SuppressWarnings("deprecation") @Test public void testConsumerBacklogEvictionTimeQuotaPrecise() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1211,6 +1222,7 @@ private long evictionCountMetric(String quotaType) { } + @SuppressWarnings("deprecation") @Test(timeOut = 60000) public void testConsumerBacklogEvictionTimeQuota() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1280,6 +1292,7 @@ public void testConsumerBacklogEvictionTimeQuota() throws Exception { value -> assertThat(value).isGreaterThanOrEqualTo(delaySeconds)); } + @SuppressWarnings("deprecation") @Test(timeOut = 60000) public void testConsumerBacklogEvictionTimeQuotaWithPartEviction() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1334,6 +1347,7 @@ public void testConsumerBacklogEvictionTimeQuotaWithPartEviction() throws Except } + @SuppressWarnings("deprecation") @Test public void testConsumerBacklogEvictionTimeQuotaWithEmptyLedger() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1549,6 +1563,7 @@ public void testConsumerBacklogEvictionWithAckTimeQuota() throws Exception { }); } + @SuppressWarnings("deprecation") @Test public void testConcurrentAckAndEviction() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1620,6 +1635,7 @@ public void testConcurrentAckAndEviction() throws Exception { assertTrue(stats.getBacklogSize() <= 10 * 1024, "Storage size is [" + stats.getStorageSize() + "]"); } + @SuppressWarnings("deprecation") @Test public void testNoEviction() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1684,6 +1700,7 @@ public void testNoEviction() throws Exception { assertFalse(gotException.get()); } + @SuppressWarnings("deprecation") @Test public void testEvictionMulti() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/ns-quota"), @@ -1786,6 +1803,7 @@ public void testEvictionMulti() throws Exception { assertTrue(stats.getBacklogSize() <= 15 * 1024, "Storage size is [" + stats.getStorageSize() + "]"); } + @SuppressWarnings("deprecation") @Test public void testAheadProducerOnHold() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/quotahold"), @@ -1828,6 +1846,7 @@ public void testAheadProducerOnHold() throws Exception { "Number of producers on topic " + topic1 + " are [" + stats.getPublishers().size() + "]"); } + @SuppressWarnings("deprecation") @Test public void testAheadProducerOnHoldTimeout() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/quotahold"), @@ -1866,6 +1885,7 @@ public void testAheadProducerOnHoldTimeout() throws Exception { assertTrue(gotException, "timeout did not occur"); } + @SuppressWarnings("deprecation") @Test public void testProducerException() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/quotahold"), @@ -1911,6 +1931,7 @@ public static Object[][] dedupTestSet() { return new Object[][] { { Boolean.TRUE }, { Boolean.FALSE } }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "dedupTestSet") public void testProducerExceptionAndThenUnblockSizeQuota(boolean dedupTestSet) throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/quotahold"), @@ -1998,6 +2019,7 @@ public void testProducerExceptionAndThenUnblockSizeQuota(boolean dedupTestSet) t } + @SuppressWarnings("deprecation") @Test public void testProducerExceptionAndThenUnblockTimeQuotaPrecise() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/quotahold"), @@ -2064,6 +2086,7 @@ public void testProducerExceptionAndThenUnblockTimeQuotaPrecise() throws Excepti assertFalse(gotException, "unable to publish due to " + sendException); } + @SuppressWarnings("deprecation") @Test public void testProducerExceptionAndThenUnblockTimeQuota() throws Exception { assertEquals(admin.namespaces().getBacklogQuotaMap("prop/quotahold"), @@ -2129,6 +2152,7 @@ public void testProducerExceptionAndThenUnblockTimeQuota() throws Exception { assertFalse(gotException, "unable to publish due to " + sendException); } + @SuppressWarnings("deprecation") @Test(dataProvider = "backlogQuotaSizeGB", priority = 1) public void testBacklogQuotaInGB(boolean backlogQuotaSizeGB) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBkEnsemblesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBkEnsemblesTest.java index 646da7d1fb438..3c1ec73bf91dd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBkEnsemblesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBkEnsemblesTest.java @@ -96,6 +96,7 @@ public BrokerBkEnsemblesTest(int numberOfBookies) { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testCrashBrokerWithoutCursorLedgerLeak() throws Exception { @@ -193,6 +194,7 @@ public void testCrashBrokerWithoutCursorLedgerLeak() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testSkipCorruptDataLedger() throws Exception { // Ensure intended state for autoSkipNonRecoverableData @@ -298,6 +300,7 @@ public void testSkipCorruptDataLedger() throws Exception { consumer.close(); } + @SuppressWarnings("deprecation") @Test public void testTruncateCorruptDataLedger() throws Exception { // Ensure intended state for autoSkipNonRecoverableData @@ -435,6 +438,7 @@ public void testDeleteLedgerFactoryCorruptLedger() throws Exception { factory.delete("test"); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testTopicWithWildCardChar() throws Exception { @Cleanup @@ -465,6 +469,7 @@ public void testTopicWithWildCardChar() throws Exception { } + @SuppressWarnings("deprecation") @Test public void testDeleteTopicWithMissingData() throws Exception { String namespace = BrokerTestUtil.newUniqueName("prop/ns"); @@ -510,6 +515,7 @@ public void testDeleteTopicWithMissingData() throws Exception { assertThrows(PulsarAdminException.ServerSideErrorException.class, () -> admin.topics().delete(topic)); } + @SuppressWarnings("deprecation") @Test public void testDeleteTopicWithoutTopicLoaded() throws Exception { String namespace = BrokerTestUtil.newUniqueName("prop/ns"); @@ -543,6 +549,7 @@ public Object[][] doReloadTopicAfterLedgerFenced() { }; } + @SuppressWarnings("deprecation") @Test(timeOut = 60_000, dataProvider = "doReloadTopicAfterLedgerFenced") public void testConcurrentlyModifyCurrentLedger(boolean doReloadTopicAfterLedgerFenced) throws Exception { EventLoopGroup eventLoopGroup = EventLoopUtil.newEventLoopGroup(config.getNumIOThreads(), diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java index f374ab5dec7e1..b9905deb9a66e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java @@ -126,6 +126,7 @@ protected void cleanup() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testBookieIsolation() throws Exception { final String tenant1 = "tenant1"; @@ -306,6 +307,7 @@ private LedgerManager getLedgerManager(BookieImpl bookie1) throws IllegalAccessE return ledgerManager; } + @SuppressWarnings("deprecation") @Test public void testSetRackInfoAndAffinityGroupDuringProduce() throws Exception { final String tenant1 = "tenant1"; @@ -446,6 +448,7 @@ public void testSetRackInfoAndAffinityGroupDuringProduce() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testStrictBookieIsolation() throws Exception { final String tenant1 = "tenant1"; @@ -612,6 +615,7 @@ public void testStrictBookieIsolation() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testBookieIsolationWithSecondaryGroup() throws Exception { final String tenant1 = "tenant1"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerEntryMetadataE2ETest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerEntryMetadataE2ETest.java index 9a09a3267f2b1..5c4c6cc5b061f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerEntryMetadataE2ETest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerEntryMetadataE2ETest.java @@ -149,6 +149,7 @@ public void testPeekMessage() throws Exception { Assert.assertTrue(entryMetadata.getBrokerTimestamp() >= sendTime); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testGetMessageById() throws Exception { final String topic = newTopicName(); @@ -214,6 +215,7 @@ public void testExamineMessage() throws Exception { Assert.assertTrue(entryMetadata.getBrokerTimestamp() >= sendTime); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testBatchMessage() throws Exception { final String topic = newTopicName(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java index 7e328dcf0d99c..1befb310d3899 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java @@ -662,6 +662,7 @@ public void testBrokerServiceNamespaceStats() throws Exception { admin.namespaces().deleteNamespace(ns); } } + @SuppressWarnings("deprecation") @Test public void testTlsDisabled() throws Exception { @@ -702,6 +703,7 @@ public void testTlsDisabled() throws Exception { pulsarClient.close(); } } + @SuppressWarnings("deprecation") @Test public void testTlsEnabled() throws Exception { @@ -779,6 +781,7 @@ public void testTlsEnabled() throws Exception { pulsarClient.close(); } } + @SuppressWarnings("deprecation") @Test public void testTlsEnabledWithoutNonTlsServicePorts() throws Exception { @@ -1006,6 +1009,7 @@ public void testTlsAuthUseTrustCert() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testLookupThrottlingForClientByClient() throws Exception { final String topicName = "persistent://prop/ns-abc/newTopic"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceThrottlingTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceThrottlingTest.java index 0906df6e2e00f..b0e19145843e4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceThrottlingTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceThrottlingTest.java @@ -117,6 +117,7 @@ public void testThrottlingTopicLoadRequestSemaphore() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testLookupThrottlingForClientByBroker0Permit() throws Exception { @@ -161,6 +162,7 @@ public void testLookupThrottlingForClientByBroker0Permit() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testLookupThrottlingForClientByBroker() throws Exception { final String topicName = "persistent://prop/ns-abc/newTopic"; @@ -278,6 +280,7 @@ public void testLookupThrottlingForClientByBroker() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testLookupThrottlingForClientByBrokerInternalRetry() throws Exception { final String topicName = "persistent://prop/ns-abc/newTopic-" + UUID.randomUUID().toString(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BusyWaitServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BusyWaitServiceTest.java index 42a838129ae78..58b9d1b279d9b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BusyWaitServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BusyWaitServiceTest.java @@ -44,6 +44,7 @@ protected void configurePulsar(ServiceConfiguration config) { config.setManagedLedgerDefaultAckQuorum(1); } + @SuppressWarnings("deprecation") @Test public void testPublishWithBusyWait() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ClusterMigrationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ClusterMigrationTest.java index 6a9a6a8420931..e70284707d112 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ClusterMigrationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ClusterMigrationTest.java @@ -262,6 +262,7 @@ public void beforeMethod(Method m) throws Exception { * (11) Restart Broker-1 and connect producer/consumer on cluster-1 * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testClusterMigration() throws Exception { log.info("--- Starting ReplicatorTest::testClusterMigration ---"); @@ -430,6 +431,7 @@ public void testClusterMigration() throws Exception { log.info("Successfully consumed messages by migrated consumers"); } + @SuppressWarnings("deprecation") @Test public void testClusterMigrationWithReplicationBacklog() throws Exception { log.info("--- Starting ReplicatorTest::testClusterMigrationWithReplicationBacklog ---"); @@ -541,6 +543,7 @@ public void testClusterMigrationWithReplicationBacklog() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testClusterMigrationWithResourceCreated() throws Exception { log.info("--- Starting testClusterMigrationWithResourceCreated ---"); @@ -650,6 +653,7 @@ public void testClusterMigrationWithResourceCreated() throws Exception { client1.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "NamespaceMigrationTopicSubscriptionTypes") public void testNamespaceMigration(SubscriptionType subType, boolean isClusterMigrate, boolean isNamespaceMigrate) throws Exception { @@ -921,6 +925,7 @@ public void testNamespaceMigration(SubscriptionType subType, boolean isClusterMi client2.close(); } + @SuppressWarnings("deprecation") public void testMigrationWithReader() throws Exception { final String topicName = BrokerTestUtil .newUniqueName("persistent://" + namespace + "/migrationTopic"); @@ -1031,6 +1036,7 @@ public void testMigrationWithReader() throws Exception { } + @SuppressWarnings("deprecation") @Test(dataProvider = "NamespaceMigrationTopicSubscriptionTypes") public void testNamespaceMigrationWithReplicationBacklog(SubscriptionType subType, boolean isClusterMigrate, boolean isNamespaceMigrate) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/InactiveTopicDeleteTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/InactiveTopicDeleteTest.java index bd53f772c2001..c38d48110b5c2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/InactiveTopicDeleteTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/InactiveTopicDeleteTest.java @@ -393,6 +393,7 @@ public void testMaxInactiveDuration() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testTopicLevelInActiveTopicApi() throws Exception { super.baseSetup(); @@ -419,6 +420,7 @@ public void testTopicLevelInActiveTopicApi() throws Exception { -> assertNull(admin.topics().getInactiveTopicPolicies(topicName))); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testTopicLevelInactivePolicyUpdateAndClean() throws Exception { conf.setBrokerDeleteInactiveTopicsEnabled(true); @@ -497,6 +499,7 @@ public void testTopicLevelInactivePolicyUpdateAndClean() throws Exception { } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testDeleteWhenNoSubscriptionsWithTopicLevelPolicies() throws Exception { final String namespace = "prop/ns-abc"; @@ -551,6 +554,7 @@ public void testDeleteWhenNoSubscriptionsWithTopicLevelPolicies() throws Excepti Assert.assertFalse(admin.topics().getList(namespace).contains(topic)); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testInactiveTopicApplied() throws Exception { super.baseSetup(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OpportunisticStripingTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OpportunisticStripingTest.java index 1c76f84cb3ee0..40a9032569ab9 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OpportunisticStripingTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OpportunisticStripingTest.java @@ -54,6 +54,7 @@ protected void configurePulsar(ServiceConfiguration config) { config.getProperties().setProperty("bookkeeper_opportunisticStriping", "true"); } + @SuppressWarnings("deprecation") @Test public void testOpportunisticStriping() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PeerReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PeerReplicatorTest.java index 2fd6e09529de2..3a7a9a23f5a6d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PeerReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PeerReplicatorTest.java @@ -81,6 +81,7 @@ public Object[][] codecProvider() { * @param protocol * @throws Exception */ + @SuppressWarnings("deprecation") @Test(dataProvider = "lookupType", timeOut = 10000) public void testPeerClusterTopicLookup(String protocol) throws Exception { @@ -187,6 +188,7 @@ public void testGetPeerClusters() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testPeerClusterInReplicationClusterListChange() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java index 8f1b23e26d9f7..8255b000b042f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java @@ -464,6 +464,7 @@ private CommandActiveConsumerChange waitActiveChangeEvent(int consumerId) return res.get(); } + @SuppressWarnings("deprecation") @Test public void testAddRemoveConsumerNonPartitionedTopic() throws Exception { log.info("--- Starting PersistentDispatcherFailoverConsumerTest::testAddRemoveConsumerNonPartitionedTopic ---"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java index 264a27e7cf6cf..4ed5b4d0e09e0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java @@ -1001,6 +1001,7 @@ public void testMessageExpiry() throws Exception { deleteNamespaceWithRetry(namespaceName, false); } + @SuppressWarnings("deprecation") @Test public void testMessageExpiryWithTopicMessageTTL() throws Exception { int namespaceMessageTTLSecs = 10; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java index 5d7f88fb3bd5e..418a5f264d2bb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java @@ -247,6 +247,7 @@ public void setup() throws Exception { setupMLAsyncCallbackMocks(); } + @SuppressWarnings("deprecation") @AfterMethod(alwaysRun = true) public void teardown() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PublishRateLimiterOverconsumingTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PublishRateLimiterOverconsumingTest.java index 866df645d3f86..5cdeb8427bb35 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PublishRateLimiterOverconsumingTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PublishRateLimiterOverconsumingTest.java @@ -168,6 +168,7 @@ public void received(Consumer consumer, Message msg) { }; // create independent clients for producers so that they don't get blocked by throttling + @SuppressWarnings("deprecation") List producerClients = IntStream.range(0, numberOfProducersWithIndependentClients) .mapToObj(i -> { try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java index 83b49d5c5a384..51e4f77f950f2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java @@ -65,6 +65,7 @@ public RackAwareTest() { public Object[][] forceMinRackNumProvider() { return new Object[][] { { Boolean.TRUE }, { Boolean.FALSE } }; } + @SuppressWarnings("deprecation") @Override protected void configurePulsar(ServiceConfiguration config) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java index 98ef5ba3c0e06..836436f6006a0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java @@ -103,6 +103,7 @@ public void cleanup() throws Exception { /** * Tests replicated subscriptions across two regions. */ + @SuppressWarnings("deprecation") @Test public void testReplicatedSubscriptionAcrossTwoRegions() throws Exception { String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -204,6 +205,7 @@ private void printStats(String topicName) throws PulsarAdminException { /** * Tests replicated subscriptions across two regions and can read successful. */ + @SuppressWarnings("deprecation") @Test public void testReplicatedSubscriptionAcrossTwoRegionsGetLastMessage() throws Exception { String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscriptionlastmessage"); @@ -367,6 +369,7 @@ public void testReplicatedSubscribeAndSwitchToStandbyCluster() throws Exception /** * If there's no traffic, the snapshot creation should stop and then resume when traffic comes back. */ + @SuppressWarnings("deprecation") @Test public void testReplicationSnapshotStopWhenNoTraffic() throws Exception { String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -454,6 +457,7 @@ public void testReplicationSnapshotStopWhenNoTraffic() throws Exception { assertNotEquals(rsc2.getLastCompletedSnapshotId().get(), snapshot2); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testReplicatedSubscriptionRestApi1() throws Exception { final String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -565,6 +569,7 @@ public void testReplicatedSubscriptionRestApi1() throws Exception { String.format("numReceivedMessages2 (%d) should be less than %d", numReceivedMessages2, numMessages)); } + @SuppressWarnings("deprecation") @Test public void testGetReplicatedSubscriptionStatus() throws Exception { final String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -626,6 +631,7 @@ public void testGetReplicatedSubscriptionStatus() throws Exception { }); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testReplicatedSubscriptionRestApi2() throws Exception { final String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -740,6 +746,7 @@ public void testReplicatedSubscriptionRestApi2() throws Exception { String.format("numReceivedMessages2 (%d) should be less than %d", numReceivedMessages2, numMessages)); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testReplicatedSubscriptionRestApi3() throws Exception { final String namespace = BrokerTestUtil.newUniqueName("geo/replicatedsubscription"); @@ -780,6 +787,7 @@ private void waitTBRecoverComplete(PulsarService pulsarService, String topicName /** * Tests replicated subscriptions when replicator producer is closed. */ + @SuppressWarnings("deprecation") @Test public void testReplicatedSubscriptionWhenReplicatorProducerIsClosed() throws Exception { String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -892,6 +900,7 @@ private Object[][] isTopicPolicyEnabled() { *

*/ // TODO: this test causes OOME in the CI, need to investigate + @SuppressWarnings("deprecation") @Test(dataProvider = "isTopicPolicyEnabled", enabled = false) public void testWriteMarkerTaskOfReplicateSubscriptions(boolean isTopicPolicyEnabled) throws Exception { // 1. Prepare resource and use proper configuration. @@ -959,6 +968,7 @@ public void testWriteMarkerTaskOfReplicateSubscriptions(boolean isTopicPolicyEna pulsar1.getConfiguration().setForceDeleteNamespaceAllowed(false); } + @SuppressWarnings("deprecation") @Test public void testReplicatedSubscriptionWithCompaction() throws Exception { final String namespace = BrokerTestUtil.newUniqueName("pulsar/replicatedsubscription"); @@ -1023,6 +1033,7 @@ public void testReplicatedSubscriptionWithCompaction() throws Exception { Assert.assertEquals(result, List.of("V2")); } + @SuppressWarnings("deprecation") @Test public void testReplicatedSubscriptionOneWay() throws Exception { final String namespace = BrokerTestUtil.newUniqueName("pulsar-r4/replicatedsubscription"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorGlobalNSTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorGlobalNSTest.java index 16d34d9b86923..09008be606269 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorGlobalNSTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorGlobalNSTest.java @@ -90,6 +90,7 @@ public void cleanup() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test(priority = Integer.MAX_VALUE) public void testRemoveLocalClusterOnGlobalNamespace() throws Exception { log.info("--- Starting ReplicatorTest::testRemoveLocalClusterOnGlobalNamespace ---"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRateLimiterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRateLimiterTest.java index 1384658982c62..c18b0ab86f8f3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRateLimiterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRateLimiterTest.java @@ -80,6 +80,7 @@ public Object[][] dispatchRateProvider() { return new Object[][] { { DispatchRateType.messageRate }, { DispatchRateType.byteRate } }; } + @SuppressWarnings("deprecation") @Test public void testReplicatorRateLimiterWithOnlyTopicLevel() throws Exception { cleanup(); @@ -128,6 +129,7 @@ public void testReplicatorRateLimiterWithOnlyTopicLevel() throws Exception { }); } + @SuppressWarnings("deprecation") @Test public void testReplicatorRateLimiterWithOnlyNamespaceLevel() throws Exception { cleanup(); @@ -175,6 +177,7 @@ public void testReplicatorRateLimiterWithOnlyNamespaceLevel() throws Exception { }); } + @SuppressWarnings("deprecation") @Test public void testReplicatorRateLimiterWithOnlyBrokerLevel() throws Exception { cleanup(); @@ -217,6 +220,7 @@ public void testReplicatorRateLimiterWithOnlyBrokerLevel() throws Exception { }); } + @SuppressWarnings("deprecation") @Test public void testReplicatorRatePriority() throws Exception { cleanup(); @@ -314,6 +318,7 @@ public void testReplicatorRatePriority() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testReplicatorRateLimiterDynamicallyChange() throws Exception { log.info("--- Starting ReplicatorTest::{} --- ", methodName); @@ -378,6 +383,7 @@ public void testReplicatorRateLimiterDynamicallyChange() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test(dataProvider = "dispatchRateType") public void testReplicatorRateLimiterMessageNotReceivedAllMessages(DispatchRateType dispatchRateType) throws Exception { @@ -466,6 +472,7 @@ public void testReplicatorRateLimiterMessageNotReceivedAllMessages(DispatchRateT * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testReplicatorRateLimiterMessageReceivedAllMessages() throws Exception { log.info("--- Starting ReplicatorTest::{} --- ", methodName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRemoveClusterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRemoveClusterTest.java index 34e99fd20b3be..7b684184be99c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRemoveClusterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorRemoveClusterTest.java @@ -69,6 +69,7 @@ public Object[][] partitionedTopicProvider() { } + @SuppressWarnings("deprecation") @Test public void testRemoveClusterFromNamespace() throws Exception { admin1.tenants().createTenant("pulsar1", diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java index 605e1cd7ae39f..4105dad8b86b2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java @@ -173,6 +173,7 @@ public void activeBrokerParse() throws Exception { pulsar1.getConfiguration().setAuthorizationEnabled(false); } + @SuppressWarnings("deprecation") @Test public void testForcefullyTopicDeletion() throws Exception { log.info("--- Starting ReplicatorTest::testForcefullyTopicDeletion ---"); @@ -199,7 +200,7 @@ public void testForcefullyTopicDeletion() throws Exception { Assert.assertFalse(pulsar1.getBrokerService().getTopics().containsKey(topicName)); } - @SuppressWarnings("unchecked") + @SuppressWarnings({"deprecation", "unchecked"}) @Test(timeOut = 30000) public void testConcurrentReplicator() throws Exception { @@ -1246,6 +1247,7 @@ public void testReplicatorOnPartitionedTopic(boolean isPartitionedTopic) throws } + @SuppressWarnings("deprecation") @Test public void testReplicatedCluster() throws Exception { @@ -1297,6 +1299,7 @@ public void testReplicatedCluster() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testUpdateGlobalTopicPartition() throws Exception { log.info("--- Starting ReplicatorTest::testUpdateGlobalTopicPartition ---"); @@ -1343,6 +1346,7 @@ public void testUpdateGlobalTopicPartition() throws Exception { consumer2.close(); } + @SuppressWarnings("deprecation") @Test public void testIncrementPartitionsOfTopicWithReplicatedSubscription() throws Exception { final String cluster1 = pulsar1.getConfig().getClusterName(); @@ -1382,6 +1386,7 @@ public static Object[][] topicPrefix() { return new Object[][] { { "persistent://", "/persistent" }, { "non-persistent://", "/non-persistent" } }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "topicPrefix") public void testTopicReplicatedAndProducerCreate(String topicPrefix, String topicName) throws Exception { log.info("--- Starting ReplicatorTest::testTopicReplicatedAndProducerCreate ---"); @@ -1425,6 +1430,7 @@ public void testTopicReplicatedAndProducerCreate(String topicPrefix, String topi nonPersistentProducer2.close(); } + @SuppressWarnings("deprecation") @Test public void testCleanupTopic() throws Exception { @@ -1614,6 +1620,7 @@ private void initTransaction(int coordinatorSize, PulsarAdmin admin, String serv pulsarService.getTransactionMetadataStoreService().getStores().size() == coordinatorSize); } + @SuppressWarnings("deprecation") @Test public void testLookupAnotherCluster() throws Exception { log.info("--- Starting ReplicatorTest::testLookupAnotherCluster ---"); @@ -1785,6 +1792,7 @@ public void testReplicatorProducerNotExceed() throws Exception { Assert.assertThrows(PulsarClientException.ProducerBusyException.class, () -> new MessageProducer(url2, dest2)); } + @SuppressWarnings("deprecation") @Test public void testReplicatorWithTTL() throws Exception { log.info("--- Starting ReplicatorTest::testReplicatorWithTTL ---"); @@ -1929,6 +1937,7 @@ public void testReplicationMetrics() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testEnableReplicationWithNamespaceAllowedClustersPolices() throws Exception { log.info("--- testEnableReplicationWithNamespaceAllowedClustersPolices ---"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTestBase.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTestBase.java index a7250928bd11b..deabcaf66e5de 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTestBase.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTestBase.java @@ -334,6 +334,7 @@ private PulsarService buildPulsarService(ServiceConfiguration config, InMemoryMe BrokerOpenTelemetryTestUtil.getOpenTelemetrySdkBuilderConsumer(metricReader)); } + @SuppressWarnings("deprecation") public void setConfig3DefaultValue() { setConfigDefaults(config3, cluster3, bkEnsemble3); config3.setTlsEnabled(true); @@ -491,6 +492,7 @@ protected void cleanup() throws Exception { resetConfig3(); resetConfig4(); } + @SuppressWarnings("deprecation") protected void updateTenantInfo(String tenant, TenantInfoImpl tenantInfo) throws Exception { if (!admin1.tenants().getTenants().contains(tenant)) { @@ -507,6 +509,7 @@ static class MessageProducer implements AutoCloseable { PulsarClient client; Producer producer; + @SuppressWarnings("deprecation") MessageProducer(URL url, final TopicName dest) throws Exception { this.url = url; this.namespace = dest.getNamespace(); @@ -524,6 +527,7 @@ static class MessageProducer implements AutoCloseable { } } + @SuppressWarnings("deprecation") MessageProducer(URL url, final TopicName dest, boolean batch) throws Exception { this.url = url; this.namespace = dest.getNamespace(); @@ -596,6 +600,7 @@ static class MessageConsumer implements AutoCloseable { this(url, dest, "sub-id"); } + @SuppressWarnings("deprecation") MessageConsumer(URL url, final TopicName dest, String subId) throws Exception { this.url = url; this.namespace = dest.getNamespace(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ServerCnxTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ServerCnxTest.java index 2151eacd5d63d..123b4825ab3d6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ServerCnxTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ServerCnxTest.java @@ -1077,6 +1077,7 @@ public void testProducerChangeSocket() throws Exception { channel.finish(); channel2.close(); } + @SuppressWarnings("deprecation") @Test public void testHandleConsumerAfterClientChannelInactive() throws Exception { @@ -1118,6 +1119,7 @@ public void testHandleConsumerAfterClientChannelInactive() throws Exception { channel.finish(); channel2.close(); } + @SuppressWarnings("deprecation") @Test public void test2ndSubFailedIfDisabledConCheck() @@ -2639,6 +2641,7 @@ public void testFlowCommand() throws Exception { assertNull(channel.outboundMessages().peek()); channel.finish(); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testProducerSuccessOnEncryptionRequiredTopic() throws Exception { @@ -2677,6 +2680,7 @@ public void testProducerSuccessOnEncryptionRequiredTopic() throws Exception { channel.finish(); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testProducerFailureOnEncryptionRequiredTopic() throws Exception { @@ -2717,6 +2721,7 @@ public void testProducerFailureOnEncryptionRequiredTopic() throws Exception { channel.finish(); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testProducerFailureOnEncryptionRequiredOnBroker() throws Exception { @@ -2759,6 +2764,7 @@ public void testProducerFailureOnEncryptionRequiredOnBroker() throws Exception { channel.finish(); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testSendSuccessOnEncryptionRequiredTopic() throws Exception { @@ -2805,6 +2811,7 @@ public void testSendSuccessOnEncryptionRequiredTopic() throws Exception { assertTrue(getResponse() instanceof CommandSendReceipt); channel.finish(); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testSendFailureOnEncryptionRequiredTopic() throws Exception { @@ -3415,6 +3422,7 @@ public boolean isCompletedExceptionally() { channel.finish(); } } + @SuppressWarnings("deprecation") @Test public void testHandleAuthResponseWithoutClientVersion() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SharedPulsarCluster.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SharedPulsarCluster.java index a561712b8cad8..6e700edf71e36 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SharedPulsarCluster.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SharedPulsarCluster.java @@ -86,6 +86,7 @@ public static SharedPulsarCluster get() throws Exception { return instance; } + @SuppressWarnings("deprecation") private void start() throws Exception { log.info("Starting SharedPulsarCluster"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java index 6b050e8b421c6..53cb861607724 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java @@ -240,6 +240,7 @@ public void testGetPolicy() throws Exception { Assert.assertEquals(policies1, policiesGet1); } + @SuppressWarnings("deprecation") @Test public void testCacheCleanup() throws Exception { final String topic = "persistent://" + NAMESPACE1 + "/test" + UUID.randomUUID(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicOwnerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicOwnerTest.java index 2e526f132646e..4bed2b78c629b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicOwnerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicOwnerTest.java @@ -133,7 +133,7 @@ void tearDown() throws Exception { } } - @SuppressWarnings("unchecked") + @SuppressWarnings({"deprecation", "unchecked"}) @SneakyThrows(IllegalAccessException.class) private MutableObject spyLeaderNamespaceServiceForAuthorizedBroker() { // Spy leader namespace service to inject authorized broker for namespace-bundle from leader, @@ -141,6 +141,7 @@ private MutableObject spyLeaderNamespaceServiceForAuthorizedBroke // currently. Namespace-bundle ownership contention is an atomic operation through zookeeper. NamespaceService leaderNamespaceService = leaderPulsar.getNamespaceService(); NamespaceService spyLeaderNamespaceService = spy(leaderNamespaceService); + @SuppressWarnings("deprecation") final MutableObject leaderAuthorizedBroker = new MutableObject<>(); Answer>> answer = invocation -> { PulsarService pulsarService = leaderAuthorizedBroker.getValue(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/DelayedDeliveryTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/DelayedDeliveryTest.java index 56810c6f764d3..97feed237aab1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/DelayedDeliveryTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/DelayedDeliveryTest.java @@ -351,6 +351,7 @@ public void testOrderingDispatch() throws PulsarClientException { } } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testEnableAndDisableTopicDelayedDelivery() throws Exception { String topicName = "persistent://public/default/topic-" + UUID.randomUUID(); @@ -387,6 +388,7 @@ public void testEnableAndDisableTopicDelayedDelivery() throws Exception { assertNull(admin.topics().getDelayedDeliveryPolicy(topicName)); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testEnableTopicDelayedDelivery() throws Exception { final String topicName = "persistent://public/default/test" + UUID.randomUUID().toString(); @@ -650,6 +652,7 @@ public void testDispatcherReadFailure() throws Exception { assertTrue(receivedMsgs.contains("msg-" + i)); } } + @SuppressWarnings("deprecation") @Test public void testDelayedDeliveryExceedsMaxDelay() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumersReadLimitsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumersReadLimitsTest.java index a5dc452329836..6a3fb3c3ab2fc 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumersReadLimitsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentDispatcherMultipleConsumersReadLimitsTest.java @@ -71,6 +71,7 @@ protected void resetInterceptors() throws Exception { BrokerTestInterceptor.INSTANCE.reset(); } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000) public void testDispatcherMaxReadSizeBytes() throws Exception { final String topicName = BrokerTestUtil.newUniqueName( diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java index 85b0c09c93d55..00e8e0ffcbe00 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java @@ -82,6 +82,7 @@ public class PersistentSubscriptionTest { final TxnID txnID1 = new TxnID(1, 1); final TxnID txnID2 = new TxnID(1, 2); + @SuppressWarnings("deprecation") @BeforeMethod public void setup() throws Exception { pulsarTestContext = PulsarTestContext.builderForNonStartableContext() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java index 5b307f9bf41b7..270f46c1f2b20 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java @@ -77,6 +77,7 @@ protected void resetDeduplicationStatus() throws Exception { admin.namespaces().removeDeduplicationStatus(myNamespace); } + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testDuplicationApi() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -96,6 +97,7 @@ public void testDuplicationApi() throws Exception { assertNull(admin.topics().getDeduplicationEnabled(topicName)); } + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testTopicDuplicationApi2() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -115,6 +117,7 @@ public void testTopicDuplicationApi2() throws Exception { assertNull(admin.topics().getDeduplicationStatus(topicName)); } + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testTopicDuplicationAppliedApi() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -137,6 +140,7 @@ public void testTopicDuplicationAppliedApi() throws Exception { conf.isBrokerDeduplicationEnabled())); } + @SuppressWarnings("deprecation") @Test(timeOut = 30000) public void testDeduplicationPriority() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -214,6 +218,7 @@ private void checkDeduplicationEnabled(String producerName, MessageDeduplication }).get(); } + @SuppressWarnings("deprecation") @Test(timeOut = 10000) public void testDuplicationSnapshotApi() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); @@ -310,6 +315,7 @@ public void testTopicPolicyTakeSnapshot() throws Exception { assertEquals(position, markDeletedPosition); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testDuplicationMethod() throws Exception { final String topicName = testTopic + UUID.randomUUID().toString(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/validator/SchemaDataValidatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/validator/SchemaDataValidatorTest.java index 079405407f4b0..b001d384bb95c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/validator/SchemaDataValidatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/validator/SchemaDataValidatorTest.java @@ -64,6 +64,7 @@ public static Object[][] primitiveSchemas() { }; } + @SuppressWarnings("deprecation") @DataProvider(name = "clientSchemas") public static Object[][] clientSchemas() { return new Object[][] { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/AuthenticatedConsumerStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/AuthenticatedConsumerStatsTest.java index e6fac9e1ee227..cfb3df4eb32a3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/AuthenticatedConsumerStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/AuthenticatedConsumerStatsTest.java @@ -58,6 +58,7 @@ public class AuthenticatedConsumerStatsTest extends ConsumerStatsTest{ tokenPublicKey = "data:;base64," + Base64.getEncoder().encodeToString(encodedPublicKey); adminToken = generateToken(kp, "admin"); } + @SuppressWarnings("deprecation") private String generateToken(KeyPair kp, String subject) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java index 568a3cb08506b..c6b49e072316a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/ConsumerStatsTest.java @@ -559,6 +559,7 @@ public void testNonPersistentTopicSharedSubscriptionUnackedMessages() throws Exc assertEquals(1, consumers.size()); assertEquals(0, consumers.get(0).getUnackedMessages()); } + @SuppressWarnings("deprecation") @Test public void testKeySharedDrainingHashesConsumerStats() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/MetadataStoreStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/MetadataStoreStatsTest.java index d6d8b0ab2f746..ffb851d57f324 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/MetadataStoreStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/MetadataStoreStatsTest.java @@ -47,6 +47,7 @@ @Test(groups = "flaky") public class MetadataStoreStatsTest extends BrokerTestBase { + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) @Override diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryAuthenticationStatsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryAuthenticationStatsTest.java index 4cde37b50ffc1..f0e35ac5f3e89 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryAuthenticationStatsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/OpenTelemetryAuthenticationStatsTest.java @@ -48,6 +48,7 @@ public class OpenTelemetryAuthenticationStatsTest extends BrokerTestBase { private SecretKey secretKey; private AuthenticationProvider provider; + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) @Override diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsLabelsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsLabelsTest.java index fadb298c26cb6..e051eb8cc3b37 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsLabelsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsLabelsTest.java @@ -48,6 +48,7 @@ public class PrometheusMetricsLabelsTest extends BrokerTestBase { private static final Set ALLOWED_CUSTOM_METRIC_LABEL_KEYS = Set.of("sla_tier", "app_owner"); + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) @Override diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsTest.java index 993e62e6eff64..1266cf7bd2e89 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/PrometheusMetricsTest.java @@ -112,6 +112,7 @@ @Slf4j @Test(groups = "broker") public class PrometheusMetricsTest extends BrokerTestBase { + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) @Override @@ -1555,6 +1556,7 @@ private static String keyNameBySubstrings(Multimap metrics, Stri } return null; } + @SuppressWarnings("deprecation") @Test public void testAuthMetrics() throws IOException, AuthenticationException { @@ -1619,6 +1621,7 @@ public String getCommandData() { } Assert.assertTrue(haveFailed); } + @SuppressWarnings("deprecation") @Test public void testExpiredTokenMetrics() throws Exception { @@ -1662,6 +1665,7 @@ public String getCommandData() { provider.close(); } + @SuppressWarnings("deprecation") @Test public void testExpiringTokenMetrics() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/TransactionBatchWriterMetricsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/TransactionBatchWriterMetricsTest.java index 2ab9b2b14ebdf..1c9fe41d8ceee 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/TransactionBatchWriterMetricsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/stats/TransactionBatchWriterMetricsTest.java @@ -287,6 +287,7 @@ private List parseResponseEntityToList(Response response) throws Excepti } return list; } + @SuppressWarnings("deprecation") protected PulsarClient newPulsarClient(String url, int intervalInSecs) throws PulsarClientException { org.apache.pulsar.client.api.ClientBuilder clientBuilder = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java index 89cbbb2655336..632d25d8ac5bf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java @@ -112,6 +112,7 @@ public void testAutoCreatedPartitionedSystemTopic() throws Exception { reader.close(); } + @SuppressWarnings("deprecation") @Test(timeOut = 1000 * 60) public void testConsumerCreationWhenEnablingTopicPolicy() throws Exception { String tenant = "tenant-" + RandomStringUtils.randomAlphabetic(4).toLowerCase(); @@ -182,6 +183,7 @@ public void testHealthCheckTopicNotOffload() throws Exception { Assert.assertEquals(config.getLedgerOffloader(), ledgerOffloader); } + @SuppressWarnings("deprecation") @Test public void testSystemNamespaceNotCreateChangeEventsTopic() throws Exception { admin.brokers().healthcheck(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java index 76887bde2bd51..fce889882fefa 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java @@ -288,6 +288,7 @@ protected ServiceConfiguration initializeConfig() { * This is used to run tests with smaller thread pools and shorter timeouts by default. * You can use
{@code .configCustomizer(null)}
to disable this behavior */ + @SuppressWarnings("deprecation") protected void defaultOverrideServiceConfiguration(ServiceConfiguration svcConfig) { ServiceConfiguration unconfiguredDefaults = new ServiceConfiguration(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/AuthenticatedTransactionProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/AuthenticatedTransactionProducerConsumerTest.java index 71a12eba9a83b..c35cdc7cbb3e4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/AuthenticatedTransactionProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/AuthenticatedTransactionProducerConsumerTest.java @@ -88,6 +88,7 @@ public class AuthenticatedTransactionProducerConsumerTest extends TransactionTes } + @SuppressWarnings("deprecation") private String generateToken(KeyPair kp, String subject) { PrivateKey pkey = kp.getPrivate(); long expMillis = System.currentTimeMillis() + Duration.ofHours(1).toMillis(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java index 7f64d51fcbe85..d51ffe2479add 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java @@ -502,6 +502,7 @@ private void testTopicTransactionBufferDeleteAbort(Boolean enableSnapshotSegment assertTrue(exist); } + @SuppressWarnings("deprecation") @Test(dataProvider = "enableSnapshotSegment") public void clearTransactionBufferSnapshotTest(Boolean enableSnapshotSegment) throws Exception { getPulsarServiceList().get(0).getConfig().setTransactionBufferSegmentedSnapshotEnabled(enableSnapshotSegment); @@ -842,6 +843,7 @@ public void openReadOnlyManagedLedgerFailed(ManagedLedgerException exception, Ob } //Verify the snapshotSegmentProcessor end to end + @SuppressWarnings("deprecation") @Test public void testSnapshotSegment() throws Exception { String topic = "persistent://" + NAMESPACE1 + "/testSnapshotSegment"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java index 9a8ce266b1fc9..82dffcf2caeeb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java @@ -539,6 +539,7 @@ public void testGetTxnID() throws Exception { Assert.assertEquals(txnID1.getMostSigBits(), 0); } + @SuppressWarnings("deprecation") @Test public void testSubscriptionRecreateTopic() throws PulsarAdminException, NoSuchFieldException, IllegalAccessException, PulsarClientException { @@ -575,6 +576,7 @@ public void testSubscriptionRecreateTopic() Assert.fail(); } PersistentTopic originPersistentTopic = (PersistentTopic) option.get(); + @SuppressWarnings("deprecation") String pendingAckTopicName = MLPendingAckStore .getTransactionPendingAckStoreSuffix(originPersistentTopic.getName(), subName); @@ -1779,6 +1781,7 @@ public void testEncryptionRequired() throws Exception { txn.commit(); } + @SuppressWarnings("deprecation") @Test public void testDeleteNamespace() throws Exception { String namespace = TENANT + "/ns-" + RandomStringUtils.randomAlphabetic(5); @@ -1811,6 +1814,7 @@ public void testDeleteNamespace() throws Exception { } + @SuppressWarnings("deprecation") @Test(timeOut = 10_000) public void testTBSnapshotWriter() throws Exception { String namespace = TENANT + "/ns-" + RandomStringUtils.randomAlphabetic(5); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java index 3007d21ae74d9..7a1a990577663 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java @@ -100,6 +100,7 @@ protected PulsarAdmin createNewPulsarAdmin(PulsarAdminBuilder builder) throws Pu return builder.build(); } + @SuppressWarnings("deprecation") protected void setUpBase(int numBroker, int numPartitionsOfTC, String topic, int numPartitions) throws Exception{ setBrokerCount(numBroker); internalSetup(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TopicTransactionBufferTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TopicTransactionBufferTest.java index 82e5473e28358..fead3985d919d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TopicTransactionBufferTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TopicTransactionBufferTest.java @@ -489,6 +489,7 @@ public void testWriteSnapshotWhenFirstTxnMessageSend() throws Exception { * Send some messages before transaction buffer ready and then send some messages after transaction buffer ready, * these messages should be received in order. */ + @SuppressWarnings("deprecation") @Test public void testMessagePublishInOrder() throws Exception { // 1. Prepare test environment. diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferCloseTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferCloseTest.java index d1784f6a392bf..74de79ecafc2b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferCloseTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferCloseTest.java @@ -99,6 +99,7 @@ public void unloadTopicCloseTransactionBufferTest(boolean isPartition) throws Ex } } + @SuppressWarnings("deprecation") private List createAndLoadTopics(boolean isPartition, int partitionCount) throws PulsarAdminException, PulsarClientException { String namespace = TENANT + "/ns-" + RandomStringUtils.randomAlphabetic(5); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionStablePositionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionStablePositionTest.java index 3a39c73f9f65a..da4c2b68f9725 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionStablePositionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionStablePositionTest.java @@ -173,6 +173,7 @@ public static Object[][] enableTransactionAndState() { }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "enableTransactionAndState") public void testSyncNormalPositionWhenTBRecover(boolean clientEnableTransaction, TopicTransactionBufferState.State state) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java index 070405f034e8d..ba3e9e89d6000 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java @@ -108,6 +108,7 @@ private void checkTransactionCoordinatorNum(int number) { }); } + @SuppressWarnings("deprecation") private PulsarClient buildClient() throws Exception { return PulsarClient.builder() .serviceUrlProvider(new ServiceUrlProvider() { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticatedProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticatedProducerConsumerTest.java index e5d116ead7d37..1c1a8a360f199 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticatedProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticatedProducerConsumerTest.java @@ -66,6 +66,7 @@ public class AuthenticatedProducerConsumerTest extends ProducerConsumerBase { private static final Logger log = LoggerFactory.getLogger(AuthenticatedProducerConsumerTest.class); private static final String BASIC_CONF_FILE_PATH = "./src/test/resources/authentication/basic/.htpasswd"; + @SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); private static final String ADMIN_TOKEN = AuthTokenUtils.createToken(SECRET_KEY, "admin", Optional.empty()); @@ -119,6 +120,7 @@ protected void setup() throws Exception { conf.setNumExecutorThreadPoolSize(5); super.init(); } + @SuppressWarnings("deprecation") protected final void internalSetup(Authentication auth) throws Exception { closeAdmin(); @@ -180,6 +182,7 @@ private void testSyncProducerAndConsumer(int batchMessageDelayMs) throws Excepti consumer.acknowledgeCumulative(msg); consumer.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "batch") public void testTlsSyncProducerAndConsumer(int batchMessageDelayMs) throws Exception { @@ -238,6 +241,7 @@ public void testBasicArp1SyncProducerAndConsumer(int batchMessageDelayMs) throws log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test(dataProvider = "batch") public void testAnonymousSyncProducerAndConsumer(int batchMessageDelayMs) throws Exception { @@ -286,6 +290,7 @@ public void testAnonymousSyncProducerAndConsumer(int batchMessageDelayMs) throws * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testAuthenticationFilterNegative() throws Exception { log.info("-- Starting {} test --", methodName); @@ -319,6 +324,7 @@ public void testAuthenticationFilterNegative() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testInternalServerExceptionOnLookup() throws Exception { log.info("-- Starting {} test --", methodName); @@ -358,6 +364,7 @@ public void testInternalServerExceptionOnLookup() throws Exception { mockZooKeeperGlobal.unsetAlwaysFail(); } + @SuppressWarnings("deprecation") @Test public void testDeleteAuthenticationPoliciesOfTopic() throws Exception { @@ -461,6 +468,7 @@ public void testTlsTransportWithAnyAuth(Supplier url, Authentication aut @Cleanup Producer ignored = client.newProducer().topic(topicName).create(); } + @SuppressWarnings("deprecation") @Test public void testCleanupEmptyTopicAuthenticationMap() throws Exception { @@ -502,6 +510,7 @@ public void testCleanupEmptyTopicAuthenticationMap() throws Exception { .get().auth_policies.getTopicAuthentication().containsKey(topic)); }); } + @SuppressWarnings("deprecation") @Test public void testCleanupEmptySubscriptionAuthenticationMap() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticationTlsHostnameVerificationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticationTlsHostnameVerificationTest.java index 6dae2ce626999..4ecc85c636a28 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticationTlsHostnameVerificationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/AuthenticationTlsHostnameVerificationTest.java @@ -94,6 +94,7 @@ protected void setup() throws Exception { setupClient(); } + @SuppressWarnings("deprecation") protected void setupClient() throws Exception { 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 166740ec7a067..ed50cca4ec980 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 @@ -813,6 +813,7 @@ public void testPermissionForProducerCreateInitialSubscription() throws Exceptio log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") public static class ClientAuthentication implements Authentication { String user; @@ -865,6 +866,7 @@ public void start() throws PulsarClientException { } } + @SuppressWarnings("deprecation") public static class TestAuthenticationProvider implements AuthenticationProvider { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java index 7501a178f0dc1..3d5347e3606ea 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java @@ -1184,6 +1184,7 @@ public boolean keepAlive(InetSocketAddress remoteAddress, Request ahcRequest, } /**** helper classes. ****/ + @SuppressWarnings("deprecation") public static class MockAuthenticationProvider implements AuthenticationProvider { @Override 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 c0249c9e98e99..8603ecb365d79 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 @@ -282,6 +282,7 @@ public void testClientDeduplicationCorrectnessWithFailure() throws Exception { assertNotNull(prevMessage); assertEquals(prevMessage.getSequenceId(), producerThread.getLastSeqId()); } + @SuppressWarnings("deprecation") @Test(timeOut = 300000) public void testClientDeduplicationWithBkFailure() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java index 91aaef6c225c4..f19a4b2a76a0c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java @@ -597,6 +597,7 @@ public void testPartitionedProducerFailOnInitialization() throws Throwable { mockBrokerService.resetHandleProducer(); mockBrokerService.resetHandleCloseProducer(); } + @SuppressWarnings("deprecation") // failed to connect to partition at sending step if a producer which connects to broker as lazy-loading mode @Test diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerCleanupTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerCleanupTest.java index c043182f6b950..3da6b5483ac04 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerCleanupTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ConsumerCleanupTest.java @@ -34,6 +34,7 @@ public class ConsumerCleanupTest extends SharedPulsarBaseTest { public Object[][] ackReceiptEnabled() { return new Object[][] { { true }, { false } }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "ackReceiptEnabled") public void testAllTimerTaskShouldCanceledAfterConsumerClosed(boolean ackReceiptEnabled) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java index 31c92583a9074..173b2467fec87 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java @@ -562,6 +562,7 @@ public void testDeadLetterTopic(boolean produceLargeMessages) throws Exception { checkConsumer.close(); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testDeadLetterTopicHasOriginalInfo() throws Exception { @@ -638,6 +639,7 @@ public static class FooV2 { @Nullable private String field3; } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testAutoConsumeSchemaDeadLetter() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java index bb2cdeb03092b..f99e68c1c6e11 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java @@ -142,6 +142,7 @@ public boolean eligible(Message message) { log.info("Send result messageId: {}", messageId2); producer.close(); } + @SuppressWarnings("deprecation") @Test public void testProducerInterceptorsWithExceptions() throws PulsarClientException { @@ -172,6 +173,7 @@ public void onSendAcknowledgement(Producer producer, Message mes Assert.assertNotNull(messageId); producer.close(); } + @SuppressWarnings("deprecation") @Test public void testProducerInterceptorsWithErrors() throws PulsarClientException { @@ -202,6 +204,7 @@ public void onSendAcknowledgement(Producer producer, Message mes Assert.assertNotNull(messageId); producer.close(); } + @SuppressWarnings("deprecation") @Test public void testProducerInterceptorAccessMessageData() throws PulsarClientException { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiRolesTokenAuthorizationProviderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiRolesTokenAuthorizationProviderTest.java index ef775f8f81923..0d3e338c222fb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiRolesTokenAuthorizationProviderTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiRolesTokenAuthorizationProviderTest.java @@ -49,10 +49,12 @@ import org.testng.annotations.Test; public class MultiRolesTokenAuthorizationProviderTest extends MockedPulsarServiceBaseTest { + @SuppressWarnings("deprecation") private final SecretKey secretKey = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); private final String superUserToken; private final String normalUserToken; + @SuppressWarnings("deprecation") public MultiRolesTokenAuthorizationProviderTest() { Map claims = new HashMap<>(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java index 3d27936fc14b8..457227f9edbf7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java @@ -143,6 +143,7 @@ public ExecutorService getInternalExecutorService() { verify(internalExecutorServiceDelegate, times(0)) .schedule(any(Runnable.class), anyLong(), any()); } + @SuppressWarnings("deprecation") // test that reproduces the issue that PR https://github.com/apache/pulsar/pull/12456 fixes // where MultiTopicsConsumerImpl has a data race that causes out-of-order delivery of messages diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MutualAuthenticationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MutualAuthenticationTest.java index 339e3e2cabf70..17c00205d5f5c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MutualAuthenticationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MutualAuthenticationTest.java @@ -89,6 +89,7 @@ public AuthData authenticate(AuthData data) throws AuthenticationException { return toSend; } } + @SuppressWarnings("deprecation") public static class MutualAuthentication implements Authentication { @Override @@ -120,6 +121,7 @@ public void start() throws PulsarClientException { // noop } } + @SuppressWarnings("deprecation") public static class MutualAuthenticationState implements AuthenticationState { @@ -159,6 +161,7 @@ public boolean isComplete() { return isComplete; } } + @SuppressWarnings("deprecation") public static class MutualAuthenticationProvider implements AuthenticationProvider { @Override diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java index 284e6a6892856..0252221301aef 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java @@ -259,6 +259,7 @@ public void testPartitionedNonPersistentTopic(SubscriptionType type) throws Exce log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test(dataProvider = "subscriptionType") public void testPartitionedNonPersistentTopicWithTcpLookup(SubscriptionType type) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java index a0e487bf3adfc..5f8c7415e0046 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java @@ -684,6 +684,7 @@ private void receiveAsync(Consumer consumer, int totalMessage, int curre }); } } + @SuppressWarnings("deprecation") @Test public void testGetPartitionsForTopic() throws Exception { @@ -911,6 +912,7 @@ public void testCustomPartitionedProducer() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testPartitionedTopicInterceptor() throws Exception { log.info("-- Starting {} test --", methodName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java index f78fcec69cf18..0fa4d147b7263 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java @@ -71,6 +71,7 @@ protected boolean useTcpLookup() { protected void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") @Test(timeOut = 60 * 1000) public void testPatternConsumerWithLargeAmountOfConcurrentClientConnections() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerQueueSizeTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerQueueSizeTest.java index 2e17913599da5..ba28447eae804 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerQueueSizeTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerQueueSizeTest.java @@ -37,6 +37,7 @@ public Object[][] matrix() { {Boolean.TRUE, Boolean.TRUE}, }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "matrix") public void testRemoveMaxQueueLimit(boolean blockIfQueueFull, boolean partitioned) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProxyProtocolTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProxyProtocolTest.java index 6cdd3720f2d0b..1a8d63721044e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProxyProtocolTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProxyProtocolTest.java @@ -40,6 +40,7 @@ protected void setup() throws Exception { super.setup(); internalSetUpForNamespace(); } + @SuppressWarnings("deprecation") @Test public void testSniProxyProtocol() throws Exception { @@ -62,6 +63,7 @@ public void testSniProxyProtocol() throws Exception { // should be able to create producer successfully pulsarClient.newProducer().topic(topicName).create(); } + @SuppressWarnings("deprecation") @Test public void testSniProxyProtocolWithInvalidProxyUrl() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PulsarMultiListenersWithInternalListenerNameTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PulsarMultiListenersWithInternalListenerNameTest.java index 2844d211a3085..ecf19b156429a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PulsarMultiListenersWithInternalListenerNameTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PulsarMultiListenersWithInternalListenerNameTest.java @@ -131,6 +131,7 @@ public void testFindBrokerWithListenerName() throws Exception { doFindBrokerWithListenerName(true); doFindBrokerWithListenerName(false); } + @SuppressWarnings("deprecation") private void doFindBrokerWithListenerName(boolean useHttp) throws Exception { ClientConfigurationData conf = new ClientConfigurationData(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/RetryTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/RetryTopicTest.java index f37608f98d69a..65c3a6b008063 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/RetryTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/RetryTopicTest.java @@ -361,6 +361,7 @@ public void testAutoConsumeSchemaRetryLetter() throws Exception { message = retryTopicConsumer.receive(2, TimeUnit.SECONDS); assertNull(message); } + @SuppressWarnings("deprecation") @Test(timeOut = 60000) public void testRetryTopicProperties() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ServiceUrlProviderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ServiceUrlProviderTest.java index c8563f21bd49e..db1c4438e74cd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ServiceUrlProviderTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ServiceUrlProviderTest.java @@ -29,6 +29,7 @@ @Slf4j @Test(groups = "broker-api") public class ServiceUrlProviderTest extends SharedPulsarBaseTest { + @SuppressWarnings("deprecation") @Test public void testCreateClientWithServiceUrlProvider() throws Exception { @@ -65,6 +66,7 @@ public void testCreateClientWithServiceUrlProvider() throws Exception { producer.close(); consumer.close(); } + @SuppressWarnings("deprecation") @Test public void testCreateClientWithAutoChangedServiceUrlProvider() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerStatTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerStatTest.java index 9baa86fc7905d..f24993d27d580 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerStatTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerStatTest.java @@ -304,6 +304,7 @@ public void testMessageListener(int batchMessageDelayMs) throws Exception { validatingLogInfo(consumer, producer, true); log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test(dataProvider = "batch") public void testSendTimeout(int batchMessageDelayMs) throws Exception { @@ -381,6 +382,7 @@ public void testBatchMessagesRateOut() throws PulsarClientException, Interrupted consumer.unsubscribe(); log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") private void validatingLogInfo(Consumer consumer, Producer producer, boolean verifyAckCount) throws InterruptedException { @@ -468,6 +470,7 @@ public void testProducerPendingQueueSizeStats(boolean batchingEnabled) throws Ex * This test verifies partitioned topic stats for producer and consumer. * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testPartitionTopicStats() throws Exception { log.info("-- Starting {} test --", methodName); @@ -565,6 +568,7 @@ public void testMsgRateExpired() throws Exception { log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test public void testRetryLetterAndDeadLetterStats() throws PulsarClientException, InterruptedException { @@ -610,6 +614,7 @@ public void testRetryLetterAndDeadLetterStats() throws PulsarClientException, In assertEquals(deadLetterStats.getTotalMsgsSent(), 1); }); } + @SuppressWarnings("deprecation") @Test public void testDeadLetterStats() throws PulsarClientException, InterruptedException { final String topicName = "persistent://my-property/my-ns/testDeadLetterStats"; @@ -649,6 +654,7 @@ public void testDeadLetterStats() throws PulsarClientException, InterruptedExcep assertEquals(dlqStats.getTotalMsgsSent(), 1); }); } + @SuppressWarnings("deprecation") @Test public void testPartitionedRetryLetterAndDeadLetterStats() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java index d5b10fb8347f2..7c1e42a2ff79e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java @@ -2856,6 +2856,7 @@ public EncryptionKeyInfo getPrivateKey(String keyName, Map keyMe consumer.close(); log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test(timeOut = 100000) public void testCryptoWithChunking() throws Exception { @@ -4966,6 +4967,7 @@ public Object[][] enableBatchSend() { {false} }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "enableBatchSend") public void testPublishWithCreateMessageManually(boolean enableBatchSend) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java index d581e0a6b32d2..8525c62193806 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java @@ -1272,6 +1272,7 @@ public void testGetSchemaByVersion() throws PulsarClientException, PulsarAdminEx Assert.assertTrue(binaryLookupService.getSchema(TopicName.get(topic), ByteBuffer.allocate(8).putLong(1).array()).get().isPresent()); } + @SuppressWarnings("deprecation") @Test public void testGetNativeSchemaWithAutoConsumeWithMultiVersion() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerBase.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerBase.java index a45419b37ef2c..cae97001d8880 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerBase.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerBase.java @@ -68,6 +68,7 @@ protected void internalSetUpForBroker() { conf.setNumExecutorThreadPoolSize(5); } + @SuppressWarnings("deprecation") protected void internalSetUpForClient(boolean addCertificates, String lookupUrl) throws Exception { if (pulsarClient != null) { pulsarClient.close(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerTest.java index 8513442d99821..70b52a94bcc8f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TlsProducerConsumerTest.java @@ -142,6 +142,7 @@ public void testTlsClientAuthOverHTTPProtocol() throws Exception { Assert.fail("Should not fail since certs are sent."); } } + @SuppressWarnings("deprecation") @Test(timeOut = 60000) public void testTlsCertsFromDynamicStream() throws Exception { @@ -201,6 +202,7 @@ public void testTlsCertsFromDynamicStream() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testTlsCertsFromDynamicStreamExpiredAndRenewCert() throws Exception { log.info("-- Starting {} test --", methodName); @@ -249,6 +251,7 @@ public void testTlsCertsFromDynamicStreamExpiredAndRenewCert() throws Exception consumer.close(); log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") private ByteArrayInputStream createByteInputStream(String filePath) throws IOException { try (InputStream inStream = new FileInputStream(filePath)) { @@ -303,6 +306,7 @@ public void testTlsTransport(Supplier url, Authentication auth) throws E @Cleanup Producer ignored = client.newProducer().topic(topicName).create(); } + @SuppressWarnings("deprecation") @Test public void testTlsWithFakeAuthentication() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenAuthenticatedProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenAuthenticatedProducerConsumerTest.java index fdc3595e598c4..d89de58187efd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenAuthenticatedProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenAuthenticatedProducerConsumerTest.java @@ -72,6 +72,7 @@ public class TokenAuthenticatedProducerConsumerTest extends ProducerConsumerBase adminToken = generateToken(ADMIN_ROLE); userToken = generateToken("user"); } + @SuppressWarnings("deprecation") private String generateToken(String subject) { PrivateKey pkey = kp.getPrivate(); @@ -110,6 +111,7 @@ protected void setup() throws Exception { conf.setProperties(properties); super.init(); } + @SuppressWarnings("deprecation") // setup both admin and pulsar client protected final void clientSetup() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenExpirationProduceConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenExpirationProduceConsumerTest.java index aa3a5fbcf308f..6b0a6c644d794 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenExpirationProduceConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenExpirationProduceConsumerTest.java @@ -85,9 +85,12 @@ protected void setup() throws Exception { protected void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); + @SuppressWarnings("deprecation") public static final String ADMIN_TOKEN = Jwts.builder().setSubject("admin").signWith(SECRET_KEY).compact(); + @SuppressWarnings("deprecation") public String getExpireToken(String role, Date date) { return Jwts.builder().setSubject(role).signWith(SECRET_KEY) @@ -114,6 +117,7 @@ protected void internalSetUpForBroker() { conf.getProperties().setProperty("tokenSecretKey", "data:;base64," + Base64.getEncoder().encodeToString(SECRET_KEY.getEncoded())); } + @SuppressWarnings("deprecation") private PulsarClient getClient(String token) throws Exception { ClientBuilder clientBuilder = PulsarClient.builder() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenOauth2AuthenticatedProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenOauth2AuthenticatedProducerConsumerTest.java index 8b9e628d8e63d..04d31634e9473 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenOauth2AuthenticatedProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TokenOauth2AuthenticatedProducerConsumerTest.java @@ -107,6 +107,7 @@ protected void setup() throws Exception { conf.setProperties(properties); super.init(); } + @SuppressWarnings("deprecation") // setup both admin and pulsar client protected final void clientSetup() throws Exception { @@ -122,6 +123,7 @@ protected final void clientSetup() throws Exception { .statsInterval(0, TimeUnit.SECONDS) .authentication(createAuthentication(path))); } + @SuppressWarnings("deprecation") private Authentication createAuthentication(Path path) throws MalformedURLException { return AuthenticationFactoryOAuth2.clientCredentials( 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 6e872627fb670..de87a5c91acd8 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 @@ -1127,6 +1127,7 @@ public void testHasMessageAvailable(boolean enableBatch, boolean startInclusive) producer.close(); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testHasMessageAvailable() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/UnloadSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/UnloadSubscriptionTest.java index fbd595f9bba00..0b6aa6f8012e7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/UnloadSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/UnloadSubscriptionTest.java @@ -149,6 +149,7 @@ public void testMultiConsumer(int msgCount, boolean enabledBatch, int maxMsgPerB consumer1.close(); consumer2.close(); } + @SuppressWarnings("deprecation") private static String toString(List messageIds){ List messageIdStrings = new ArrayList<>(messageIds.size()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AdminApiKeyStoreTlsAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AdminApiKeyStoreTlsAuthTest.java index 88e1edffb4303..12f7c16cf3b3f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AdminApiKeyStoreTlsAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AdminApiKeyStoreTlsAuthTest.java @@ -66,6 +66,7 @@ public class AdminApiKeyStoreTlsAuthTest extends ProducerConsumerBase { private final String clusterName = "test"; Set tlsProtocols = Sets.newConcurrentHashSet(); + @SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); private static final String CLIENTUSER_TOKEN = AuthTokenUtils.createToken(SECRET_KEY, "clientuser", Optional.empty()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java index 63e4d513a6900..640082addcb9c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java @@ -48,6 +48,7 @@ public abstract class AutoCloseUselessClientConSupports extends MultiBrokerBaseT protected int numberOfAdditionalBrokers() { return BROKER_COUNT - 1; } + @SuppressWarnings("deprecation") @Override protected PulsarClient newPulsarClient(String url, int intervalInSecs) throws PulsarClientException { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConTopicsPatternConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConTopicsPatternConsumerTest.java index be4ca3c4a50df..ca78e8a7de0c5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConTopicsPatternConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConTopicsPatternConsumerTest.java @@ -43,6 +43,7 @@ protected void pulsarResourcesSetup() throws PulsarAdminException { super.pulsarResourcesSetup(); admin.topics().createNonPartitionedTopic(TOPIC_FULL_NAME); } + @SuppressWarnings("deprecation") @Test public void testConnectionAutoReleaseWhileUsingTopicsPatternConsumer() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java index ac426bb2f8f58..a70645e68512c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java @@ -526,6 +526,7 @@ public void testResetCursor(SubscriptionType subType) throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testMaxConcurrentTopicLoading() throws Exception { final String topicName = "persistent://my-property/my-ns/cocurrentLoadingTopic"; @@ -584,6 +585,7 @@ public void testMaxConcurrentTopicLoading() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testCloseConnectionOnInternalServerError() throws Exception { @@ -658,6 +660,7 @@ public long getTimestamp() { return timestamp; } } + @SuppressWarnings("deprecation") @Test public void testCleanProducer() throws Exception { @@ -690,6 +693,7 @@ public void testCleanProducer() throws Exception { * * @throws PulsarClientException */ + @SuppressWarnings("deprecation") @Test(expectedExceptions = PulsarClientException.TimeoutException.class) public void testOperationTimeout() throws PulsarClientException { final String topicName = "persistent://my-property/my-ns/my-topic1"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java index 6e9bc4595a030..fa7d02be99a0c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java @@ -76,6 +76,7 @@ protected void cleanup() throws Exception { super.internalCleanup(); this.executorService.shutdownNow(); } + @SuppressWarnings("deprecation") @Test public void testRemoveAndHandlePendingRequestInCnx() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java index 6bee750f66a26..9cb1eb2fc374a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java @@ -63,6 +63,7 @@ public class ConsumerAckTest extends SharedPulsarBaseTest { private TransactionImpl transaction; private PulsarClient clientWithStats; + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) public void setupConsumerAckTest() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithAuthTest.java index 41b31315454e5..bab4980178cdb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithAuthTest.java @@ -61,6 +61,7 @@ @Slf4j @Test(groups = "broker-impl") public class KeyStoreTlsProducerConsumerTestWithAuthTest extends ProducerConsumerBase { + @SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); private static final String CLIENT_USER_TOKEN = AuthTokenUtils.createToken(SECRET_KEY, "clientuser", Optional.empty()); @@ -136,6 +137,7 @@ protected void internalSetUpForBroker() { conf.setBrokerClientTlsProtocols(tlsProtocols); } + @SuppressWarnings("deprecation") protected void internalSetUpForClient(boolean addCertificates, String lookupUrl) throws Exception { if (pulsarClient != null) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithoutAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithoutAuthTest.java index 989b63b9378c9..f35f451dcefef 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithoutAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/KeyStoreTlsProducerConsumerTestWithoutAuthTest.java @@ -90,6 +90,7 @@ protected void internalSetUpForBroker() { conf.setTlsProtocols(tlsProtocols); conf.setNumExecutorThreadPoolSize(5); } + @SuppressWarnings("deprecation") protected void internalSetUpForClient(boolean addCertificates, String lookupUrl) throws Exception { if (pulsarClient != null) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java index f8ebebd53e43a..601131ae08dfd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java @@ -106,6 +106,7 @@ PulsarClient newClient() throws Exception { .lookupTimeout(10, TimeUnit.SECONDS) .build(); } + @SuppressWarnings("deprecation") @Test public void testGetPartitionedMetadataRetries() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageChunkingTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageChunkingTest.java index 84c2d3b5b98ce..abe92d062544c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageChunkingTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageChunkingTest.java @@ -170,6 +170,7 @@ public void testLargeMessage(boolean ackReceiptEnabled, boolean clientSizeMaxMes log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test public void testChunkingWithOrderingKey() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java index 7b87efa7cae39..38ec73d9e3325 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java @@ -78,6 +78,7 @@ public static Object[][] batchingAndCompression() { { false, CompressionType.NONE }, }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "batchingAndCompression") public void testParseMessages(boolean batchEnabled, CompressionType compressionType) throws Exception{ diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplAuthTest.java index e441de3ea1a37..aa61bdf0c2380 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplAuthTest.java @@ -379,6 +379,7 @@ public CompletableFuture allowTopicPolicyOperationAsync(TopicName topic return isAuthorizedFuture; } } + @SuppressWarnings("deprecation") public static class ClientAuthentication implements Authentication { String user; @@ -431,6 +432,7 @@ public void start() throws PulsarClientException { } } + @SuppressWarnings("deprecation") public static class TestAuthenticationProvider implements AuthenticationProvider { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PulsarMultiHostClientTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PulsarMultiHostClientTest.java index 17fab63189deb..654118b84a689 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PulsarMultiHostClientTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PulsarMultiHostClientTest.java @@ -51,6 +51,7 @@ public class PulsarMultiHostClientTest extends SharedPulsarBaseTest { public void setTestMethodName(Method m) { methodName = m.getName(); } + @SuppressWarnings("deprecation") @Test public void testGetPartitionedTopicMetaData() { @@ -79,6 +80,7 @@ public void testGetPartitionedTopicMetaData() { log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") @Test (timeOut = 15000) public void testGetPartitionedTopicDataTimeout() { @@ -113,6 +115,7 @@ private static int getFreePort() { throw new UncheckedIOException(e); } } + @SuppressWarnings("deprecation") @Test public void testMultiHostUrlRetrySuccess() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/SchemaDeleteTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/SchemaDeleteTest.java index cd3fc7fc63b26..bd43760468733 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/SchemaDeleteTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/SchemaDeleteTest.java @@ -57,6 +57,7 @@ protected void setup() throws Exception { protected void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("deprecation") @Test public void createTopicDeleteTopicCreateTopic() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java index 13e14cca0239f..a074bb71e4e72 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java @@ -158,6 +158,7 @@ public static Object[][] partition () { * 1. multi-partition topic, p1, p2 has new message, p3 has no new messages. * 2. Call new `refresh` API, it will be completed after read new messages. */ + @SuppressWarnings("deprecation") @Test(dataProvider = "partition") public void testRefreshAPI(int partition) throws Exception { // 1. Prepare resource. @@ -261,6 +262,7 @@ public void testRefreshTaskCanBeCompletedWhenReaderClosed() throws Exception { } Awaitility.await().untilAsserted(() -> assertTrue(completedExceptionally.get())); } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000) public void testTableView() throws Exception { @@ -327,6 +329,7 @@ public void testNewTableView() throws Exception { }); assertEquals(tv.keySet(), keys); } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000, dataProvider = "topicDomain") public void testTableViewUpdatePartitions(String topicDomain) throws Exception { @@ -368,6 +371,7 @@ public void testTableViewUpdatePartitions(String topicDomain) throws Exception { }); assertEquals(tv.keySet(), keys2); } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000, dataProvider = "topicDomain") public void testPublishNullValue(String topicDomain) throws Exception { @@ -414,6 +418,7 @@ public void testPublishNullValue(String topicDomain) throws Exception { public static Object[][] partitioned() { return new Object[][] {{true}, {false}}; } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000, dataProvider = "partitionedTopic") public void testAck(boolean partitionedTopic) throws Exception { @@ -462,6 +467,7 @@ public void testAck(boolean partitionedTopic) throws Exception { } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000) public void testListen() throws Exception { @@ -509,6 +515,7 @@ public void accept(String s, String s2) { assertEquals(mockAction.acceptedCount, 5); } + @SuppressWarnings("deprecation") @Test(timeOut = 30 * 1000) public void testTableViewWithEncryptedMessages() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java index 317e401b5537d..d15b26961056c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TopicsConsumerImplTest.java @@ -1118,6 +1118,7 @@ public void testDefaultBacklogTTL() throws Exception { retryStrategically((test) -> subscription.getNumberOfEntriesInBacklog(false) == 0, 5, 200); assertEquals(subscription.getNumberOfEntriesInBacklog(false), 0); } + @SuppressWarnings("deprecation") @Test(timeOut = testTimeout) public void testGetLastMessageId() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionEndToEndTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionEndToEndTest.java index 6741cb5c7868e..0e0c83fa088d3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionEndToEndTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionEndToEndTest.java @@ -930,6 +930,7 @@ public Transaction getTxn() throws Exception { .build() .get(); } + @SuppressWarnings("deprecation") @Test public void txnMetadataHandlerRecoverTest() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/common/naming/ServiceConfigurationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/common/naming/ServiceConfigurationTest.java index ed551c8c1bb20..cc0087c0cc6c3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/common/naming/ServiceConfigurationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/common/naming/ServiceConfigurationTest.java @@ -57,6 +57,7 @@ public class ServiceConfigurationTest { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testInit() throws Exception { final String zookeeperServer = "localhost:2184"; @@ -274,6 +275,7 @@ public void testBookKeeperClientIoThreads() throws Exception { assertEquals(conf.getBookkeeperClientNumIoThreads(), 1); } } + @SuppressWarnings("deprecation") @Test public void testSubscriptionTypesEnableWins() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactedTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactedTopicTest.java index a2c656d7fa055..f1e33b7bf1e29 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactedTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactedTopicTest.java @@ -382,6 +382,7 @@ public void testReadMessageFromCompactedLedger() throws Exception { Assert.assertEquals(compactedMsgCount, 1); Assert.assertEquals(nonCompactedMsgCount, numMessages); } + @SuppressWarnings("deprecation") @Test public void testLastMessageIdForCompactedLedger() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionRetentionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionRetentionTest.java index dd44c6b5acfd6..c5fcbb5d3ea68 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionRetentionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactionRetentionTest.java @@ -200,6 +200,7 @@ public void testCompactionRetentionAfterTopicCreationWithNamespacePolicies() thr testCompactionCursorRetention(topic) ); } + @SuppressWarnings("deprecation") @Test public void testCompactionRetentionOnTopicCreationWithTopicPolicies() throws Exception { 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 2f32a72d319f9..6fcf9445660d0 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 @@ -2063,6 +2063,7 @@ public void testCompactionDuplicate() throws Exception { } } } + @SuppressWarnings("deprecation") @Test public void testDeleteCompactedLedger() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java index 9a622b1b8f571..1f7a65b4578a1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java @@ -108,6 +108,7 @@ private void clearAllTheLedgersOutdated(String topicName) throws Exception { return managedLedger.getLedgersInfo().size() == 1; }); } + @SuppressWarnings("deprecation") @Test public void testGetLastMessageIdWhenLedgerEmpty() throws Exception { @@ -142,6 +143,7 @@ private Consumer createConsumer(String topicName, String subName) throws .readCompacted(true) .subscribe(); } + @SuppressWarnings("deprecation") @Test public void testGetLastMessageIdWhenNoNonEmptyLedgerExists() throws Exception { @@ -178,6 +180,7 @@ public Object[][] enabledBatch(){ {false} }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledBatch") public void testGetLastMessageIdBeforeCompaction(boolean enabledBatch) throws Exception { @@ -212,6 +215,7 @@ public void testGetLastMessageIdBeforeCompaction(boolean enabledBatch) throws Ex consumer.close(); producer.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledBatch") public void testGetLastMessageIdAfterCompaction(boolean enabledBatch) throws Exception { @@ -248,6 +252,7 @@ public void testGetLastMessageIdAfterCompaction(boolean enabledBatch) throws Exc consumer.close(); producer.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledBatch") public void testGetLastMessageIdAfterCompactionWithCompression(boolean enabledBatch) throws Exception { @@ -329,6 +334,7 @@ public void testReadMsgsAfterDisableCompaction() throws Exception { producer.close(); reader.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledBatch") public void testGetLastMessageIdAfterCompactionEndWithNullMsg(boolean enabledBatch) throws Exception { @@ -368,6 +374,7 @@ public void testGetLastMessageIdAfterCompactionEndWithNullMsg(boolean enabledBat consumer.close(); producer.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledBatch") public void testGetLastMessageIdAfterCompactionEndWithNullMsg2(boolean enabledBatch) throws Exception { @@ -406,6 +413,7 @@ public void testGetLastMessageIdAfterCompactionEndWithNullMsg2(boolean enabledBa consumer.close(); producer.close(); } + @SuppressWarnings("deprecation") @Test(dataProvider = "enabledBatch") public void testGetLastMessageIdAfterCompactionAllNullMsg(boolean enabledBatch) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java index 1dc6a9cca8f31..b782a846f6764 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java @@ -323,6 +323,7 @@ public void testCompactionWithReader() throws Exception { Assert.assertTrue(all.isEmpty()); } } + @SuppressWarnings("deprecation") @Test @@ -520,6 +521,7 @@ public void testSeekEarliestAfterCompaction() throws Exception { Assert.assertEquals(m.getValue(), testValues.get(2)); } } + @SuppressWarnings("deprecation") @Test public void testSlowTableviewAfterCompaction() throws Exception { @@ -641,6 +643,7 @@ public void testSlowTableviewAfterCompaction() throws Exception { pulsar2.close(); } + @SuppressWarnings("deprecation") @Test public void testSlowReceiveTableviewAfterCompaction() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java index 48aa4690e5ba9..9dd4e8727e937 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java @@ -96,6 +96,7 @@ public void cleanup() throws Exception { private long compact(String topic) throws ExecutionException, InterruptedException { return (long) compactor.compact(topic, strategy).get(); } + @SuppressWarnings("deprecation") @Test public void testNumericOrderCompaction() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java index 734362442358e..5f2fe7893bdaf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java @@ -114,6 +114,7 @@ public class PulsarFunctionE2ESecurityTest { public Object[][] validRoleName() { return new Object[][] { { Boolean.TRUE }, { Boolean.FALSE } }; } + @SuppressWarnings("deprecation") @BeforeMethod void setup(Method method) throws Exception { @@ -291,6 +292,7 @@ private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration conf PulsarWorkerService workerService = new PulsarWorkerService(); return workerService; } + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig(String tenant, String namespace, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java index 8688e9968d8cb..f0f4c4812358f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java @@ -198,6 +198,7 @@ void closeClassLoader() throws IOException { pulsarApiExamplesClassLoader = null; } } + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) void setup(Method method) throws Exception { @@ -344,6 +345,7 @@ void shutdown() throws Exception { } } } + @SuppressWarnings("deprecation") protected WorkerConfig createWorkerConfig(ServiceConfiguration config) { @@ -387,6 +389,7 @@ protected WorkerConfig createWorkerConfig(ServiceConfiguration config) { workerConfig.setAuthorizationEnabled(true); return workerConfig; } + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig(String tenant, String namespace, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java index 43f0fecde3ba8..afe4eb380e0e9 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java @@ -117,6 +117,7 @@ public class PulsarFunctionPublishTest { public Object[][] validRoleName() { return new Object[][]{{Boolean.TRUE}, {Boolean.FALSE}}; } + @SuppressWarnings("deprecation") @BeforeMethod void setup(Method method) throws Exception { @@ -245,6 +246,7 @@ void shutdown() throws Exception { } } } + @SuppressWarnings("deprecation") private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) { @@ -291,6 +293,7 @@ private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration conf PulsarWorkerService workerService = new PulsarWorkerService(); return workerService; } + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig(String tenant, String namespace, String functionName, String sourceTopic, String publishTopic, String subscriptionName) { @@ -404,6 +407,7 @@ public void testPulsarFunctionState() throws Exception { tempDirectory.assertThatFunctionDownloadTempFilesHaveBeenDeleted(); } + @SuppressWarnings("deprecation") @Test public void testMultipleAddress() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java index e23dd51dc4a5b..92a708242d54a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java @@ -91,6 +91,7 @@ public class PulsarFunctionTlsTest { protected String testNamespace = testTenant + "/my-ns"; private PulsarFunctionTestTemporaryDirectory[] tempDirectories = new PulsarFunctionTestTemporaryDirectory[BROKER_COUNT]; + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) void setup() throws Exception { @@ -292,6 +293,7 @@ public void testFunctionsCreation() throws Exception { pulsarAdmins[i].functions().deleteFunction(config.getTenant(), config.getNamespace(), config.getName()); } } + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig( String jarFile, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java index 8bd8400f7af66..4fb0f2ac0fbaf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java @@ -341,6 +341,7 @@ public void testFunctionAssignmentsWithRestart() throws Exception { assertEquals(admin.functions().getFunction(tenant, namespacePortion, functionName).getLogTopic(), logTopic); } } + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig(String tenant, String namespace, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java index 87814e16931b3..a636348a20029 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java @@ -108,6 +108,7 @@ public abstract class AbstractPulsarE2ETest { public Object[][] validRoleName() { return new Object[][] { { Boolean.TRUE }, { Boolean.FALSE } }; } + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) public void setup(Method method) throws Exception { @@ -275,6 +276,7 @@ void shutdown() throws Exception { } } } + @SuppressWarnings("deprecation") private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) throws IOException, URISyntaxException { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java index a2275915bad37..020bb1b75980b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java @@ -87,6 +87,7 @@ public class PulsarFunctionAdminTest { ResourceUtils.getAbsolutePath("certificate-authority/certs/ca.cert.pem"); private static final Logger log = LoggerFactory.getLogger(PulsarFunctionAdminTest.class); + @SuppressWarnings("deprecation") @BeforeMethod(alwaysRun = true) void setup(Method method) throws Exception { @@ -190,6 +191,7 @@ void shutdown() throws Exception { bkEnsemble = null; } } + @SuppressWarnings("deprecation") private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) { workerConfig = new WorkerConfig(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionE2ETest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionE2ETest.java index ab890583e87b2..6adc76cbcc786 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionE2ETest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionE2ETest.java @@ -78,6 +78,7 @@ */ @Test(groups = "broker-io") public class PulsarFunctionE2ETest extends AbstractPulsarE2ETest { + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig(String tenant, String namespace, String functionName, boolean isBuiltin, String sourceTopic, String sinkTopic, String subscriptionName) { @@ -321,6 +322,7 @@ public void testReadCompactedFunction() throws Exception { consumer.close(); producer.close(); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testPulsarFunctionAsyncStatTime() throws Exception { @@ -1260,6 +1262,7 @@ public void testMultiTopicFunction() throws Exception { } }, 50, 150)); } + @SuppressWarnings("deprecation") @Test(timeOut = 20000) public void testE2EPulsarFunctionMessagePooled() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java index 5be4d667cba6b..7fd1c40eb4c1f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java @@ -104,6 +104,7 @@ public class PulsarFunctionTlsTest { private static final Logger log = LoggerFactory.getLogger(PulsarFunctionTlsTest.class); private PulsarFunctionTestTemporaryDirectory tempDirectory; + @SuppressWarnings("deprecation") @BeforeMethod void setup(Method method) throws Exception { @@ -202,6 +203,7 @@ void shutdown() throws Exception { } } } + @SuppressWarnings("deprecation") private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config, PulsarAdmin mockPulsarAdmin) { @@ -289,6 +291,7 @@ public void testAuthorization() { } } + @SuppressWarnings("deprecation") protected static FunctionConfig createFunctionConfig(String jarFile, String tenant, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java index 393ed0a84b17a..0e62deb7bcf37 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java @@ -829,6 +829,7 @@ public void testNullKeyValueProperty() throws PulsarAdminException, PulsarClient .subscribe(); consumer.close(); } + @SuppressWarnings("deprecation") @Test public void testDeleteTopicAndSchema() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaTypeCompatibilityCheckOnTopicLevelTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaTypeCompatibilityCheckOnTopicLevelTest.java index 35bdeb290fb60..44898c64b16ba 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaTypeCompatibilityCheckOnTopicLevelTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaTypeCompatibilityCheckOnTopicLevelTest.java @@ -221,6 +221,7 @@ public void testDefaultConfig() .withPojo(Schemas.PersonThree.class).build())) .topic(topicName).create(); } + @SuppressWarnings("deprecation") @Test public void testUpdateSchemaCompatibilityStrategyRepeatedly() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/security/MockedPulsarStandalone.java b/pulsar-broker/src/test/java/org/apache/pulsar/security/MockedPulsarStandalone.java index 0848ed21671b3..ddb3a4f079f5f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/security/MockedPulsarStandalone.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/security/MockedPulsarStandalone.java @@ -73,6 +73,7 @@ public abstract class MockedPulsarStandalone implements AutoCloseable { serviceConfiguration.setTlsCertificateFilePath(TLS_EC_SERVER_CERT_PATH); serviceConfiguration.setTlsKeyFilePath(TLS_EC_SERVER_KEY_PATH); } +@SuppressWarnings("deprecation") protected static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); @@ -120,6 +121,7 @@ protected void configureDefaultAuthorization() { + @SuppressWarnings("deprecation") @SneakyThrows protected void loadECTlsCertificateWithFile() { serviceConfiguration.setTlsEnabled(true); @@ -138,6 +140,7 @@ protected void loadECTlsCertificateWithFile() { MAPPER1.writeValueAsString(brokerClientAuthParams)); } + @SuppressWarnings("deprecation") @SneakyThrows protected void loadECTlsCertificateWithKeyStore() { serviceConfiguration.setTlsEnabled(true); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtilsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtilsTest.java index aae379dae1473..f8478cefbd224 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtilsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtilsTest.java @@ -52,6 +52,7 @@ public Object[][] desiredExpireTime() { {"1y", 31536000} }; } + @SuppressWarnings("deprecation") @Test public void testCreateToken() { @@ -91,6 +92,7 @@ public void testCreateToken() { System.setOut(oldStream); } } + @SuppressWarnings("deprecation") @Test(dataProvider = "desiredExpireTime") public void commandCreateToken_WhenCreatingATokenWithExpiryTime_ShouldHaveTheDesiredExpireTime(String expireTime, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/MockAuthenticationProvider.java b/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/MockAuthenticationProvider.java index e7979680bfb4e..75b8e97b9a381 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/MockAuthenticationProvider.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/MockAuthenticationProvider.java @@ -32,6 +32,7 @@ public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { @@ -43,6 +44,7 @@ public String getAuthMethodName() { return "mockauth"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { // Return super user role diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyRoleAuthTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyRoleAuthTest.java index c97dbb3812b98..571afe319d11a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyRoleAuthTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyRoleAuthTest.java @@ -67,6 +67,7 @@ * 1. testWebSocketProxyProduceConsumeWithAuthorization: Positive test with authorized tokens * 2. testWebSocketProxyWithUnauthorizedToken: Negative test with unauthorized tokens */ +@SuppressWarnings("deprecation") @Test(groups = "websocket") public class ProxyRoleAuthTest extends ProducerConsumerBase { diff --git a/pulsar-client-admin/src/test/java/org/apache/pulsar/client/admin/internal/PulsarAdminBuilderImplTest.java b/pulsar-client-admin/src/test/java/org/apache/pulsar/client/admin/internal/PulsarAdminBuilderImplTest.java index 987b054426b47..259ebcb055acb 100644 --- a/pulsar-client-admin/src/test/java/org/apache/pulsar/client/admin/internal/PulsarAdminBuilderImplTest.java +++ b/pulsar-client-admin/src/test/java/org/apache/pulsar/client/admin/internal/PulsarAdminBuilderImplTest.java @@ -310,11 +310,13 @@ public String getAuthMethodName() { return "mock-secret"; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { return null; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { configure(new Gson().toJson(authParams)); 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 a06f5d44665cf..475beb153fd0a 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 @@ -1557,6 +1557,7 @@ public void topicPolicies() throws Exception { verify(mockGlobalTopicsPolicies).removeAutoSubscriptionCreation("persistent://prop/ns1/ds1"); } + @SuppressWarnings("deprecation") @Test public void topicsSetOffloadPolicies() throws Exception { PulsarAdmin admin = Mockito.mock(PulsarAdmin.class); @@ -1588,6 +1589,7 @@ public void topicsSetOffloadPolicies() throws Exception { } + @SuppressWarnings("deprecation") @Test public void topics() throws Exception { PulsarAdmin admin = Mockito.mock(PulsarAdmin.class); @@ -2289,6 +2291,7 @@ public boolean matches(Long timestamp) { longThat(new TimestampMatcher())); } + @SuppressWarnings("deprecation") @Test public void nonPersistentTopics() throws Exception { PulsarAdmin admin = Mockito.mock(PulsarAdmin.class); diff --git a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdTopics.java b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdTopics.java index 70c58150134e3..2980bf687b346 100644 --- a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdTopics.java +++ b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdTopics.java @@ -262,6 +262,7 @@ public void testRunDeleteTopicsFromFileWithException() throws PulsarAdminExcepti mockTopics = mock(Topics.class); } + @SuppressWarnings("deprecation") @Test public void testSetRetentionCmd() throws Exception { cmdTopics.run("set-retention public/default/topic -s 2T -t 200d".split("\\s+")); @@ -269,6 +270,7 @@ public void testSetRetentionCmd() throws Exception { new RetentionPolicies(200 * 24 * 60, 2 * 1024 * 1024)); } + @SuppressWarnings("deprecation") @Test public void testSetPersistenceWithDefaultMarkDeleteRate() throws Exception { // Test that the default value is now -1 (unset) instead of 0 @@ -277,6 +279,7 @@ public void testSetPersistenceWithDefaultMarkDeleteRate() throws Exception { new PersistencePolicies(2, 2, 2, -1.0, null)); } + @SuppressWarnings("deprecation") @Test public void testSetPersistenceWithNegativeMarkDeleteRate() throws Exception { // Test that negative values are now allowed (previously would throw exception) @@ -285,6 +288,7 @@ public void testSetPersistenceWithNegativeMarkDeleteRate() throws Exception { new PersistencePolicies(2, 2, 2, -5.0, null)); } + @SuppressWarnings("deprecation") @Test public void testSetPersistenceWithZeroMarkDeleteRate() throws Exception { // Test that zero is still allowed @@ -293,6 +297,7 @@ public void testSetPersistenceWithZeroMarkDeleteRate() throws Exception { new PersistencePolicies(2, 2, 2, 0.0, null)); } + @SuppressWarnings("deprecation") @Test public void testSetPersistenceWithPositiveMarkDeleteRate() throws Exception { // Test that positive values still work @@ -301,6 +306,7 @@ public void testSetPersistenceWithPositiveMarkDeleteRate() throws Exception { new PersistencePolicies(2, 2, 2, 10.5, null)); } + @SuppressWarnings("deprecation") @Test public void testSetPersistenceWithUnsetMarkDeleteRate() throws Exception { // Test explicitly setting to -1 (unset) diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/api/MessageRouterTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/api/MessageRouterTest.java index 61f19c7417f92..83783a8211a6e 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/api/MessageRouterTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/api/MessageRouterTest.java @@ -33,6 +33,7 @@ public class MessageRouterTest { public static class TestMessageRouter implements MessageRouter { + @SuppressWarnings("deprecation") @Override public int choosePartition(Message msg) { return 1234; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageIdImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageIdImplTest.java index 10d805cdc4db3..34f27a0fa2b72 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageIdImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageIdImplTest.java @@ -68,6 +68,7 @@ public void equalsTest() { assertEquals(msgId, batchMsgId4); } + @SuppressWarnings("deprecation") @Test public void notEqualsMultiTest() { BatchMessageIdImpl batchMsgId = new BatchMessageIdImpl(0, 0, 0, 0); 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 47183001bad2b..554c6a8cc7305 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 @@ -54,6 +54,7 @@ public void clientBuilderTest() { assertEquals(b2.conf.getServiceUrl(), "pulsar://other-broker:6650"); } + @SuppressWarnings("deprecation") @Test public void enableTlsTest() { ClientBuilderImpl builder = (ClientBuilderImpl) PulsarClient.builder().serviceUrl("pulsar://service:6650"); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientBuilderImplTest.java index 2194abb5a23e7..0e3f4731938ef 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientBuilderImplTest.java @@ -268,11 +268,13 @@ public String getAuthMethodName() { return "mock-secret"; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { return null; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { configure(new Gson().toJson(authParams)); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientInitializationTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientInitializationTest.java index f7ff30c286c76..8eee52bda1e7d 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientInitializationTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientInitializationTest.java @@ -29,6 +29,7 @@ public class ClientInitializationTest { + @SuppressWarnings("deprecation") @Test public void testInitializeAuthWithTls() throws PulsarClientException { Authentication auth = mock(Authentication.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java index 551aae5a80277..850019d27ebf0 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java @@ -183,6 +183,7 @@ public void testBatchMessageIdImplCompareToTopicMessageId() { assertTrue(topicMessageId2.compareTo(messageIdImpl2) < 0, "Expected to be less than"); } + @SuppressWarnings("deprecation") @Test public void testMultiMessageIdEqual() { // null @@ -259,6 +260,7 @@ public void testMultiMessageIdEqual() { assertNotEquals(item7, item5); } + @SuppressWarnings("deprecation") @Test public void testMultiMessageIdCompareto() { // null diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java index 54175613e3bb8..976a301b31d8c 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java @@ -87,6 +87,7 @@ public void cleanUp() { } } + @SuppressWarnings("deprecation") @Test public void testGetStats() throws Exception { String topicName = "test-stats"; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java index 738614398b12b..523e6c35df20e 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java @@ -369,17 +369,20 @@ public void testProducerBuilderImplWhenSendTimeoutPropertyIsNegative() { producerBuilderImpl.sendTimeout(-1, TimeUnit.SECONDS); } + @SuppressWarnings("deprecation") @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenMaxPendingMessagesAcrossPartitionsPropertyIsInvalid() { producerBuilderImpl.maxPendingMessagesAcrossPartitions(-1); } + @SuppressWarnings("deprecation") @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "maxPendingMessagesAcrossPartitions needs to be >= maxPendingMessages") public void testProducerBuilderImplWhenMaxPendingMessagesAcrossPartitionsPropertyIsInvalidErrorMessages() { producerBuilderImpl.maxPendingMessagesAcrossPartitions(-1); } + @SuppressWarnings("deprecation") @Test public void testProducerBuilderImplWhenNumericPropertiesAreValid() { producerBuilderImpl.batchingMaxPublishDelay(1, TimeUnit.SECONDS); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicMessageIdImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicMessageIdImplTest.java index 59f15266c1091..399c9a1dafcc4 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicMessageIdImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicMessageIdImplTest.java @@ -54,6 +54,7 @@ public void equalsTest() { assertNotEquals(topicMsgId1, topicMsgId2); } + @SuppressWarnings("deprecation") @Test public void testDeprecatedMethods() { BatchMessageIdImpl msgId = new BatchMessageIdImpl(1, 2, 3, 4); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/AuthenticationTokenTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/AuthenticationTokenTest.java index e8877f3599d08..b2a3411b97a52 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/AuthenticationTokenTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/AuthenticationTokenTest.java @@ -66,6 +66,7 @@ public void testAuthToken() throws Exception { authToken.close(); } + @SuppressWarnings("deprecation") @Test public void testAuthTokenClientConfig() throws Exception { ClientConfigurationData clientConfig = new ClientConfigurationData(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockAuthentication.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockAuthentication.java index ccab8611fdf9d..f54dcee5de5b2 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockAuthentication.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockAuthentication.java @@ -33,11 +33,13 @@ public String getAuthMethodName() { return null; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { return null; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { authParamsMap = authParams; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockEncodedAuthenticationParameterSupport.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockEncodedAuthenticationParameterSupport.java index d89f44a8e1e84..884b9ec20a1fa 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockEncodedAuthenticationParameterSupport.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/MockEncodedAuthenticationParameterSupport.java @@ -46,11 +46,13 @@ public String getAuthMethodName() { return null; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { return null; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/oauth2/AuthenticationFactoryOAuth2Test.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/oauth2/AuthenticationFactoryOAuth2Test.java index f76fee6e10dfa..a23aad708cfc5 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/oauth2/AuthenticationFactoryOAuth2Test.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/auth/oauth2/AuthenticationFactoryOAuth2Test.java @@ -60,6 +60,7 @@ public void testStandardAuthzServerBuilder() throws IOException { } } + @SuppressWarnings("deprecation") @Test public void testClientCredentials() throws IOException { URL issuerUrl = new URL("http://localhost"); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/protocol/ByteBufPairTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/protocol/ByteBufPairTest.java index 4939ce9255e5f..ab54df94fcdcc 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/protocol/ByteBufPairTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/protocol/ByteBufPairTest.java @@ -54,6 +54,7 @@ public void testDoubleByteBuf() throws Exception { assertEquals(b2.refCnt(), 0); } + @SuppressWarnings("deprecation") @Test public void testEncoder() throws Exception { ByteBuf b1 = Unpooled.wrappedBuffer("hello".getBytes()); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentBitSetRecyclableTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentBitSetRecyclableTest.java index b2cbfdcc0cd18..7ffda74156969 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentBitSetRecyclableTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentBitSetRecyclableTest.java @@ -24,6 +24,7 @@ public class ConcurrentBitSetRecyclableTest { + @SuppressWarnings("deprecation") @Test(priority = 0) public void testRecycle() { ConcurrentBitSetRecyclable bitset1 = ConcurrentBitSetRecyclable.create(); @@ -36,6 +37,7 @@ public void testRecycle() { Assert.assertNotSame(bitset3, bitset1); } + @SuppressWarnings("deprecation") @Test(priority = 1) public void testGenerateByBitSet() { BitSet bitSet = new BitSet(); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java index eea1c9cc96628..f89e367a4fac1 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java @@ -177,6 +177,7 @@ public Void process(String input, Context context) throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testFunctionAsyncTime() throws Exception { FunctionDetails functionDetails = FunctionDetails.newBuilder() @@ -222,6 +223,7 @@ public void testFunctionResultNull() throws Exception { verify(record, times(1)).ack(); } + @SuppressWarnings("deprecation") @NonNull private JavaInstanceRunnable getJavaInstanceRunnable(boolean autoAck, org.apache.pulsar.functions.proto.Function.ProcessingGuarantees processingGuarantees) throws Exception { diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java index a05c54709f1dd..53b9b1cf5b044 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java @@ -128,6 +128,7 @@ public void testCreateProducerBuilderWithSimpleProducerConfig() { verifyNoMoreInteractions(producerBuilder); } + @SuppressWarnings("deprecation") @Test public void testCreateProducerBuilderWithAdvancedProducerConfig() { ProducerConfig producerConfig = new ProducerConfig(); @@ -180,6 +181,7 @@ public void testCreateProducerBuilderWithAdvancedProducerConfig() { verifyNoMoreInteractions(producerBuilder); } + @SuppressWarnings("deprecation") @Test public void testCreateProducerBuilderWithBatchingDisabled() { ProducerConfig producerConfig = new ProducerConfig(); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java index 84242505ffd27..495d85fd86300 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java @@ -28,6 +28,7 @@ public class PulsarFunctionRecordTest { + @SuppressWarnings("deprecation") @Test public void testAck() { Record record = mock(Record.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java index b19a6adab5187..1f36be360144a 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java @@ -145,6 +145,7 @@ public void testWindowFunctionWithAtmostOnce() throws Exception { verify(record, times(1)).ack(); } + @SuppressWarnings("deprecation") @Test public void testWindowFunctionWithAtleastOnce() throws Exception { diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java index f6c6fc4c7bd8c..bbc0e7a855587 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java @@ -44,6 +44,7 @@ public class KubernetesSecretsTokenAuthProviderTest { + @SuppressWarnings("deprecation") @Test public void testConfigureAuthDataStatefulSet() { byte[] testBytes = new byte[]{0, 1, 2, 3, 4}; @@ -78,6 +79,7 @@ public void testConfigureAuthDataStatefulSet() { .get(0).getVolumeMounts().get(0).getMountPath(), "/etc/auth"); } + @SuppressWarnings("deprecation") @Test public void testConfigureAuthDataStatefulSetNoCa() { CoreV1Api coreV1Api = mock(CoreV1Api.class); @@ -110,6 +112,7 @@ public void testConfigureAuthDataStatefulSetNoCa() { .get(0).getVolumeMounts().get(0).getMountPath(), "/etc/auth"); } + @SuppressWarnings("deprecation") @Test public void testCacheAuthData() throws ApiException { CoreV1Api coreV1Api = mock(CoreV1Api.class); @@ -138,6 +141,7 @@ public String getCommandData() { Assert.assertTrue(StringUtils.isNotBlank(new String(functionAuthData.get().getData()))); } + @SuppressWarnings("deprecation") @Test public void configureAuthenticationConfig() { byte[] testBytes = new byte[]{0, 1, 2, 3, 4}; @@ -155,6 +159,7 @@ public void configureAuthenticationConfig() { Assert.assertEquals(authenticationConfig.getTlsTrustCertsFilePath(), "/etc/auth/ca.pem"); } + @SuppressWarnings("deprecation") @Test public void configureAuthenticationConfigNoCa() { CoreV1Api coreV1Api = mock(CoreV1Api.class); @@ -172,6 +177,7 @@ public void configureAuthenticationConfigNoCa() { } + @SuppressWarnings("deprecation") @Test public void testUpdateAuthData() throws Exception { CoreV1Api coreV1Api = mock(CoreV1Api.class); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java index 452f79086446e..eac5fda00652d 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java @@ -59,6 +59,7 @@ public void testSplitRuntimeArgs() { Assert.assertEquals(result[2], "-Dfoo=\"bar foo\""); } + @SuppressWarnings("deprecation") @Test(dataProvider = "k8sRuntime") public void getGoInstanceCmd(boolean k8sRuntime) throws IOException { HashMap goInstanceConfig; diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java index fac6153a12583..b8ec805ca7689 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java @@ -73,6 +73,7 @@ public Void process(Collection> inputs, WindowContext context) th } + @SuppressWarnings("deprecation") @Test public void testAutoAckConvertFailed() { @@ -85,6 +86,7 @@ public void testAutoAckConvertFailed() { }); } + @SuppressWarnings("deprecation") @Test public void testConvertBackFidelity() throws JSONException { FunctionConfig functionConfig = new FunctionConfig(); @@ -131,6 +133,7 @@ public void testConvertBackFidelity() throws JSONException { ); } + @SuppressWarnings("deprecation") @Test public void testConvertWindow() { FunctionConfig functionConfig = new FunctionConfig(); @@ -528,6 +531,7 @@ public void testMergeRuntimeFlags() { ); } + @SuppressWarnings("deprecation") private FunctionConfig createFunctionConfig() { FunctionConfig functionConfig = new FunctionConfig(); functionConfig.setTenant("test-tenant"); @@ -593,6 +597,7 @@ public void testDisableForwardSourceMessageProperty() throws InvalidProtocolBuff assertFalse(detailsJson.contains("forwardSourceMessageProperty")); } + @SuppressWarnings("deprecation") @Test public void testFunctionConfigConvertFromDetails() { String name = "test1"; diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java index 586e51b5672d1..19e4890a5de01 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java @@ -88,6 +88,7 @@ public void close() throws Exception { + @SuppressWarnings("deprecation") @Test public void testAutoAckConvertFailed() throws IOException { @@ -101,6 +102,7 @@ public void testAutoAckConvertFailed() throws IOException { }); } + @SuppressWarnings("deprecation") @Test public void testConvertBackFidelity() throws IOException, JSONException { SinkConfig sinkConfig = new SinkConfig(); @@ -595,6 +597,7 @@ public void testValidateConfig() { .contains("Could not validate sink config: Field 'configParameter' cannot be null!")); } + @SuppressWarnings("deprecation") private SinkConfig createSinkConfig() { SinkConfig sinkConfig = new SinkConfig(); sinkConfig.setTenant("test-tenant"); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java index ee5c69c792b22..ac6d714c99ae1 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java @@ -962,6 +962,7 @@ public void testFunctionRuntimeSetCorrectly() { } } + @SuppressWarnings("deprecation") @Test public void testFunctionRuntimeFactoryConfigsBackwardsCompatibility() throws Exception { @@ -1147,6 +1148,7 @@ public void testThreadFunctionInstancesRestart() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testKubernetesFunctionInstancesRestart() throws Exception { diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java index b4e3862d1bbbb..5789658d978ac 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java @@ -323,6 +323,7 @@ public void testIsAuthorizedRole() throws Exception { .originalPrincipal("test-non-admin-user").build())); } + @SuppressWarnings("deprecation") @Test public void testIsSuperUser() throws PulsarAdminException { diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java index 82a672d325a84..b851d4a6aa452 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java @@ -167,6 +167,7 @@ public void testGetNotExistedFunction() throws IOException { } } + @SuppressWarnings("deprecation") @Test public void testGetFunctionSuccess() throws IOException { mockInstanceUtils(); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java index c1ae138355451..a2593bb415a1c 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java @@ -261,6 +261,7 @@ public void testGetNotExistedFunction() throws IOException { } } + @SuppressWarnings("deprecation") @Test public void testGetFunctionSuccess() throws IOException { mockInstanceUtils(); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java index f84b3c2e524b2..a3e8bca64ce7b 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java @@ -1304,6 +1304,7 @@ public void testGetNotExistedSource() { } } + @SuppressWarnings("deprecation") @Test public void testGetSourceSuccess() { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java index 795e91c7572e1..ed2eaa6e16835 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorCheckAllLedgersTaskTest.java @@ -61,6 +61,7 @@ public AuditorCheckAllLedgersTaskTest() { baseConf.setAutoRecoveryDaemonEnabled(false); } + @SuppressWarnings("deprecation") @BeforeMethod @Override public void setUp() throws Exception { diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java index 88c57a20f828a..55b9dd0aeee15 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorLedgerCheckerTest.java @@ -127,6 +127,7 @@ public AuditorLedgerCheckerTest() .setLedgerManagerFactoryClassName(ledgerManagerFactoryClass); } + @SuppressWarnings("deprecation") @BeforeMethod public void setUp() throws Exception { super.setUp(); diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTest.java index 5637819a9275b..d1e8ab9ca46c4 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPlacementPolicyCheckTest.java @@ -101,6 +101,7 @@ public void tearDown() throws Exception { super.tearDown(); } + @SuppressWarnings("deprecation") @Test public void testPlacementPolicyCheckWithBookiesFromDifferentRacks() throws Exception { int numOfBookies = 5; @@ -216,6 +217,7 @@ public void testPlacementPolicyCheckWithBookiesFromDifferentRacks() throws Excep } } + @SuppressWarnings("deprecation") @Test public void testPlacementPolicyCheckWithLedgersNotAdheringToPlacementPolicy() throws Exception { int numOfBookies = 5; @@ -299,6 +301,7 @@ public void testPlacementPolicyCheckWithLedgersNotAdheringToPlacementPolicy() th } } + @SuppressWarnings("deprecation") @Test public void testPlacementPolicyCheckWithLedgersNotAdheringToPlacementPolicyAndNotMarkToUnderreplication() throws Exception { @@ -371,6 +374,7 @@ public void testPlacementPolicyCheckWithLedgersNotAdheringToPlacementPolicyAndNo assertEquals(unnderReplicateLedgerId, -1); } + @SuppressWarnings("deprecation") @Test public void testPlacementPolicyCheckWithLedgersNotAdheringToPlacementPolicyAndMarkToUnderreplication() throws Exception { @@ -454,6 +458,7 @@ public void testPlacementPolicyCheckForURLedgersNotElapsedRecoveryGracePeriod() testPlacementPolicyCheckWithURLedgers(false); } + @SuppressWarnings("deprecation") public void testPlacementPolicyCheckWithURLedgers(boolean timeElapsed) throws Exception { int numOfBookies = 4; /* @@ -578,6 +583,7 @@ public void testPlacementPolicyCheckWithURLedgers(boolean timeElapsed) throws Ex } } + @SuppressWarnings("deprecation") @Test public void testPlacementPolicyCheckWithLedgersNotAdheringToPolicyWithMultipleSegments() throws Exception { int numOfBookies = 7; @@ -682,6 +688,7 @@ public void testPlacementPolicyCheckWithLedgersNotAdheringToPolicyWithMultipleSe } } + @SuppressWarnings("deprecation") @Test public void testZoneawarePlacementPolicyCheck() throws Exception { int numOfBookies = 6; diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java index 2e9dbc158597d..1869b1966bcb5 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java @@ -227,6 +227,7 @@ private void createNonClosedLedgerMetadata(LedgerManager lm, long ledgerId, int lm.createLedgerMetadata(ledgerId, initMeta).get(); } + @SuppressWarnings("deprecation") private void runTestScenario(MultiKeyMap returnAvailabilityOfEntriesOfLedger, MultiKeyMap errorReturnValueForGetAvailabilityOfEntriesOfLedger, int expectedNumLedgersFoundHavingNoReplicaOfAnEntry, diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java index 425f485e1ad2b..59be8395332da 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieLedgerIndexTest.java @@ -79,6 +79,7 @@ public BookieLedgerIndexTest() throws Exception { Class.forName("org.apache.pulsar.metadata.bookkeeper.PulsarMetadataBookieDriver"); } + @SuppressWarnings("deprecation") @BeforeMethod public void setUp() throws Exception { super.setUp(); @@ -148,7 +149,6 @@ public void testSimpleBookieLedgerMapping() throws Exception { /** * Verify ledger index with failed bookies and throws exception. */ - @SuppressWarnings("deprecation") // @Test // public void testWithoutZookeeper() throws Exception { // // This test case is for ledger metadata that stored in ZooKeeper. As diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java index 008817195cc63..c8c0f7dea8917 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java @@ -991,6 +991,7 @@ public void testRepairedNotAdheringPlacementPolicyLedgerFragmentsOnRack() throws testRepairedNotAdheringPlacementPolicyLedgerFragments(RackawareEnsemblePlacementPolicy.class, null); } + @SuppressWarnings("deprecation") @Test public void testReplicationStats() throws Exception { BiConsumer checkReplicationStats = (first, rw) -> { @@ -1033,6 +1034,7 @@ public void testReplicationStats() throws Exception { testRepairedNotAdheringPlacementPolicyLedgerFragments( RackawareEnsemblePlacementPolicy.class, checkReplicationStats); } + @SuppressWarnings("deprecation") private void testRepairedNotAdheringPlacementPolicyLedgerFragments( Class placementPolicyClass, diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BacklogQuotaCompatibilityTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BacklogQuotaCompatibilityTest.java index 7351f0d5b4b59..823a071f45395 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BacklogQuotaCompatibilityTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BacklogQuotaCompatibilityTest.java @@ -59,6 +59,7 @@ public void testV27ClientSetV28BrokerRead() throws Exception { Assert.assertEquals(readBacklogQuota.getPolicy(), testPolicy); } + @SuppressWarnings("deprecation") @Test public void testV28ClientSetV28BrokerRead() throws Exception { Policies writePolicy = new Policies(); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java index 75efe5455c699..d55ad072dff42 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java @@ -77,6 +77,7 @@ public void setup() throws Exception { mockZkStoreRef = MetadataStoreFactory.create(mockZkUrl, MetadataStoreConfig.builder().build()); } + @SuppressWarnings("deprecation") @AfterClass(alwaysRun = true) @Override public void cleanup() throws Exception { diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java index f604dd69b0766..6905e639fe139 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java @@ -102,6 +102,7 @@ private static ZooKeeperServer getZooKeeperServer(ZooKeeperServerMain zooKeeperS return zkServer; } + @SuppressWarnings("deprecation") @SneakyThrows private static T readField(Class clazz, String field, Object object) { Field declaredField = clazz.getDeclaredField(field); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/LedgerUnderreplicationManagerTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/LedgerUnderreplicationManagerTest.java index ac73491a81c65..d738ad8e49331 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/LedgerUnderreplicationManagerTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/LedgerUnderreplicationManagerTest.java @@ -94,6 +94,7 @@ private Future getLedgerToReplicate(LedgerUnderreplicationManager m) { private String urLedgerPath; private ExecutorService executor; + @SuppressWarnings("deprecation") private void methodSetup(Supplier urlSupplier) throws Exception { this.executor = Executors.newSingleThreadExecutor(); String ledgersRoot = "/ledgers-" + UUID.randomUUID(); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/PulsarRegistrationClientTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/PulsarRegistrationClientTest.java index 5730d97ef238c..21ed908bf26bb 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/PulsarRegistrationClientTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/bookkeeper/PulsarRegistrationClientTest.java @@ -360,6 +360,7 @@ private void testWatchBookiesSuccess(String provider, Supplier urlSuppli } + @SuppressWarnings("deprecation") @Test public void testNetworkDelayWithBkZkManager() throws Throwable { final String zksConnectionString = zks.getConnectionString(); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/RocksdbMetadataStoreTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/RocksdbMetadataStoreTest.java index e0f509cbce9d7..409e18df41fab 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/RocksdbMetadataStoreTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/RocksdbMetadataStoreTest.java @@ -48,6 +48,7 @@ public void testConvert() { Assert.assertEquals(l, RocksdbMetadataStore.toLong(RocksdbMetadataStore.toBytes(l))); } + @SuppressWarnings("deprecation") @Test public void testMetaValue() throws Exception { RocksdbMetadataStore.MetaValue metaValue = new RocksdbMetadataStore.MetaValue(); diff --git a/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/BookKeeperPackagesStorageTest.java b/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/BookKeeperPackagesStorageTest.java index 51da1620587db..0362b665c8bb9 100644 --- a/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/BookKeeperPackagesStorageTest.java +++ b/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/BookKeeperPackagesStorageTest.java @@ -90,6 +90,7 @@ public void testReadWriteOperations() throws ExecutionException, InterruptedExce assertEquals(testData, readResult); } + @SuppressWarnings("deprecation") @Test(timeOut = 60000) public void testReadWriteLargeDataOperations() throws ExecutionException, InterruptedException { byte[] data = RandomUtils.nextBytes(8192 * 3 + 4096); diff --git a/pulsar-package-management/filesystem-storage/src/test/java/org/apache/pulsar/packages/management/storage/filesystem/FileSystemPackagesStorageTest.java b/pulsar-package-management/filesystem-storage/src/test/java/org/apache/pulsar/packages/management/storage/filesystem/FileSystemPackagesStorageTest.java index c1b67ca78bf11..f139f909deb3c 100644 --- a/pulsar-package-management/filesystem-storage/src/test/java/org/apache/pulsar/packages/management/storage/filesystem/FileSystemPackagesStorageTest.java +++ b/pulsar-package-management/filesystem-storage/src/test/java/org/apache/pulsar/packages/management/storage/filesystem/FileSystemPackagesStorageTest.java @@ -85,6 +85,7 @@ public void testReadWriteOperations() throws ExecutionException, InterruptedExce assertEquals(testData, readResult); } + @SuppressWarnings("deprecation") @Test(timeOut = 60000) public void testReadWriteLargeDataOperations() throws ExecutionException, InterruptedException { byte[] data = RandomUtils.nextBytes(8192 * 3 + 4096); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConProxyTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConProxyTest.java index f20216d57d8c8..cd60f4ae108ad 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConProxyTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConProxyTest.java @@ -52,6 +52,7 @@ public class AutoCloseUselessClientConProxyTest extends AutoCloseUselessClientCo private PulsarClient proxiedClient; private AtomicInteger connectionCreationCounter = new AtomicInteger(0); + @SuppressWarnings("deprecation") @Override protected void additionalSetup() throws Exception { proxyConfig = new ProxyConfiguration(); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAdditionalServletTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAdditionalServletTest.java index 3bde6dd431aa8..166e83ee98623 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAdditionalServletTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAdditionalServletTest.java @@ -115,6 +115,7 @@ protected void setup() throws Exception { } // this is for nar package test + @SuppressWarnings("deprecation") private void addServletNar() { Properties properties = new Properties(); properties.setProperty("basePath", "/metrics-prometheus/broker"); @@ -200,6 +201,7 @@ protected void cleanup() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void test() throws IOException { int httpPort = proxyWebServer.getListenPortHTTP().get(); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticatedProducerConsumerTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticatedProducerConsumerTest.java index 61ac6c96a5d84..31bad35abfe21 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticatedProducerConsumerTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticatedProducerConsumerTest.java @@ -233,6 +233,7 @@ public void testTlsSyncProducerAndConsumer() throws Exception { log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") protected final PulsarClient createPulsarClient(Authentication auth, String lookupUrl) throws Exception { closeAdmin(); admin = spy(PulsarAdmin.builder().serviceHttpUrl(brokerUrlTls.toString()) diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticationTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticationTest.java index 04529629de7f1..e8e5373107aba 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticationTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyAuthenticationTest.java @@ -110,6 +110,7 @@ public String getAuthMethodName() { return "BasicAuthentication"; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { try { @@ -119,6 +120,7 @@ public AuthenticationDataProvider getAuthData() throws PulsarClientException { } } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { this.authParam = String.format("{\"entityType\": \"%s\", \"expiryTime\": \"%s\"}", @@ -171,6 +173,7 @@ public String getAuthRole() { return authRole; } + @SuppressWarnings("deprecation") @Override public AuthData authenticate(AuthData authData) throws AuthenticationException { return null; // Authentication complete @@ -186,6 +189,7 @@ public AuthenticationDataSource getAuthDataSource() { return authenticationDataSource; } + @SuppressWarnings("deprecation") @Override public boolean isComplete() { return authRole != null; @@ -203,6 +207,7 @@ public static class BasicAuthenticationProvider implements AuthenticationProvide public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyConfigurationTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyConfigurationTest.java index f722aef38fea2..af8166cf3fb60 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyConfigurationTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyConfigurationTest.java @@ -118,6 +118,7 @@ public void testBackwardCompatibility() throws IOException { } + @SuppressWarnings("deprecation") @Test public void testConvert() throws IOException { File testConfigFile = new File("tmp." + System.currentTimeMillis() + ".properties"); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithAuthTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithAuthTest.java index 8877395633aab..eea3a93a20294 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithAuthTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithAuthTest.java @@ -115,6 +115,7 @@ protected void cleanup() throws Exception { } } + @SuppressWarnings("deprecation") protected PulsarClient internalSetUpForClient(boolean addCertificates, String lookupUrl) throws Exception { ClientBuilder clientBuilder = PulsarClient.builder() .serviceUrl(lookupUrl) diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithoutAuthTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithoutAuthTest.java index 397f05affe9bc..1dd68ae588dc5 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithoutAuthTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyKeyStoreTlsWithoutAuthTest.java @@ -92,6 +92,7 @@ protected void setup() throws Exception { proxyService.start(); } + @SuppressWarnings("deprecation") protected PulsarClient internalSetUpForClient(boolean addCertificates, String lookupUrl) throws Exception { ClientBuilder clientBuilder = PulsarClient.builder() .serviceUrl(lookupUrl) diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java index 4269bcf66c502..e7b6d1b350e87 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java @@ -220,6 +220,7 @@ public void testRegexSubscription() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testProtocolVersionAdvertisement() throws Exception { final String topic = "persistent://public/default/protocol-version-advertisement"; diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRefreshAuthTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRefreshAuthTest.java index 7501eb9306f98..8348fe83b527f 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRefreshAuthTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRefreshAuthTest.java @@ -55,6 +55,7 @@ @Slf4j public class ProxyRefreshAuthTest extends ProducerConsumerBase { private static final String CLUSTER_NAME = "proxy-authorization"; + @SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); private ProxyService proxyService; @@ -160,6 +161,7 @@ Object[] forwardAuthDataProvider() { return new Object[]{true, false}; } + @SuppressWarnings("deprecation") @Test(dataProvider = "forwardAuthDataProvider") public void testAuthDataRefresh(boolean forwardAuthData) throws Exception { log.info("-- Starting {} test --", methodName); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRolesEnforcementTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRolesEnforcementTest.java index 11b2d7b895c60..7c21ed710259d 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRolesEnforcementTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyRolesEnforcementTest.java @@ -94,6 +94,7 @@ public String getAuthMethodName() { return "BasicAuthentication"; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { try { @@ -103,6 +104,7 @@ public AuthenticationDataProvider getAuthData() throws PulsarClientException { } } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { this.authParam = authParams.get("authParam"); @@ -120,6 +122,7 @@ public static class BasicAuthenticationProvider implements AuthenticationProvide public void close() throws IOException { } + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { } @@ -129,6 +132,7 @@ public String getAuthMethodName() { return "BasicAuthentication"; } + @SuppressWarnings("deprecation") @Override public String authenticate(AuthenticationDataSource authData) throws AuthenticationException { if (authData.hasDataFromCommand()) { diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyServiceStarterTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyServiceStarterTest.java index 9b6d7968703cc..0db9dd33573d4 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyServiceStarterTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyServiceStarterTest.java @@ -234,6 +234,7 @@ public String getAuthMethodName() { return "org.apache.pulsar.proxy.server.ProxyConfigurationTest.ExceptionAuthentication1"; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { // no-op @@ -257,6 +258,7 @@ public String getAuthMethodName() { return "org.apache.pulsar.proxy.server.ProxyConfigurationTest.ExceptionAuthentication2"; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { // no-op diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java index 4a00314bb0e8c..7fe07361ade5e 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java @@ -263,6 +263,7 @@ public void testPartitions() throws Exception { /** * test auto create partitioned topic by proxy. **/ + @SuppressWarnings("deprecation") @Test public void testAutoCreateTopic() throws Exception{ TopicType originalAllowAutoTopicCreationType = pulsar.getConfiguration().getAllowAutoTopicCreationType(); @@ -559,6 +560,7 @@ protected ByteBuf newConnectCommand() throws Exception { admin.topics().delete(topic); } + @SuppressWarnings("deprecation") private PulsarClient getClientActiveConsumerChangeNotSupported(ClientConfigurationData conf) throws Exception { ThreadFactory threadFactory = new DefaultThreadFactory("pulsar-client-io", Thread.currentThread().isDaemon()); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithAuthorizationTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithAuthorizationTest.java index 4b2d78f396612..611a2dcca3934 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithAuthorizationTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithAuthorizationTest.java @@ -66,6 +66,7 @@ public class ProxyWithAuthorizationTest extends ProducerConsumerBase { private static final Logger log = LoggerFactory.getLogger(ProxyWithAuthorizationTest.class); private static final String CLUSTER_NAME = "proxy-authorization"; +@SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); private static final String CLIENT_TOKEN = AuthTokenUtils.createToken(SECRET_KEY, "Client", Optional.empty()); @@ -534,6 +535,7 @@ public Object[] tlsTransportWithAuth() { }; } + @SuppressWarnings("deprecation") @Test(dataProvider = "tlsTransportWithAuth") public void testProxyTlsTransportWithAuth(Authentication auth) throws Exception { log.info("-- Starting {} test --", methodName); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithJwtAuthorizationTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithJwtAuthorizationTest.java index 38cb254dc4dfd..c26d1e0cb80c4 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithJwtAuthorizationTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithJwtAuthorizationTest.java @@ -72,11 +72,16 @@ public class ProxyWithJwtAuthorizationTest extends ProducerConsumerBase { private static final String PROXY_ROLE = "proxy"; private static final String BROKER_ROLE = "broker"; private static final String CLIENT_ROLE = "client"; + @SuppressWarnings("deprecation") private static final SecretKey SECRET_KEY = AuthTokenUtils.createSecretKey(SignatureAlgorithm.HS256); +@SuppressWarnings("deprecation") private static final String ADMIN_TOKEN = Jwts.builder().setSubject(ADMIN_ROLE).signWith(SECRET_KEY).compact(); + @SuppressWarnings("deprecation") private static final String PROXY_TOKEN = Jwts.builder().setSubject(PROXY_ROLE).signWith(SECRET_KEY).compact(); + @SuppressWarnings("deprecation") private static final String BROKER_TOKEN = Jwts.builder().setSubject(BROKER_ROLE).signWith(SECRET_KEY).compact(); + @SuppressWarnings("deprecation") private static final String CLIENT_TOKEN = Jwts.builder().setSubject(CLIENT_ROLE).signWith(SECRET_KEY).compact(); private ProxyService proxyService; @@ -490,6 +495,7 @@ private void createAdminClient() throws Exception { .authentication(AuthenticationFactory.token(ADMIN_TOKEN)).build()); } + @SuppressWarnings("deprecation") private PulsarClient createPulsarClient(String proxyServiceUrl, ClientBuilder clientBuilder) throws PulsarClientException { return clientBuilder.serviceUrl(proxyServiceUrl).statsInterval(0, TimeUnit.SECONDS) diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithoutServiceDiscoveryTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithoutServiceDiscoveryTest.java index 8f187cbe47b7d..875e2984fbd33 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithoutServiceDiscoveryTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithoutServiceDiscoveryTest.java @@ -155,6 +155,7 @@ protected void cleanup() throws Exception { * * @throws Exception */ + @SuppressWarnings("deprecation") @Test public void testDiscoveryService() throws Exception { log.info("-- Starting {} test --", methodName); @@ -204,6 +205,7 @@ public void testDiscoveryService() throws Exception { log.info("-- Exiting {} test --", methodName); } + @SuppressWarnings("deprecation") protected final PulsarClient createPulsarClient(Authentication auth, String lookupUrl) throws Exception { closeAdmin(); admin = spy(PulsarAdmin.builder().serviceHttpUrl(brokerUrlTls.toString()) diff --git a/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/Oauth2PerformanceTransactionTest.java b/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/Oauth2PerformanceTransactionTest.java index af2fd4a9232bc..1dc4b8a5ab8cd 100644 --- a/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/Oauth2PerformanceTransactionTest.java +++ b/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/Oauth2PerformanceTransactionTest.java @@ -124,6 +124,7 @@ protected void cleanup() throws Exception { } // setup both admin and pulsar client + @SuppressWarnings("deprecation") protected final void clientSetup() throws Exception { Path path = Paths.get(CREDENTIALS_FILE).toAbsolutePath(); log.info("Credentials File path: {}", path); diff --git a/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerfClientUtilsTest.java b/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerfClientUtilsTest.java index 0c2677db7aa03..b63b1e8930c8d 100644 --- a/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerfClientUtilsTest.java +++ b/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerfClientUtilsTest.java @@ -40,6 +40,7 @@ public String getAuthMethodName() { return null; } + @SuppressWarnings("deprecation") @Override public void configure(Map authParams) { } diff --git a/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerformanceTransactionTest.java b/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerformanceTransactionTest.java index 27fb012de8802..fed947f6f25cf 100644 --- a/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerformanceTransactionTest.java +++ b/pulsar-testclient/src/test/java/org/apache/pulsar/testclient/PerformanceTransactionTest.java @@ -90,6 +90,7 @@ protected void cleanup() throws Exception { } } + @SuppressWarnings("deprecation") @Test public void testTxnPerf() throws Exception { String argString = "--topics-c %s --topics-p %s -threads 1 -ntxn 50 -u %s -ss %s -rs -np 1 -au %s"; diff --git a/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/WebSocketHttpServletRequestWrapperTest.java b/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/WebSocketHttpServletRequestWrapperTest.java index f7955e9362e10..684f9a2fdd92b 100644 --- a/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/WebSocketHttpServletRequestWrapperTest.java +++ b/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/WebSocketHttpServletRequestWrapperTest.java @@ -64,6 +64,7 @@ public void testTokenParamWithOutBearerPrefix() { BEARER_TOKEN); } + @SuppressWarnings("deprecation") @Test public void mockRequestTest() throws Exception { WebSocketProxyConfiguration config = PulsarConfigurationLoader.create( diff --git a/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/admin/WebSocketWebResourceTest.java b/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/admin/WebSocketWebResourceTest.java index acf60309b239e..5ab806a63008f 100644 --- a/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/admin/WebSocketWebResourceTest.java +++ b/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/admin/WebSocketWebResourceTest.java @@ -66,6 +66,7 @@ public class WebSocketWebResourceTest { @Mock private UriInfo uri; + @SuppressWarnings("deprecation") @BeforeMethod public void setup(Method method) throws Exception { MockitoAnnotations.openMocks(this); diff --git a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java index 91af35cd621f8..13797e81639f0 100644 --- a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java +++ b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/MockManagedLedger.java @@ -342,6 +342,7 @@ public void trimConsumedLedgersInBackground(CompletableFuture promise) { } + @SuppressWarnings("deprecation") @Override public void rollCurrentLedgerIfFull() { From f2dbcafc3d1496256b55cd5334fff32f9fc5e53e Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 06:40:45 -0700 Subject: [PATCH 04/22] [improve][test] Fix cast, static, removal, and varargs compile warnings in test code (#25428) --- .../mledger/impl/ManagedCursorTest.java | 2 +- .../impl/cache/InflightReadsLimiterTest.java | 4 ++-- .../apache/bookkeeper/test/ZooKeeperUtil.java | 2 +- .../prometheus/PrometheusMetricsClient.java | 1 + ...ntryCacheKeySharedSubscriptionV30Test.java | 16 ++++++------- .../proxy/ProxyPublishConsumeTest.java | 2 +- .../apache/pulsar/admin/cli/TestRunMain.java | 2 +- .../pulsar/common/schema/KeyValueTest.java | 2 +- .../common/policies/data/OldPolicies.java | 5 ++++ .../source/batch/BatchSourceExecutorTest.java | 24 +++++++++---------- .../bookkeeper/replication/ZooKeeperUtil.java | 2 +- .../apache/pulsar/metadata/ZKSessionTest.java | 4 ++-- .../bookkeeper/test/ZooKeeperUtil.java | 1 + .../jcloud/impl/DataBlockHeaderTest.java | 2 +- 14 files changed, 38 insertions(+), 31 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java index a3449298fd89c..ef43839b233ac 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java @@ -834,7 +834,7 @@ void testAsyncReadWithMaxSizeByte() throws Exception { ManagedCursor cursor = ledger.openCursor("c1"); for (int i = 0; i < 100; i++) { - ledger.addEntry(new byte[(int) (1024)]); + ledger.addEntry(new byte[1024]); } // Since https://github.com/apache/pulsar/pull/23931 improved the performance of delivery, the consumer diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java index b4c5934e2b2f8..07c5b0c517c02 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/InflightReadsLimiterTest.java @@ -546,8 +546,8 @@ public void testPrometheusMetrics() throws Exception { InflightReadsLimiter limiter = new InflightReadsLimiter(maxReadsInFlightSize, ACQUIRE_QUEUE_SIZE, ACQUIRE_TIMEOUT_MILLIS, mock(ScheduledExecutorService.class), OpenTelemetry.noop()); - Assertions.assertThat(limiter.PULSAR_ML_READS_BUFFER_SIZE.get()).isZero(); - Assertions.assertThat(limiter.PULSAR_ML_READS_AVAILABLE_BUFFER_SIZE.get()) + Assertions.assertThat(InflightReadsLimiter.PULSAR_ML_READS_BUFFER_SIZE.get()).isZero(); + Assertions.assertThat(InflightReadsLimiter.PULSAR_ML_READS_AVAILABLE_BUFFER_SIZE.get()) .isEqualTo(maxReadsInFlightSize); } diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java b/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java index b925334d65c56..aa618e2639c4f 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java @@ -170,7 +170,7 @@ public void sleepCluster(final int time, for (final Thread t : allthreads) { if (t.getName().contains("SyncThread:0")) { Thread sleeper = new Thread() { - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "removal"}) public void run() { try { t.suspend(); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsClient.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsClient.java index 298cbc2f65862..0d801bade654e 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsClient.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/stats/prometheus/PrometheusMetricsClient.java @@ -143,6 +143,7 @@ public final List findByNameAndLabels(String metricName, Pair... nameValuePairs) { List metricByNameAndLabels = findByNameAndLabels(metricName, nameValuePairs); if (metricByNameAndLabels.size() != 1) { diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java index 734d280684080..1814894582de2 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java @@ -133,9 +133,9 @@ public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { // - ack all messages that consumer1 or consumer2 received. // - do not ack messages that consumer2 received. ackAllMessages(consumer1, consumer2); - Position mdPosition = (Position) cursor.getMarkDeletedPosition(); - Position readPosition = (Position) cursor.getReadPosition(); - Position lastConfirmed = (Position) ml.getLastConfirmedEntry(); + Position mdPosition = cursor.getMarkDeletedPosition(); + Position readPosition = cursor.getReadPosition(); + Position lastConfirmed = ml.getLastConfirmedEntry(); assertTrue(readPosition.compareTo(lastConfirmed) >= 0); Position firstWaitingAckPos = ml.getNextValidPosition(mdPosition); log.info("md-pos {}:{}", mdPosition.getLedgerId(), mdPosition.getEntryId()); @@ -223,9 +223,9 @@ public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { } log.info("recent-joined-consumers {} {}", i, dispatcher.getRecentlyJoinedConsumers().size()); if (dispatcher.getRecentlyJoinedConsumers().size() > 0) { - Position mdPosition2 = (Position) cursor.getMarkDeletedPosition(); - Position readPosition2 = (Position) cursor.getReadPosition(); - Position lastConfirmed2 = (Position) ml.getLastConfirmedEntry(); + Position mdPosition2 = cursor.getMarkDeletedPosition(); + Position readPosition2 = cursor.getReadPosition(); + Position lastConfirmed2 = ml.getLastConfirmedEntry(); assertTrue(readPosition.compareTo(lastConfirmed) >= 0); Position firstWaitingAckPos2 = ml.getNextValidPosition(mdPosition); if (readPosition2.compareTo(firstWaitingAckPos) > 0) { @@ -272,9 +272,9 @@ private boolean verifyMapItemsAreInOrder(LinkedHashMap entry : map.entrySet()) { if (posPre == null) { - posPre = (Position) entry.getValue(); + posPre = entry.getValue(); } else { - posAfter = (Position) entry.getValue(); + posAfter = entry.getValue(); } if (posPre != null && posAfter != null) { if (posPre.compareTo(posAfter) > 0) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyPublishConsumeTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyPublishConsumeTest.java index 79b6d9cbdbba8..6078833578fcf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyPublishConsumeTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/websocket/proxy/ProxyPublishConsumeTest.java @@ -1030,7 +1030,7 @@ private void verifyTopicStat(Client client, String baseUrl, String topic) { String statUrl = baseUrl + topic + "/stats"; WebTarget webTarget = client.target(statUrl); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); - Response response = (Response) invocationBuilder.get(); + Response response = invocationBuilder.get(); String responseStr = response.readEntity(String.class); final Gson gson = new Gson(); final ProxyTopicStat data = gson.fromJson(responseStr, ProxyTopicStat.class); diff --git a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestRunMain.java b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestRunMain.java index 17b4fde011c29..ad1c8a24d2e86 100644 --- a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestRunMain.java +++ b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestRunMain.java @@ -102,7 +102,7 @@ public void testMainArgs() throws Exception { boolean prevValue = PulsarAdminTool.allowSystemExit; PulsarAdminTool.allowSystemExit = false; - String argStr = argStr = argStrTemp.format(argStrTemp, testConfigFile.getAbsolutePath(), + String argStr = String.format(argStrTemp, testConfigFile.getAbsolutePath(), "--tls-trust-cert-path " + tlsTrustCertsFilePathInArg); PulsarAdminTool tool = PulsarAdminTool.execute(argStr.split(" ")); assertNotNull(tool); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java b/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java index 919efb89f0f48..67f956e42d239 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java @@ -70,7 +70,7 @@ public class KeyValueTest { put(StringSchema.utf8(), Arrays.asList("my string")); put(ByteSchema.of(), Arrays.asList((byte) 32767, (byte) -32768)); put(ShortSchema.of(), Arrays.asList((short) 32767, (short) -32768)); - put(IntSchema.of(), Arrays.asList((int) 423412424, (int) -41243432)); + put(IntSchema.of(), Arrays.asList(423412424, -41243432)); put(LongSchema.of(), Arrays.asList(922337203685477580L, -922337203685477581L)); put(FloatSchema.of(), Arrays.asList(5678567.12312f, -5678567.12341f)); put(DoubleSchema.of(), Arrays.asList(5678567.12312d, -5678567.12341d)); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/OldPolicies.java b/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/OldPolicies.java index d73cb7410cb62..9fb43e2d3a5f2 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/OldPolicies.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/policies/data/OldPolicies.java @@ -53,4 +53,9 @@ public boolean equals(Object obj) { return false; } + @Override + public int hashCode() { + return Objects.hash(authPolicies, replicationClusters, backlogQuotaMap, persistence, latencyStatsSampleRate); + } + } diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java index 400891698164e..04106863a7a16 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java @@ -369,43 +369,43 @@ public void testPushOpenWithRightSource() throws Exception { @Test public void testLifeCycle() throws Exception { batchSourceExecutor.open(config, context); - Assert.assertEquals(testBatchSource.getDiscoverCount(), 0); + Assert.assertEquals(TestBatchSource.getDiscoverCount(), 0); triggerQueue.put("trigger"); completedQueue.take(); - Assert.assertEquals(testBatchSource.getDiscoverCount(), 1); + Assert.assertEquals(TestBatchSource.getDiscoverCount(), 1); for (int i = 0; i < 5; ++i) { batchSourceExecutor.read(); } - Assert.assertEquals(testBatchSource.getRecordCount(), 6); - Assert.assertEquals(testBatchSource.getDiscoverCount(), 1); + Assert.assertEquals(TestBatchSource.getRecordCount(), 6); + Assert.assertEquals(TestBatchSource.getDiscoverCount(), 1); awaitDiscoverNotInProgress(); triggerQueue.put("trigger"); completedQueue.take(); - Assert.assertTrue(testBatchSource.getDiscoverCount() == 2); + Assert.assertTrue(TestBatchSource.getDiscoverCount() == 2); batchSourceExecutor.close(); - Assert.assertEquals(testBatchSource.getCloseCount(), 1); + Assert.assertEquals(TestBatchSource.getCloseCount(), 1); } @Test public void testPushLifeCycle() throws Exception { batchSourceExecutor.open(pushConfig, context); - Assert.assertEquals(testBatchPushSource.getDiscoverCount(), 0); + Assert.assertEquals(TestBatchPushSource.getDiscoverCount(), 0); triggerQueue.put("trigger"); completedQueue.take(); - Assert.assertEquals(testBatchPushSource.getDiscoverCount(), 1); + Assert.assertEquals(TestBatchPushSource.getDiscoverCount(), 1); for (int i = 0; i < 5; ++i) { batchSourceExecutor.read(); } - Assert.assertEquals(testBatchPushSource.getRecordCount(), 5); - Assert.assertEquals(testBatchPushSource.getDiscoverCount(), 1); + Assert.assertEquals(TestBatchPushSource.getRecordCount(), 5); + Assert.assertEquals(TestBatchPushSource.getDiscoverCount(), 1); awaitDiscoverNotInProgress(); triggerQueue.put("trigger"); completedQueue.take(); - Assert.assertEquals(testBatchPushSource.getDiscoverCount(), 2); + Assert.assertEquals(TestBatchPushSource.getDiscoverCount(), 2); batchSourceExecutor.close(); - Assert.assertEquals(testBatchPushSource.getCloseCount(), 1); + Assert.assertEquals(TestBatchPushSource.getCloseCount(), 1); } @Test(expectedExceptions = Exception.class, expectedExceptionsMessageRegExp = "discovery failed") diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java index 5113edb72c49a..6f63ecf9145ba 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java @@ -171,7 +171,7 @@ public void sleepCluster(final int time, for (final Thread t : allthreads) { if (t.getName().contains("SyncThread:0")) { Thread sleeper = new Thread() { - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "removal"}) public void run() { try { t.suspend(); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/ZKSessionTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/ZKSessionTest.java index e9c41766dbc65..59752abfc7e46 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/ZKSessionTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/ZKSessionTest.java @@ -93,7 +93,7 @@ public void testSessionLost() throws Exception { assertEquals(e, SessionEvent.SessionLost); zks.start(); - boolean zkServerReady = zks.waitForServerUp(zks.getConnectionString(), 30_000); + boolean zkServerReady = TestZKServer.waitForServerUp(zks.getConnectionString(), 30_000); assertTrue(zkServerReady); e = sessionEvents.poll(10, TimeUnit.SECONDS); assertEquals(e, SessionEvent.Reconnected); @@ -127,7 +127,7 @@ public void testNoDuplicateWatcherRegistrationAfterSessionReestablished() throws assertEquals(e, SessionEvent.SessionLost); zks.start(); - boolean zkServerReady = zks.waitForServerUp(zks.getConnectionString(), 30_000); + boolean zkServerReady = TestZKServer.waitForServerUp(zks.getConnectionString(), 30_000); assertTrue(zkServerReady); e = sessionEvents.poll(10, TimeUnit.SECONDS); assertEquals(e, SessionEvent.Reconnected); diff --git a/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/ZooKeeperUtil.java b/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/ZooKeeperUtil.java index c94723dcc764a..c3223ff4bcdd0 100644 --- a/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/ZooKeeperUtil.java +++ b/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/ZooKeeperUtil.java @@ -110,6 +110,7 @@ public void sleepCluster(final int time, final TimeUnit timeUnit, final CountDow final Thread t = var5[var7]; if (t.getName().contains("SyncThread:0")) { Thread sleeper = new Thread() { + @SuppressWarnings({"deprecation", "removal"}) public void run() { try { t.suspend(); diff --git a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/DataBlockHeaderTest.java b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/DataBlockHeaderTest.java index 0a9b7de09d5ca..5018afa3b6994 100644 --- a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/DataBlockHeaderTest.java +++ b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/DataBlockHeaderTest.java @@ -41,7 +41,7 @@ public void dataBlockHeaderImplTest() throws Exception { firstEntryId); // verify get methods - assertEquals(dataBlockHeader.getBlockMagicWord(), DataBlockHeaderImpl.MAGIC_WORD); + assertEquals(DataBlockHeaderImpl.getBlockMagicWord(), DataBlockHeaderImpl.MAGIC_WORD); assertEquals(dataBlockHeader.getBlockLength(), blockLength); assertEquals(dataBlockHeader.getFirstEntryId(), firstEntryId); From 7690830e3b0abcea76f314e72af567e8e07febae Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 08:51:54 -0700 Subject: [PATCH 05/22] [improve][test] Fix rawtypes compile warnings in test code (#25430) --- .../InflightReadsLimiterIntegrationTest.java | 4 +- .../mledger/impl/ManagedCursorTest.java | 6 +- .../mledger/impl/ManagedLedgerBkTest.java | 14 +-- .../mledger/impl/ManagedLedgerTest.java | 12 +-- .../mledger/impl/OffloadPrefixReadTest.java | 6 +- .../MangedLedgerInterceptorImpl2Test.java | 4 +- ...ntryCacheKeySharedSubscriptionV30Test.java | 5 +- .../pulsar/PulsarBrokerStarterTest.java | 2 +- .../PulsarClusterMetadataTeardownTest.java | 2 +- .../pulsar/PulsarVersionStarterTest.java | 2 +- .../LedgerLostAndSkipNonRecoverableTest.java | 11 ++- .../pulsar/broker/admin/AdminApi2Test.java | 16 ++-- .../broker/admin/AdminApiHealthCheckTest.java | 1 + .../admin/AdminApiMaxUnackedMessagesTest.java | 12 +-- .../broker/admin/AdminApiSchemaTest.java | 2 +- .../AdminApiSchemaValidationEnforcedTest.java | 8 +- .../apache/pulsar/broker/admin/AdminTest.java | 4 +- .../admin/AnalyzeBacklogSubscriptionTest.java | 14 +-- .../broker/admin/CreateSubscriptionTest.java | 8 +- .../broker/admin/TopicMessageTTLTest.java | 2 +- .../broker/admin/TopicPoliciesTest.java | 38 ++++---- .../admin/v3/AdminApiTransactionTest.java | 2 +- .../auth/MockedPulsarServiceBaseTest.java | 4 +- .../BrokerEntryCacheRollingRestartTest.java | 1 + .../broker/cache/BrokerEntryCacheTest.java | 4 + .../MinimumBacklogCacheStrategyTest.java | 1 + .../ExceptionsBrokerInterceptorTest.java | 4 +- .../ModularLoadManagerStrategyTest.java | 8 +- .../ExtensibleLoadManagerImplTest.java | 2 + .../channel/ServiceUnitStateChannelTest.java | 8 +- .../extensions/models/TopKBundlesTest.java | 6 +- .../reporter/BrokerLoadDataReporterTest.java | 1 + .../TopBundleLoadDataReporterTest.java | 3 +- .../scheduler/SplitSchedulerTest.java | 4 +- ...faultNamespaceBundleSplitStrategyTest.java | 2 +- .../impl/ModularLoadManagerImplTest.java | 4 +- .../broker/service/OneWayReplicatorTest.java | 10 +- .../broker/service/PersistentTopicTest.java | 2 +- .../service/ReplicatedSubscriptionTest.java | 4 +- .../pulsar/broker/service/TopicGCTest.java | 2 +- ...ransactionalReplicateSubscriptionTest.java | 4 +- .../PersistentReplicatorInflightTaskTest.java | 2 +- .../PersistentTopicProtectedMethodsTest.java | 2 +- .../persistent/PersistentTopicTest.java | 8 +- .../systopic/PartitionedSystemTopicTest.java | 6 +- .../pulsar/broker/tools/BrokerToolTest.java | 2 +- .../SegmentAbortedTxnProcessorTest.java | 7 +- .../TopicTransactionBufferRecoverTest.java | 8 +- .../transaction/TransactionConsumeTest.java | 2 +- .../broker/transaction/TransactionTest.java | 19 +++- .../impl/MLPendingAckStoreTest.java | 2 +- ...dditionalServletWithPulsarServiceTest.java | 1 + .../client/api/ProducerConsumerBase.java | 2 +- .../pulsar/admin/cli/PulsarAdminToolTest.java | 3 +- .../cli/PulsarClientToolForceBatchNum.java | 1 + .../impl/BatchMessageContainerImplTest.java | 2 +- .../pulsar/client/impl/BuildersTest.java | 4 +- .../pulsar/client/impl/ClientCnxTest.java | 4 +- .../pulsar/client/impl/ConsumerImplTest.java | 3 + .../pulsar/client/impl/MessageImplTest.java | 18 ++-- .../impl/MultiTopicsConsumerImplTest.java | 2 + .../impl/PartitionedProducerImplTest.java | 24 +++-- .../impl/PatternConsumerUpdateQueueTest.java | 7 +- .../client/impl/TableViewBuilderImplTest.java | 12 +-- .../pulsar/client/impl/TableViewImplTest.java | 2 +- .../impl/TypedMessageBuilderImplTest.java | 50 ++++++---- .../impl/conf/ConfigurationDataUtilsTest.java | 6 +- .../impl/schema/KeyValueSchemaInfoTest.java | 4 +- .../impl/schema/KeyValueSchemaTest.java | 10 +- .../impl/schema/PrimitiveSchemaTest.java | 11 ++- .../client/impl/schema/SchemaBuilderTest.java | 3 +- .../SupportVersioningAvroSchemaTest.java | 2 +- .../SupportVersioningKeyValueSchemaTest.java | 8 +- .../schema/generic/GenericAvroReaderTest.java | 4 + .../GenericProtobufNativeReaderTest.java | 2 +- .../AsyncDualMemoryLimiterUtilTest.java | 12 ++- .../semaphore/AsyncSemaphoreImplTest.java | 2 +- .../functions/instance/ContextImplTest.java | 7 +- .../instance/JavaInstanceRunnableTest.java | 8 +- .../instance/ProducerBuilderFactoryTest.java | 2 +- .../functions/instance/ProducerCacheTest.java | 8 +- .../functions/instance/SinkRecordTest.java | 3 +- .../instance/state/BKStateStoreImplTest.java | 1 + .../pulsar/functions/sink/PulsarSinkTest.java | 58 ++++++------ .../source/PulsarFunctionRecordTest.java | 4 +- .../windowing/WindowFunctionExecutorTest.java | 3 + .../windowing/WindowManagerTest.java | 93 ++++++++++--------- .../kubernetes/KubernetesRuntimeTest.java | 2 +- .../worker/FunctionMetaDataManagerTest.java | 3 + .../worker/FunctionWorkerStarterTest.java | 2 +- .../functions/worker/LeaderServiceTest.java | 7 +- .../worker/SchedulerManagerTest.java | 1 + .../functions/worker/WorkerUtilsTest.java | 1 + .../api/v3/AbstractFunctionsResourceTest.java | 5 +- .../BookKeeperClusterTestCase.java | 2 +- .../metadata/DualMetadataCacheTest.java | 2 +- .../pulsar/metadata/MetadataCacheTest.java | 2 +- .../apache/pulsar/metadata/TestZKServer.java | 2 +- .../impl/TxnLogBufferedWriterTest.java | 16 ++-- 99 files changed, 408 insertions(+), 330 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java index 01a8808a2b96c..c62bd8231bb13 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java @@ -102,7 +102,7 @@ public void testPreciseLimitation(String missingCase) throws Exception { LedgerHandle currentLedger = ml.currentLedger; LedgerHandle spyCurrentLedger = Mockito.spy(currentLedger); ml.currentLedger = spyCurrentLedger; - Answer answer = invocation -> { + Answer answer = invocation -> { long firstEntry = (long) invocation.getArguments()[0]; log.info("reading entry: {}", firstEntry); if (firstEntry == start1) { @@ -112,7 +112,7 @@ public void testPreciseLimitation(String missingCase) throws Exception { Object res = invocation.callRealMethod(); return res; } else if (secondReadEntries.contains(firstEntry)) { - final CompletableFuture res = new CompletableFuture<>(); + final CompletableFuture res = new CompletableFuture<>(); threadFactory.newThread(() -> { try { readCompleteSignal2.await(); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java index ef43839b233ac..63519d10ba664 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java @@ -1077,7 +1077,7 @@ void testConcurrentResetCursor() throws Exception { final int messages = 100; final int consumers = 5; - List> futures = new ArrayList(); + List> futures = new ArrayList<>(); @Cleanup("shutdownNow") ExecutorService executor = Executors.newCachedThreadPool(); final CyclicBarrier barrier = new CyclicBarrier(consumers + 1); @@ -2372,7 +2372,7 @@ void testReadEntriesOrWaitBlocking() throws Exception { final int messages = 100; final int consumers = 10; - List> futures = new ArrayList(); + List> futures = new ArrayList<>(); @Cleanup("shutdownNow") ExecutorService executor = Executors.newCachedThreadPool(); final CyclicBarrier barrier = new CyclicBarrier(consumers + 1); @@ -3115,7 +3115,7 @@ void testReplayEntries() throws Exception { ledger.addEntry("entry4".getBytes(Encoding)); // 1. Replay empty position set should return empty entry set - Set positions = new HashSet(); + Set positions = new HashSet<>(); assertTrue(c1.replayEntries(positions).isEmpty()); positions.add(p1); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java index ee6a9c78658e7..6865bf1bbe2ce 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java @@ -187,7 +187,7 @@ public void verifyConcurrentUsage() throws Exception { final AtomicBoolean done = new AtomicBoolean(); final CyclicBarrier barrier = new CyclicBarrier(numProducers + numConsumers + 1); - List> futures = new ArrayList(); + List> futures = new ArrayList<>(); for (int i = 0; i < numProducers; i++) { futures.add(executor.submit(() -> { @@ -266,7 +266,7 @@ public void verifyAsyncReadEntryUsingCache() throws Exception { final AtomicBoolean done = new AtomicBoolean(); final CyclicBarrier barrier = new CyclicBarrier(numProducers + numConsumers + 1); - List> futures = new ArrayList(); + List> futures = new ArrayList<>(); List positions = new CopyOnWriteArrayList<>(); for (int i = 0; i < numProducers; i++) { @@ -375,12 +375,12 @@ public void testConcurrentMarkDelete() throws Exception { mlConfig.setMetadataMaxEntriesPerLedger(10); ManagedLedger ledger = factory.open("ml-markdelete-ledger", mlConfig); - final List addedEntries = new ArrayList(); + final List addedEntries = new ArrayList<>(); int numCursors = 10; final CyclicBarrier barrier = new CyclicBarrier(numCursors); - List cursors = new ArrayList(); + List cursors = new ArrayList<>(); for (int i = 0; i < numCursors; i++) { cursors.add(ledger.openCursor(String.format("c%d", i))); } @@ -390,7 +390,7 @@ public void testConcurrentMarkDelete() throws Exception { addedEntries.add(pos); } - List> futures = new ArrayList(); + List> futures = new ArrayList<>(); for (ManagedCursor cursor : cursors) { futures.add(executor.submit(() -> { @@ -424,7 +424,7 @@ public void asyncMarkDeleteAndClose() throws Exception { ManagedLedger ledger = factory.open("my_test_ledger" + testName, config); ManagedCursor cursor = ledger.openCursor("c1"); - List positions = new ArrayList(); + List positions = new ArrayList<>(); for (int i = 0; i < 10; i++) { Position p = ledger.addEntry("entry".getBytes()); @@ -432,7 +432,7 @@ public void asyncMarkDeleteAndClose() throws Exception { } final CountDownLatch counter = new CountDownLatch(positions.size()); - final AtomicReference gotException = new AtomicReference(); + final AtomicReference gotException = new AtomicReference<>(); for (Position p : positions) { cursor.asyncDelete(p, new DeleteCallback() { diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java index 22b0d7dc06c58..ac292e1fe15b2 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java @@ -1493,7 +1493,7 @@ public void getCursors() throws Exception { c2.close(); ledger.deleteCursor("c2"); - assertEquals(Sets.newHashSet(ledger.getCursors()), new HashSet()); + assertEquals(Sets.newHashSet(ledger.getCursors()), new HashSet<>()); } @Test @@ -1621,7 +1621,7 @@ public void updatePropertiesFailed(ManagedLedgerException exception, Object ctx) public void ledgersList() throws Exception { MetaStore store = factory.getMetaStore(); - assertEquals(Sets.newHashSet(store.getManagedLedgers()), new HashSet()); + assertEquals(Sets.newHashSet(store.getManagedLedgers()), new HashSet<>()); ManagedLedger ledger1 = factory.open("ledger1"); assertEquals(Sets.newHashSet(store.getManagedLedgers()), Sets.newHashSet("ledger1")); ManagedLedger ledger2 = factory.open("ledger2"); @@ -1629,7 +1629,7 @@ public void ledgersList() throws Exception { ledger1.delete(); assertEquals(Sets.newHashSet(store.getManagedLedgers()), Sets.newHashSet("ledger2")); ledger2.delete(); - assertEquals(Sets.newHashSet(store.getManagedLedgers()), new HashSet()); + assertEquals(Sets.newHashSet(store.getManagedLedgers()), new HashSet<>()); } @Test @@ -3225,7 +3225,7 @@ public void testManagedLedgerWithCreateLedgerTimeOut() throws Exception { latch.await(config.getMetadataOperationsTimeoutSeconds() + 2, TimeUnit.SECONDS); assertEquals(response.get(), BKException.Code.TimeoutException); assertTrue(ctxHolder.get() instanceof CompletableFuture); - CompletableFuture ledgerCreateHook = (CompletableFuture) ctxHolder.get(); + CompletableFuture ledgerCreateHook = (CompletableFuture) ctxHolder.get(); assertTrue(ledgerCreateHook.isCompletedExceptionally()); ledger.close(); @@ -3652,7 +3652,7 @@ public void testManagedLedgerWithPlacementPolicyInCustomMetadata() throws Except assertEquals(config.getProperties().get("key"), "value"); } - private void setFieldValue(Class clazz, Object classObj, String fieldName, Object fieldValue) throws Exception { + private void setFieldValue(Class clazz, Object classObj, String fieldName, Object fieldValue) throws Exception { Field field = clazz.getDeclaredField(fieldName); field.setAccessible(true); field.set(classObj, fieldValue); @@ -4532,7 +4532,7 @@ private long calculatePendingTaskCount(OrderedScheduler orderedScheduler) { BlockingQueue queue = WhiteboxImpl.getInternalState(boundedScheduledExecutorService, "queue"); for (Runnable r : queue) { if (r instanceof FutureTask) { - FutureTask futureTask = (FutureTask) r; + FutureTask futureTask = (FutureTask) r; if (!futureTask.isCancelled() && !futureTask.isDone()) { taskCounter++; } diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java index 00ee5b7573916..2c6bfba305b47 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java @@ -254,7 +254,7 @@ public void testBookkeeperFirstOffloadRead(String offloadType) throws Exception } config.setRetentionTime(0, TimeUnit.MILLISECONDS); config.setRetentionSizeInMB(0); - CompletableFuture trimFuture = new CompletableFuture(); + CompletableFuture trimFuture = new CompletableFuture<>(); ledger.trimConsumedLedgersInBackground(trimFuture); trimFuture.join(); Awaitility.await().untilAsserted(() -> { @@ -381,7 +381,7 @@ public CompletableFuture closeAsync() { static class MockOffloadReadHandle implements ReadHandle, OffloadedLedgerHandle { final long id; - final List entries = new ArrayList(); + final List entries = new ArrayList<>(); final LedgerMetadata metadata; long lastAccessTimestamp = System.currentTimeMillis(); @@ -413,7 +413,7 @@ public CompletableFuture closeAsync() { @Override public CompletableFuture readAsync(long firstEntry, long lastEntry) { - List readEntries = new ArrayList(); + List readEntries = new ArrayList<>(); for (long eid = firstEntry; eid <= lastEntry; eid++) { ByteBuf buf = entries.get((int) eid).retainedSlice(); readEntries.add(LedgerEntryImpl.create(id, eid, buf.readableBytes(), buf)); diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/MangedLedgerInterceptorImpl2Test.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/MangedLedgerInterceptorImpl2Test.java index 0a7effc9988cf..694c480ea7746 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/MangedLedgerInterceptorImpl2Test.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/MangedLedgerInterceptorImpl2Test.java @@ -57,9 +57,9 @@ public void testCurrentLedgerSizeCorrectIfHasInterceptor() throws Exception { // Registry interceptor. ManagedLedgerConfig config = new ManagedLedgerConfig(); - Set processors = new HashSet(); + Set processors = new HashSet<>(); processors.add(new TestPayloadProcessor()); - ManagedLedgerInterceptor interceptor = new ManagedLedgerInterceptorImpl(new HashSet(), processors); + ManagedLedgerInterceptor interceptor = new ManagedLedgerInterceptorImpl(new HashSet<>(), processors); config.setManagedLedgerInterceptor(interceptor); config.setMaxEntriesPerLedger(100); diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java index 1814894582de2..8953ea7ff3c21 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java @@ -149,11 +149,11 @@ public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { LedgerHandle spyFirstLedger = spy(firstLedger); CountDownLatch replyReadSignal = new CountDownLatch(1); AtomicBoolean replayReadWasTriggered = new AtomicBoolean(); - Answer answer = invocation -> { + Answer answer = invocation -> { long firstEntry = (long) invocation.getArguments()[0]; if (firstEntry == firstWaitingAckPos.getEntryId()) { replayReadWasTriggered.set(true); - final CompletableFuture res = new CompletableFuture<>(); + final CompletableFuture res = new CompletableFuture<>(); threadFactory.newThread(() -> { try { replyReadSignal.await(); @@ -246,6 +246,7 @@ public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { consumerList.get(consumerList.size() - 1).join(); synchronized (dispatcher) { + @SuppressWarnings("rawtypes") LinkedHashMap recentJoinedConsumers = dispatcher.getRecentlyJoinedConsumers(); assertTrue(verifyMapItemsAreInOrder(recentJoinedConsumers)); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java index f10dcef9af50b..720bc46f303c1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarBrokerStarterTest.java @@ -378,7 +378,7 @@ public void testMainGenerateDocs() throws Exception { ByteArrayOutputStream baoStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(baoStream)); - Class argumentsClass = Class.forName("org.apache.pulsar.PulsarBrokerStarter$StarterArguments"); + Class argumentsClass = Class.forName("org.apache.pulsar.PulsarBrokerStarter$StarterArguments"); PulsarBrokerStarter.main(new String[]{"-g"}); String message = baoStream.toString(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarClusterMetadataTeardownTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarClusterMetadataTeardownTest.java index 95d12f378c55f..ebde19f62931f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarClusterMetadataTeardownTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarClusterMetadataTeardownTest.java @@ -34,7 +34,7 @@ public void testMainGenerateDocs() throws Exception { ByteArrayOutputStream baoStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(baoStream)); - Class argumentsClass = + Class argumentsClass = Class.forName("org.apache.pulsar.PulsarClusterMetadataTeardown$Arguments"); PulsarClusterMetadataTeardown.main(new String[]{"-zk", "zk", "-g"}); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarVersionStarterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarVersionStarterTest.java index b921c3d384315..0ccb698c4624d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/PulsarVersionStarterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/PulsarVersionStarterTest.java @@ -34,7 +34,7 @@ public void testMainGenerateDocs() throws Exception { ByteArrayOutputStream baoStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(baoStream)); - Class argumentsClass = + Class argumentsClass = Class.forName("org.apache.pulsar.PulsarVersionStarter$Arguments"); PulsarVersionStarter.main(new String[]{"-g"}); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java index 8d79a49b4c749..ba27ccf262bf6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java @@ -92,7 +92,7 @@ public void testMarkDeletedPositionCanForwardAfterTopicLedgerLost(boolean enable ConsumerAndReceivedMessages consumerAndReceivedMessages1 = waitConsumeAndAllMessages(topicName, subName, enabledBatch, false); List[] messageIds = consumerAndReceivedMessages1.messageIds; - Consumer consumer = consumerAndReceivedMessages1.consumer; + Consumer consumer = consumerAndReceivedMessages1.consumer; MessageIdImpl individualPosition = messageIds[1].get(messageCountPerEntry - 1); MessageIdImpl expectedMarkDeletedPosition = new MessageIdImpl(messageIds[0].get(0).getLedgerId(), messageIds[0].get(0).getEntryId(), -1); @@ -153,7 +153,7 @@ private void waitPersistentCursorLedger(String topicName, String subName, final private List[] sendManyMessages(String topicName, int ledgerCount, int messageCountPerLedger, int messageCountPerEntry) throws Exception { - List[] messageIds = new List[ledgerCount]; + @SuppressWarnings({"unchecked", "rawtypes"}) List[] messageIds = new List[ledgerCount]; for (int i = 0; i < ledgerCount; i++){ admin.topics().unload(topicName); if (messageCountPerEntry == 1) { @@ -221,9 +221,9 @@ private ConsumerAndReceivedMessages waitConsumeAndAllMessages(String topicName, final boolean enabledBatch, boolean ack) throws Exception { List messageIds = new ArrayList<>(); - final Consumer consumer = createConsumer(topicName, subName, enabledBatch); + final Consumer consumer = createConsumer(topicName, subName, enabledBatch); while (true){ - Message message = consumer.receive(5, TimeUnit.SECONDS); + Message message = consumer.receive(5, TimeUnit.SECONDS); if (message != null){ messageIds.add((MessageIdImpl) message.getMessageId()); if (ack) { @@ -239,13 +239,14 @@ private ConsumerAndReceivedMessages waitConsumeAndAllMessages(String topicName, @AllArgsConstructor private static class ConsumerAndReceivedMessages { - private Consumer consumer; + private Consumer consumer; private List[] messageIds; } private List[] sortMessageId(List messageIds, boolean enabledBatch){ Map> map = messageIds.stream().collect(Collectors.groupingBy(v -> v.getLedgerId())); TreeMap> sortedMap = new TreeMap<>(map); + @SuppressWarnings({"unchecked", "rawtypes"}) List[] res = new List[sortedMap.size()]; Iterator>> iterator = sortedMap.entrySet().iterator(); for (int i = 0; i < sortedMap.size(); i++){ diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java index d1126f79ccc12..bb29eecab01af 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java @@ -2626,7 +2626,7 @@ public void testMaxSubscriptionsPerTopic() throws Exception { final String topic = "persistent://testTenant/ns1/max-subscriptions-per-topic"; admin.topics().createPartitionedTopic(topic, 3); - Producer producer = pulsarClient.newProducer().topic(topic).create(); + Producer producer = pulsarClient.newProducer().topic(topic).create(); producer.close(); // create subscription @@ -2665,9 +2665,9 @@ public void testMaxSubscriptionsPerTopic() throws Exception { producer = pulsarClient.newProducer().topic(topic).create(); producer.close(); - Consumer consumer1 = null; - Consumer consumer2 = null; - Consumer consumer3 = null; + Consumer consumer1 = null; + Consumer consumer2 = null; + Consumer consumer3 = null; try { consumer1 = pulsarClient.newConsumer().subscriptionName("test-sub1").topic(topic).subscribe(); @@ -3271,14 +3271,14 @@ private AtomicInteger injectSchemaCheckCounterForTopic(String topicName) { AbstractTopic topic = (AbstractTopic) topics.get(topicName).join().get(); AbstractTopic spyTopic = Mockito.spy(topic); AtomicInteger counter = new AtomicInteger(); - doAnswer(new Answer() { + doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { counter.incrementAndGet(); return invocation.callRealMethod(); } }).when(spyTopic).addSchema(any(SchemaData.class)); - doAnswer(new Answer() { + doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { counter.incrementAndGet(); @@ -3801,7 +3801,7 @@ private void testAnalyzeSubscriptionBacklogNotCauseStuck() throws Exception { admin.topics().analyzeSubscriptionBacklog(topic, subscription, Optional.of(MessageIdImpl.earliest)); for (int i = 0; i < 10; i++) { Awaitility.await().untilAsserted(() -> { - Message m = consumer.receive(); + Message m = consumer.receive(); assertNotNull(m); consumer.acknowledge(m); }); @@ -4166,7 +4166,7 @@ public void testOverridesNamespaceOffloadThreshold() throws Exception { public void testDeletePatchyPartitionedTopic() throws Exception { final String topic = BrokerTestUtil.newUniqueName(defaultNamespace + "/tp"); admin.topics().createPartitionedTopic(topic, 2); - Producer producer = pulsarClient.newProducer().topic(TopicName.get(topic).getPartition(0).toString()) + Producer producer = pulsarClient.newProducer().topic(TopicName.get(topic).getPartition(0).toString()) .create(); // Mock a scenario that "-partition-1" has been removed due to topic GC. pulsar.getBrokerService().getTopic(TopicName.get(topic).getPartition(1).toString(), false) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java index 25c8f1e716771..961f2fd903e72 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java @@ -190,6 +190,7 @@ public void testDeadlockDetectionOverhead() { class DummyProducerBuilder extends ProducerBuilderImpl { // This is a dummy producer builder to test the health check timeout // the producer constructed by this builder will not send any message + @SuppressWarnings("rawtypes") public DummyProducerBuilder(PulsarClientImpl client, Schema schema) { super(client, schema); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java index e1764622f8ff0..3c598e9172f91 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiMaxUnackedMessagesTest.java @@ -163,7 +163,7 @@ public void testMaxUnackedMessagesPerConsumerPriority() throws Exception { org.apache.pulsar.broker.service.Consumer serverConsumer = persistentTopic.getSubscription("sub").getConsumers().get(0); assertEquals(serverConsumer.getMaxUnackedMessages(), topicLevelPolicy); - List msgs = consumeMsg(consumer, 3); + List> msgs = consumeMsg(consumer, 3); assertEquals(msgs.size(), 1); //disable topic-level limiter admin.topics().setMaxUnackedMessagesOnConsumer(topic, 0); @@ -197,10 +197,10 @@ public void testMaxUnackedMessagesPerConsumerPriority() throws Exception { } - private List consumeMsg(Consumer consumer, int msgNum) throws Exception { - List list = new ArrayList<>(); + private List> consumeMsg(Consumer consumer, int msgNum) throws Exception { + List> list = new ArrayList<>(); for (int i = 0; i < msgNum; i++) { - Message message = consumer.receive(1500, TimeUnit.MILLISECONDS); + Message message = consumer.receive(1500, TimeUnit.MILLISECONDS); if (message == null) { break; } @@ -209,8 +209,8 @@ private List consumeMsg(Consumer consumer, int msgNum) throws Except return list; } - private void ackMsgs(Consumer consumer, List msgs) throws Exception { - for (Message msg : msgs) { + private void ackMsgs(Consumer consumer, List> msgs) throws Exception { + for (Message msg : msgs) { consumer.acknowledge(msg); } } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java index d1d77f1dbdac0..e45e100d16654 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaTest.java @@ -251,7 +251,7 @@ public void createKeyValueSchema(ApiVersion version) throws Exception { String namespace = format("%s%s%s", "schematest", "/", "test"); String topicName = "persistent://" + namespace + "/test-key-value-schema"; - Schema keyValueSchema = Schema.KeyValue(Schema.AVRO(Foo.class), Schema.AVRO(Foo.class)); + Schema keyValueSchema = Schema.KeyValue(Schema.AVRO(Foo.class), Schema.AVRO(Foo.class)); admin.schemas().createSchema(topicName, keyValueSchema.getSchemaInfo()); SchemaInfo schemaInfo = admin.schemas().getSchemaInfo(topicName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java index 5c7f81892b1bf..2d5eb9bed2f40 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java @@ -82,7 +82,7 @@ public void testDisableSchemaValidationEnforcedNoSchema() throws Exception { } catch (PulsarAdminException.NotFoundException e) { assertEquals(e.getMessage(), "Schema not found"); } - try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { + try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { p.send("test schemaValidationEnforced".getBytes()); } } @@ -110,7 +110,7 @@ public void testDisableSchemaValidationEnforcedHasSchema() throws Exception { .build(); PostSchemaPayload postSchemaPayload = new PostSchemaPayload("STRING", "", properties); admin.schemas().createSchema(topicName, postSchemaPayload); - try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { + try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { p.send("test schemaValidationEnforced".getBytes()); } assertSchemaInfoEquals(admin.schemas().getSchemaInfo(topicName), schemaInfo); @@ -138,7 +138,7 @@ public void testEnableSchemaValidationEnforcedNoSchema() throws Exception { } catch (PulsarAdminException.NotFoundException e) { assertEquals(e.getMessage(), "Schema not found"); } - try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { + try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { p.send("test schemaValidationEnforced".getBytes()); } } @@ -169,7 +169,7 @@ public void testEnableSchemaValidationEnforcedHasSchemaMismatch() throws Excepti .build(); PostSchemaPayload postSchemaPayload = new PostSchemaPayload("STRING", "", properties); admin.schemas().createSchema(topicName, postSchemaPayload); - try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { + try (Producer p = pulsarClient.newProducer().topic(topicName).create()) { fail("Client no schema, but topic has schema, should fail"); } catch (PulsarClientException e) { assertTrue(e.getMessage().contains("IncompatibleSchemaException")); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java index 6c7ab152f5a23..1534932522fbe 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java @@ -357,7 +357,7 @@ public void clusters() throws Exception { // clear caches to load data from metadata-store again MetadataCacheImpl clusterCache = (MetadataCacheImpl) pulsar.getPulsarResources() .getClusterResources().getCache(); - MetadataCacheImpl isolationPolicyCache = (MetadataCacheImpl) pulsar.getPulsarResources() + MetadataCacheImpl isolationPolicyCache = (MetadataCacheImpl) pulsar.getPulsarResources() .getNamespaceResources().getIsolationPolicies().getCache(); AbstractMetadataStore store = (AbstractMetadataStore) clusterCache.getStore(); clusterCache.invalidateAll(); @@ -967,7 +967,7 @@ public void test500Error() throws Exception { AsyncResponse response1 = mock(AsyncResponse.class); ArgumentCaptor responseCaptor = ArgumentCaptor.forClass(RestException.class); - CompletableFuture> future = new CompletableFuture(); + CompletableFuture> future = new CompletableFuture<>(); future.completeExceptionally(new RuntimeException("500 error contains error message")); NamespaceService namespaceService = pulsar.getNamespaceService(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AnalyzeBacklogSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AnalyzeBacklogSubscriptionTest.java index 8b3f190b5da67..34753579c3f0d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AnalyzeBacklogSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AnalyzeBacklogSubscriptionTest.java @@ -105,7 +105,7 @@ private void simpleAnalyzeBacklogTest(boolean batching) throws Exception { verifyBacklog(topic, "from-middle", numEntries / 2, numMessages / 2); - try (Consumer consumer = pulsarClient + try (Consumer consumer = pulsarClient .newConsumer() .topic(topic) // we want to wait for the server to process acks, in order to not have a flaky test @@ -113,11 +113,11 @@ private void simpleAnalyzeBacklogTest(boolean batching) throws Exception { .subscriptionName(subName) .subscriptionType(SubscriptionType.Shared) .subscribe()) { - Message receive1 = consumer.receive(); - Message receive2 = consumer.receive(); - Message receive3 = consumer.receive(); - Message receive4 = consumer.receive(); - Message receive5 = consumer.receive(); + Message receive1 = consumer.receive(); + Message receive2 = consumer.receive(); + Message receive3 = consumer.receive(); + Message receive4 = consumer.receive(); + Message receive5 = consumer.receive(); verifyBacklog(topic, subName, numEntries, numMessages); @@ -141,7 +141,7 @@ private void simpleAnalyzeBacklogTest(boolean batching) throws Exception { int count = numMessages - 5; while (count-- > 0) { - Message m = consumer.receive(); + Message m = consumer.receive(); consumer.acknowledge(m); } 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 282eabd345809..7d1640a1716e7 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 @@ -206,7 +206,7 @@ public void addSubscriptionPropertiesTest(SubscriptionMode subscriptionMode) thr for (int i = 0; i < 10; i++) { producer.send("msg".getBytes(StandardCharsets.UTF_8)); } - Message message = consumer.receive(1, TimeUnit.SECONDS); + Message message = consumer.receive(1, TimeUnit.SECONDS); assertNotNull(message); consumer.acknowledge(message); MessageIdImpl messageId = (MessageIdImpl) message.getMessageId(); @@ -319,7 +319,7 @@ public void addSubscriptionPropertiesTest(SubscriptionMode subscriptionMode) thr Map mapShared = new HashMap<>(); mapShared.put("6", "7"); // open two consumers with a Shared Subscription - Consumer consumerShared1 = pulsarClient.newConsumer().topic(topic).receiverQueueSize(1) + Consumer consumerShared1 = pulsarClient.newConsumer().topic(topic).receiverQueueSize(1) .subscriptionMode(subscriptionMode) .subscriptionType(SubscriptionType.Shared) .subscriptionProperties(mapShared) @@ -332,7 +332,7 @@ public void addSubscriptionPropertiesTest(SubscriptionMode subscriptionMode) thr // add a new consumer, the properties are not updated Map mapShared2 = new HashMap<>(); mapShared2.put("8", "9"); - Consumer consumerShared2 = pulsarClient.newConsumer().topic(topic).receiverQueueSize(1) + Consumer consumerShared2 = pulsarClient.newConsumer().topic(topic).receiverQueueSize(1) .subscriptionMode(subscriptionMode) .subscriptionType(SubscriptionType.Shared) .subscriptionProperties(mapShared2) @@ -344,7 +344,7 @@ public void addSubscriptionPropertiesTest(SubscriptionMode subscriptionMode) thr // add a third consumer, the properties are NOT updated Map mapShared3 = new HashMap<>(); mapShared3.put("10", "11"); - Consumer consumerShared3 = pulsarClient.newConsumer().topic(topic).receiverQueueSize(1) + Consumer consumerShared3 = pulsarClient.newConsumer().topic(topic).receiverQueueSize(1) .subscriptionMode(subscriptionMode) .subscriptionType(SubscriptionType.Shared) .subscriptionProperties(mapShared3) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java index 5ac0e327f71d5..3dfb5b09b19ca 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicMessageTTLTest.java @@ -56,7 +56,7 @@ protected void setup() throws Exception { admin.tenants().createTenant(this.testTenant, tenantInfo); admin.namespaces().createNamespace(testTenant + "/" + testNamespace, Set.of(testCluster)); admin.topics().createPartitionedTopic(testTopic, 2); - Producer producer = pulsarClient.newProducer().topic(testTenant + "/" + testNamespace + "/" + Producer producer = pulsarClient.newProducer().topic(testTenant + "/" + testNamespace + "/" + "dummy-topic").create(); producer.close(); waitForZooKeeperWatchers(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java index df8e93f59f03b..3ec3c05f75506 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java @@ -156,7 +156,7 @@ protected void setup() throws Exception { admin.namespaces().createNamespace(testTenant + "/" + testNamespace, Set.of("test")); admin.namespaces().createNamespace(myNamespaceV1); admin.topics().createPartitionedTopic(testTopic, testTopicPartitions); - Producer producer = pulsarClient.newProducer().topic(testTopic).create(); + Producer producer = pulsarClient.newProducer().topic(testTopic).create(); producer.close(); waitForZooKeeperWatchers(); } @@ -496,7 +496,7 @@ public void testPriorityOfGlobalPolicies(String clientRequestType) throws Except final String httpPath = "/admin/v2/persistent/" + namespace + "/" + TopicName.get(topic).getLocalName() + "/maxConsumers"; admin.topics().createNonPartitionedTopic(topic); - Producer producer = pulsarClient.newProducer().topic(topic).create(); + Producer producer = pulsarClient.newProducer().topic(topic).create(); PersistentTopic persistentTopic = (PersistentTopic) pulsar.getBrokerService().getTopics().get(topic).get().get(); @@ -577,7 +577,7 @@ public void testPriorityOfGlobalPolicies2(String clientRequestType) throws Excep final String httpPath = "/admin/v2/persistent/" + namespace + "/" + TopicName.get(topic).getLocalName() + "/maxConsumers"; admin.topics().createNonPartitionedTopic(topic); - Producer producer = pulsarClient.newProducer().topic(topic).create(); + Producer producer = pulsarClient.newProducer().topic(topic).create(); PersistentTopic persistentTopic = (PersistentTopic) pulsar.getBrokerService().getTopics().get(topic).get().get(); @@ -2392,19 +2392,19 @@ public void testGetSetSubscribeRate() throws Exception { PulsarClient pulsarClient2 = newPulsarClient(lookupUrl.toString(), 0); PulsarClient pulsarClient3 = newPulsarClient(lookupUrl.toString(), 0); - Consumer consumer1 = pulsarClient1.newConsumer().subscriptionName("sub1") + Consumer consumer1 = pulsarClient1.newConsumer().subscriptionName("sub1") .topic(persistenceTopic).consumerName("test").subscribe(); Assert.assertNotNull(consumer1); consumer1.close(); pulsarClient1.shutdown(); - Consumer consumer2 = pulsarClient2.newConsumer().subscriptionName("sub1") + Consumer consumer2 = pulsarClient2.newConsumer().subscriptionName("sub1") .topic(persistenceTopic).consumerName("test").subscribe(); Assert.assertNotNull(consumer2); consumer2.close(); pulsarClient2.shutdown(); - Consumer consumer3 = null; + Consumer consumer3 = null; try { consumer3 = pulsarClient3.newConsumer().subscriptionName("sub1") @@ -2797,8 +2797,8 @@ private void doTestMaxSubscriptionsFailFast(SubscriptionMode subMode) throws Exc // init cache pulsarClient.newProducer().topic(topic).create().close(); int maxSubInNamespace = 2; - List consumers = new ArrayList<>(); - ConsumerBuilder consumerBuilder = pulsarClient.newConsumer().subscriptionMode(subMode) + List> consumers = new ArrayList<>(); + ConsumerBuilder consumerBuilder = pulsarClient.newConsumer().subscriptionMode(subMode) .subscriptionType(SubscriptionType.Shared).topic(topic); admin.namespaces().setMaxSubscriptionsPerTopic(myNamespace, maxSubInNamespace); Awaitility.await().untilAsserted(() @@ -2816,7 +2816,7 @@ private void doTestMaxSubscriptionsFailFast(SubscriptionMode subMode) throws Exc //fail fast assertTrue(System.currentTimeMillis() - start < 3000); //clean - for (Consumer consumer : consumers) { + for (Consumer consumer : consumers) { consumer.close(); } } @@ -2896,7 +2896,7 @@ public void testMaxUnackedMessagesOnSubscriptionPriority() throws Exception { final String topic = "persistent://" + myNamespace + "/test-" + UUID.randomUUID(); // init cache @Cleanup - Producer producer = pulsarClient.newProducer().topic(topic).create(); + Producer producer = pulsarClient.newProducer().topic(topic).create(); //default value is null assertNull(admin.namespaces().getMaxUnackedMessagesPerSubscription(myNamespace)); int msgNum = 100; @@ -2957,7 +2957,7 @@ public void testMaxUnackedMessagesOnSubscriptionPriority() throws Exception { assertEquals(messages.size(), defaultMaxUnackedMsgOnBroker); } - private void produceMsg(Producer producer, int msgNum) throws Exception{ + private void produceMsg(Producer producer, int msgNum) throws Exception{ for (int i = 0; i < msgNum; i++) { producer.send("msg".getBytes()); } @@ -3281,12 +3281,12 @@ public void testNonPersistentMaxConsumerOnSub() throws Exception { conf.setMaxConsumersPerSubscription(maxConsumerPerSubInBroker); final String topic = "non-persistent://" + myNamespace + "/test-" + UUID.randomUUID(); admin.topics().createPartitionedTopic(topic, 3); - Producer producer = pulsarClient.newProducer().topic(topic).create(); + Producer producer = pulsarClient.newProducer().topic(topic).create(); final String subName = "my-sub"; - ConsumerBuilder builder = pulsarClient.newConsumer() + ConsumerBuilder builder = pulsarClient.newConsumer() .subscriptionType(SubscriptionType.Shared) .subscriptionName(subName).topic(topic); - Consumer consumer = builder.subscribe(); + Consumer consumer = builder.subscribe(); try { builder.subscribe(); @@ -3301,7 +3301,7 @@ public void testNonPersistentMaxConsumerOnSub() throws Exception { assertEquals(admin.namespaces().getMaxConsumersPerSubscription(myNamespace).intValue(), maxConsumerPerSubInNs); }); - Consumer consumer2 = builder.subscribe(); + Consumer consumer2 = builder.subscribe(); try { builder.subscribe(); fail("should fail"); @@ -3316,7 +3316,7 @@ public void testNonPersistentMaxConsumerOnSub() throws Exception { assertEquals(admin.topicPolicies().getMaxConsumersPerSubscription(topic).intValue(), maxConsumerPerSubInTopic); }); - Consumer consumer3 = builder.subscribe(); + Consumer consumer3 = builder.subscribe(); try { builder.subscribe(); fail("should fail"); @@ -3513,13 +3513,13 @@ public void testPoliciesCanBeDeletedWithTopic() throws Exception { CompletableFuture future = (CompletableFuture) field.get(persistentTopic); Awaitility.await().untilAsserted(() -> assertTrue(future.isDone())); - Consumer consumer = pulsarClient.newConsumer() + Consumer consumer = pulsarClient.newConsumer() .subscriptionInitialPosition(SubscriptionInitialPosition.Earliest) .readCompacted(true) .topic(topicPoliciesTopic).subscriptionName("sub").subscribe(); int count = 0; while (true) { - Message message = consumer.receive(1, TimeUnit.SECONDS); + Message message = consumer.receive(1, TimeUnit.SECONDS); if (message != null) { count++; consumer.acknowledge(message); @@ -3548,7 +3548,7 @@ public void testPoliciesCanBeDeletedWithTopic() throws Exception { .topic(topicPoliciesTopic).subscriptionName("sub").subscribe(); count = 0; while (true) { - Message message = consumer.receive(1, TimeUnit.SECONDS); + Message message = consumer.receive(1, TimeUnit.SECONDS); if (message != null) { count++; consumer.acknowledge(message); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java index 2f2e98a08701c..221ef4df4830a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java @@ -1039,7 +1039,7 @@ public void testPeekMessageForShowAllMessages() throws Exception { for (int i = 0; i < 4 * n; i++) { Message peekMsg = peekMsgs.get(i); - MessageImpl peekMsgImpl = (MessageImpl) peekMsg; + MessageImpl peekMsgImpl = (MessageImpl) peekMsg; MessageMetadata metadata = peekMsgImpl.getMessageBuilder(); if (metadata.hasMarkerType()) { assertTrue(metadata.getMarkerType() == MarkerType.TXN_COMMIT_VALUE diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java index b7c0f8ddac816..47b272fdaee67 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java @@ -760,7 +760,7 @@ public Object[][] incorrectPersistentPolicies() { }; } - protected ServiceProducer getServiceProducer(ProducerImpl clientProducer, String topicName) { + protected ServiceProducer getServiceProducer(ProducerImpl clientProducer, String topicName) { PersistentTopic persistentTopic = (PersistentTopic) pulsar.getBrokerService().getTopic(topicName, false).join().get(); org.apache.pulsar.broker.service.Producer serviceProducer = @@ -789,7 +789,7 @@ protected void sleepSeconds(int seconds){ private static void reconnectAllConnections(PulsarClientImpl c) throws Exception { ConnectionPool pool = c.getCnxPool(); - Method closeAllConnections = ConnectionPool.class.getDeclaredMethod("closeAllConnections", new Class[]{}); + Method closeAllConnections = ConnectionPool.class.getDeclaredMethod("closeAllConnections", new Class[]{}); closeAllConnections.setAccessible(true); closeAllConnections.invoke(pool, new Object[]{}); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java index bc45a7e792702..4fc35468be7dd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java @@ -154,6 +154,7 @@ public void testTailingReadsRollingRestart() throws Exception { .create(); // Create consumers in paused state with receiver queue size of 50 + @SuppressWarnings({"unchecked", "rawtypes"}) Consumer[] consumers = new Consumer[numConsumers]; List consumerPulsarClients = new ArrayList<>(); @Cleanup diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java index 124924748feb5..0e7455b1b5d38 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java @@ -160,6 +160,7 @@ public void testTailingReadsKeySharedSlowConsumer() throws Exception { .create(); // Create consumers on the tail (reading from latest) + @SuppressWarnings({"unchecked", "rawtypes"}) Consumer[] consumers = new Consumer[numConsumers]; for (int i = 0; i < numConsumers; i++) { consumers[i] = pulsarClient.newConsumer(Schema.INT64) @@ -332,6 +333,7 @@ public void testCatchUpReadsWithFailureProxyDisconnectingAllConnections() throws .create(); // Create consumers in paused state with receiver queue size of 50 + @SuppressWarnings({"unchecked", "rawtypes"}) Consumer[] consumers = new Consumer[numConsumers]; for (int i = 0; i < numConsumers; i++) { consumers[i] = pulsarClient.newConsumer(Schema.INT64) @@ -492,6 +494,7 @@ public void testTailingReadsClearsCacheAfterCacheTimeout() throws Exception { .create(); // Create consumers on the tail (reading from latest) + @SuppressWarnings({"unchecked", "rawtypes"}) Consumer[] consumers = new Consumer[numConsumers]; for (int i = 0; i < numConsumers; i++) { consumers[i] = pulsarClient.newConsumer(Schema.INT64) @@ -603,6 +606,7 @@ public void testExpectedReads() throws Exception { .create(); // Create consumers on the tail (reading from latest) + @SuppressWarnings({"unchecked", "rawtypes"}) Consumer[] consumers = new Consumer[numConsumers]; for (int i = 0; i < numConsumers; i++) { consumers[i] = pulsarClient.newConsumer(Schema.INT64) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java index 9505d20831e58..98afae8bf8480 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java @@ -86,6 +86,7 @@ public void testBacklogConsumerCacheReads() throws Exception { final String topicName = "cache-read"; final String sub1 = "sub"; int totalSub = 10; + @SuppressWarnings({"unchecked", "rawtypes"}) Consumer[] consumers = new Consumer[totalSub]; for (int i = 0; i < totalSub; i++) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java index 82078da7612f2..2229a89a68fab 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java @@ -84,7 +84,7 @@ public void testMessageAckedExceptions() throws Exception { Producer producer = pulsarClient.newProducer().topic(topic).create(); - ConsumerImpl consumer = (ConsumerImpl) pulsarClient + ConsumerImpl consumer = (ConsumerImpl) pulsarClient .newConsumer() .topic(topic) .subscriptionName(subName) @@ -100,7 +100,7 @@ public void testMessageAckedExceptions() throws Exception { } int receiveCounter = 0; - Message message; + Message message; while ((message = consumer.receive(3, TimeUnit.SECONDS)) != null) { receiveCounter++; consumer.acknowledge(message); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java index cbfab56e99192..b210d89cf034a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java @@ -235,7 +235,7 @@ public void testLeastResourceUsageWithWeightWithArithmeticException() } public void testRoundRobinBrokerSelector() throws IllegalAccessException { - Set brokers = new LinkedHashSet(Arrays.asList("1", "2", "3")); + Set brokers = new LinkedHashSet<>(Arrays.asList("1", "2", "3")); int n = brokers.size(); RoundRobinBrokerSelector strategy = new RoundRobinBrokerSelector(); @@ -247,13 +247,13 @@ public void testRoundRobinBrokerSelector() throws IllegalAccessException { assertEquals(strategy.selectBroker(brokers, null, null, null), Optional.of(id)); } - Set brokers2 = new LinkedHashSet(Arrays.asList("2", "3", "1")); + Set brokers2 = new LinkedHashSet<>(Arrays.asList("2", "3", "1")); for (; i < 20; i++) { String id = (i % n) + 1 + ""; assertEquals(strategy.selectBroker(brokers2, null, null, null), Optional.of(id)); } - Set brokers3 = new LinkedHashSet(Arrays.asList("1", "2", "4")); + Set brokers3 = new LinkedHashSet<>(Arrays.asList("1", "2", "4")); assertEquals(strategy.selectBroker(brokers3, null, null, null), Optional.of("4")); assertEquals(strategy.selectBroker(brokers3, null, null, null), Optional.of("1")); assertEquals(strategy.selectBroker(brokers3, null, null, null), Optional.of("2")); @@ -261,7 +261,7 @@ public void testRoundRobinBrokerSelector() throws IllegalAccessException { assertEquals(strategy.selectBroker(brokers3, null, null, null), Optional.of("1")); assertEquals(strategy.selectBroker(brokers3, null, null, null), Optional.of("2")); - Set brokers4 = new LinkedHashSet(Arrays.asList("2", "4")); + Set brokers4 = new LinkedHashSet<>(Arrays.asList("2", "4")); assertEquals(strategy.selectBroker(brokers4, null, null, null), Optional.of("2")); assertEquals(strategy.selectBroker(brokers4, null, null, null), Optional.of("4")); assertEquals(strategy.selectBroker(brokers4, null, null, null), Optional.of("2")); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java index 9327c1b95e4a3..368bcba4a6017 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java @@ -359,7 +359,9 @@ public void testUnloadUponTopicLookupFailure() throws Exception { NamespaceBundle bundle = pulsar1.getNamespaceService().getBundle(topicName); primaryLoadManager.assign(Optional.empty(), bundle, LookupOptions.builder().build()).get(); + @SuppressWarnings("rawtypes") CompletableFuture future1 = new CompletableFuture(); + @SuppressWarnings("rawtypes") CompletableFuture future2 = new CompletableFuture(); try { pulsar1.getBrokerService().getTopics().put(topicName.toString(), future1); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java index ea9e36a65bfab..4b279d5f1e424 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelTest.java @@ -289,7 +289,7 @@ public void channelValidationTest() assertEquals(6, errorCnt); @Cleanup("shutdownNow") ExecutorService executor = Executors.newSingleThreadExecutor(); - Future startFuture = executor.submit(() -> { + Future startFuture = executor.submit(() -> { try { channel.start(); } catch (PulsarServerException e) { @@ -304,7 +304,7 @@ public void channelValidationTest() ServiceUnitStateChannelImpl.ChannelState.LeaderElectionServiceStarted, true); assertNotNull(channel.getChannelOwnerAsync().get(2, TimeUnit.SECONDS).get()); - Future closeFuture = executor.submit(() -> { + Future closeFuture = executor.submit(() -> { try { channel.close(); } catch (PulsarServerException e) { @@ -812,7 +812,7 @@ private static Number getMetric(List metrics, String metricName) { public void handleBrokerCreationEventTest() throws IllegalAccessException { var cleanupJobs = getCleanupJobs(channel1); String broker = brokerId2; - var future = new CompletableFuture(); + var future = new CompletableFuture(); cleanupJobs.put(broker, future); ((ServiceUnitStateChannelImpl) channel1).handleBrokerRegistrationEvent(broker, NotificationType.Created); Awaitility.await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { @@ -1842,7 +1842,7 @@ public void testActiveGetOwner() throws Exception { // case 5: the owner lookup gets delayed FieldUtils.writeDeclaredField(channel1, "inFlightStateWaitingTimeInMillis", 1000, true); - var delayedFuture = new CompletableFuture(); + var delayedFuture = new CompletableFuture(); doReturn(delayedFuture).when(registry).lookupAsync(eq(broker)); CompletableFuture.runAsync(() -> { try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java index 2be3108c63832..16bdacb93cce1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java @@ -288,8 +288,8 @@ public void testLoadBalancerSheddingBundlesWithPoliciesEnabledConfig() throws Me public void testPartitionSort() { Random rand = new Random(); - List> actual = new ArrayList<>(); - List> expected = new ArrayList<>(); + @SuppressWarnings("rawtypes") List> actual = new ArrayList<>(); + @SuppressWarnings("rawtypes") List> expected = new ArrayList<>(); for (int j = 0; j < 100; j++) { Map map = new HashMap<>(); @@ -337,7 +337,7 @@ public void testPartitionSortCompareToContractViolationIssue() { s.cacheSize = 75000000 - (rnd.nextInt(4 * 75000)); stats.add(s); } - List> bundleEntries = new ArrayList<>(); + @SuppressWarnings("rawtypes") List> bundleEntries = new ArrayList<>(); for (NamespaceBundleStats s : stats) { bundleEntries.add(Map.entry("bundle-" + s.msgThroughputIn, s)); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java index 1a729e884bdca..4a4cc877bc599 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java @@ -55,6 +55,7 @@ @Test(groups = "broker") public class BrokerLoadDataReporterTest { PulsarService pulsar; + @SuppressWarnings("rawtypes") LoadDataStore store; BrokerService brokerService; PulsarStats pulsarStats; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java index 84fba58add66f..e1512d92e98e0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java @@ -55,6 +55,7 @@ @Test(groups = "broker") public class TopBundleLoadDataReporterTest { PulsarService pulsar; + @SuppressWarnings("rawtypes") LoadDataStore store; BrokerService brokerService; PulsarStats pulsarStats; @@ -132,7 +133,7 @@ public void testGenerateLoadData() throws IllegalAccessException { expected.update(bundleStats, 0); assertEquals(target.generateLoadData(), expected.getLoadData()); - doReturn(new HashMap()).when(brokerService).getBundleStats(); + doReturn(new HashMap<>()).when(brokerService).getBundleStats(); FieldUtils.writeDeclaredField(target, "lastBundleStatsUpdatedAt", 0L, true); expected = new TopKBundles(pulsar); assertEquals(target.generateLoadData(), expected.getLoadData()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java index 0b9af26709cc4..54d1e9febfbcf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java @@ -104,7 +104,7 @@ public void setUp() { @Test(timeOut = 30 * 1000) public void testExecuteSuccess() { - AtomicReference> reference = new AtomicReference(); + AtomicReference> reference = new AtomicReference<>(); SplitCounter counter = new SplitCounter(); SplitManager manager = mock(SplitManager.class); SplitScheduler scheduler = new SplitScheduler(pulsar, channel, manager, counter, reference, context, strategy); @@ -134,7 +134,7 @@ public void testExecuteSuccess() { @Test(timeOut = 30 * 1000) public void testExecuteFailure() { - AtomicReference> reference = new AtomicReference(); + AtomicReference> reference = new AtomicReference<>(); SplitCounter counter = new SplitCounter(); SplitManager manager = new SplitManager(counter); SplitScheduler scheduler = new SplitScheduler(pulsar, channel, manager, counter, reference, context, strategy); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java index d59504da76a08..a3649ff4af18c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java @@ -120,7 +120,7 @@ void setup() { doReturn(namespaceBundleFactory).when(namespaceService).getNamespaceBundleFactory(); doReturn(brokerRegistry).when(loadManagerContext).brokerRegistry(); doReturn(broker).when(brokerRegistry).getBrokerId(); - doReturn(new AtomicReference(loadManagerWrapper)).when(pulsar).getLoadManager(); + doReturn(new AtomicReference<>(loadManagerWrapper)).when(pulsar).getLoadManager(); doReturn(loadManager).when(loadManagerWrapper).get(); doReturn(channel).when(loadManager).getServiceUnitStateChannel(); doReturn(true).when(channel).isOwner(any()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java index da12c84e19791..b47e5cdff793f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java @@ -1149,7 +1149,7 @@ public void testRepeatSplitBundle() throws Exception { PulsarClient pulsarClient = PulsarClient.builder().serviceUrl(pulsar1.getBrokerServiceUrl()).build(); // create a lot of topic to fully distributed among bundles. - List consumers = new ArrayList<>(); + List> consumers = new ArrayList<>(); for (int i = 0; i < 10; i++) { String topicNameI = topicName + i; admin1.topics().createPartitionedTopic(topicNameI, 20); @@ -1175,7 +1175,7 @@ public void testRepeatSplitBundle() throws Exception { primaryLoadManager.updateAll(); Assert.assertFalse(loadData.getBundleData().containsKey(bundleKey)); - for (Consumer consumer : consumers) { + for (Consumer consumer : consumers) { consumer.close(); } } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java index 195b28413736a..fcf392f1d328b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java @@ -486,7 +486,7 @@ public void testTopicCloseWhenInternalProducerCloseErrorOnce() throws Exception // Mock an error when calling "replicator.disconnect()" AtomicBoolean closeFailed = new AtomicBoolean(true); final ProducerImpl mockProducer = Mockito.mock(ProducerImpl.class); - final AtomicReference originalProducer1 = new AtomicReference(); + final AtomicReference> originalProducer1 = new AtomicReference<>(); doAnswer(invocation -> { if (closeFailed.get()) { return CompletableFuture.failedFuture(new Exception("mocked ex")); @@ -501,8 +501,8 @@ public void testTopicCloseWhenInternalProducerCloseErrorOnce() throws Exception // Verify: After "replicator.producer.closeAsync()" retry again, the "replicator.producer" will be closed // successful. closeFailed.set(false); - AtomicReference topic2 = new AtomicReference(); - AtomicReference replicator2 = new AtomicReference(); + AtomicReference topic2 = new AtomicReference<>(); + AtomicReference replicator2 = new AtomicReference<>(); Awaitility.await().untilAsserted(() -> { topic2.set((PersistentTopic) pulsar1.getBrokerService().getTopic(topicName, false).join().get()); replicator2.set((PersistentReplicator) topic2.get().getReplicators().values().iterator().next()); @@ -548,9 +548,9 @@ private Runnable injectMockReplicatorProducerBuilder( // Inject producer decorator. doAnswer(invocation -> { - Schema schema = (Schema) invocation.getArguments()[0]; + Schema schema = (Schema) invocation.getArguments()[0]; ProducerBuilderImpl producerBuilder = (ProducerBuilderImpl) internalClient.newProducer(schema); - ProducerBuilder spyProducerBuilder = spy(producerBuilder); + ProducerBuilder spyProducerBuilder = spy(producerBuilder); doAnswer(ignore -> { CompletableFuture producerFuture = new CompletableFuture<>(); producerBuilder.createAsync().whenComplete((p, t) -> { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java index 418a5f264d2bb..9a1907d8d31f4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java @@ -1711,7 +1711,7 @@ public void testAtomicReplicationRemoval() throws Exception { when(pulsarClientMock.getCnxPool()).thenReturn(connectionPool); when(pulsarClientMock.newProducer(any())).thenAnswer( invocation -> { - ProducerBuilderImpl producerBuilder = + @SuppressWarnings("rawtypes") ProducerBuilderImpl producerBuilder = new ProducerBuilderImpl(pulsarClientMock, invocation.getArgument(0)) { @Override public CompletableFuture createAsync() { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java index 836436f6006a0..a7c901264bda2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatedSubscriptionTest.java @@ -343,13 +343,13 @@ public void testReplicatedSubscribeAndSwitchToStandbyCluster() throws Exception // Since the cluster1 was not crash, all messages will be replicated to the cluster2. consumer1.close(); final PulsarClient client2 = PulsarClient.builder().serviceUrl(url2.toString()).build(); - final Consumer consumer2 = client2.newConsumer(Schema.AUTO_CONSUME()).topic(topicName) + final Consumer consumer2 = client2.newConsumer(Schema.AUTO_CONSUME()).topic(topicName) .subscriptionName(subscriptionName).replicateSubscriptionState(isReplicatedSubscription).subscribe(); // Verify all messages will be consumed. Awaitility.await().untilAsserted(() -> { while (true) { - Message message = consumer2.receive(2, TimeUnit.SECONDS); + Message message = consumer2.receive(2, TimeUnit.SECONDS); if (message != null) { receivedMessages.add(message.getValue().toString()); consumer2.acknowledge(message); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicGCTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicGCTest.java index a3d6ae39e3e43..15cea03150e30 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicGCTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TopicGCTest.java @@ -88,7 +88,7 @@ public Object[][] subTopicTypes() { }; } - private void setSubscribeTopic(ConsumerBuilder consumerBuilder, SubscribeTopicType subscribeTopicType, + private void setSubscribeTopic(ConsumerBuilder consumerBuilder, SubscribeTopicType subscribeTopicType, String topicName, String topicPattern) { if (subscribeTopicType.equals(SubscribeTopicType.MULTI_PARTITIONED_TOPIC)) { consumerBuilder.topic(topicName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TransactionalReplicateSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TransactionalReplicateSubscriptionTest.java index 6f71480f1a913..514ab57de2f65 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TransactionalReplicateSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/TransactionalReplicateSubscriptionTest.java @@ -156,13 +156,13 @@ public void testReplicatedSubscribeAndSwitchToStandbyClusterWithTransaction() th // Since the cluster1 was not crash, all messages will be replicated to the cluster2. consumer1.close(); final PulsarClient client2 = PulsarClient.builder().serviceUrl(url2.toString()).build(); - final Consumer consumer2 = client2.newConsumer(Schema.AUTO_CONSUME()).topic(topicName) + final Consumer consumer2 = client2.newConsumer(Schema.AUTO_CONSUME()).topic(topicName) .subscriptionName(subscriptionName).replicateSubscriptionState(isReplicatedSubscription).subscribe(); // Verify all messages will be consumed. Awaitility.await().untilAsserted(() -> { while (true) { - Message message = consumer2.receive(2, TimeUnit.SECONDS); + Message message = consumer2.receive(2, TimeUnit.SECONDS); if (message != null) { receivedMessages.add(message.getValue().toString()); consumer2.acknowledge(message); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentReplicatorInflightTaskTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentReplicatorInflightTaskTest.java index e8a7a11a2db13..6b0d393aec3f9 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentReplicatorInflightTaskTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentReplicatorInflightTaskTest.java @@ -91,7 +91,7 @@ public void testReplicationTaskStoppedAfterTopicClosed() throws Exception { injectedTask.setEntries(Collections.emptyList()); InFlightTask spyTask = spy(injectedTask); replicator.inFlightTasks.add(spyTask); - doAnswer(new Answer() { + doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocationOnMock) throws Throwable { counter.incrementAndGet(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicProtectedMethodsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicProtectedMethodsTest.java index e51da48042e6c..a2ec1f0bed774 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicProtectedMethodsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicProtectedMethodsTest.java @@ -96,7 +96,7 @@ public void testEstimatedTimeBasedBacklogQuotaCheckWhenNoBacklog() throws Except // moving the cursor's mark-delete position past the LAC (e.g., 10:-1 vs 9:1). assertTrue(cursor.getMarkDeletedPosition().compareTo(ml.getLastConfirmedEntry()) >= 0); }); - CompletableFuture completableFuture = new CompletableFuture(); + CompletableFuture completableFuture = new CompletableFuture<>(); ml.trimConsumedLedgersInBackground(completableFuture); completableFuture.join(); Awaitility.await().untilAsserted(() -> { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java index 5b3c705688c7f..1f84993215beb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java @@ -331,7 +331,7 @@ public void testPersistentPartitionedTopicUnload() throws Exception { NamespaceBundle bundle = pulsar.getNamespaceService().getBundle(TopicName.get(topicName)); pulsar.getNamespaceService().unloadNamespaceBundle(bundle, 5, TimeUnit.SECONDS).get(); - for (Producer producer : producerSet) { + for (Producer producer : producerSet) { producer.close(); } } @@ -360,7 +360,7 @@ public void testConcurrentClose(boolean closeWithoutWaitingClientDisconnectInFir * The other 19 calls: get the cached value which related {@link PersistentTopic#closeFutures}. */ assertTrue(futureMap.size() <= 3); - for (List list : futureMap.values()){ + for (List list : futureMap.values()){ if (list.size() == 1){ // This is the first call, the future is the return value of `topic.close`. } else { @@ -589,7 +589,7 @@ public void testDeleteTopicFail() throws Exception { doReturn(brokerService).when(pulsar).getBrokerService(); // Create a sub, and send one message. - Consumer consumer1 = pulsarClient.newConsumer(Schema.STRING).topic(fullyTopicName).subscriptionName("sub1") + Consumer consumer1 = pulsarClient.newConsumer(Schema.STRING).topic(fullyTopicName).subscriptionName("sub1") .subscribe(); consumer1.close(); Producer producer = pulsarClient.newProducer(Schema.STRING).topic(fullyTopicName).create(); @@ -618,7 +618,7 @@ public void testDeleteTopicFail() throws Exception { } // Assert topic works after deleting failure. - Consumer consumer2 = pulsarClient.newConsumer(Schema.STRING).topic(fullyTopicName).subscriptionName("sub1") + Consumer consumer2 = pulsarClient.newConsumer(Schema.STRING).topic(fullyTopicName).subscriptionName("sub1") .subscribe(); org.testng.Assert.assertEquals("1", consumer2.receive(2, TimeUnit.SECONDS).getValue()); consumer2.close(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java index 632d25d8ac5bf..5c76dae44a544 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/PartitionedSystemTopicTest.java @@ -99,7 +99,7 @@ public void testAutoCreatedPartitionedSystemTopic() throws Exception { NamespaceEventsSystemTopicFactory systemTopicFactory = new NamespaceEventsSystemTopicFactory(pulsarClient); TopicPoliciesSystemTopicClient systemTopicClientForNamespace = systemTopicFactory .createTopicPoliciesSystemTopicClient(NamespaceName.get(ns)); - SystemTopicClient.Reader reader = systemTopicClientForNamespace.newReader(); + SystemTopicClient.Reader reader = systemTopicClientForNamespace.newReader(); int partitions = admin.topics().getPartitionedTopicMetadata( String.format("persistent://%s/%s", ns, SystemTopicNames.NAMESPACE_EVENTS_LOCAL_NAME)).partitions; @@ -328,8 +328,8 @@ public void testSystemTopicNotCheckExceed() throws Exception { NamespaceEventsSystemTopicFactory systemTopicFactory = new NamespaceEventsSystemTopicFactory(pulsarClient); TopicPoliciesSystemTopicClient systemTopicClientForNamespace = systemTopicFactory .createTopicPoliciesSystemTopicClient(NamespaceName.get(ns)); - SystemTopicClient.Reader reader1 = systemTopicClientForNamespace.newReader(); - SystemTopicClient.Reader reader2 = systemTopicClientForNamespace.newReader(); + SystemTopicClient.Reader reader1 = systemTopicClientForNamespace.newReader(); + SystemTopicClient.Reader reader2 = systemTopicClientForNamespace.newReader(); conf.setMaxSameAddressProducersPerTopic(1); admin.namespaces().setMaxProducersPerTopic(ns, 1); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/tools/BrokerToolTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/tools/BrokerToolTest.java index e461d3c904b9f..b40a3e629af42 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/tools/BrokerToolTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/tools/BrokerToolTest.java @@ -47,7 +47,7 @@ public void testGenerateDocs() throws Exception { String message = baoStream.toString(); - Class argumentsClass = Class.forName("org.apache.pulsar.broker.tools.LoadReportCommand"); + Class argumentsClass = Class.forName("org.apache.pulsar.broker.tools.LoadReportCommand"); Field[] fields = argumentsClass.getDeclaredFields(); for (Field field : fields) { boolean fieldHasAnno = field.isAnnotationPresent(Option.class); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java index 30e308b30ebae..33be818a0b065 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java @@ -157,7 +157,7 @@ private void waitTaskExecuteCompletely(AbortedTxnProcessor processor) throws Exc Field taskQueueField = SnapshotSegmentAbortedTxnProcessorImpl.PersistentWorker.class .getDeclaredField("taskQueue"); taskQueueField.setAccessible(true); - Queue queue = (Queue) taskQueueField.get(persistentWorker); + Queue queue = (Queue) taskQueueField.get(persistentWorker); Awaitility.await().untilAsserted(() -> assertEquals(queue.size(), 0)); } @@ -193,8 +193,9 @@ public void testFuturesCanCompleteWhenItIsCanceled() throws Exception { Field taskQueueField = SnapshotSegmentAbortedTxnProcessorImpl.PersistentWorker.class .getDeclaredField("taskQueue"); taskQueueField.setAccessible(true); - Supplier task = CompletableFuture::new; - Queue queue = (Queue) taskQueueField.get(persistentWorker); + Supplier task = CompletableFuture::new; + @SuppressWarnings({"unchecked", "rawtypes"}) + Queue queue = (Queue) taskQueueField.get(persistentWorker); queue.add(new MutablePair<>(SnapshotSegmentAbortedTxnProcessorImpl.PersistentWorker.OperationType.WriteSegment, new MutablePair<>(new CompletableFuture<>(), task))); try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java index d51ffe2479add..34e7b508b7075 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java @@ -254,7 +254,7 @@ private void recoverTest(String testTopic) throws Exception { } private void makeTBSnapshotReaderTimeoutIfFirstRead(TopicName topicName) throws Exception { - SystemTopicClient.Reader mockReader = mock(SystemTopicClient.Reader.class); + SystemTopicClient.Reader mockReader = mock(SystemTopicClient.Reader.class); AtomicBoolean isFirstCallOfMethodHasMoreEvents = new AtomicBoolean(); AtomicBoolean isFirstCallOfMethodHasReadNext = new AtomicBoolean(); AtomicBoolean isFirstCallOfMethodHasReadNextAsync = new AtomicBoolean(); @@ -276,7 +276,7 @@ private void makeTBSnapshotReaderTimeoutIfFirstRead(TopicName topicName) throws }).when(mockReader).readNext(); doAnswer(invocation -> { - CompletableFuture future = new CompletableFuture<>(); + CompletableFuture> future = new CompletableFuture<>(); new Thread(() -> { if (isFirstCallOfMethodHasReadNextAsync.compareAndSet(false, true)){ // Just stuck the thread. @@ -296,9 +296,9 @@ private void makeTBSnapshotReaderTimeoutIfFirstRead(TopicName topicName) throws for (PulsarService pulsarService : pulsarServiceList){ // Init prop: lastMessageIdInBroker. - final SystemTopicTxnBufferSnapshotService tbSnapshotService = + final SystemTopicTxnBufferSnapshotService tbSnapshotService = pulsarService.getTransactionBufferSnapshotServiceFactory().getTxnBufferSnapshotService(); - SystemTopicTxnBufferSnapshotService spyTbSnapshotService = spy(tbSnapshotService); + SystemTopicTxnBufferSnapshotService spyTbSnapshotService = spy(tbSnapshotService); doAnswer(invocation -> CompletableFuture.completedFuture(mockReader)) .when(spyTbSnapshotService).createReader(topicName); Field field = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionConsumeTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionConsumeTest.java index 16ce35214dc95..41adb7bf59a0d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionConsumeTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionConsumeTest.java @@ -295,7 +295,7 @@ public void testMessageRedelivery() throws Exception { dispatcher.readMoreEntries(); // shared consumer should not receive the redelivered aborted transaction messages - Message message = sharedConsumer.receive(5, TimeUnit.SECONDS); + Message message = sharedConsumer.receive(5, TimeUnit.SECONDS); Assert.assertNull(message); log.info("TransactionConsumeTest testMessageRedelivery finish."); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java index 82dffcf2caeeb..7712501623cf1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java @@ -1427,7 +1427,7 @@ public void testTransactionAckMessages() throws Exception { .subscriptionName(subName) .subscribe(); List messageIds = new ArrayList<>(); - for (Message message : messageList) { + for (Message message : messageList) { messageIds.add(message.getMessageId()); } for (int i = 0; i < 4; i++) { @@ -1561,7 +1561,7 @@ public void testPendingAckReplayChangeStateError() throws InterruptedException, when(executorProvider.getExecutor(any(Object.class))).thenReturn(executorService); // Mock pendingAckStore. PendingAckStore pendingAckStore = mock(PendingAckStore.class); - doAnswer(new Answer() { + doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { executorService.execute(()->{ @@ -1829,26 +1829,35 @@ public void testTBSnapshotWriter() throws Exception { // inject a failed writer future CompletableFuture> writerFuture = new CompletableFuture<>(); for (PulsarService pulsarService : pulsarServiceList) { + @SuppressWarnings("rawtypes") SystemTopicTxnBufferSnapshotService bufferSnapshotService = pulsarService.getTransactionBufferSnapshotServiceFactory().getTxnBufferSnapshotService(); + @SuppressWarnings({"unchecked", "rawtypes"}) ConcurrentHashMap writerMap1 = - ((ConcurrentHashMap) field.get(bufferSnapshotService)); + ((ConcurrentHashMap) field.get(bufferSnapshotService)); + @SuppressWarnings("rawtypes") ReferenceCountedWriter failedCountedWriter = new ReferenceCountedWriter(NamespaceName.get(namespace), writerFuture, bufferSnapshotService); writerMap1.put(NamespaceName.get(namespace), failedCountedWriter); + @SuppressWarnings("rawtypes") SystemTopicTxnBufferSnapshotService segmentSnapshotService = pulsarService.getTransactionBufferSnapshotServiceFactory().getTxnBufferSnapshotSegmentService(); + @SuppressWarnings({"unchecked", "rawtypes"}) ConcurrentHashMap writerMap2 = - ((ConcurrentHashMap) field.get(segmentSnapshotService)); + ((ConcurrentHashMap) field.get(segmentSnapshotService)); + @SuppressWarnings("rawtypes") ReferenceCountedWriter failedCountedWriter2 = new ReferenceCountedWriter(NamespaceName.get(namespace), writerFuture, segmentSnapshotService); writerMap2.put(NamespaceName.get(namespace), failedCountedWriter2); + @SuppressWarnings("rawtypes") SystemTopicTxnBufferSnapshotService indexSnapshotService = pulsarService.getTransactionBufferSnapshotServiceFactory().getTxnBufferSnapshotIndexService(); + @SuppressWarnings({"unchecked", "rawtypes"}) ConcurrentHashMap writerMap3 = - ((ConcurrentHashMap) field.get(indexSnapshotService)); + ((ConcurrentHashMap) field.get(indexSnapshotService)); + @SuppressWarnings("rawtypes") ReferenceCountedWriter failedCountedWriter3 = new ReferenceCountedWriter(NamespaceName.get(namespace), writerFuture, indexSnapshotService); writerMap3.put(NamespaceName.get(namespace), failedCountedWriter3); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStoreTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStoreTest.java index 154cbe39d408c..c1bcc893b0fb2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStoreTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStoreTest.java @@ -230,7 +230,7 @@ public void testMainProcess(boolean writeWithBatch, boolean readWithBatch) throw when(pendingAckHandle.changeToReadyState()).thenReturn(true); // Process controller, mark the replay task already finish. final AtomicInteger processController = new AtomicInteger(); - doAnswer(new Answer() { + doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { processController.incrementAndGet(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java index bc8f62cb68df2..8e561c299f80f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java @@ -49,6 +49,7 @@ public void testLoadAdditionalServlet() throws Exception { NarClassLoader mockLoader = mock(NarClassLoader.class); when(mockLoader.getServiceDefinition(eq(AdditionalServletUtils.ADDITIONAL_SERVLET_FILE))) .thenReturn(ObjectMapperFactory.getYamlMapper().writer().writeValueAsString(def)); + @SuppressWarnings("rawtypes") Class additionalServletClass = MockAdditionalServletWithClassLoader.class; when(mockLoader.loadClass(eq(MockAdditionalServletWithClassLoader.class.getName()))) .thenReturn(additionalServletClass); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java index 90babc00d2adb..685411b05c8c6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java @@ -77,7 +77,7 @@ protected String newTopicName() { protected ReceivedMessages receiveAndAckMessages( BiFunction ackPredicate, Consumer...consumers) throws Exception { - ReceivedMessages receivedMessages = new ReceivedMessages(); + ReceivedMessages receivedMessages = new ReceivedMessages<>(); receiveMessagesInThreads((consumer, msg) -> { T v = msg.getValue(); MessageId messageId = msg.getMessageId(); 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 475beb153fd0a..2602adcd0a053 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 @@ -1815,6 +1815,7 @@ public void topics() throws Exception { verify(mockTopics).peekMessages("persistent://myprop/ns1/ds1", "sub1", 3, false, TransactionIsolationLevel.READ_COMMITTED); + @SuppressWarnings("rawtypes") MessageImpl message = mock(MessageImpl.class); when(message.getData()).thenReturn(new byte[]{}); when(message.getMessageId()).thenReturn(new MessageIdImpl(1L, 1L, 1)); @@ -2584,7 +2585,7 @@ void schemas() throws Exception { cmdSchemas.run(split("extract -j " + jarFile + " -c " + className + " -t json persistent://tn1/ns1/tp1")); File file = new File(jarFile); ClassLoader cl = new URLClassLoader(new URL[]{file.toURI().toURL()}); - Class cls = cl.loadClass(className); + Class cls = cl.loadClass(className); SchemaDefinition schemaDefinition = SchemaDefinition.builder() .withPojo(cls) diff --git a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java index 896bee0e030af..107c1773c0c5d 100644 --- a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java +++ b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java @@ -66,6 +66,7 @@ public void updateConfig(ClientBuilder newBuilder, Authentication authentication replaceProducerCommand(produceCommand); } + @SuppressWarnings("rawtypes") private ClientBuilder mockClientBuilder(ClientBuilder newBuilder) throws Exception { PulsarClientImpl client = (PulsarClientImpl) newBuilder.build(); ProducerBuilder producerBuilder = client.newProducer() diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageContainerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageContainerImplTest.java index 3b2ac54b4bdae..28604c6e55b81 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageContainerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/BatchMessageContainerImplTest.java @@ -145,7 +145,7 @@ public void recoveryAfterOom() { @Test public void testMessagesSize() throws Exception { - ProducerImpl producer = mock(ProducerImpl.class); + ProducerImpl producer = mock(ProducerImpl.class); final ProducerConfigurationData producerConfigurationData = new ProducerConfigurationData(); producerConfigurationData.setCompressionType(CompressionType.NONE); 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 554c6a8cc7305..bef210a4ea047 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 @@ -108,7 +108,7 @@ public void readerBuilderLoadConfTest() throws Exception { ".* 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.latest) + try (Reader reader = client.newReader().topic("abc").startMessageId(MessageId.latest) .startMessageFromRollbackDuration(10, TimeUnit.HOURS).create()) { // no-op } finally { @@ -120,7 +120,7 @@ public void shouldNotSetTwoOptAtTheSameTime() throws Exception { ".* must be specified but they cannot be specified at the same time.*") public void shouldSetOneStartOpt() throws Exception { PulsarClient client = PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build(); - try (Reader reader = client.newReader().topic("abc").create()) { + try (Reader reader = client.newReader().topic("abc").create()) { // no-op } finally { client.close(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java index c0a75b09ccea1..9a6be8051070a 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java @@ -252,7 +252,7 @@ public void testHandleCloseConsumer() { long consumerId = 1; PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class); when(pulsarClient.getConfiguration()).thenReturn(conf); - ConsumerImpl consumer = mock(ConsumerImpl.class); + ConsumerImpl consumer = mock(ConsumerImpl.class); when(consumer.getClient()).thenReturn(pulsarClient); cnx.registerConsumer(consumerId, consumer); assertEquals(cnx.consumers.size(), 1); @@ -276,7 +276,7 @@ public void testHandleCloseProducer() { long producerId = 1; PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class); when(pulsarClient.getConfiguration()).thenReturn(conf); - ProducerImpl producer = mock(ProducerImpl.class); + ProducerImpl producer = mock(ProducerImpl.class); when(producer.getClient()).thenReturn(pulsarClient); cnx.registerProducer(producerId, producer); assertEquals(cnx.producers.size(), 1); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java index 62d6c0b3f7bb6..3344a7f63bdfd 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java @@ -70,6 +70,7 @@ public void setUp() { createConsumer(consumerConf); } + @SuppressWarnings("rawtypes") private void createConsumer(ConsumerConfigurationData consumerConf) { executorProvider = new ExecutorProvider(1, "ConsumerImplTest"); internalExecutor = Executors.newSingleThreadScheduledExecutor(); @@ -149,6 +150,7 @@ public void testNotifyPendingReceivedCallback_CompleteWithExceptionWhenMessageIs @Test(invocationTimeOut = 1000) public void testNotifyPendingReceivedCallback_InterceptorsWorksWithPrefetchDisabled() { CompletableFuture> receiveFuture = new CompletableFuture<>(); + @SuppressWarnings("rawtypes") MessageImpl message = mock(MessageImpl.class); ConsumerImpl spy = spy(consumer); @@ -167,6 +169,7 @@ public void testNotifyPendingReceivedCallback_InterceptorsWorksWithPrefetchDisab @Test(invocationTimeOut = 1000) public void testNotifyPendingReceivedCallback_WorkNormally() { CompletableFuture> receiveFuture = new CompletableFuture<>(); + @SuppressWarnings("rawtypes") MessageImpl message = mock(MessageImpl.class); ConsumerImpl spy = spy(consumer); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java index f3eb7b434a964..e6d6faa350630 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java @@ -121,7 +121,7 @@ public void testDefaultGetProducerDataAssigned() { bar.setField1(true); // // Check kv.encoding.type default, not set value - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("default"); MessageImpl> msg = MessageImpl.create( @@ -150,7 +150,7 @@ public void testInlineGetProducerDataAssigned() { bar.setField1(true); // Check kv.encoding.type INLINE - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("inline"); MessageImpl> msg = MessageImpl.create( @@ -178,7 +178,7 @@ public void testSeparatedGetProducerDataAssigned() { bar.setField1(true); // Check kv.encoding.type SPRAERATE - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("separated"); builder.setPartitionKey(Base64.getEncoder().encodeToString(fooSchema.encode(foo))); @@ -212,7 +212,7 @@ public void testDefaultAVROVersionGetProducerDataAssigned() { SchemaTestUtils.Bar bar = new SchemaTestUtils.Bar(); bar.setField1(true); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("default"); builder.setSchemaVersion(new byte[10]); @@ -248,7 +248,7 @@ public void testSeparatedAVROVersionGetProducerDataAssigned() { SchemaTestUtils.Bar bar = new SchemaTestUtils.Bar(); bar.setField1(true); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("separated"); builder.setSchemaVersion(new byte[10]); @@ -286,7 +286,7 @@ public void testDefaultJSONVersionGetProducerDataAssigned() { SchemaTestUtils.Bar bar = new SchemaTestUtils.Bar(); bar.setField1(true); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("default"); builder.setSchemaVersion(new byte[10]); @@ -322,7 +322,7 @@ public void testSeparatedJSONVersionGetProducerDataAssigned() { SchemaTestUtils.Bar bar = new SchemaTestUtils.Bar(); bar.setField1(true); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("separated"); builder.setSchemaVersion(new byte[10]); @@ -360,7 +360,7 @@ public void testDefaultAVROJSONVersionGetProducerDataAssigned() { SchemaTestUtils.Bar bar = new SchemaTestUtils.Bar(); bar.setField1(true); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("default"); builder.setSchemaVersion(new byte[10]); @@ -396,7 +396,7 @@ public void testSeparatedAVROJSONVersionGetProducerDataAssigned() { SchemaTestUtils.Bar bar = new SchemaTestUtils.Bar(); bar.setField1(true); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); MessageMetadata builder = new MessageMetadata() .setProducerName("separated"); builder.setSchemaVersion(new byte[10]); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java index 976a301b31d8c..6068d8aa843e2 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java @@ -108,11 +108,13 @@ public void testGetStats() throws Exception { @Cleanup PulsarClientImpl clientImpl = new PulsarClientImpl(conf, eventLoopGroup); + @SuppressWarnings("rawtypes") ConsumerConfigurationData consumerConfData = new ConsumerConfigurationData(); consumerConfData.setTopicNames(Sets.newHashSet(topicName)); assertEquals(Long.parseLong("100"), clientImpl.getConfiguration().getStatsIntervalSeconds()); + @SuppressWarnings("rawtypes") MultiTopicsConsumerImpl impl = new MultiTopicsConsumerImpl( clientImpl, consumerConfData, executorProvider, null, Schema.BYTES, null, true); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java index ce2c200344d96..43134d5d94cc9 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java @@ -45,7 +45,6 @@ import org.apache.pulsar.client.api.Message; import org.apache.pulsar.client.api.MessageRouter; import org.apache.pulsar.client.api.MessageRoutingMode; -import org.apache.pulsar.client.api.Producer; import org.apache.pulsar.client.api.Schema; import org.apache.pulsar.client.api.TopicMetadata; import org.apache.pulsar.client.impl.conf.ClientConfigurationData; @@ -65,12 +64,16 @@ public class PartitionedProducerImplTest { private static final String TOPIC_NAME = "testTopicName"; private PulsarClientImpl client; + @SuppressWarnings("rawtypes") private ProducerBuilderImpl producerBuilderImpl; + @SuppressWarnings("rawtypes") private Schema schema; private ProducerInterceptors producerInterceptors; - private CompletableFuture producerCreatedFuture; + @SuppressWarnings("rawtypes") + private CompletableFuture producerCreatedFuture; @BeforeMethod(alwaysRun = true) + @SuppressWarnings("rawtypes") public void setup() { client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); @@ -164,6 +167,7 @@ public void testPartialPartitionWithKey() { assertNotEquals(actualHashList, expectedHashList); } + @SuppressWarnings("rawtypes") private MessageRouter getMessageRouter(ProducerConfigurationData producerConfigurationData) throws NoSuchFieldException, IllegalAccessException { PartitionedProducerImpl impl = new PartitionedProducerImpl( @@ -205,7 +209,7 @@ public void testGetStats() throws Exception { assertEquals(Long.parseLong("100"), clientImpl.getConfiguration().getStatsIntervalSeconds()); - PartitionedProducerImpl impl = new PartitionedProducerImpl( + PartitionedProducerImpl impl = new PartitionedProducerImpl<>( clientImpl, topicName, producerConfData, 1, null, null, null); @@ -265,14 +269,14 @@ public void testGetNumOfPartitions() throws Exception { producerConfData.setMessageRoutingMode(MessageRoutingMode.CustomPartition); producerConfData.setCustomMessageRouter(new CustomMessageRouter()); - PartitionedProducerImpl partitionedProducerImpl = new PartitionedProducerImpl( + PartitionedProducerImpl partitionedProducerImpl = new PartitionedProducerImpl<>( clientImpl, topicName, producerConfData, 1, null, null, null); assertEquals(partitionedProducerImpl.getNumOfPartitions(), 1); String nonPartitionedTopicName = "test-get-num-of-partitions-for-non-partitioned-topic"; ProducerConfigurationData producerConfDataNonPartitioned = new ProducerConfigurationData(); - ProducerImpl producerImpl = new ProducerImpl(clientImpl, nonPartitionedTopicName, + ProducerImpl producerImpl = new ProducerImpl<>(clientImpl, nonPartitionedTopicName, producerConfDataNonPartitioned, null, 0, null, null, Optional.empty()); assertEquals(producerImpl.getNumOfPartitions(), 0); } @@ -296,21 +300,21 @@ public void testMaxPendingQueueSize() throws Exception { producerConfData.setMessageRoutingMode(MessageRoutingMode.CustomPartition); producerConfData.setCustomMessageRouter(new CustomMessageRouter()); producerConfData.setMaxPendingMessages(10); - PartitionedProducerImpl partitionedProducerImpl = new PartitionedProducerImpl( + PartitionedProducerImpl partitionedProducerImpl = new PartitionedProducerImpl<>( clientImpl, topicName, producerConfData, 1, null, null, null); assertEquals(partitionedProducerImpl.getConfiguration().getMaxPendingMessages(), 10); // Test set MaxPendingMessagesAcrossPartitions=5 producerConfData.setMaxPendingMessages(ProducerConfigurationData.DEFAULT_MAX_PENDING_MESSAGES); producerConfData.setMaxPendingMessagesAcrossPartitions(5); - partitionedProducerImpl = new PartitionedProducerImpl( + partitionedProducerImpl = new PartitionedProducerImpl<>( clientImpl, topicName, producerConfData, 1, null, null, null); assertEquals(partitionedProducerImpl.getConfiguration().getMaxPendingMessages(), 5); // Test set maxPendingMessage=10 and MaxPendingMessagesAcrossPartitions=10 with 2 partitions producerConfData.setMaxPendingMessages(10); producerConfData.setMaxPendingMessagesAcrossPartitions(10); - partitionedProducerImpl = new PartitionedProducerImpl( + partitionedProducerImpl = new PartitionedProducerImpl<>( clientImpl, topicName, producerConfData, 2, null, null, null); assertEquals(partitionedProducerImpl.getConfiguration().getMaxPendingMessages(), 5); } @@ -334,12 +338,12 @@ public void testOnTopicsExtended() throws Exception { producerConfData.setCustomMessageRouter(new CustomMessageRouter()); producerConfData.setAutoUpdatePartitionsIntervalSeconds(1, TimeUnit.MILLISECONDS); - PartitionedProducerImpl impl = new PartitionedProducerImpl( + PartitionedProducerImpl impl = new PartitionedProducerImpl<>( clientImpl, topicName, producerConfData, 1, null, null, null); impl.setState(HandlerState.State.Ready); Thread.sleep(1000); - CompletableFuture future = impl.getPartitionsAutoUpdateFuture(); + CompletableFuture future = impl.getPartitionsAutoUpdateFuture(); // When null is returned in method thenCompose we will encounter an NPE exception. // Because the returned value will be applied to the next stage. diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PatternConsumerUpdateQueueTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PatternConsumerUpdateQueueTest.java index e8294eb94c028..fd47d6e6cea7b 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PatternConsumerUpdateQueueTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PatternConsumerUpdateQueueTest.java @@ -50,6 +50,7 @@ private QueueInstance createInstance(CompletableFuture customizedRecheckFu null, null); } + @SuppressWarnings("rawtypes") private QueueInstance createInstance(CompletableFuture customizedRecheckFuture, CompletableFuture customizedPartialUpdateFuture, CompletableFuture customizedConsumerInitFuture, @@ -77,8 +78,8 @@ private QueueInstance createInstance(CompletableFuture customizedRecheckFu when(topicsChangeListener.onTopicsRemoved(anyCollection())).thenReturn(customizedPartialUpdateFuture); } else { CompletableFuture ex = FutureUtil.failedFuture(new RuntimeException("Failed topics changed event")); - Answer answer = invocationOnMock -> { - Collection inputCollection = invocationOnMock.getArgument(0, Collection.class); + Answer answer = invocationOnMock -> { + Collection inputCollection = invocationOnMock.getArgument(0, Collection.class); if (successTopics.containsAll(inputCollection)) { return customizedPartialUpdateFuture; } else if (errorTopics.containsAll(inputCollection)) { @@ -103,7 +104,7 @@ private QueueInstance createInstance() { @AllArgsConstructor private static class QueueInstance implements Closeable { private PatternConsumerUpdateQueue queue; - private PatternMultiTopicsConsumerImpl mockedConsumer; + private PatternMultiTopicsConsumerImpl mockedConsumer; private PatternMultiTopicsConsumerImpl.TopicsChangedListener mockedListener; @Override diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java index e2becec1105ec..8f9ad0d5c886f 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java @@ -44,13 +44,13 @@ public class TableViewBuilderImplTest { private static final String TOPIC_NAME = "testTopicName"; private PulsarClientImpl client; - private TableViewBuilderImpl tableViewBuilderImpl; + private TableViewBuilderImpl tableViewBuilderImpl; private CompletableFuture readNextFuture; @BeforeClass(alwaysRun = true) public void setup() { - Reader reader = mock(Reader.class); - readNextFuture = new CompletableFuture(); + Reader reader = mock(Reader.class); + readNextFuture = new CompletableFuture<>(); when(reader.readNextAsync()).thenReturn(readNextFuture); client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); @@ -72,7 +72,7 @@ public void cleanup() { @Test public void testTableViewBuilderImpl() throws PulsarClientException { - TableView tableView = tableViewBuilderImpl.topic(TOPIC_NAME) + TableView tableView = tableViewBuilderImpl.topic(TOPIC_NAME) .autoUpdatePartitionsInterval(5, TimeUnit.SECONDS) .subscriptionName("testSubscriptionName") .cryptoKeyReader(mock(CryptoKeyReader.class)) @@ -84,7 +84,7 @@ public void testTableViewBuilderImpl() throws PulsarClientException { @Test public void testTableViewBuilderImplWhenOnlyTopicNameIsSet() throws PulsarClientException { - TableView tableView = tableViewBuilderImpl.topic(TOPIC_NAME) + TableView tableView = tableViewBuilderImpl.topic(TOPIC_NAME) .create(); assertNotNull(tableView); @@ -118,7 +118,7 @@ public void testTableViewBuilderImplWhenSubscriptionNameIsEmptyString() throws P @Test public void testTableViewBuilderImplWithCryptoKeyReader() throws PulsarClientException { - TableView tableView = tableViewBuilderImpl.topic(TOPIC_NAME) + TableView tableView = tableViewBuilderImpl.topic(TOPIC_NAME) .cryptoKeyReader(mock(CryptoKeyReader.class)) .create(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java index c1ab9ae6b62ee..0a682eee589c3 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java @@ -48,7 +48,7 @@ public void setup() { @Test public void testTableViewImpl() { data.setCryptoKeyReader(mock(CryptoKeyReader.class)); - TableView tableView = new TableViewImpl(client, Schema.BYTES, data); + TableView tableView = new TableViewImpl<>(client, Schema.BYTES, data); assertNotNull(tableView); } diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java index 257fc6885b76c..4b61c32fe4939 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java @@ -42,7 +42,7 @@ public class TypedMessageBuilderImplTest { @Mock - protected ProducerBase producerBase; + protected ProducerBase producerBase; @Test public void testDefaultValue() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { @@ -55,6 +55,7 @@ public void testDefaultValue() throws NoSuchMethodException, InvocationTargetExc Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); SchemaTestUtils.Foo foo = new SchemaTestUtils.Foo(); @@ -65,8 +66,8 @@ public void testDefaultValue() throws NoSuchMethodException, InvocationTargetExc KeyValue keyValue = new KeyValue<>(foo, bar); // Check kv.encoding.type default, not set value - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.value(keyValue); + TypedMessageBuilderImpl> typedMessageBuilder = + (TypedMessageBuilderImpl>) typedMessageBuilderImpl.value(keyValue); Method method = TypedMessageBuilderImpl.class.getDeclaredMethod("beforeSend"); method.setAccessible(true); method.invoke(typedMessageBuilder); @@ -90,7 +91,8 @@ public void testInlineValue() throws NoSuchMethodException, InvocationTargetExce Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema, KeyValueEncodingType.INLINE); - TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl (producerBase, keyValueSchema); + @SuppressWarnings("rawtypes") + TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); SchemaTestUtils.Foo foo = new SchemaTestUtils.Foo(); foo.setField1("field1"); @@ -100,8 +102,8 @@ public void testInlineValue() throws NoSuchMethodException, InvocationTargetExce KeyValue keyValue = new KeyValue<>(foo, bar); // Check kv.encoding.type INLINE - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.value(keyValue); + TypedMessageBuilderImpl> typedMessageBuilder = + (TypedMessageBuilderImpl>) typedMessageBuilderImpl.value(keyValue); Method method = TypedMessageBuilderImpl.class.getDeclaredMethod("beforeSend"); method.setAccessible(true); method.invoke(typedMessageBuilder); @@ -125,7 +127,8 @@ public void testSeparatedValue() throws Exception { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema, KeyValueEncodingType.SEPARATED); - TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl (producerBase, keyValueSchema); + @SuppressWarnings("rawtypes") + TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); SchemaTestUtils.Foo foo = new SchemaTestUtils.Foo(); foo.setField1("field1"); @@ -135,7 +138,8 @@ public void testSeparatedValue() throws Exception { KeyValue keyValue = new KeyValue<>(foo, bar); // Check kv.encoding.type SEPARATED - TypedMessageBuilderImpl typedMessageBuilder = (TypedMessageBuilderImpl) typedMessageBuilderImpl.value(keyValue); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.value(keyValue); Method method = TypedMessageBuilderImpl.class.getDeclaredMethod("beforeSend"); method.setAccessible(true); method.invoke(typedMessageBuilder); @@ -159,10 +163,11 @@ public void testSetKeyEncodingTypeDefault() { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.key("default"); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.key("default"); assertEquals(typedMessageBuilder.getKey(), "default"); assertFalse(typedMessageBuilder.getMetadataBuilder().isPartitionKeyB64Encoded()); } @@ -178,10 +183,11 @@ public void testSetKeyEncodingTypeInline() { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema, KeyValueEncodingType.INLINE); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.key("inline"); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.key("inline"); assertEquals(typedMessageBuilder.getKey(), "inline"); assertFalse(typedMessageBuilder.getMetadataBuilder().isPartitionKeyB64Encoded()); } @@ -197,12 +203,13 @@ public void testSetKeyEncodingTypeSeparated() { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema, KeyValueEncodingType.SEPARATED); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); try { - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.key("separated"); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.key("separated"); fail("This should fail"); } catch (IllegalArgumentException e) { assertTrue(e.getMessage() @@ -221,10 +228,11 @@ public void testSetKeyBytesEncodingTypeDefault() { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.keyBytes("default".getBytes()); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.keyBytes("default".getBytes()); assertEquals(typedMessageBuilder.getKey(), Base64.getEncoder().encodeToString("default".getBytes())); assertTrue(typedMessageBuilder.getMetadataBuilder().isPartitionKeyB64Encoded()); } @@ -240,10 +248,11 @@ public void testSetKeyBytesEncodingTypeInline() { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema, KeyValueEncodingType.INLINE); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.keyBytes("inline".getBytes()); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.keyBytes("inline".getBytes()); assertEquals(typedMessageBuilder.getKey(), Base64.getEncoder().encodeToString("inline".getBytes())); assertTrue(typedMessageBuilder.getMetadataBuilder().isPartitionKeyB64Encoded()); } @@ -259,12 +268,13 @@ public void testSetKeyBytesEncodingTypeSeparated() { Schema> keyValueSchema = Schema.KeyValue(fooSchema, barSchema, KeyValueEncodingType.SEPARATED); + @SuppressWarnings("rawtypes") TypedMessageBuilderImpl typedMessageBuilderImpl = new TypedMessageBuilderImpl(producerBase, keyValueSchema); try { - TypedMessageBuilderImpl typedMessageBuilder = - (TypedMessageBuilderImpl) typedMessageBuilderImpl.keyBytes("separated".getBytes()); + TypedMessageBuilderImpl typedMessageBuilder = + (TypedMessageBuilderImpl) typedMessageBuilderImpl.keyBytes("separated".getBytes()); fail("This should fail"); } catch (IllegalArgumentException e) { assertTrue(e.getMessage() diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java index 9ca0c2d81b7e5..cc04220c839ca 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java @@ -100,7 +100,7 @@ public void testLoadProducerConfigurationData() { @Test public void testLoadConsumerConfigurationData() { - ConsumerConfigurationData confData = new ConsumerConfigurationData(); + ConsumerConfigurationData confData = new ConsumerConfigurationData(); confData.setSubscriptionName("unknown-subscription"); confData.setPriorityLevel(10000); confData.setConsumerName("unknown-consumer"); @@ -117,7 +117,7 @@ public void testLoadConsumerConfigurationData() { @Test public void testLoadReaderConfigurationData() { - ReaderConfigurationData confData = new ReaderConfigurationData(); + ReaderConfigurationData confData = new ReaderConfigurationData(); confData.setTopicName("unknown"); confData.setReceiverQueueSize(1000000); confData.setReaderName("unknown-reader"); @@ -132,7 +132,7 @@ public void testLoadReaderConfigurationData() { @Test public void testLoadConfigurationDataWithUnknownFields() { - ReaderConfigurationData confData = new ReaderConfigurationData(); + ReaderConfigurationData confData = new ReaderConfigurationData(); confData.setTopicName("unknown"); confData.setReceiverQueueSize(1000000); confData.setReaderName("unknown-reader"); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaInfoTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaInfoTest.java index 97019ec93d6d9..b6b4db7bb88e0 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaInfoTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaInfoTest.java @@ -46,7 +46,7 @@ @Slf4j public class KeyValueSchemaInfoTest { - private static final Map FOO_PROPERTIES = new HashMap() { + private static final Map FOO_PROPERTIES = new HashMap<>() { private static final long serialVersionUID = 58641844834472929L; @@ -58,7 +58,7 @@ public class KeyValueSchemaInfoTest { }; - private static final Map BAR_PROPERTIES = new HashMap() { + private static final Map BAR_PROPERTIES = new HashMap<>() { private static final long serialVersionUID = 58641844834472929L; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java index 6de7f805f93bf..43ddd85af2a6d 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java @@ -249,7 +249,7 @@ public void testAllowNullSchemaEncodeAndDecode() { foo.setField4(bar); foo.setColor(Color.RED); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); Assert.assertTrue(encodeBytes.length > 0); KeyValue keyValue = (KeyValue) keyValueSchema.decode(encodeBytes); @@ -277,7 +277,7 @@ public void testNotAllowNullSchemaEncodeAndDecode() { foo.setField4(bar); foo.setColor(Color.RED); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); Assert.assertTrue(encodeBytes.length > 0); KeyValue keyValue = (KeyValue) keyValueSchema.decode(encodeBytes); @@ -306,7 +306,7 @@ public void testDefaultKeyValueEncodingTypeSchemaEncodeAndDecode() { foo.setColor(Color.RED); // Check kv.encoding.type default not set value - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); Assert.assertTrue(encodeBytes.length > 0); KeyValue keyValue = (KeyValue) keyValueSchema.decode(encodeBytes); @@ -338,7 +338,7 @@ public void testInlineKeyValueEncodingTypeSchemaEncodeAndDecode() { foo.setColor(Color.RED); // Check kv.encoding.type INLINE - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); Assert.assertTrue(encodeBytes.length > 0); KeyValue keyValue = (KeyValue) keyValueSchema.decode(encodeBytes); Foo fooBack = keyValue.getKey(); @@ -367,7 +367,7 @@ public void testSeparatedKeyValueEncodingTypeSchemaEncodeAndDecode() { foo.setColor(Color.RED); // Check kv.encoding.type SEPARATED - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); Assert.assertTrue(encodeBytes.length > 0); try { keyValueSchema.decode(encodeBytes); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java index af46aa5318547..202d17cfc3593 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java @@ -55,7 +55,7 @@ public Object[][] schemas() { // we are not using a static initialization block, see here: // https://github.com/apache/pulsar/issues/11037 - final Map> testData = new HashMap() { + final Map, List> testData = new HashMap<>() { { put(BooleanSchema.of(), Arrays.asList(false, true)); put(StringSchema.utf8(), Arrays.asList("my string")); @@ -82,7 +82,7 @@ public Object[][] schemas() { } }; - final Map> testData2 = new HashMap() { + final Map, List> testData2 = new HashMap<>() { { put(Schema.BOOL, Arrays.asList(false, true)); put(Schema.STRING, Arrays.asList("my string")); @@ -108,10 +108,10 @@ public Object[][] schemas() { } }; - for (Schema schema : testData.keySet()) { + for (Schema schema : testData.keySet()) { assertNotNull(schema); } - for (Schema schema : testData2.keySet()) { + for (Schema schema : testData2.keySet()) { assertNotNull(schema); } @@ -119,7 +119,7 @@ public Object[][] schemas() { } @Test(dataProvider = "schemas") - public void allSchemasShouldSupportNull(Map> testData) { + public void allSchemasShouldSupportNull(Map, List> testData) { for (Schema schema : testData.keySet()) { byte[] bytes = null; ByteBuf byteBuf = null; @@ -137,6 +137,7 @@ public void allSchemasShouldSupportNull(Map> testData) { } @Test(dataProvider = "schemas") + @SuppressWarnings("rawtypes") public void allSchemasShouldRoundtripInput(Map> testData) { for (Map.Entry> test : testData.entrySet()) { log.info("Test schema {}", test.getKey()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java index 70c4541be9d6d..dfdcbc8470c79 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java @@ -164,6 +164,7 @@ public void testGenericRecordBuilderByFieldName() { SchemaInfo schemaInfo = recordSchemaBuilder.build( SchemaType.AVRO ); + @SuppressWarnings("rawtypes") GenericSchema schema = Schema.generic(schemaInfo); GenericRecord record = schema.newRecordBuilder() .set("intField", 32) @@ -503,7 +504,7 @@ public void testGenericRecordBuilderAvroByFieldIndexPojo() { * @param decoder the schema used for reading * @param writer the schema used for writing */ - private static void injectWriterSchema(Schema decoder, Schema writer) { + private static void injectWriterSchema(Schema decoder, Schema writer) { AvroSchema avroSchema = (AvroSchema) decoder; avroSchema.setReader(new MultiVersionAvroReader<>( AvroSchema.of(SchemaDefinition. diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningAvroSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningAvroSchemaTest.java index dbac3ae1d21f4..14464a3838f76 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningAvroSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningAvroSchemaTest.java @@ -33,7 +33,7 @@ public class SupportVersioningAvroSchemaTest { private MultiVersionSchemaInfoProvider multiVersionSchemaInfoProvider; - private AvroSchema schema; + private AvroSchema schema; private GenericAvroSchema genericAvroSchema; private AvroSchema avroFooV2Schema; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java index f64e7a9162490..8e4b0b0bea79a 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java @@ -56,7 +56,7 @@ public void testKeyValueVersioningEncodeDecode() { foo.setField4(bar); foo.setColor(SchemaTestUtils.Color.RED); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); KeyValue keyValue = keyValueSchema.decode( encodeBytes, new byte[10]); Assert.assertEquals(keyValue.getKey().getField1(), foo.getField1()); @@ -94,7 +94,7 @@ public void testSeparateKeyValueVersioningEncodeDecode() { foo.setField4(bar); foo.setColor(SchemaTestUtils.Color.RED); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); KeyValue keyValue = ((KeyValueSchemaImpl) keyValueSchema).decode( fooSchema.encode(foo), encodeBytes, new byte[10]); Assert.assertTrue(keyValue.getValue().isField1()); @@ -122,7 +122,7 @@ public void testKeyValueDefaultVersioningEncodeDecode() { foo.setField4(bar); foo.setColor(SchemaTestUtils.Color.RED); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); KeyValue keyValue = keyValueSchema.decode( encodeBytes, new byte[10]); Assert.assertEquals(keyValue.getKey().getField1(), foo.getField1()); @@ -155,7 +155,7 @@ public void testKeyValueLatestVersioningEncodeDecode() { foo.setField4(bar); foo.setColor(SchemaTestUtils.Color.RED); - byte[] encodeBytes = keyValueSchema.encode(new KeyValue(foo, bar)); + byte[] encodeBytes = keyValueSchema.encode(new KeyValue<>(foo, bar)); KeyValue keyValue = ((KeyValueSchemaImpl) keyValueSchema).decode( fooSchema.encode(foo), encodeBytes, new byte[10]); Assert.assertTrue(keyValue.getValue().isField1()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java index 21fc90bf94776..1cc611b4226b2 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java @@ -36,9 +36,13 @@ public class GenericAvroReaderTest { private Foo foo; private FooV2 fooV2; + @SuppressWarnings("rawtypes") private AvroSchema fooSchemaNotNull; + @SuppressWarnings("rawtypes") private AvroSchema fooSchema; + @SuppressWarnings("rawtypes") private AvroSchema fooV2Schema; + @SuppressWarnings("rawtypes") private AvroSchema fooOffsetSchema; @BeforeMethod diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeReaderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeReaderTest.java index 5bc147cb0e3fd..ed13a3d768efe 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeReaderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeReaderTest.java @@ -37,7 +37,7 @@ public class GenericProtobufNativeReaderTest { private TestMessage message; private GenericRecord genericmessage; private GenericProtobufNativeSchema genericProtobufNativeSchema; - private ProtobufNativeSchema clazzBasedProtobufNativeSchema; + private ProtobufNativeSchema clazzBasedProtobufNativeSchema; @BeforeMethod diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java index 2f6574a74bfd5..b8756c042151b 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java @@ -33,6 +33,7 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; +import io.netty.util.concurrent.GenericFutureListener; import java.time.Duration; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -245,7 +246,8 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushSuccess() throws Excep }); when(channelFuture.addListener(any())).thenAnswer(invocation -> { - io.netty.util.concurrent.GenericFutureListener listener = invocation.getArgument(0); + @SuppressWarnings("unchecked") + GenericFutureListener listener = invocation.getArgument(0); listenerCalled.set(true); // Simulate successful write listener.operationComplete(channelFuture); @@ -415,13 +417,15 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushMultipleConcurrent() t when(ctx.writeAndFlush(any(ByteBuf.class))).thenReturn(channelFuture); when(channelFuture.addListener(any())).thenAnswer(invocation -> { - io.netty.util.concurrent.GenericFutureListener listener = invocation.getArgument(0); + @SuppressWarnings("unchecked") + GenericFutureListener listener = invocation.getArgument(0); listener.operationComplete(channelFuture); return channelFuture; }); when(channelFuture.isSuccess()).thenReturn(true); int numRequests = 10; + @SuppressWarnings({"unchecked", "rawtypes"}) CompletableFuture[] futures = new CompletableFuture[numRequests]; for (int i = 0; i < numRequests; i++) { @@ -451,7 +455,8 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushReleasesOnWriteFailure when(ctx.writeAndFlush(any(ByteBuf.class))).thenReturn(channelFuture); when(channelFuture.addListener(any())).thenAnswer(invocation -> { - io.netty.util.concurrent.GenericFutureListener listener = invocation.getArgument(0); + @SuppressWarnings("unchecked") + GenericFutureListener listener = invocation.getArgument(0); // Simulate write failure when(channelFuture.isSuccess()).thenReturn(false); when(channelFuture.cause()).thenReturn(new RuntimeException("Write to socket failed")); @@ -482,6 +487,7 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushReleasesOnWriteFailure @Test public void testWithPermitsFutureMultipleConcurrent() throws Exception { int numOperations = 20; + @SuppressWarnings({"unchecked", "rawtypes"}) CompletableFuture[] futures = new CompletableFuture[numOperations]; AtomicInteger releaseCount = new AtomicInteger(0); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncSemaphoreImplTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncSemaphoreImplTest.java index ec2e01e1a718c..6f6c86653ef19 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncSemaphoreImplTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncSemaphoreImplTest.java @@ -360,7 +360,7 @@ public void testConcurrentAcquireAndRelease() throws Exception { } // Wait for all threads to complete - CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) .get(30, TimeUnit.SECONDS); } diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java index 40876e57df989..4192407eff1d8 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java @@ -88,6 +88,7 @@ public class ContextImplTest { private PulsarClientImpl client; private PulsarAdmin pulsarAdmin; private ContextImpl context; + @SuppressWarnings("rawtypes") private Producer producer; private ProducerCache producerCache; @@ -107,9 +108,9 @@ public void setup() throws PulsarClientException { when(client.getConfiguration()).thenReturn(new ClientConfigurationData()); ConnectionPool connectionPool = mock(ConnectionPool.class); when(client.getCnxPool()).thenReturn(connectionPool); - when(client.newProducer()).thenAnswer(invocation -> new ProducerBuilderImpl(client, Schema.BYTES)); + when(client.newProducer()).thenAnswer(invocation -> new ProducerBuilderImpl<>(client, Schema.BYTES)); when(client.newProducer(any())).thenAnswer( - invocation -> new ProducerBuilderImpl(client, invocation.getArgument(0))); + invocation -> new ProducerBuilderImpl<>(client, invocation.getArgument(0))); when(client.createProducerAsync(any(ProducerConfigurationData.class), any(), any())) .thenReturn(CompletableFuture.completedFuture(producer)); when(client.getSchema(anyString())).thenReturn(CompletableFuture.completedFuture(Optional.empty())); @@ -118,6 +119,7 @@ public void setup() throws PulsarClientException { clientBuilder = mock(ClientBuilder.class); when(clientBuilder.build()).thenReturn(client); + @SuppressWarnings("rawtypes") TypedMessageBuilder messageBuilder = spy(new TypedMessageBuilderImpl(mock(ProducerBase.class), Schema.STRING)); doReturn(new CompletableFuture<>()).when(messageBuilder).sendAsync(); when(producer.newMessage()).thenReturn(messageBuilder); @@ -357,6 +359,7 @@ FunctionDetails.ComponentType.FUNCTION, null, new InstanceStateManager(), when(consumer2.getTopic()).thenReturn(TopicName.get("second").toString()); List> consumersList = Lists.newArrayList(consumer1, consumer2); + @SuppressWarnings("rawtypes") MultiTopicsConsumerImpl mtc = Mockito.mock(MultiTopicsConsumerImpl.class); when(mtc.getConsumers()).thenReturn(consumersList); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java index f89e367a4fac1..84a0e9a574af8 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java @@ -189,7 +189,7 @@ public void testFunctionAsyncTime() throws Exception { javaInstanceRunnable.setStats(manager); JavaExecutionResult javaExecutionResult = new JavaExecutionResult(); Thread.sleep(500); - Record record = mock(Record.class); + Record record = mock(Record.class); javaInstanceRunnable.handleResult(record, javaExecutionResult); ArgumentCaptor timeCaptor = ArgumentCaptor.forClass(Long.class); verify(manager).processTimeEnd(timeCaptor.capture()); @@ -201,7 +201,7 @@ public void testFunctionResultNull() throws Exception { JavaExecutionResult javaExecutionResult = new JavaExecutionResult(); // ProcessingGuarantees == MANUAL, not need ack. - Record record = mock(Record.class); + Record record = mock(Record.class); getJavaInstanceRunnable(true, org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.MANUAL) .handleResult(record, javaExecutionResult); verify(record, times(0)).ack(); @@ -411,7 +411,7 @@ public void pushRecord(Record record) throws Exception { } @Override - public void open(Map config, SourceContext sourceContext) throws Exception { + public void open(Map config, SourceContext sourceContext) throws Exception { context = sourceContext; queue = new LinkedBlockingQueue<>(); } @@ -450,7 +450,7 @@ public static class TestSinkConnector implements Sink { SinkContext context; @Override - public void open(Map config, SinkContext sinkContext) throws Exception { + public void open(Map config, SinkContext sinkContext) throws Exception { this.context = sinkContext; } diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java index 53b9b1cf5b044..1f407460325e3 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java @@ -52,7 +52,7 @@ public class ProducerBuilderFactoryTest { private PulsarClient pulsarClient; - private ProducerBuilder producerBuilder; + private ProducerBuilder producerBuilder; @BeforeMethod public void setup() { diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java index 129651c880462..3994ea39a8637 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java @@ -33,7 +33,7 @@ public class ProducerCacheTest { @Test public void shouldTolerateAlreadyClosedExceptionInClose() { ProducerCache cache = new ProducerCache(); - Producer producer = mock(Producer.class); + Producer producer = mock(Producer.class); when(producer.flushAsync()).thenReturn(CompletableFuture.completedFuture(null)); when(producer.closeAsync()).thenReturn( CompletableFuture.failedFuture(new PulsarClientException.AlreadyClosedException("Already closed"))); @@ -45,7 +45,7 @@ public void shouldTolerateAlreadyClosedExceptionInClose() { @Test public void shouldTolerateRuntimeExceptionInClose() { ProducerCache cache = new ProducerCache(); - Producer producer = mock(Producer.class); + Producer producer = mock(Producer.class); when(producer.flushAsync()).thenReturn(CompletableFuture.completedFuture(null)); when(producer.closeAsync()).thenThrow(new RuntimeException("Some exception")); cache.getOrCreateProducer(ProducerCache.CacheArea.CONTEXT_CACHE, "topic", "key", @@ -56,7 +56,7 @@ public void shouldTolerateRuntimeExceptionInClose() { @Test public void shouldTolerateRuntimeExceptionInFlush() { ProducerCache cache = new ProducerCache(); - Producer producer = mock(Producer.class); + Producer producer = mock(Producer.class); when(producer.flushAsync()).thenThrow(new RuntimeException("Some exception")); when(producer.closeAsync()).thenReturn(CompletableFuture.completedFuture(null)); cache.getOrCreateProducer(ProducerCache.CacheArea.CONTEXT_CACHE, "topic", "key", @@ -67,7 +67,7 @@ public void shouldTolerateRuntimeExceptionInFlush() { @Test public void shouldCompleteFlushBeforeCloseAndWaitForClosing() { ProducerCache cache = new ProducerCache(); - Producer producer = mock(Producer.class); + Producer producer = mock(Producer.class); AtomicBoolean flushCompleted = new AtomicBoolean(false); when(producer.flushAsync()).thenReturn(CompletableFuture.supplyAsync(() -> { try { diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java index 7ee55020a4d7a..78c449f5c1cb3 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java @@ -29,10 +29,11 @@ public class SinkRecordTest { @Test + @SuppressWarnings("rawtypes") public void testCustomAck() { PulsarRecord pulsarRecord = Mockito.mock(PulsarRecord.class); - SinkRecord sinkRecord = new SinkRecord<>(pulsarRecord, new Object()); + SinkRecord sinkRecord = new SinkRecord(pulsarRecord, new Object()); sinkRecord.cumulativeAck(); Mockito.verify(pulsarRecord, Mockito.times(1)).cumulativeAck(); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java index 598fb4f6e0dde..2d832fb7e2a06 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java @@ -118,6 +118,7 @@ public void testGetValue() throws Exception { @Test public void testGetStateValue() throws Exception { + @SuppressWarnings("rawtypes") KeyValue returnedKeyValue = mock(KeyValue.class); ByteBuf returnedValue = Unpooled.copiedBuffer("test-value", UTF_8); when(returnedKeyValue.value()).thenReturn(returnedValue); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java index 35a66ddd05208..3ca2a5f48627c 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java @@ -100,17 +100,17 @@ private static PulsarClientImpl getPulsarClient() throws PulsarClientException { PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); when(pulsarClient.getCnxPool()).thenReturn(connectionPool); - ConsumerBuilder consumerBuilder = mock(ConsumerBuilder.class); + ConsumerBuilder consumerBuilder = mock(ConsumerBuilder.class); doReturn(consumerBuilder).when(consumerBuilder).topics(anyList()); doReturn(consumerBuilder).when(consumerBuilder).subscriptionName(anyString()); doReturn(consumerBuilder).when(consumerBuilder).subscriptionType(any()); doReturn(consumerBuilder).when(consumerBuilder).ackTimeout(anyLong(), any()); - Consumer consumer = mock(Consumer.class); + Consumer consumer = mock(Consumer.class); doReturn(consumer).when(consumerBuilder).subscribe(); doReturn(consumerBuilder).when(pulsarClient).newConsumer(any()); doReturn(CompletableFuture.completedFuture(Optional.empty())).when(pulsarClient).getSchema(anyString()); - ProducerBuilder producerBuilder = mock(ProducerBuilder.class); + ProducerBuilder producerBuilder = mock(ProducerBuilder.class); doReturn(producerBuilder).when(producerBuilder).blockIfQueueFull(anyBoolean()); doReturn(producerBuilder).when(producerBuilder).enableBatching(anyBoolean()); doReturn(producerBuilder).when(producerBuilder).batchingMaxPublishDelay(anyLong(), any()); @@ -124,12 +124,12 @@ private static PulsarClientImpl getPulsarClient() throws PulsarClientException { doReturn(producerBuilder).when(producerBuilder).properties(any()); doReturn(producerBuilder).when(producerBuilder).sendTimeout(anyInt(), any()); - CompletableFuture completableFuture = new CompletableFuture<>(); + CompletableFuture completableFuture = new CompletableFuture<>(); completableFuture.complete(mock(MessageId.class)); - TypedMessageBuilder typedMessageBuilder = mock(TypedMessageBuilder.class); + TypedMessageBuilder typedMessageBuilder = mock(TypedMessageBuilder.class); doReturn(completableFuture).when(typedMessageBuilder).sendAsync(); - Producer producer = mock(Producer.class); + Producer producer = mock(Producer.class); doReturn(producer).when(producerBuilder).create(); doReturn(typedMessageBuilder).when(producer).newMessage(); doReturn(typedMessageBuilder).when(producer).newMessage(any(Schema.class)); @@ -190,12 +190,12 @@ public void testVoidOutputClasses() throws Exception { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); // set type to void pulsarConfig.setTypeClassName(Void.class.getName()); - PulsarSink pulsarSink = - new PulsarSink(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + PulsarSink pulsarSink = + new PulsarSink<>(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); try { - Schema schema = pulsarSink.initializeSchema(); + Schema schema = pulsarSink.initializeSchema(); assertNull(schema); } catch (Exception ex) { ex.printStackTrace(); @@ -210,8 +210,8 @@ public void testInconsistentOutputType() throws IOException { // set type to be inconsistent to that of SerDe pulsarConfig.setTypeClassName(Integer.class.getName()); pulsarConfig.setSerdeClassName(TestSerDe.class.getName()); - PulsarSink pulsarSink = - new PulsarSink(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + PulsarSink pulsarSink = + new PulsarSink<>(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); try { pulsarSink.initializeSchema(); @@ -235,8 +235,8 @@ public void testDefaultSerDe() throws PulsarClientException { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); // set type to void pulsarConfig.setTypeClassName(String.class.getName()); - PulsarSink pulsarSink = - new PulsarSink(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + PulsarSink pulsarSink = + new PulsarSink<>(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); try { @@ -256,8 +256,8 @@ public void testExplicitDefaultSerDe() throws PulsarClientException { // set type to void pulsarConfig.setTypeClassName(String.class.getName()); pulsarConfig.setSerdeClassName(TopicSchema.DEFAULT_SERDE); - PulsarSink pulsarSink = - new PulsarSink(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + PulsarSink pulsarSink = + new PulsarSink<>(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); try { @@ -274,8 +274,8 @@ public void testComplexOuputType() throws PulsarClientException { // set type to void pulsarConfig.setTypeClassName(ComplexUserDefinedType.class.getName()); pulsarConfig.setSerdeClassName(ComplexSerDe.class.getName()); - PulsarSink pulsarSink = - new PulsarSink(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + PulsarSink pulsarSink = + new PulsarSink<>(getPulsarClient(), pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); try { @@ -294,7 +294,7 @@ public void testInitializeSchema() throws Exception { PulsarSinkConfig pulsarSinkConfig = getPulsarConfigs(); pulsarSinkConfig.setSerdeClassName(null); pulsarSinkConfig.setTypeClassName(GenericRecord.class.getName()); - PulsarSink sink = new PulsarSink( + PulsarSink sink = new PulsarSink<>( pulsarClient, pulsarSinkConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); Schema schema = sink.initializeSchema(); @@ -303,7 +303,7 @@ public void testInitializeSchema() throws Exception { // generic record type (default serde and no schema type) pulsarSinkConfig = getPulsarConfigs(); pulsarSinkConfig.setTypeClassName(GenericRecord.class.getName()); - sink = new PulsarSink( + sink = new PulsarSink<>( pulsarClient, pulsarSinkConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); schema = sink.initializeSchema(); @@ -314,7 +314,7 @@ public void testInitializeSchema() throws Exception { pulsarSinkConfig.setSerdeClassName(null); pulsarSinkConfig.setSchemaType(SchemaType.AVRO.toString()); pulsarSinkConfig.setTypeClassName(GenericRecord.class.getName()); - sink = new PulsarSink( + sink = new PulsarSink<>( pulsarClient, pulsarSinkConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); schema = sink.initializeSchema(); @@ -325,7 +325,7 @@ public void testInitializeSchema() throws Exception { pulsarSinkConfig.setSerdeClassName(null); pulsarSinkConfig.setSchemaType(SchemaType.AUTO_CONSUME.toString()); pulsarSinkConfig.setTypeClassName(GenericRecord.class.getName()); - sink = new PulsarSink( + sink = new PulsarSink<>( pulsarClient, pulsarSinkConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); schema = sink.initializeSchema(); @@ -335,7 +335,7 @@ public void testInitializeSchema() throws Exception { pulsarSinkConfig = getPulsarConfigs(); pulsarSinkConfig.setSchemaType(SchemaType.AUTO_CONSUME.toString()); pulsarSinkConfig.setTypeClassName(GenericRecord.class.getName()); - sink = new PulsarSink( + sink = new PulsarSink<>( pulsarClient, pulsarSinkConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); schema = sink.initializeSchema(); @@ -343,6 +343,7 @@ public void testInitializeSchema() throws Exception { } @Test + @SuppressWarnings("rawtypes") public void testSinkAndMessageRouting() throws Exception { String[] topics = {"topic-1", "topic-2", "topic-3", null}; @@ -354,8 +355,8 @@ public void testSinkAndMessageRouting() throws Exception { /** test MANUAL **/ pulsarClient = getPulsarClient(); pulsarConfig.setProcessingGuarantees(ProcessingGuarantees.MANUAL); - PulsarSink pulsarSink = - new PulsarSink(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + PulsarSink pulsarSink = + new PulsarSink<>(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); pulsarSink.open(new HashMap<>(), mock(SinkContext.class)); @@ -394,7 +395,7 @@ public Optional getDestinationTopic() { /** test At-least-once **/ pulsarClient = getPulsarClient(); pulsarConfig.setProcessingGuarantees(ProcessingGuarantees.ATLEAST_ONCE); - pulsarSink = new PulsarSink(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + pulsarSink = new PulsarSink<>(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); pulsarSink.open(new HashMap<>(), mock(SinkContext.class)); @@ -428,7 +429,7 @@ public Optional getDestinationTopic() { /** test At-most-once **/ pulsarClient = getPulsarClient(); pulsarConfig.setProcessingGuarantees(ProcessingGuarantees.ATMOST_ONCE); - pulsarSink = new PulsarSink(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + pulsarSink = new PulsarSink<>(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); pulsarSink.open(new HashMap<>(), mock(SinkContext.class)); @@ -468,7 +469,7 @@ public Optional getDestinationTopic() { /** test Effectively-once **/ pulsarClient = getPulsarClient(); pulsarConfig.setProcessingGuarantees(FunctionConfig.ProcessingGuarantees.EFFECTIVELY_ONCE); - pulsarSink = new PulsarSink(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), + pulsarSink = new PulsarSink<>(pulsarClient, pulsarConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); pulsarSink.open(new HashMap<>(), mock(SinkContext.class)); @@ -550,6 +551,7 @@ public void testWriteGenericRecordsEOS() throws Exception { testWriteGenericRecords(ProcessingGuarantees.EFFECTIVELY_ONCE); } + @SuppressWarnings("rawtypes") private void testWriteGenericRecords(ProcessingGuarantees guarantees) throws Exception { String defaultTopic = "default"; @@ -559,7 +561,7 @@ private void testWriteGenericRecords(ProcessingGuarantees guarantees) throws Exc sinkConfig.setProcessingGuarantees(guarantees); PulsarClient client = getPulsarClient(); - PulsarSink pulsarSink = new PulsarSink( + PulsarSink pulsarSink = new PulsarSink<>( client, sinkConfig, new HashMap<>(), mock(ComponentStatsManager.class), Thread.currentThread().getContextClassLoader(), producerCache); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java index 495d85fd86300..a418b9814d7cd 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java @@ -31,10 +31,10 @@ public class PulsarFunctionRecordTest { @SuppressWarnings("deprecation") @Test public void testAck() { - Record record = mock(Record.class); + Record record = mock(Record.class); Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder().setAutoAck(true) .setProcessingGuarantees(Function.ProcessingGuarantees.ATMOST_ONCE).build(); - PulsarFunctionRecord pulsarFunctionRecord = new PulsarFunctionRecord<>(record, functionDetails); + PulsarFunctionRecord pulsarFunctionRecord = new PulsarFunctionRecord<>(record, functionDetails); pulsarFunctionRecord.ack(); verify(record, times(0)).ack(); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java index 1f36be360144a..72138fe000cd9 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java @@ -136,6 +136,7 @@ public void testWindowFunctionWithAtmostOnce() throws Exception { windowConfig.setProcessingGuarantees(WindowConfig.ProcessingGuarantees.ATMOST_ONCE); doReturn(Optional.of(new Gson().fromJson(new Gson().toJson(windowConfig), Map.class))).when(context) .getUserConfigValue(WindowConfig.WINDOW_CONFIG_KEY); + @SuppressWarnings("rawtypes") Record record = mock(Record.class); when(context.getCurrentRecord()).thenReturn(record); doReturn(Optional.of("test-topic")).when(record).getTopicName(); @@ -151,6 +152,7 @@ public void testWindowFunctionWithAtleastOnce() throws Exception { WindowConfig config = new WindowConfig(); config.setProcessingGuarantees(WindowConfig.ProcessingGuarantees.ATLEAST_ONCE); + @SuppressWarnings("rawtypes") WindowFunctionExecutor windowFunctionExecutor = spy(WindowFunctionExecutor.class); windowFunctionExecutor.windowConfig = config; doNothing().when(windowFunctionExecutor).initialize(any()); @@ -254,6 +256,7 @@ public void testExecuteWithLateTupleStream() throws Exception { windowConfig.setLateDataTopic("$late"); doReturn(Optional.of(new Gson().fromJson(new Gson().toJson(windowConfig), Map.class))) .when(context).getUserConfigValue(WindowConfig.WINDOW_CONFIG_KEY); + @SuppressWarnings("rawtypes") TypedMessageBuilder typedMessageBuilder = mock(TypedMessageBuilder.class); when(typedMessageBuilder.value(any())).thenReturn(typedMessageBuilder); when(typedMessageBuilder.sendAsync()).thenReturn(CompletableFuture.anyOf()); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java index 442be8130c1a2..39e6c63f92530 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java @@ -171,6 +171,7 @@ public void testExpireThreshold() throws Exception { assertEquals(seq(1, threshold - windowLength), listener.onExpiryEvents); } + @SuppressWarnings("rawtypes") private void testEvictBeforeWatermarkForWatermarkEvictionPolicy(EvictionPolicy watermarkEvictionPolicy, int windowLength) throws @@ -386,43 +387,43 @@ public void testEventTimeBasedWindow() throws Exception { windowManager.add(new WaterMarkEvent(631)); assertEquals(3, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), new EventImpl<>(4, 618, null) }), listener.allOnActivationEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null) }), listener.allOnActivationEvents.get(2)); assertEquals(Collections.emptyList(), listener.allOnActivationExpiredEvents.get(0)); assertEquals(Collections.emptyList(), listener.allOnActivationExpiredEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null) }), listener.allOnActivationExpiredEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null) }), listener.allOnActivationNewEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null) }), listener.allOnActivationNewEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(5, 626, null) }), listener.allOnActivationNewEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null) @@ -438,44 +439,44 @@ public void testEventTimeBasedWindow() throws Exception { windowManager.add(new WaterMarkEvent(834)); assertEquals(3, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(5, 626, null), new EventImpl<>(6, 636, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(6, 636, null) }), listener.allOnActivationEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(7, 825, null), new EventImpl<>(8, 826, null), new EventImpl<>(9, 827, null) }), listener.allOnActivationEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null) }), listener.allOnActivationExpiredEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(5, 626, null) }), listener.allOnActivationExpiredEvents.get(1)); assertEquals(Collections.emptyList(), listener.allOnActivationExpiredEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(6, 636, null) }), listener.allOnActivationNewEvents.get(0)); assertEquals(Collections.emptyList(), listener.allOnActivationNewEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(7, 825, null), new EventImpl<>(8, 826, null), new EventImpl<>(9, 827, null) }), listener.allOnActivationNewEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null) }), listener.allOnExpiryEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(5, 626, null) }), listener.allOnExpiryEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(6, 636, null) }), listener.allOnExpiryEvents.get(2)); } @@ -499,17 +500,17 @@ public void testCountBasedWindowWithEventTs() throws Exception { windowManager.add(new WaterMarkEvent(631)); assertEquals(3, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), new EventImpl<>(4, 618, null) }), listener.allOnActivationEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(3, 607, null), new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null) @@ -525,22 +526,22 @@ public void testCountBasedWindowWithEventTs() throws Exception { windowManager.add(new WaterMarkEvent(674)); assertEquals(4, listener.allOnActivationEvents.size()); // same set of events part of three windows - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null), new EventImpl<>(6, 636, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null), new EventImpl<>(6, 636, null) }), listener.allOnActivationEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null), new EventImpl<>(6, 636, null) }), listener.allOnActivationEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(7, 665, null), new EventImpl<>(8, 666, null), new EventImpl<>(9, 667, null) @@ -568,12 +569,12 @@ public void testCountBasedTriggerWithEventTs() throws Exception { windowManager.add(new WaterMarkEvent(631)); assertEquals(2, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(3, 607, null), new EventImpl<>(4, 618, null), new EventImpl<>(5, 625, null), @@ -592,10 +593,10 @@ public void testCountBasedTriggerWithEventTs() throws Exception { windowManager.add(new WaterMarkEvent(674)); assertEquals(2, listener.allOnActivationEvents.size()); // same set of events part of three windows - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(9, 665, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(9, 665, null), new EventImpl<>(10, 666, null), new EventImpl<>(11, 667, null), @@ -625,23 +626,23 @@ public void testCountBasedTumblingWithSameEventTs() throws Exception { windowManager.add(new WaterMarkEvent(20)); assertEquals(5, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 10, null), new EventImpl<>(2, 10, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(3, 11, null), new EventImpl<>(4, 12, null) }), listener.allOnActivationEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(5, 12, null), new EventImpl<>(6, 12, null) }), listener.allOnActivationEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(7, 12, null), new EventImpl<>(8, 13, null) }), listener.allOnActivationEvents.get(3)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(9, 14, null), new EventImpl<>(10, 15, null) }), listener.allOnActivationEvents.get(4)); @@ -669,31 +670,31 @@ public void testCountBasedSlidingWithSameEventTs() throws Exception { windowManager.add(new WaterMarkEvent(20)); assertEquals(5, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 10, null), new EventImpl<>(2, 10, null) }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 10, null), new EventImpl<>(2, 10, null), new EventImpl<>(3, 11, null), new EventImpl<>(4, 12, null) }), listener.allOnActivationEvents.get(1)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(2, 10, null), new EventImpl<>(3, 11, null), new EventImpl<>(4, 12, null), new EventImpl<>(5, 12, null), new EventImpl<>(6, 12, null) }), listener.allOnActivationEvents.get(2)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 12, null), new EventImpl<>(5, 12, null), new EventImpl<>(6, 12, null), new EventImpl<>(7, 12, null), new EventImpl<>(8, 13, null) }), listener.allOnActivationEvents.get(3)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(6, 12, null), new EventImpl<>(7, 12, null), new EventImpl<>(8, 13, null), @@ -722,19 +723,19 @@ public void testEventTimeLag() throws Exception { // send a watermark event, which should trigger three windows. windowManager.add(new WaterMarkEvent(631)); assertEquals(3, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), new EventImpl<>(4, 618, null), }), listener.allOnActivationEvents.get(1)); // out of order events should be processed upto the lag - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null), new EventImpl<>(7, 629, null) @@ -774,12 +775,12 @@ public Action evict(Event event) { windowManager.add(new WaterMarkEvent(631)); assertEquals(3, listener.allOnActivationEvents.size()); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), }), listener.allOnActivationEvents.get(0)); - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), @@ -787,7 +788,7 @@ public Action evict(Event event) { }), listener.allOnActivationEvents.get(1)); // out of order events should be processed upto the lag - assertEquals(Arrays.asList(new Event[]{ + assertEquals(Arrays.asList(new Event[]{ new EventImpl<>(4, 618, null), new EventImpl<>(5, 626, null), new EventImpl<>(6, 629, null) @@ -795,7 +796,7 @@ public Action evict(Event event) { // events 8, 9, 10 should not be scanned at all since TimeEvictionPolicy lag 5s should break // the WindowManager scan loop early. - assertEquals(new HashSet<>(Arrays.asList(new Event[]{ + assertEquals(new HashSet<>(Arrays.asList(new Event[]{ new EventImpl<>(1, 603, null), new EventImpl<>(2, 605, null), new EventImpl<>(3, 607, null), diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java index 2be701c832a8a..5bbdba9c71335 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java @@ -1013,7 +1013,7 @@ private void verifyGolangInstance(InstanceConfig config) throws Exception { assertEquals(args.size(), totalArgs, "Actual args : " + StringUtils.join(args, " ")); - HashMap goInstanceConfig = new ObjectMapper().readValue(args.get(7).replaceAll("^\'|\'$", + HashMap goInstanceConfig = new ObjectMapper().readValue(args.get(7).replaceAll("^\'|\'$", ""), HashMap.class); assertEquals(args.get(0), "chmod"); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java index 841af27e9b47a..548462bf61a59 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java @@ -64,7 +64,9 @@ private static PulsarClient mockPulsarClient() throws PulsarClientException { when(builder.sendTimeout(anyInt(), any(TimeUnit.class))).thenReturn(builder); when(builder.accessMode(any())).thenReturn(builder); + @SuppressWarnings("rawtypes") Producer producer = mock(Producer.class); + @SuppressWarnings("rawtypes") TypedMessageBuilder messageBuilder = mock(TypedMessageBuilder.class); when(messageBuilder.key(anyString())).thenReturn(messageBuilder); doAnswer(invocation -> { @@ -304,6 +306,7 @@ public void testProcessRequest() throws PulsarClientException, IOException { Request.ServiceRequest serviceRequest = Request.ServiceRequest.newBuilder().setServiceRequestType( Request.ServiceRequest.ServiceRequestType.UPDATE).build(); + @SuppressWarnings("rawtypes") Message msg = mock(Message.class); doReturn(serviceRequest.toByteArray()).when(msg).getData(); functionMetaDataManager.processMetaDataTopicMessage(msg); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionWorkerStarterTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionWorkerStarterTest.java index 6fa0bec1b362d..54d0d289816d1 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionWorkerStarterTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionWorkerStarterTest.java @@ -34,7 +34,7 @@ public void testMainGenerateDocs() throws Exception { ByteArrayOutputStream baoStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(baoStream)); - Class argumentsClass = + Class argumentsClass = Class.forName("org.apache.pulsar.functions.worker.FunctionWorkerStarter$WorkerArguments"); FunctionWorkerStarter.main(new String[]{"-g"}); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java index 5c10a59bd1388..48e4fc9fe90a1 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java @@ -52,14 +52,15 @@ public class LeaderServiceTest { AtomicReference listenerHolder; private LeaderService leaderService; private PulsarClientImpl mockClient; + @SuppressWarnings("rawtypes") private ConsumerImpl mockConsumer; private FunctionAssignmentTailer functionAssignmentTailer; private SchedulerManager schedulerManager; private FunctionRuntimeManager functionRuntimeManager; private FunctionMetaDataManager functionMetadataManager; - private CompletableFuture metadataManagerInitFuture; - private CompletableFuture runtimeManagerInitFuture; - private CompletableFuture readToTheEndAndExitFuture; + private CompletableFuture metadataManagerInitFuture; + private CompletableFuture runtimeManagerInitFuture; + private CompletableFuture readToTheEndAndExitFuture; private MembershipManager membershipManager; public LeaderServiceTest() { 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 9e7b8d4fa6b1b..adc555e16dd02 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 @@ -79,6 +79,7 @@ public class SchedulerManagerTest { private FunctionRuntimeManager functionRuntimeManager; private MembershipManager membershipManager; private CompletableFuture completableFuture; + @SuppressWarnings("rawtypes") private Producer producer; private TypedMessageBuilder message; private ScheduledExecutorService executor; diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java index 0f5fca4a8a5a3..bfbd2db4ad664 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java @@ -79,6 +79,7 @@ public void testCreateExclusiveProducerWithRetry() { verify(builder, times(1)).producerName(eq("test-producer")); verify(builder, times(1)).accessMode(eq(ProducerAccessMode.Exclusive)); + @SuppressWarnings("rawtypes") CompletableFuture completableFuture = new CompletableFuture(); completableFuture.completeExceptionally(new PulsarClientException.ProducerFencedException("test")); when(builder.createAsync()).thenReturn(completableFuture); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java index 84edb05372c77..04b4e1298b98b 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java @@ -92,7 +92,7 @@ public abstract class AbstractFunctionsResourceTest { private static final String SYSTEM_PROPERTY_NAME_INVALID_NAR_FILE_PATH = "pulsar-io-invalid.nar.path"; private static final String SYSTEM_PROPERTY_NAME_FUNCTIONS_API_EXAMPLES_NAR_FILE_PATH = "pulsar-functions-api-examples.nar.path"; - protected static Map mockStaticContexts = new HashMap<>(); + protected static Map> mockStaticContexts = new HashMap<>(); static { TOPICS_TO_SER_DE_CLASS_NAME.put("test_src", DEFAULT_SERDE); @@ -234,8 +234,9 @@ protected void mockStatic(Class classStatic, Consumer> co mockStatic(classStatic, withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS), consumer); } + @SuppressWarnings({"unchecked", "rawtypes"}) private void mockStatic(Class classStatic, MockSettings mockSettings, Consumer> consumer) { - final MockedStatic mockedStatic = mockStaticContexts.computeIfAbsent(classStatic.getName(), + final MockedStatic mockedStatic = (MockedStatic) mockStaticContexts.computeIfAbsent(classStatic.getName(), name -> Mockito.mockStatic(classStatic, mockSettings)); consumer.accept(mockedStatic); } diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java index 9724d2d6ff65d..701ef45bf1877 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java @@ -769,7 +769,7 @@ protected ServerTester startBookie(ServerConfiguration conf, final Bookie b) return tester; } - public void setMetastoreImplClass(AbstractConfiguration conf) { + public void setMetastoreImplClass(AbstractConfiguration conf) { conf.setMetastoreImplClass(InMemoryMetaStore.class.getName()); } diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/DualMetadataCacheTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/DualMetadataCacheTest.java index 88890466b7844..442e953a646f1 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/DualMetadataCacheTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/DualMetadataCacheTest.java @@ -514,7 +514,7 @@ public void testCacheWithCustomConfig() throws Exception { MetadataStoreConfig.builder().build()); // Create cache with custom config - MetadataCacheConfig cacheConfig = MetadataCacheConfig.builder() + MetadataCacheConfig cacheConfig = MetadataCacheConfig.builder() .refreshAfterWriteMillis(1000) .build(); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java index 69e2377536984..30c94009df79d 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java @@ -531,7 +531,7 @@ public void readModifyUpdateOrCreateRetryTimeout(String provider, Supplier cacheRef = cache; - if (cache instanceof DualMetadataCache dc) { + if (cache instanceof DualMetadataCache dc) { cacheRef = (MetadataCache) dc.getMetadataCache().get(); } diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java index 6905e639fe139..8cc7b8c626dda 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java @@ -104,7 +104,7 @@ private static ZooKeeperServer getZooKeeperServer(ZooKeeperServerMain zooKeeperS @SuppressWarnings("deprecation") @SneakyThrows - private static T readField(Class clazz, String field, Object object) { + private static T readField(Class clazz, String field, Object object) { Field declaredField = clazz.getDeclaredField(field); boolean accessible = declaredField.isAccessible(); if (!accessible) { diff --git a/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java b/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java index fdab24dabb41a..4e280a08a9309 100644 --- a/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java +++ b/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java @@ -197,7 +197,7 @@ public void testMainProcess(int batchedWriteMaxRecords, int batchedWriteMaxSize, * 2. Store the param-context and param-position of callback function for verify. */ // Create TxLogBufferedWriter. - TxnLogBufferedWriter txnLogBufferedWriter = new TxnLogBufferedWriter( + TxnLogBufferedWriter txnLogBufferedWriter = new TxnLogBufferedWriter<>( managedLedger, ((ManagedLedgerImpl) managedLedger).getExecutor(), transactionTimer, dataSerializer, batchedWriteMaxRecords, batchedWriteMaxSize, batchedWriteMaxDelayInMillis, batchEnabled, DISABLED_BUFFERED_WRITER_METRICS); @@ -396,7 +396,7 @@ public void testFlushThresholds() throws Exception{ SumStrDataSerializer dataSerializer = new SumStrDataSerializer(); // Cache the data flush to Bookie for Asserts. List dataArrayFlushedToBookie = Collections.synchronizedList(new ArrayList<>()); - Mockito.doAnswer(new Answer() { + Mockito.doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { ByteBuf byteBuf = (ByteBuf) invocation.getArguments()[0]; @@ -410,7 +410,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { } }).when(managedLedger).asyncAddEntry(Mockito.any(ByteBuf.class), Mockito.any(), Mockito.any()); // Test threshold: writeMaxDelayInMillis (use timer). - TxnLogBufferedWriter txnLogBufferedWriter1 = new TxnLogBufferedWriter<>(managedLedger, topicExecutor, + TxnLogBufferedWriter txnLogBufferedWriter1 = new TxnLogBufferedWriter<>(managedLedger, topicExecutor, transactionTimer, dataSerializer, 32, 1024 * 4, 100, true, DISABLED_BUFFERED_WRITER_METRICS); TxnLogBufferedWriter.AddDataCallback callback = Mockito.mock(TxnLogBufferedWriter.AddDataCallback.class); @@ -423,7 +423,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { txnLogBufferedWriter1.close().get(); // Test threshold: batchedWriteMaxRecords. - TxnLogBufferedWriter txnLogBufferedWriter2 = new TxnLogBufferedWriter<>(managedLedger, topicExecutor, + TxnLogBufferedWriter txnLogBufferedWriter2 = new TxnLogBufferedWriter<>(managedLedger, topicExecutor, transactionTimer, dataSerializer, 32, 1024 * 4, 10000, true, DISABLED_BUFFERED_WRITER_METRICS); for (int i = 0; i < 32; i++){ @@ -434,7 +434,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { txnLogBufferedWriter2.close(); // Test threshold: batchedWriteMaxSize. - TxnLogBufferedWriter txnLogBufferedWriter3 = new TxnLogBufferedWriter<>(managedLedger, topicExecutor, + TxnLogBufferedWriter txnLogBufferedWriter3 = new TxnLogBufferedWriter<>(managedLedger, topicExecutor, transactionTimer, dataSerializer, 1024, 64 * 4, 10000, true, DISABLED_BUFFERED_WRITER_METRICS); for (int i = 0; i < 64; i++){ @@ -471,7 +471,8 @@ public void testPendingScheduleTriggerTaskCount() throws Exception { // Mock managed ledger and write counter. MockedManagedLedger mockedManagedLedger = mockManagedLedgerWithWriteCounter(mlName); // Start tests. - TxnLogBufferedWriter txnLogBufferedWriter = new TxnLogBufferedWriter<>(mockedManagedLedger.managedLedger, + TxnLogBufferedWriter txnLogBufferedWriter = new TxnLogBufferedWriter<>( + mockedManagedLedger.managedLedger, threadPoolExecutor, transactionTimer, dataSerializer, 2, 1024 * 4, 1, true, DISABLED_BUFFERED_WRITER_METRICS); TxnLogBufferedWriter.AddDataCallback callback = Mockito.mock(TxnLogBufferedWriter.AddDataCallback.class); @@ -908,6 +909,7 @@ public void testMetricsStatsThatTriggeredByLargeSingleData() throws Exception { @Test public void testFailWhenAddData() throws Exception { int batchedWriteMaxSize = 1024; + @SuppressWarnings("rawtypes") TxnLogBufferedWriter.DataSerializer dataSerializer = new WrongDataSerializer(batchedWriteMaxSize, true, true, true); int writeCount = 100; @@ -1026,7 +1028,7 @@ private MockedManagedLedger mockManagedLedgerWithWriteCounter(String mlName){ AtomicInteger writeCounter = new AtomicInteger(); ManagedLedger managedLedger = Mockito.mock(ManagedLedger.class); Mockito.when(managedLedger.getName()).thenReturn(mlName); - Mockito.doAnswer(new Answer() { + Mockito.doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { writeCounter.incrementAndGet(); From 20777df8ea83571af92c9ee3ab9e228dcbf9cbd6 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 15:51:17 -0700 Subject: [PATCH 06/22] [fix][test] Fix flaky testRetentionSize in ManagedLedgerTest (#25423) --- .../apache/bookkeeper/mledger/impl/ManagedLedgerTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java index ac292e1fe15b2..b1066c297c433 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java @@ -2490,8 +2490,9 @@ public void testRetentionSize() throws Exception { for (int i = 0; i < totalMessage; i++) { position = ml.addEntry(message); } - // all ledgers are not delete yet since no entry has been acked for c1 - assertEquals(ml.getLedgersInfoAsList().size(), totalMessage); + // all ledgers are not deleted yet since no entry has been acked for c1 + // Use >= because the current (empty) ledger may or may not have been created yet + assertTrue(ml.getLedgersInfoAsList().size() >= totalMessage); List entryList = c1.readEntries(totalMessage); if (null != position) { From ee007eecd806bf5e799a1f47abb7d7801425a1f5 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 15:52:29 -0700 Subject: [PATCH 07/22] [fix][test] Fix flaky testClear in BucketDelayedDeliveryTrackerTest (#25424) --- .../delayed/bucket/BucketDelayedDeliveryTrackerTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java index dd5eb5ad64445..efce0f1d8e51f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerTest.java @@ -151,6 +151,10 @@ public Object[][] provider(Method method) throws Exception { new BucketDelayedDeliveryTracker(dispatcher, timer, 100000, clock, true, bucketSnapshotStorage, 20, TimeUnit.HOURS.toMillis(1), 5, 100) }}; + case "testClear" -> new Object[][]{{ + new BucketDelayedDeliveryTracker(dispatcher, timer, 100000, clock, + true, bucketSnapshotStorage, 1000, TimeUnit.MILLISECONDS.toMillis(100), -1, 50) + }}; default -> new Object[][]{{ new BucketDelayedDeliveryTracker(dispatcher, timer, 1, clock, true, bucketSnapshotStorage, 1000, TimeUnit.MILLISECONDS.toMillis(100), -1, 50) From 1ee18b41daf16127d57973f25525154a6f784ef5 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 15:53:08 -0700 Subject: [PATCH 08/22] [fix][test] Fix MultiBrokerLeaderElectionExpirationTest Mockito spy usage (#25425) --- .../MultiBrokerLeaderElectionExpirationTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/MultiBrokerLeaderElectionExpirationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/MultiBrokerLeaderElectionExpirationTest.java index 795c6d8525526..0b9a0a173aa71 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/MultiBrokerLeaderElectionExpirationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/MultiBrokerLeaderElectionExpirationTest.java @@ -64,11 +64,13 @@ protected MetadataStoreExtended createMetadataStore(String metadataStoreName) { MetadataStoreExtended changeDefaultMetadataCacheConfig(MetadataStoreExtended metadataStore) { MetadataStoreExtended spy = spy(metadataStore); - doReturn(MetadataCacheConfig + @SuppressWarnings("unchecked") + MetadataCacheConfig config = (MetadataCacheConfig) MetadataCacheConfig .builder() .refreshAfterWriteMillis(REFRESH_AFTER_WRITE_MILLIS_IN_TEST) .expireAfterWriteMillis(EXPIRE_AFTER_WRITE_MILLIS_IN_TEST) - .build()).when(spy).getDefaultMetadataCacheConfig(); + .build(); + doReturn(config).when(spy).getDefaultMetadataCacheConfig(); return spy; } From e9630c60e8bff865e1bfeb2ed26a6c1d65f040b4 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 15:53:41 -0700 Subject: [PATCH 09/22] [fix][test] Fix flaky testMsgDropStat in NonPersistentTopicTest (#25426) --- .../client/api/NonPersistentTopicTest.java | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java index 0252221301aef..8feed728a468b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/NonPersistentTopicTest.java @@ -59,7 +59,6 @@ import org.apache.pulsar.broker.testcontext.PulsarTestContext; import org.apache.pulsar.client.admin.PulsarAdmin; import org.apache.pulsar.client.impl.ConsumerImpl; -import org.apache.pulsar.client.impl.MessageIdImpl; import org.apache.pulsar.client.impl.MultiTopicsConsumerImpl; import org.apache.pulsar.client.impl.PartitionedProducerImpl; import org.apache.pulsar.client.impl.ProducerImpl; @@ -887,30 +886,31 @@ public void testMsgDropStat() throws Exception { ExecutorService executor = Executors.newFixedThreadPool(threads); byte[] msgData = "testData".getBytes(); + NonPersistentTopic topic = + (NonPersistentTopic) pulsar.getBrokerService().getOrCreateTopic(topicName).get(); + /* - * Trigger at least one publisher drop through concurrent send() calls. + * Send concurrent bursts until publisher AND subscription drop rates are all > 0. + * + * Each burst uses a CyclicBarrier so all threads send simultaneously. With + * maxConcurrentNonPersistentMessagePerConnection = 0, ServerCnx drops overlapping + * sends (publisher drops). Once subscriber queues (size 1) are full, the dispatcher + * also drops delivered messages (subscription drops). * - * Uses CyclicBarrier to ensure all threads send simultaneously, creating overlap. - * With maxConcurrentNonPersistentMessagePerConnection = 0, ServerCnx#handleSend - * drops any send while another is in-flight, returning MessageId with entryId = -1. - * Awaitility repeats whole bursts (bounded to 20s) until a drop is observed. + * IMPORTANT: updateRates() calls Rate.calculateRate() which resets counters via + * sumThenReset(). We must keep sending fresh bursts so each updateRates() call + * sees new drops, rather than retrying with stale (reset) counters. */ - AtomicBoolean publisherDropSeen = new AtomicBoolean(false); - Awaitility.await().atMost(Duration.ofSeconds(20)).until(() -> { + Awaitility.await().atMost(Duration.ofSeconds(20)).pollInterval(Duration.ofMillis(100)).until(() -> { CyclicBarrier barrier = new CyclicBarrier(threads); CountDownLatch completionLatch = new CountDownLatch(threads); AtomicReference error = new AtomicReference<>(); - publisherDropSeen.set(false); for (int i = 0; i < threads; i++) { executor.submit(() -> { try { barrier.await(); - MessageId msgId = producer.send(msgData); - // Publisher drop is signaled by MessageIdImpl.entryId == -1 - if (msgId instanceof MessageIdImpl && ((MessageIdImpl) msgId).getEntryId() == -1) { - publisherDropSeen.set(true); - } + producer.send(msgData); } catch (Throwable t) { if (t instanceof InterruptedException) { Thread.currentThread().interrupt(); @@ -922,27 +922,23 @@ public void testMsgDropStat() throws Exception { }); } - // Wait for all sends to complete. - assertTrue(completionLatch.await(20, TimeUnit.SECONDS)); - - assertNull(error.get(), "Concurrent send encountered an exception"); - return publisherDropSeen.get(); - }); - - assertTrue(publisherDropSeen.get(), "Expected at least one publisher drop (entryId == -1)"); - - NonPersistentTopic topic = - (NonPersistentTopic) pulsar.getBrokerService().getOrCreateTopic(topicName).get(); + completionLatch.await(20, TimeUnit.SECONDS); + if (error.get() != null) { + return false; + } - Awaitility.await().ignoreExceptions().untilAsserted(() -> { pulsar.getBrokerService().updateRates(); NonPersistentTopicStats stats = topic.getStats(false, false, false); + if (stats.getPublishers().isEmpty()) { + return false; + } NonPersistentPublisherStats npStats = stats.getPublishers().get(0); NonPersistentSubscriptionStats sub1Stats = stats.getSubscriptions().get("subscriber-1"); NonPersistentSubscriptionStats sub2Stats = stats.getSubscriptions().get("subscriber-2"); - assertTrue(npStats.getMsgDropRate() > 0); - assertTrue(sub1Stats.getMsgDropRate() > 0); - assertTrue(sub2Stats.getMsgDropRate() > 0); + return sub1Stats != null && sub2Stats != null + && npStats.getMsgDropRate() > 0 + && sub1Stats.getMsgDropRate() > 0 + && sub2Stats.getMsgDropRate() > 0; }); } finally { From d1eb652b9fa5419ddd0bc9cd0a7e7c9bfb6f9c4b Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Tue, 31 Mar 2026 03:04:27 +0300 Subject: [PATCH 10/22] [improve][build] Adopt Gradle best practices: convention plugins, build-logic composite build, and unconditional module inclusion (#25435) --- .github/workflows/ci-gradle-cache-update.yaml | 35 +- .github/workflows/codeql.yaml | 4 +- .github/workflows/pulsar-ci-flaky.yaml | 2 +- .github/workflows/pulsar-ci.yaml | 27 +- .ratignore | 113 ++++++ README.md | 18 +- bouncy-castle/bc/build.gradle.kts | 4 + .../apache/pulsar/bcloader/package-info.java | 1 + .../bcfips-include-test/build.gradle.kts | 6 +- bouncy-castle/bcfips/build.gradle.kts | 4 + .../conventions}/build.gradle.kts | 11 +- .../src/main/kotlin/PulsarShadeUtils.kt | 2 +- ...pulsar.client-shade-conventions.gradle.kts | 0 ...pulsar.code-quality-conventions.gradle.kts | 69 ++++ .../kotlin/pulsar.java-conventions.gradle.kts | 204 ++++++++++ .../kotlin/pulsar.nar-conventions.gradle.kts | 93 +++++ .../pulsar.shadow-conventions.gradle.kts | 4 + .../pulsar.test-certs-conventions.gradle.kts | 36 ++ {buildSrc => build-logic}/settings.gradle.kts | 6 + build.gradle.kts | 339 +++-------------- buildtools/build.gradle.kts | 4 + .../apache/pulsar/tests/FailFastNotifier.java | 2 +- distribution/offloaders/build.gradle.kts | 4 + distribution/server/build.gradle.kts | 8 +- distribution/shell/build.gradle.kts | 4 + docker/build.sh | 2 +- docker/pulsar/build.gradle.kts | 11 +- gradle/code-quality.gradle.kts | 239 ------------ gradle/libs.versions.toml | 196 ++-------- jclouds-shaded/build.gradle.kts | 1 + .../build.gradle.kts | 4 + .../prometheus/bookkeeper/package-info.java | 1 + .../build.gradle.kts | 4 + .../prometheus/zookeeper/package-info.java | 1 + .../build.gradle.kts | 1 + .../zookeeper/server/admin/PostCommand.java | 1 + .../zookeeper/server/admin/package-info.java | 1 + managed-ledger/build.gradle.kts | 6 +- .../mledger/impl/ManagedLedgerBkTest.java | 4 +- .../test/BookKeeperClusterTestCase.java | 17 +- .../apache/bookkeeper/test/ZooKeeperUtil.java | 1 + microbench/build.gradle.kts | 10 +- .../pulsar/broker/qos/package-info.java | 1 + pulsar-bom/build.gradle.kts | 19 +- pulsar-broker-auth-athenz/build.gradle.kts | 4 + pulsar-broker-auth-oidc/build.gradle.kts | 5 + pulsar-broker-auth-sasl/build.gradle.kts | 5 + pulsar-broker-common/build.gradle.kts | 9 +- .../bookie/rackawareness/package-info.java | 1 + .../authentication/metrics/package-info.java | 1 + .../broker/authentication/package-info.java | 1 + .../authentication/utils/package-info.java | 1 + .../broker/authorization/package-info.java | 1 + .../pulsar/broker/limiter/package-info.java | 1 + .../apache/pulsar/broker/package-info.java | 1 + .../pulsar/broker/resources/package-info.java | 1 + .../broker/topiclistlimit/package-info.java | 1 + .../pulsar/broker/validator/package-info.java | 1 + .../pulsar/broker/web/package-info.java | 1 + .../web/plugin/servlet/package-info.java | 1 + .../anonymizer/package-info.java | 1 + .../common/configuration/package-info.java | 1 + .../apache/pulsar/zookeeper/package-info.java | 1 + pulsar-broker/build.gradle.kts | 3 +- .../pulsar/broker/intercept/package-info.java | 1 + .../pulsar/broker/protocol/package-info.java | 1 + .../pulsar/broker/qos/package-info.java | 1 + .../pulsar/broker/storage/package-info.java | 1 + .../pulsar/broker/tools/package-info.java | 1 + .../transaction/buffer/impl/package-info.java | 1 + .../buffer/metadata/package-info.java | 1 + .../transaction/buffer/package-info.java | 1 + .../exception/buffer/package-info.java | 1 + .../exception/coordinator/package-info.java | 1 + .../transaction/exception/package-info.java | 1 + .../exception/pendingack/package-info.java | 1 + .../pendingack/exceptions/package-info.java | 1 + .../pendingack/impl/package-info.java | 1 + .../transaction/pendingack/package-info.java | 1 + .../transaction/recover/package-info.java | 1 + .../transaction/timeout/package-info.java | 1 + .../broker/transaction/util/package-info.java | 1 + .../web/plugin/servlet/package-info.java | 1 + .../naming/TopicBundleAssignmentFactory.java | 6 + .../zookeeper/LocalBookkeeperEnsemble.java | 1 + ...ersistentMessageExpiryMonitorMockTest.java | 1 - ...erServiceAutoSubscriptionCreationTest.java | 358 +++++++++--------- .../TopicBundleAssignmentStrategyTest.java | 24 +- pulsar-build/run_integration_group_gradle.sh | 15 +- pulsar-build/run_unit_group_gradle.sh | 7 +- pulsar-cli-utils/build.gradle.kts | 4 + pulsar-client-admin-api/build.gradle.kts | 4 + .../client/admin/utils/package-info.java | 1 + .../pulsar/common/conf/package-info.java | 1 + .../pulsar/common/functions/package-info.java | 1 + .../apache/pulsar/common/io/package-info.java | 1 + .../pulsar/common/migration/package-info.java | 1 + .../pulsar/common/naming/package-info.java | 1 + .../pulsar/common/partition/package-info.java | 1 + .../common/policies/data/package-info.java | 1 + .../common/policies/impl/package-info.java | 1 + .../pulsar/common/policies/package-info.java | 1 + .../common/protocol/schema/package-info.java | 1 + .../pulsar/common/stats/package-info.java | 1 + .../management/core/common/package-info.java | 1 + .../core/exceptions/package-info.java | 1 + .../data/loadbalancer/package-info.java | 1 + pulsar-client-admin-shaded/build.gradle.kts | 1 + pulsar-client-admin/build.gradle.kts | 4 + pulsar-client-all/build.gradle.kts | 1 + pulsar-client-api/build.gradle.kts | 4 + .../client/api/interceptor/package-info.java | 1 + .../pulsar/client/api/package-info.java | 1 + .../client/api/schema/package-info.java | 1 + .../client/api/transaction/package-info.java | 1 + .../pulsar/client/internal/package-info.java | 1 + .../pulsar/common/api/package-info.java | 1 + .../common/classification/package-info.java | 1 + .../pulsar/common/schema/package-info.java | 1 + pulsar-client-auth-athenz/build.gradle.kts | 4 + .../pulsar/client/impl/auth/package-info.java | 1 + pulsar-client-auth-sasl/build.gradle.kts | 4 + .../pulsar/client/impl/auth/package-info.java | 1 + .../build.gradle.kts | 4 + .../client/impl/crypto/package-info.java | 1 + pulsar-client-shaded/build.gradle.kts | 1 + pulsar-client-tools-api/build.gradle.kts | 4 + .../build.gradle.kts | 3 +- pulsar-client-tools-test/build.gradle.kts | 4 + pulsar-client-tools/build.gradle.kts | 4 + .../pulsar/admin/cli/utils/IOUtils.java | 1 + pulsar-client/build.gradle.kts | 1 + .../pulsar/client/impl/Murmur3Hash32.java | 1 + .../pulsar/client/impl/auth/package-info.java | 1 + .../client/impl/customroute/package-info.java | 1 + .../pulsar/client/impl/package-info.java | 1 + .../client/impl/schema/package-info.java | 1 + .../impl/schema/reader/package-info.java | 1 + .../client/impl/transaction/package-info.java | 1 + .../pulsar/client/util/package-info.java | 1 + pulsar-common/build.gradle.kts | 11 +- .../airlift/compress/zstd/package-info.java | 1 + .../pulsar/client/api/package-info.java | 1 + .../pulsar/client/api/url/package-info.java | 1 + .../pulsar/common/allocator/package-info.java | 1 + .../pulsar/common/api/raw/package-info.java | 1 + .../common/compression/package-info.java | 1 + .../pulsar/common/exception/package-info.java | 1 + .../pulsar/common/functions/package-info.java | 1 + .../pulsar/common/intercept/package-info.java | 1 + .../apache/pulsar/common/io/package-info.java | 1 + .../common/lookup/data/package-info.java | 1 + .../pulsar/common/lookup/package-info.java | 1 + .../pulsar/common/naming/package-info.java | 1 + .../pulsar/common/nar/NarClassLoader.java | 1 + .../common/nar/NarClassLoaderBuilder.java | 1 + .../apache/pulsar/common/nar/NarUnpacker.java | 1 + .../pulsar/common/nar/package-info.java | 1 + .../pulsar/common/net/package-info.java | 1 + .../common/policies/data/package-info.java | 1 + .../common/policies/impl/package-info.java | 1 + .../pulsar/common/policies/package-info.java | 1 + .../common/policies/path/package-info.java | 1 + .../pulsar/common/protocol/package-info.java | 1 + .../common/protocol/schema/package-info.java | 1 + .../pulsar/common/sasl/package-info.java | 1 + .../pulsar/common/schema/package-info.java | 1 + .../pulsar/common/stats/package-info.java | 1 + .../pulsar/common/tls/InetAddressUtils.java | 1 + .../common/tls/NoopHostnameVerifier.java | 1 + .../pulsar/common/tls/PublicSuffixList.java | 1 + .../common/tls/PublicSuffixMatcher.java | 1 + .../apache/pulsar/common/tls/SubjectName.java | 1 + .../common/tls/TlsHostnameVerifier.java | 1 + .../pulsar/common/util/Murmur3_32Hash.java | 1 + .../common/util/collections/package-info.java | 1 + .../common/util/keystoretls/package-info.java | 1 + .../common/util/netty/package-info.java | 1 + .../pulsar/common/util/package-info.java | 1 + .../data/loadbalancer/package-info.java | 1 + pulsar-config-validation/build.gradle.kts | 4 + .../config/validation/package-info.java | 1 + pulsar-dependencies/build.gradle.kts | 23 +- pulsar-docs-tools/build.gradle.kts | 4 + pulsar-functions/api-java/build.gradle.kts | 4 + .../pulsar/functions/api/package-info.java | 1 + .../functions/api/state/package-info.java | 1 + .../functions/api/utils/package-info.java | 1 + pulsar-functions/instance/build.gradle.kts | 4 + .../functions/instance/package-info.java | 1 + .../java-examples-builtin/build.gradle.kts | 3 +- .../java-examples/build.gradle.kts | 4 + .../localrun-shaded/build.gradle.kts | 1 + pulsar-functions/localrun/build.gradle.kts | 4 + pulsar-functions/proto/build.gradle.kts | 1 + pulsar-functions/runtime-all/build.gradle.kts | 24 +- pulsar-functions/runtime/build.gradle.kts | 4 + .../pulsar/functions/auth/package-info.java | 1 + .../apache/pulsar/functions/package-info.java | 1 + .../functions/runtime/RuntimeSpawner.java | 1 + .../functions/runtime/RuntimeUtils.java | 6 + .../runtime/kubernetes/package-info.java | 1 + .../functions/runtime/package-info.java | 1 + .../runtime/process/package-info.java | 1 + .../runtime/thread/package-info.java | 1 + .../pulsar/functions/worker/package-info.java | 1 + .../kubernetes/KubernetesRuntimeTest.java | 15 +- .../runtime/process/ProcessRuntimeTest.java | 13 +- pulsar-functions/secrets/build.gradle.kts | 4 + pulsar-functions/utils/build.gradle.kts | 4 + pulsar-functions/worker/build.gradle.kts | 4 + .../worker/service/api/package-info.java | 1 + .../worker/service/package-info.java | 1 + .../batch-data-generator/build.gradle.kts | 3 +- .../build.gradle.kts | 4 + pulsar-io/common/build.gradle.kts | 4 + pulsar-io/core/build.gradle.kts | 4 + pulsar-io/data-generator/build.gradle.kts | 3 +- pulsar-metadata/build.gradle.kts | 10 +- .../BookKeeperClusterTestCase.java | 17 +- .../replication/BookieAutoRecoveryTest.java | 8 +- .../replication/TestReplicationWorker.java | 6 +- .../bookkeeper/replication/ZooKeeperUtil.java | 1 + pulsar-opentelemetry/build.gradle.kts | 4 + .../bookkeeper-storage/build.gradle.kts | 6 +- .../storage/bookkeeper/package-info.java | 1 + .../test/BookKeeperClusterTestCase.java | 25 +- .../core/build.gradle.kts | 4 + .../management/core/common/package-info.java | 1 + .../management/core/impl/package-info.java | 1 + .../management/core/package-info.java | 1 + .../filesystem-storage/build.gradle.kts | 4 + .../storage/filesystem/package-info.java | 1 + pulsar-proxy/build.gradle.kts | 5 + pulsar-testclient/build.gradle.kts | 9 +- pulsar-transaction/common/build.gradle.kts | 4 + .../common/exception/package-info.java | 1 + .../transaction/impl/common/package-info.java | 1 + .../coordinator/build.gradle.kts | 1 + .../coordinator/exceptions/package-info.java | 1 + .../coordinator/impl/package-info.java | 1 + .../transaction/coordinator/package-info.java | 1 + .../coordinator/util/package-info.java | 1 + pulsar-websocket/build.gradle.kts | 4 + settings.gradle.kts | 112 +++--- structured-event-log/build.gradle.kts | 4 + testmocks/build.gradle.kts | 9 +- ...t.java => PulsarBookKeeperTestClient.java} | 14 +- ...=> PulsarBookKeeperTestStatsProvider.java} | 10 +- .../apache/bookkeeper/test/ServerTester.java | 11 +- tests/README.md | 5 +- .../tests/integration/PulsarContainer.java | 52 --- .../pulsar/tests/integration/SmokeTest.java | 84 ---- tests/bc_2_0_0/src/test/resources/pulsar.xml | 28 -- .../tests/integration/PulsarContainer.java | 52 --- .../pulsar/tests/integration/SmokeTest.java | 84 ---- tests/bc_2_0_1/src/test/resources/pulsar.xml | 28 -- .../tests/integration/PulsarContainer.java | 52 --- .../pulsar/tests/integration/SmokeTest.java | 84 ---- .../src/test/resources/backwards-client.xml | 28 -- tests/compose/README.md | 2 +- .../java-test-functions/build.gradle.kts | 1 + .../java-test-image/build.gradle.kts | 11 +- .../java-test-plugins/build.gradle.kts | 4 + .../latest-version-image/build.gradle.kts | 11 +- tests/integration/build.gradle.kts | 9 + .../integration/containers/package-info.java | 1 + .../functions/PulsarFunctionsTest.java | 37 +- .../tests/integration/schema/Schemas.java | 1 + .../build.gradle.kts | 4 + .../build.gradle.kts | 4 + .../pulsar-client-shade-test/build.gradle.kts | 4 + tiered-storage/file-system/build.gradle.kts | 3 +- tiered-storage/jcloud/build.gradle.kts | 4 +- 274 files changed, 1478 insertions(+), 1677 deletions(-) create mode 100644 .ratignore rename {buildSrc => build-logic/conventions}/build.gradle.kts (79%) rename {buildSrc => build-logic/conventions}/src/main/kotlin/PulsarShadeUtils.kt (94%) rename {buildSrc => build-logic/conventions}/src/main/kotlin/pulsar.client-shade-conventions.gradle.kts (100%) create mode 100644 build-logic/conventions/src/main/kotlin/pulsar.code-quality-conventions.gradle.kts create mode 100644 build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts create mode 100644 build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts rename {buildSrc => build-logic/conventions}/src/main/kotlin/pulsar.shadow-conventions.gradle.kts (96%) create mode 100644 build-logic/conventions/src/main/kotlin/pulsar.test-certs-conventions.gradle.kts rename {buildSrc => build-logic}/settings.gradle.kts (87%) delete mode 100644 gradle/code-quality.gradle.kts rename pulsar-broker/src/test/{ => java}/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java (72%) rename testmocks/src/main/java/org/apache/bookkeeper/client/{BookKeeperTestClient.java => PulsarBookKeeperTestClient.java} (91%) rename testmocks/src/main/java/org/apache/bookkeeper/client/{TestStatsProvider.java => PulsarBookKeeperTestStatsProvider.java} (94%) delete mode 100644 tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java delete mode 100644 tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java delete mode 100644 tests/bc_2_0_0/src/test/resources/pulsar.xml delete mode 100644 tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java delete mode 100644 tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java delete mode 100644 tests/bc_2_0_1/src/test/resources/pulsar.xml delete mode 100644 tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java delete mode 100644 tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java delete mode 100644 tests/bc_2_6_0/src/test/resources/backwards-client.xml diff --git a/.github/workflows/ci-gradle-cache-update.yaml b/.github/workflows/ci-gradle-cache-update.yaml index 1c756513aee2f..610a3312e66cf 100644 --- a/.github/workflows/ci-gradle-cache-update.yaml +++ b/.github/workflows/ci-gradle-cache-update.yaml @@ -36,13 +36,18 @@ on: # trigger on a schedule so that the cache will be rebuilt if it happens to expire schedule: - cron: '30 */12 * * *' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true env: JDK_DISTRIBUTION: corretto jobs: - update-gradle-dependencies-cache: - name: Update Gradle dependency cache + update-gradle-cache: + name: Update Gradle cache runs-on: ubuntu-24.04 timeout-minutes: 45 @@ -53,31 +58,15 @@ jobs: - name: Tune Runner VM uses: ./.github/actions/tune-runner-vm - - name: Detect changed files - if: ${{ github.event_name != 'schedule' }} - id: changes - uses: apache/pulsar-test-infra/paths-filter@master - with: - filters: | - build_files: - - '*.gradle.kts' - - '**/*.gradle.kts' - - 'gradle/**' - - 'gradle.properties' - - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v5 - if: ${{ github.event_name == 'schedule' || steps.changes.outputs.build_files == 'true' }} with: distribution: ${{ env.JDK_DISTRIBUTION }} - java-version: 17 + java-version: 21 - name: Setup Gradle - if: ${{ github.event_name == 'schedule' || steps.changes.outputs.build_files == 'true' }} - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f - - name: Download dependencies - if: ${{ github.event_name == 'schedule' || steps.changes.outputs.build_files == 'true' }} + - name: Run Gradle build run: | - # resolve all dependencies to populate Gradle cache - ./gradlew dependencies --no-configuration-cache || true + ./gradlew assemble \ No newline at end of file diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index 962e6a576527b..ccf93219b8f91 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -62,7 +62,7 @@ jobs: uses: actions/checkout@v6 - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -74,7 +74,7 @@ jobs: languages: ${{ matrix.language }} - name: Build Java code - run: ./gradlew assemble -PcoreModules + run: ./gradlew assemble - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/pulsar-ci-flaky.yaml b/.github/workflows/pulsar-ci-flaky.yaml index 4fd7c1ab8b79a..159f1ddbf6ee2 100644 --- a/.github/workflows/pulsar-ci-flaky.yaml +++ b/.github/workflows/pulsar-ci-flaky.yaml @@ -203,7 +203,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: cache-read-only: false develocity-injection-enabled: true diff --git a/.github/workflows/pulsar-ci.yaml b/.github/workflows/pulsar-ci.yaml index 6d5f3859e03d2..f6dceda881e2e 100644 --- a/.github/workflows/pulsar-ci.yaml +++ b/.github/workflows/pulsar-ci.yaml @@ -176,7 +176,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -186,7 +186,7 @@ jobs: # --no-configuration-cache: Shadow plugin's filesMatching { filter { } } lambdas # capture Gradle script references that can't be serialized by the configuration cache. run: >- - ./gradlew assemble rat licenseMain licenseTest checkstyleMain checkstyleTest + ./gradlew assemble rat spotlessCheck checkstyleMain checkstyleTest --no-configuration-cache - name: Check binary licenses @@ -303,7 +303,7 @@ jobs: java-version: ${{ matrix.jdk || env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -409,7 +409,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -448,7 +448,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -463,7 +463,7 @@ jobs: run: tar xf gradle-build-outputs.tar - name: Build java-test-image Docker image - run: ./gradlew -Pdocker :tests:java-test-image:dockerBuild + run: ./gradlew :tests:java-test-image:dockerBuild - name: Save docker image to file run: | @@ -515,19 +515,16 @@ jobs: group: SHADE_RUN upload_name: SHADE_RUN_17 runtime_jdk: 17 - setup: ./pulsar-build/run_integration_group_gradle.sh SHADE_BUILD - name: Shade on Java 21 group: SHADE_RUN upload_name: SHADE_RUN_21 runtime_jdk: 21 - setup: ./pulsar-build/run_integration_group_gradle.sh SHADE_BUILD - name: Shade on Java 24 group: SHADE_RUN upload_name: SHADE_RUN_24 runtime_jdk: 24 - setup: ./pulsar-build/run_integration_group_gradle.sh SHADE_BUILD - name: Standalone group: STANDALONE @@ -565,7 +562,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -687,7 +684,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -702,7 +699,7 @@ jobs: run: tar xf gradle-build-outputs.tar - name: Build pulsar-test-latest-version Docker image - run: ./gradlew -Pdocker :tests:latest-version-image:dockerBuild + run: ./gradlew :tests:latest-version-image:dockerBuild - name: Check binary licenses run: | @@ -805,7 +802,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -921,7 +918,7 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f with: develocity-injection-enabled: true develocity-url: https://develocity.apache.org @@ -933,7 +930,7 @@ jobs: languages: ${{ env.CODEQL_LANGUAGE }} - name: Build Java code - run: ./gradlew assemble -PcoreModules + run: ./gradlew assemble - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 diff --git a/.ratignore b/.ratignore new file mode 100644 index 0000000000000..17c1d04c5028c --- /dev/null +++ b/.ratignore @@ -0,0 +1,113 @@ +# License files +licenses/LICENSE-*.txt +src/assemble/README.bin.txt +src/assemble/LICENSE.bin.txt +src/assemble/NOTICE.bin.txt +# Services files +**/META-INF/services/* +# Generated Protobuf files +src/main/java/org/apache/bookkeeper/mledger/proto/MLDataFormats.java +src/main/java/org/apache/pulsar/broker/service/schema/proto/SchemaRegistryFormat.java +bin/proto/MLDataFormats_pb2.py +# Generated Avro files +**/avro/generated/*.java +**/*.avsc +# Generated Flatbuffer files (Kinesis) +**/org/apache/pulsar/io/kinesis/fbs/*.java +# Imported from Netty +src/main/java/org/apache/bookkeeper/mledger/util/AbstractCASReferenceCounted.java +# Maven build artifacts +**/dependency-reduced-pom.xml +# HdrHistogram output files +**/*.hgrm +# ProGuard/R8 rules +**/*.pro +# Go module configs +pulsar-client-go/go.mod +pulsar-client-go/go.sum +pulsar-function-go/go.mod +pulsar-function-go/go.sum +pulsar-function-go/examples/go.mod +pulsar-function-go/examples/go.sum +# HashProvider service file +**/META-INF/services/com.scurrilous.circe.HashProvider +# Django generated code +**/django/stats/migrations/*.py +**/conf/uwsgi_params +# Certificates and keys +**/*.crt +**/*.key +**/*.csr +**/*.srl +**/*.txt +**/*.pem +**/*.json +**/*.htpasswd +**/src/test/resources/athenz.conf.test +deployment/terraform-ansible/templates/myid +**/certificate-authority/index.txt +**/certificate-authority/serial +**/certificate-authority/README.md +# ZK test data +**/zk-3.5-test-data/* +# Python requirements +**/requirements.txt +# Configuration templates +conf/schema_example.json +**/templates/*.tpl +# Helm +**/.helmignore +**/_helpers.tpl +# Project/IDE files +**/*.md +.github/** +**/*.nar +**/.terraform/** +**/.gitignore +**/.gitattributes +**/.svn +**/*.iws +**/*.ipr +**/*.iml +**/*.cbp +**/*.pyc +**/.classpath +**/.project +**/.settings +**/target/** +**/*.log +**/build/** +**/file:/** +**/SecurityAuth.audit* +**/site2/** +**/.idea/** +**/.vscode/** +**/.mvn/** +**/*.a +**/*.so +**/*.so.* +**/*.dylib +**/*.patch +src/test/resources/*.txt +**/*_pb2.py +**/*_pb2_grpc.py +# Test output (local builds) +**/test-output/** +# Generated LightProto files +**/generated-lightproto/** +# Generated source files (e.g. Protobuf, Avro) +**/generated-sources/** +# Local runtime data +**/data/** +**/logs/** +# Hidden directories (AI tools, etc.) +.*/** +# Gradle/Kotlin files +.gradle/** +gradle/wrapper/** +**/.gradle/** +**/.kotlin/** +**/gradle/wrapper/** +gradlew +gradlew.bat +gradle/libs.versions.toml \ No newline at end of file diff --git a/README.md b/README.md index effab0c65fc0d..f4600d5e186ff 100644 --- a/README.md +++ b/README.md @@ -187,37 +187,37 @@ There is also a guide for [setting up the tooling for building Pulsar](https://p Compile and assemble: ```bash -$ ./gradlew assemble +./gradlew assemble ``` -Compile and assemble individual module: +Check source code license headers and formatting: ```bash -$ ./gradlew :pulsar-broker:assemble +./gradlew rat spotlessCheck checkstyleMain checkstyleTest ``` -### Minimal build (core modules only, skips external connectors and tiered storage handlers) +Compile and assemble individual module: ```bash -$ ./gradlew assemble -PcoreModules +./gradlew :pulsar-broker:assemble ``` Run Unit Tests: ```bash -$ ./gradlew test +./gradlew test ``` Run Individual Unit Test: ```bash -$ ./gradlew :pulsar-client-original:test --tests "ConsumerBuilderImplTest" +./gradlew :pulsar-client-original:test --tests "ConsumerBuilderImplTest" ``` Run Selected Test packages: ```bash -$ ./gradlew :pulsar-broker:test --tests "org.apache.pulsar.*" +./gradlew :pulsar-broker:test --tests "org.apache.pulsar.*" ``` Start standalone Pulsar service: @@ -239,7 +239,7 @@ Here are some general instructions for building custom docker images: The following command builds the docker images `apachepulsar/pulsar-all:latest` and `apachepulsar/pulsar:latest`: ```bash -$ ./gradlew docker-all +./gradlew docker-all ``` After the images are built, they can be tagged and pushed to your custom repository. Here's an example of a bash script that tags the docker images with the current version and git revision and pushes them to `localhost:32000/apachepulsar`. diff --git a/bouncy-castle/bc/build.gradle.kts b/bouncy-castle/bc/build.gradle.kts index 7fe4ea031d71c..973167d36af49 100644 --- a/bouncy-castle/bc/build.gradle.kts +++ b/bouncy-castle/bc/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-common")) { exclude(group = "io.prometheus", module = "simpleclient_caffeine") diff --git a/bouncy-castle/bc/src/main/java/org/apache/pulsar/bcloader/package-info.java b/bouncy-castle/bc/src/main/java/org/apache/pulsar/bcloader/package-info.java index e4f6c2e2f1384..da465105f141d 100644 --- a/bouncy-castle/bc/src/main/java/org/apache/pulsar/bcloader/package-info.java +++ b/bouncy-castle/bc/src/main/java/org/apache/pulsar/bcloader/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Package for Bouncy Castle provider Loader. */ diff --git a/bouncy-castle/bcfips-include-test/build.gradle.kts b/bouncy-castle/bcfips-include-test/build.gradle.kts index b730de027d457..8a37de02aa85b 100644 --- a/bouncy-castle/bcfips-include-test/build.gradle.kts +++ b/bouncy-castle/bcfips-include-test/build.gradle.kts @@ -17,7 +17,11 @@ * under the License. */ -sourceSets["test"].resources.srcDir(rootProject.layout.projectDirectory.dir("tests")) +plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") +} + // Exclude the non-FIPS BouncyCastle module — this module tests with FIPS provider only. // Having both bc (bcprov) and bcfips (bc-fips) causes CryptoServicesRegistrar conflicts. diff --git a/bouncy-castle/bcfips/build.gradle.kts b/bouncy-castle/bcfips/build.gradle.kts index 213abac14504c..ba662f2696668 100644 --- a/bouncy-castle/bcfips/build.gradle.kts +++ b/bouncy-castle/bcfips/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-common")) { exclude(group = "io.prometheus", module = "simpleclient_caffeine") diff --git a/buildSrc/build.gradle.kts b/build-logic/conventions/build.gradle.kts similarity index 79% rename from buildSrc/build.gradle.kts rename to build-logic/conventions/build.gradle.kts index 22c18f1d18fcb..bc3d07a2be5df 100644 --- a/buildSrc/build.gradle.kts +++ b/build-logic/conventions/build.gradle.kts @@ -21,13 +21,14 @@ plugins { `kotlin-dsl` } -repositories { - gradlePluginPortal() - mavenCentral() -} - dependencies { implementation(libs.plugins.shadow.get().let { "${it.pluginId}:${it.pluginId}.gradle.plugin:${it.version}" }) + implementation(libs.plugins.spotless.get().let { + "${it.pluginId}:${it.pluginId}.gradle.plugin:${it.version}" + }) + implementation(libs.plugins.nar.get().let { + "${it.pluginId}:${it.pluginId}.gradle.plugin:${it.version}" + }) } diff --git a/buildSrc/src/main/kotlin/PulsarShadeUtils.kt b/build-logic/conventions/src/main/kotlin/PulsarShadeUtils.kt similarity index 94% rename from buildSrc/src/main/kotlin/PulsarShadeUtils.kt rename to build-logic/conventions/src/main/kotlin/PulsarShadeUtils.kt index 3e735df401848..f988d91c4f691 100644 --- a/buildSrc/src/main/kotlin/PulsarShadeUtils.kt +++ b/build-logic/conventions/src/main/kotlin/PulsarShadeUtils.kt @@ -19,7 +19,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -/** Relocate a package under the shade prefix: `"x.y"` → `"$prefix.x.y"` */ +/** Relocate a package under the shade prefix: `"x.y"` -> `"$prefix.x.y"` */ fun ShadowJar.relocateWithPrefix(prefix: String, pattern: String) { relocate(pattern, "$prefix.$pattern") } diff --git a/buildSrc/src/main/kotlin/pulsar.client-shade-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.client-shade-conventions.gradle.kts similarity index 100% rename from buildSrc/src/main/kotlin/pulsar.client-shade-conventions.gradle.kts rename to build-logic/conventions/src/main/kotlin/pulsar.client-shade-conventions.gradle.kts diff --git a/build-logic/conventions/src/main/kotlin/pulsar.code-quality-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.code-quality-conventions.gradle.kts new file mode 100644 index 0000000000000..de8caaaff81a4 --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/pulsar.code-quality-conventions.gradle.kts @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +plugins { + checkstyle + id("com.diffplug.spotless") +} + +val catalog = the().named("libs") + +// ── Checkstyle ────────────────────────────────────────────────────────────── + +configure { + toolVersion = catalog.findVersion("checkstyle").get().requiredVersion + configFile = rootProject.file("buildtools/src/main/resources/pulsar/checkstyle.xml") + configProperties["checkstyle.suppressions.file"] = + rootProject.file("buildtools/src/main/resources/pulsar/suppressions.xml").absolutePath +} + +tasks.withType().configureEach { + // Broker module has very large files that need more heap + maxHeapSize.set("1g") + // Exclude generated source files (proto, lightproto, etc.) + exclude { it.file.path.contains("/build/") } + exclude { it.file.path.contains("/generated-lightproto/") } + exclude { it.file.path.contains("/generated-sources/") } + // Match Maven exclusion: **/proto/* + exclude("**/proto/*") +} + +// ── License header check (Spotless) ──────────────────────────────────────── +val asfLicenseHeader = rootProject.file("src/license-header.txt").readText() +val asfLicenseHeaderJava = "/*\n" + asfLicenseHeader.lines() + .map { " * $it".trimEnd() } + .joinToString("\n") + "/\n" +val asfLicenseHeaderJavadoc = asfLicenseHeaderJava.replaceFirst("/*", "/**") +configure { + java { + targetExclude( + "**/AbstractCASReferenceCounted.java", + "**/generated/**", + "**/generated-lightproto/**", + "**/generated-sources/**", + "build/**", + ) + licenseHeader(asfLicenseHeaderJava, "(\\n|package|import|public|class|module) ?") + } + + format("proto") { + target("src/*/proto/**/*.proto") + licenseHeader(asfLicenseHeaderJavadoc, "\\n|syntax") + } +} diff --git a/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts new file mode 100644 index 0000000000000..0e6341834ff3c --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts @@ -0,0 +1,204 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +plugins { + `java-library` + id("pulsar.code-quality-conventions") +} + +val catalog = the().named("libs") + +group = "org.apache.pulsar" +version = catalog.findVersion("pulsar").get().requiredVersion + +tasks.withType().configureEach { + options.encoding = "UTF-8" + options.release.set(17) + options.compilerArgs.addAll(listOf("-parameters")) +} + +configurations.all { + // Exclude the old SLF4J 1.x bridge pulled in by bookkeeper-server. + // Pulsar uses SLF4J 2.x with log4j-slf4j2-impl; having both causes + // NoSuchMethodError in Log4jLoggerFactory at test startup. + exclude(group = "org.apache.logging.log4j", module = "log4j-slf4j-impl") + + // Force Jackson version to match the version catalog. Transitive dependencies + // (e.g. from jackson-bom) can pull in newer versions that break API compatibility + // (EnumResolver.constructUsingToString signature changed in 2.19+). + resolutionStrategy.eachDependency { + if (requested.group.startsWith("com.fasterxml.jackson")) { + useVersion(catalog.findVersion("jackson").get().requiredVersion) + } + } +} + +// Exclude bc-fips from modules that don't need it. bc-fips's CryptoServicesRegistrar +// conflicts with bcprov-jdk18on's version — having both causes NoSuchMethodError. +// Only the FIPS-specific modules and modules with explicit FIPS tests should have it. +val modulesUsingBcFips = setOf( + "bcfips", "bcfips-include-test", + "pulsar-common", "pulsar-broker-common", +) +if (project.name !in modulesUsingBcFips) { + configurations.all { + exclude(group = "org.bouncycastle", module = "bc-fips") + } +} + +dependencies { + // Exclude all BouncyCastle from bookkeeper-server (matches Maven parent POM exclusion). + // BookKeeper's bc-fips transitive dependency contains a CryptoServicesRegistrar that + // conflicts with the non-FIPS version in bcprov-jdk18on. Pulsar manages its own BC deps. + components { + withModule("org.apache.bookkeeper:bookkeeper-server") { + allVariants { + withDependencies { + removeAll { it.group == "org.bouncycastle" } + } + } + } + } + + // Enforced platform pins all dependency versions from the version catalog. + // This is the Gradle equivalent of Maven's dependencyManagement section. + "implementation"(enforcedPlatform(project(":pulsar-dependencies"))) + + // Resolve lz4-java capability conflict: at.yawk.lz4:lz4-java (used by Pulsar) and + // org.lz4:lz4-java (used by kafka-clients) both provide the org.lz4:lz4-java capability. + // Prefer at.yawk.lz4 which is the version Pulsar standardizes on. + configurations.all { + resolutionStrategy.capabilitiesResolution.withCapability("org.lz4:lz4-java") { + select("at.yawk.lz4:lz4-java:0") + } + } + + // Allow overriding protobuf version via -PprotobufVersion=4.31.1 for protobuf v4 tests + providers.gradleProperty("protobufVersion").orNull?.let { protobufVersion -> + configurations.all { + resolutionStrategy { + force("com.google.protobuf:protobuf-java:$protobufVersion") + } + } + } + + // Annotation processing for Lombok + "compileOnly"(catalog.findLibrary("lombok").get()) + "annotationProcessor"(catalog.findLibrary("lombok").get()) + "testCompileOnly"(catalog.findLibrary("lombok").get()) + "testAnnotationProcessor"(catalog.findLibrary("lombok").get()) + + // Common test dependencies (from parent POM) + if (project.name != "buildtools") { + "testRuntimeOnly"(project(":buildtools")) + } + "testImplementation"(catalog.findLibrary("testng").get()) + "testImplementation"(catalog.findLibrary("mockito-core").get()) + "testImplementation"(catalog.findLibrary("assertj-core").get()) + "testImplementation"(catalog.findLibrary("awaitility").get()) + "testImplementation"(catalog.findLibrary("system-lambda").get()) + "testImplementation"(catalog.findLibrary("slf4j-api").get()) +} + +tasks.withType().configureEach { + useTestNG { + listeners.addAll(listOf( + "org.apache.pulsar.tests.PulsarTestListener", + "org.apache.pulsar.tests.AnnotationListener", + "org.apache.pulsar.tests.FailFastNotifier", + "org.apache.pulsar.tests.MockitoCleanupListener", + "org.apache.pulsar.tests.FastThreadLocalCleanupListener", + "org.apache.pulsar.tests.ThreadLeakDetectorListener", + "org.apache.pulsar.tests.SingletonCleanerListener", + )) + // TestNG group filtering: -PtestGroups=broker,broker-admin -PexcludedTestGroups=flaky + providers.gradleProperty("testGroups").orNull?.let { groups -> + includeGroups(*groups.split(",").map { it.trim() }.toTypedArray()) + } + val excludedTestGroups = providers.gradleProperty("excludedTestGroups").getOrElse("quarantine,flaky") + excludeGroups(*(excludedTestGroups.split(",").map { it.trim() }.toTypedArray())) + } + testLogging { + events("FAILED") + exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + showStackTraces = true + showExceptions = true + showCauses = true + } + maxHeapSize = "1300m" + maxParallelForks = 4 + val failFastValue = providers.gradleProperty("testFailFast").getOrElse("true").toBoolean() + failFast = failFastValue + systemProperty("testRetryCount", providers.gradleProperty("testRetryCount").getOrElse("1")) + systemProperty("testFailFast", failFastValue.toString()) + jvmArgs( + "--add-opens", "java.base/jdk.internal.loader=ALL-UNNAMED", + "--add-opens", "java.base/java.lang=ALL-UNNAMED", + "--add-opens", "java.base/java.io=ALL-UNNAMED", + "--add-opens", "java.base/java.util=ALL-UNNAMED", + "--add-opens", "java.base/sun.net=ALL-UNNAMED", + "--add-opens", "java.management/sun.management=ALL-UNNAMED", + "--add-opens", "jdk.management/com.sun.management.internal=ALL-UNNAMED", + "--add-opens", "java.base/jdk.internal.platform=ALL-UNNAMED", + "--add-opens", "java.base/java.nio=ALL-UNNAMED", + "--add-opens", "java.base/jdk.internal.misc=ALL-UNNAMED", + "-XX:+EnableDynamicAgentLoading", + "-Xshare:off", + "-Dio.netty.tryReflectionSetAccessible=true", + "-Dpulsar.allocator.pooled=true", + "-Dpulsar.allocator.exit_on_oom=false", + "-Dpulsar.allocator.out_of_memory_policy=FallbackToHeap", + "-Dpulsar.test.preventExit=true", + ) +} + +// Expose test classes for cross-module test dependencies (Maven test-jar equivalent) +val testJar by tasks.registering(Jar::class) { + archiveClassifier.set("tests") + from(project.the()["test"].output) +} + +configurations.create("testJar") { + isCanBeConsumed = true + isCanBeResolved = false + extendsFrom(configurations["testImplementation"], configurations["testRuntimeOnly"]) +} +artifacts.add("testJar", testJar) + +// Set archive names to match Maven artifactId for nested modules. +// Skip if the project name is already qualified (starts with parent name), +// which happens for sub-modules that use qualified names in settings.gradle.kts +// to avoid Gradle name clashes. +val parentProject = project.parent +if (parentProject != null && parentProject != rootProject && parentProject.parent != rootProject + && !project.name.startsWith(parentProject.name)) { + the().archivesName.set("${parentProject.name}-${project.name}") +} + +tasks.withType().configureEach { + manifest { + attributes( + "Implementation-Title" to project.name, + "Implementation-Version" to project.version, + ) + } +} + +// Add a task for viewing all configurations for all projects in a simple way +tasks.register("allDependencies"){} \ No newline at end of file diff --git a/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts new file mode 100644 index 0000000000000..d51ebc8ad23e6 --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/pulsar.nar-conventions.gradle.kts @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Convention plugin for NAR (Nifi Archive) modules. +// Configures platform module exclusions from runtimeClasspath, forces JAR artifacts +// for bundled-dependencies, and handles archive name qualification. + +plugins { + id("io.github.merlimat.nar") +} + +// NAR modules should not bundle Pulsar platform dependencies — they are provided +// at runtime by Pulsar's classloader hierarchy. +// Note: pulsar-io-common is NOT in java-instance.jar (runtime-all), so it must be +// bundled in each NAR that uses it (e.g., IOConfigUtils). +val pulsarPlatformModules = setOf( + "pulsar-client-api", + "pulsar-client-admin-api", + "pulsar-client-original", + "pulsar-client", + "pulsar-common", + "pulsar-config-validation", + "bouncy-castle-bc", + "pulsar-functions-api", + "pulsar-functions-instance", + "pulsar-functions-proto", + "pulsar-functions-secrets", + "pulsar-functions-utils", + "pulsar-io-core", + "pulsar-metadata", + "pulsar-opentelemetry", + "managed-ledger", + "pulsar-package-core", +) + +configurations.named("runtimeClasspath") { + exclude(group = "org.apache.bookkeeper") + // Protobuf is in java-instance.jar (runtime-all), so NARs must not bundle it. + // Bundling a different version causes GeneratedMessage.getUnknownFields() conflicts. + exclude(group = "com.google.protobuf") + pulsarPlatformModules.forEach { module -> + exclude(group = "org.apache.pulsar", module = module) + } +} + +// The NAR plugin copies from runtimeClasspath which resolves project dependencies +// as class directories, not JARs. The NarClassLoader expects JARs in +// META-INF/bundled-dependencies/. Force the NAR task to use JAR artifacts. +// Use lazy resolution to avoid eagerly resolving the configuration at configuration +// time, which would cause configuration cache invalidation when JARs are created. +tasks.named("nar", Jar::class.java) { + val runtimeClasspath = configurations.named("runtimeClasspath") + into("META-INF/bundled-dependencies") { + from(runtimeClasspath.map { conf -> + conf.incoming.artifactView { + attributes { + attribute( + LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, + objects.named(LibraryElements::class.java, LibraryElements.JAR) + ) + } + }.files + }) + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + } +} + +// Set NAR-specific archive name qualification for nested modules. +val parentProject = project.parent +if (parentProject != null && parentProject != rootProject && parentProject.parent != rootProject + && !project.name.startsWith(parentProject.name)) { + val qualifiedName = "${parentProject.name}-${project.name}" + val narExt = extensions.getByName("nar") + @Suppress("UNCHECKED_CAST") + val narIdProp = narExt.javaClass.getMethod("getNarId").invoke(narExt) as org.gradle.api.provider.Property + narIdProp.set(qualifiedName) +} diff --git a/buildSrc/src/main/kotlin/pulsar.shadow-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.shadow-conventions.gradle.kts similarity index 96% rename from buildSrc/src/main/kotlin/pulsar.shadow-conventions.gradle.kts rename to build-logic/conventions/src/main/kotlin/pulsar.shadow-conventions.gradle.kts index 87f2d29c5f966..7a760e58e8187 100644 --- a/buildSrc/src/main/kotlin/pulsar.shadow-conventions.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/pulsar.shadow-conventions.gradle.kts @@ -26,6 +26,10 @@ plugins { id("com.gradleup.shadow") } +shadow { + addShadowVariantIntoJavaComponent.set(false) +} + tasks.named("shadowJar") { archiveClassifier.set("") mergeServiceFiles() diff --git a/build-logic/conventions/src/main/kotlin/pulsar.test-certs-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.test-certs-conventions.gradle.kts new file mode 100644 index 0000000000000..f51e44e80f401 --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/pulsar.test-certs-conventions.gradle.kts @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Add shared test certificates as a test resource directory. +// These modules rely on the shared tests/certificate-authority directory for TLS test certs. +// By adding it as a source set resource (under "certificate-authority/"), Gradle's +// processTestResources handles the copy and all downstream tasks see it automatically. + +// Some modules already have certificate-authority files in their own test resources, +// creating duplicates with the shared directory above. +tasks.named("processTestResources") { + duplicatesStrategy = DuplicatesStrategy.INCLUDE + // Add only the certificate-authority directory from the shared tests/ folder. + // This is done via from() instead of srcDir() + include() because an include() + // on the source set would filter ALL test resource directories, not just this one, + // causing files in src/test/resources (e.g. .htpasswd) to be excluded. + from(rootProject.file("tests")) { + include("certificate-authority/**") + } +} diff --git a/buildSrc/settings.gradle.kts b/build-logic/settings.gradle.kts similarity index 87% rename from buildSrc/settings.gradle.kts rename to build-logic/settings.gradle.kts index 17ff66638a8c6..ec81a012a51d5 100644 --- a/buildSrc/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -18,9 +18,15 @@ */ dependencyResolutionManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } } } +rootProject.name = "build-logic" +include("conventions") diff --git a/build.gradle.kts b/build.gradle.kts index 9222f7d8e2d9a..b2949af6591be 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,6 +16,9 @@ * specific language governing permissions and limitations * under the License. */ +import com.github.vlsi.gradle.git.dsl.gitignore +import org.jetbrains.gradle.ext.copyright +import org.jetbrains.gradle.ext.settings buildscript { // The license plugin pulls in plexus-utils:2.0.6 which conflicts with @@ -28,282 +31,71 @@ buildscript { plugins { alias(libs.plugins.rat) - alias(libs.plugins.license) apply false + alias(libs.plugins.version.catalog.update) + alias(libs.plugins.versions) + alias(libs.plugins.crlf) apply false + alias(libs.plugins.idea.ext) + alias(libs.plugins.spotless) apply false // workaround for https://github.com/diffplug/spotless/issues/2877 } -val catalog = the().named("libs") -val pulsarVersion = catalog.findVersion("pulsar").get().requiredVersion - -apply(from = "gradle/code-quality.gradle.kts") - -allprojects { - group = "org.apache.pulsar" - version = pulsarVersion +versionCatalogUpdate { + sortByKey = false + keep { + keepUnusedVersions.set(true) + } } -subprojects { - // Platform modules use java-platform which is mutually exclusive with java-library. - if (project.name == "pulsar-dependencies" || project.name == "pulsar-bom") { - return@subprojects +tasks.named("dependencyUpdates") { + outputFormatter = "html" + rejectVersionIf { + val nonStable = candidate.version.contains("alpha") || candidate.version.contains("beta") || candidate.version.contains("rc") + // OpenTelemetry publishes stable releases with -alpha suffix for some modules + val isOpenTelemetry = candidate.group.startsWith("io.opentelemetry") + nonStable && !(isOpenTelemetry && candidate.version.contains("alpha")) } +} - apply(plugin = "java-library") +val catalog = the().named("libs") +val pulsarVersion = catalog.findVersion("pulsar").get().requiredVersion - tasks.withType { - options.encoding = "UTF-8" - options.release.set(17) - options.compilerArgs.addAll(listOf("-parameters")) - } +// ── Apache RAT (Release Audit Tool) ───────────────────────────────────────── +tasks.named("rat").configure { + // Honour .gitignore exclusions so RAT skips untracked/generated files. + // Register .gitignore files as inputs so the task re-runs when they change. + inputs.files(fileTree(rootDir) { + include("**/.gitignore") + exclude("**/build/**") + exclude("**/.gradle/**") + }) + // use crlf plugin's gitignore dsl + gitignore(rootDir) + // Apply additional RAT-specific exclusions from .ratignore. + val ratignoreFile = rootDir.resolve(".ratignore") + inputs.file(ratignoreFile) + exclude(ratignoreFile.readLines().map { it.trim() }.filter { it.isNotBlank() && !it.startsWith("#") }) +} - configurations.all { - // Exclude the old SLF4J 1.x bridge pulled in by bookkeeper-server. - // Pulsar uses SLF4J 2.x with log4j-slf4j2-impl; having both causes - // NoSuchMethodError in Log4jLoggerFactory at test startup. - exclude(group = "org.apache.logging.log4j", module = "log4j-slf4j-impl") +apply(from = "gradle/verify-test-groups.gradle.kts") - // Force Jackson version to match the version catalog. Transitive dependencies - // (e.g. from jackson-bom) can pull in newer versions that break API compatibility - // (EnumResolver.constructUsingToString signature changed in 2.19+). - resolutionStrategy.eachDependency { - if (requested.group.startsWith("com.fasterxml.jackson")) { - useVersion(rootProject.libs.versions.jackson.get()) - } - } - } - // Exclude bc-fips from modules that don't need it. bc-fips's CryptoServicesRegistrar - // conflicts with bcprov-jdk18on's version — having both causes NoSuchMethodError. - // Only the FIPS-specific modules and modules with explicit FIPS tests should have it. - val modulesUsingBcFips = setOf( - "bcfips", "bcfips-include-test", - "pulsar-common", "pulsar-broker-common", - ) - if (project.name !in modulesUsingBcFips) { - configurations.all { - exclude(group = "org.bouncycastle", module = "bc-fips") - } - } - - dependencies { - // Exclude all BouncyCastle from bookkeeper-server (matches Maven parent POM exclusion). - // BookKeeper's bc-fips transitive dependency contains a CryptoServicesRegistrar that - // conflicts with the non-FIPS version in bcprov-jdk18on. Pulsar manages its own BC deps. - components { - withModule("org.apache.bookkeeper:bookkeeper-server") { - allVariants { - withDependencies { - removeAll { it.group == "org.bouncycastle" } +idea { + project { + settings { + // add ASL2 copyright profile to IntelliJ + copyright { + useDefault = "ASL2" + profiles { + create("ASL2") { + notice = rootProject.file("src/license-header.txt").readText().trimEnd() + keyword = "Copyright" } } } } - - // Enforced platform pins all dependency versions from the version catalog. - // This is the Gradle equivalent of Maven's dependencyManagement section. - "implementation"(enforcedPlatform(project(":pulsar-dependencies"))) - - // Resolve lz4-java capability conflict: at.yawk.lz4:lz4-java (used by Pulsar) and - // org.lz4:lz4-java (used by kafka-clients) both provide the org.lz4:lz4-java capability. - // Prefer at.yawk.lz4 which is the version Pulsar standardizes on. - configurations.all { - resolutionStrategy.capabilitiesResolution.withCapability("org.lz4:lz4-java") { - select("at.yawk.lz4:lz4-java:0") - } - } - - // Allow overriding protobuf version via -PprotobufVersion=4.31.1 for protobuf v4 tests - providers.gradleProperty("protobufVersion").orNull?.let { protobufVersion -> - configurations.all { - resolutionStrategy { - force("com.google.protobuf:protobuf-java:$protobufVersion") - } - } - } - - // Annotation processing for Lombok - "compileOnly"(rootProject.libs.lombok) - "annotationProcessor"(rootProject.libs.lombok) - "testCompileOnly"(rootProject.libs.lombok) - "testAnnotationProcessor"(rootProject.libs.lombok) - - // Common test dependencies (from parent POM) - if (project.name != "buildtools") { - "testRuntimeOnly"(project(":buildtools")) - } - "testImplementation"(rootProject.libs.testng) - "testImplementation"(rootProject.libs.mockito.core) - "testImplementation"(rootProject.libs.assertj.core) - "testImplementation"(rootProject.libs.awaitility) - "testImplementation"(rootProject.libs.system.lambda) - "testImplementation"(rootProject.libs.slf4j.api) - } - - tasks.withType { - useTestNG { - listeners.addAll(listOf( - "org.apache.pulsar.tests.PulsarTestListener", - "org.apache.pulsar.tests.AnnotationListener", - "org.apache.pulsar.tests.FailFastNotifier", - "org.apache.pulsar.tests.MockitoCleanupListener", - "org.apache.pulsar.tests.FastThreadLocalCleanupListener", - "org.apache.pulsar.tests.ThreadLeakDetectorListener", - "org.apache.pulsar.tests.SingletonCleanerListener", - )) - // TestNG group filtering: -PtestGroups=broker,broker-admin -PexcludedTestGroups=flaky - providers.gradleProperty("testGroups").orNull?.let { groups -> - includeGroups(*groups.split(",").map { it.trim() }.toTypedArray()) - } - val excludedTestGroups = providers.gradleProperty("excludedTestGroups").getOrElse("quarantine,flaky") - excludeGroups(*(excludedTestGroups.split(",").map { it.trim() }.toTypedArray())) - } - testLogging { - events("FAILED") - exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.SHORT - showStackTraces = true - showExceptions = true - showCauses = true - } - maxHeapSize = "1300m" - maxParallelForks = 4 - systemProperty("testRetryCount", System.getProperty("testRetryCount", "1")) - systemProperty("testFailFast", System.getProperty("testFailFast", "true")) - jvmArgs( - "--add-opens", "java.base/jdk.internal.loader=ALL-UNNAMED", - "--add-opens", "java.base/java.lang=ALL-UNNAMED", - "--add-opens", "java.base/java.io=ALL-UNNAMED", - "--add-opens", "java.base/java.util=ALL-UNNAMED", - "--add-opens", "java.base/sun.net=ALL-UNNAMED", - "--add-opens", "java.management/sun.management=ALL-UNNAMED", - "--add-opens", "jdk.management/com.sun.management.internal=ALL-UNNAMED", - "--add-opens", "java.base/jdk.internal.platform=ALL-UNNAMED", - "--add-opens", "java.base/java.nio=ALL-UNNAMED", - "--add-opens", "java.base/jdk.internal.misc=ALL-UNNAMED", - "-XX:+EnableDynamicAgentLoading", - "-Xshare:off", - "-Dio.netty.tryReflectionSetAccessible=true", - "-Dpulsar.allocator.pooled=true", - "-Dpulsar.allocator.exit_on_oom=false", - "-Dpulsar.allocator.out_of_memory_policy=FallbackToHeap", - "-Dpulsar.test.preventExit=true", - ) - } - - // Add shared test certificates as a test resource directory for modules that need them. - // These modules rely on the shared tests/certificate-authority directory for TLS test certs. - // By adding it as a source set resource (under "certificate-authority/"), Gradle's - // processTestResources handles the copy and all downstream tasks see it automatically. - val modulesNeedingCerts = setOf( - "pulsar-broker", "pulsar-broker-common", "pulsar-broker-auth-oidc", - "pulsar-broker-auth-sasl", "pulsar-common", "pulsar-proxy", - "bcfips-include-test", "pulsar-testclient", - ) - if (project.name in modulesNeedingCerts) { - project.the()["test"].resources.srcDir( - rootProject.file("tests").absolutePath - ) - // Some modules already have certificate-authority files in their own test resources, - // creating duplicates with the shared directory above. - tasks.named("processTestResources") { - duplicatesStrategy = DuplicatesStrategy.INCLUDE - } - } - - // Expose test classes for cross-module test dependencies (Maven test-jar equivalent) - val testJar by tasks.registering(Jar::class) { - archiveClassifier.set("tests") - from(project.the()["test"].output) - } - - configurations.create("testJar") { - isCanBeConsumed = true - isCanBeResolved = false - extendsFrom(configurations["testImplementation"], configurations["testRuntimeOnly"]) - } - artifacts.add("testJar", testJar) - - // NAR modules should not bundle Pulsar platform dependencies — they are provided - // at runtime by Pulsar's classloader hierarchy. - // Note: pulsar-io-common is NOT in java-instance.jar (runtime-all), so it must be - // bundled in each NAR that uses it (e.g., IOConfigUtils). - pluginManager.withPlugin("io.github.merlimat.nar") { - val pulsarPlatformModules = setOf( - "pulsar-client-api", - "pulsar-client-admin-api", - "pulsar-client-original", - "pulsar-client", - "pulsar-common", - "pulsar-config-validation", - "bouncy-castle-bc", - "pulsar-functions-api", - "pulsar-functions-instance", - "pulsar-functions-proto", - "pulsar-functions-secrets", - "pulsar-functions-utils", - "pulsar-io-core", - "pulsar-metadata", - "pulsar-opentelemetry", - "managed-ledger", - "pulsar-package-core", - ) - configurations.named("runtimeClasspath") { - exclude(group = "org.apache.bookkeeper") - // Protobuf is in java-instance.jar (runtime-all), so NARs must not bundle it. - // Bundling a different version causes GeneratedMessage.getUnknownFields() conflicts. - exclude(group = "com.google.protobuf") - pulsarPlatformModules.forEach { module -> - exclude(group = "org.apache.pulsar", module = module) - } - } - - // The NAR plugin copies from runtimeClasspath which resolves project dependencies - // as class directories, not JARs. The NarClassLoader expects JARs in - // META-INF/bundled-dependencies/. Force the NAR task to use JAR artifacts. - val jarView = configurations.named("runtimeClasspath").get() - .incoming.artifactView { - attributes { - attribute( - LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, - objects.named(LibraryElements::class.java, LibraryElements.JAR) - ) - } - }.files - tasks.named("nar", Jar::class.java) { - into("META-INF/bundled-dependencies") { - from(jarView) - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - } - } - } - - // Set archive names to match Maven artifactId for nested modules. - // Skip if the project name is already qualified (starts with parent name), - // which happens for sub-modules that use qualified names in settings.gradle.kts - // to avoid Gradle name clashes. - val parentProject = project.parent - if (parentProject != null && parentProject != rootProject && parentProject.parent != rootProject - && !project.name.startsWith(parentProject.name)) { - val qualifiedName = "${parentProject.name}-${project.name}" - the().archivesName.set(qualifiedName) - // Also set NAR plugin's narId if NAR plugin is applied - pluginManager.withPlugin("io.github.merlimat.nar") { - @Suppress("UNCHECKED_CAST") - val narExt = extensions.getByName("nar") - val narIdProp = narExt.javaClass.getMethod("getNarId").invoke(narExt) as Property - narIdProp.set(qualifiedName) - } - } - - tasks.withType { - manifest { - attributes( - "Implementation-Title" to project.name, - "Implementation-Version" to project.version, - ) - } } } -apply(from = "gradle/verify-test-groups.gradle.kts") +// ── Root lifecycle tasks ──────────────────────────────────────────────────── tasks.register("serverDistTar") { dependsOn(":distribution:pulsar-server-distribution:serverDistTar") @@ -313,31 +105,4 @@ tasks.register("docker") { description = "Build the Pulsar Docker image" group = "docker" dependsOn(":docker:pulsar-docker-image:dockerBuild") -} - -// Access version catalog from subprojects -val Project.libs: org.gradle.accessors.dm.LibrariesForLibs - get() = rootProject.extensions.getByType() - -// Filtered bookkeeper-server test-jar that excludes classes conflicting with testmocks -// (BookKeeperTestClient and TestStatsProvider have Pulsar-specific versions in testmocks). -// Exposed as a consumable configuration so consuming projects can depend on it via: -// testImplementation(project(path = ":", configuration = "filteredBkServerTestJar")) -val bkServerTestJarResolvable by configurations.creating { - isCanBeResolved = true - isCanBeConsumed = false - isTransitive = false -} -dependencies { - bkServerTestJarResolvable(libs.bookkeeper.server) { artifact { classifier = "tests" } } -} -val filteredBkServerTestJarTask = tasks.register("filteredBkServerTestJarTask") { - archiveFileName.set("bookkeeper-server-tests-filtered.jar") - destinationDirectory.set(layout.buildDirectory.dir("libs")) - from(zipTree(bkServerTestJarResolvable.singleFile)) { - exclude("org/apache/bookkeeper/client/BookKeeperTestClient*") - exclude("org/apache/bookkeeper/client/TestStatsProvider*") - } -} -configurations.consumable("filteredBkServerTestJar") -artifacts.add("filteredBkServerTestJar", filteredBkServerTestJarTask) +} \ No newline at end of file diff --git a/buildtools/build.gradle.kts b/buildtools/build.gradle.kts index fd821f9147f95..9d6c98d86442f 100644 --- a/buildtools/build.gradle.kts +++ b/buildtools/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.snakeyaml) implementation(libs.ant) diff --git a/buildtools/src/main/java/org/apache/pulsar/tests/FailFastNotifier.java b/buildtools/src/main/java/org/apache/pulsar/tests/FailFastNotifier.java index a3eb68bd26ebe..ceefc08f9c6b7 100644 --- a/buildtools/src/main/java/org/apache/pulsar/tests/FailFastNotifier.java +++ b/buildtools/src/main/java/org/apache/pulsar/tests/FailFastNotifier.java @@ -33,7 +33,7 @@ /** * Notifies TestNG core skipping remaining tests after first failure has appeared. * - * Enabled when -DtestFailFast=true + * Enabled when -PtestFailFast=true * * This is a workaround for https://issues.apache.org/jira/browse/SUREFIRE-1762 since * the bug makes the built-in fast-fast feature `-Dsurefire.skipAfterFailureCount=1` unusable. diff --git a/distribution/offloaders/build.gradle.kts b/distribution/offloaders/build.gradle.kts index 7b61f4ce883a6..553583e904ab8 100644 --- a/distribution/offloaders/build.gradle.kts +++ b/distribution/offloaders/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Distribution module — no Java compilation needed tasks.named("compileJava") { enabled = false } tasks.named("compileTestJava") { enabled = false } diff --git a/distribution/server/build.gradle.kts b/distribution/server/build.gradle.kts index af6db81b743b9..ce76801fb4901 100644 --- a/distribution/server/build.gradle.kts +++ b/distribution/server/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Distribution module — no Java compilation needed tasks.named("compileJava") { enabled = false } tasks.named("compileTestJava") { enabled = false } @@ -289,8 +293,8 @@ val serverDistTar by tasks.registering(Tar::class) { } } - // Java instance JAR (runtime-all fat jar) - from(project(":pulsar-functions:pulsar-functions-runtime-all").tasks.named("jar")) { + // Java instance JAR (runtime-all fat jar, produced by Shadow plugin) + from(project(":pulsar-functions:pulsar-functions-runtime-all").tasks.named("shadowJar")) { into("${baseDir}/instances") rename(".*", "java-instance.jar") } diff --git a/distribution/shell/build.gradle.kts b/distribution/shell/build.gradle.kts index 3e88805488a2a..8383577988f7d 100644 --- a/distribution/shell/build.gradle.kts +++ b/distribution/shell/build.gradle.kts @@ -16,6 +16,10 @@ * specific language governing permissions and limitations * under the License. */ + +plugins { + id("pulsar.java-conventions") +} // Distribution module — no Java compilation needed tasks.named("compileJava") { enabled = false } tasks.named("compileTestJava") { enabled = false } diff --git a/docker/build.sh b/docker/build.sh index 9f437bece8f7b..8b29de4205369 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -21,4 +21,4 @@ ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/.. >/dev/null 2>&1 && pwd )" cd $ROOT_DIR -./gradlew -Pdocker :docker:pulsar-docker-image:dockerBuild +./gradlew :docker:pulsar-docker-image:dockerBuild diff --git a/docker/pulsar/build.gradle.kts b/docker/pulsar/build.gradle.kts index e4414bf3f3646..91b27fbffb388 100644 --- a/docker/pulsar/build.gradle.kts +++ b/docker/pulsar/build.gradle.kts @@ -17,10 +17,9 @@ * under the License. */ -// Docker image module — no Java compilation needed -tasks.named("compileJava") { enabled = false } -tasks.named("compileTestJava") { enabled = false } -tasks.named("jar") { enabled = false } +group = "org.apache.pulsar" +version = the().named("libs").findVersion("pulsar").get().requiredVersion + val pulsarVersion = project.version.toString() val dockerOrganization = providers.gradleProperty("docker.organization").getOrElse("apachepulsar") @@ -83,7 +82,3 @@ val dockerBuild by tasks.registering(Exec::class) { commandLine(args) } - -tasks.named("assemble") { - dependsOn(dockerBuild) -} diff --git a/gradle/code-quality.gradle.kts b/gradle/code-quality.gradle.kts deleted file mode 100644 index 43d5b15722d48..0000000000000 --- a/gradle/code-quality.gradle.kts +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.gradle.api.plugins.quality.Checkstyle -import org.gradle.api.plugins.quality.CheckstyleExtension - -// ── Checkstyle ────────────────────────────────────────────────────────────── -subprojects { - apply(plugin = "checkstyle") - - configure { - toolVersion = "10.14.2" - configFile = rootProject.file("buildtools/src/main/resources/pulsar/checkstyle.xml") - configProperties["checkstyle.suppressions.file"] = - rootProject.file("buildtools/src/main/resources/pulsar/suppressions.xml").absolutePath - } - - tasks.withType { - // Broker module has very large files that need more heap - maxHeapSize.set("1g") - // Exclude generated source files (proto, lightproto, etc.) - exclude { it.file.path.contains("/build/") } - exclude { it.file.path.contains("/generated-lightproto/") } - exclude { it.file.path.contains("/generated-sources/") } - // Match Maven exclusion: **/proto/* - exclude("**/proto/*") - } -} - -// ── Apache RAT (Release Audit Tool) ───────────────────────────────────────── -// The RAT plugin is applied in the root build.gradle.kts; configure the task here. -tasks.named("rat").configure { - // Use reflection since type-safe accessors aren't available in applied scripts - val excludesProp = this.javaClass.getMethod("getExcludes").invoke(this) - @Suppress("UNCHECKED_CAST") - val excludes = excludesProp as MutableCollection - excludes.addAll(listOf( - // License files - "licenses/LICENSE-*.txt", - "src/assemble/README.bin.txt", - "src/assemble/LICENSE.bin.txt", - "src/assemble/NOTICE.bin.txt", - // Services files - "**/META-INF/services/*", - // Generated Protobuf files - "src/main/java/org/apache/bookkeeper/mledger/proto/MLDataFormats.java", - "src/main/java/org/apache/pulsar/broker/service/schema/proto/SchemaRegistryFormat.java", - "bin/proto/MLDataFormats_pb2.py", - // Generated Avro files - "**/avro/generated/*.java", - "**/*.avsc", - // Generated Flatbuffer files (Kinesis) - "**/org/apache/pulsar/io/kinesis/fbs/*.java", - // Imported from Netty - "src/main/java/org/apache/bookkeeper/mledger/util/AbstractCASReferenceCounted.java", - // Maven build artifacts - "**/dependency-reduced-pom.xml", - // HdrHistogram output files - "**/*.hgrm", - // ProGuard/R8 rules - "**/*.pro", - // Go module configs - "pulsar-client-go/go.mod", - "pulsar-client-go/go.sum", - "pulsar-function-go/go.mod", - "pulsar-function-go/go.sum", - "pulsar-function-go/examples/go.mod", - "pulsar-function-go/examples/go.sum", - // HashProvider service file - "**/META-INF/services/com.scurrilous.circe.HashProvider", - // Django generated code - "**/django/stats/migrations/*.py", - "**/conf/uwsgi_params", - // Certificates and keys - "**/*.crt", - "**/*.key", - "**/*.csr", - "**/*.srl", - "**/*.txt", - "**/*.pem", - "**/*.json", - "**/*.htpasswd", - "**/src/test/resources/athenz.conf.test", - "deployment/terraform-ansible/templates/myid", - "**/certificate-authority/index.txt", - "**/certificate-authority/serial", - "**/certificate-authority/README.md", - // ZK test data - "**/zk-3.5-test-data/*", - // Python requirements - "**/requirements.txt", - // Configuration templates - "conf/schema_example.json", - "**/templates/*.tpl", - // Helm - "**/.helmignore", - "**/_helpers.tpl", - // Project/IDE files - "**/*.md", - ".github/**", - "**/*.nar", - "**/.terraform/**", - "**/.gitignore", - "**/.gitattributes", - "**/.svn", - "**/*.iws", - "**/*.ipr", - "**/*.iml", - "**/*.cbp", - "**/*.pyc", - "**/.classpath", - "**/.project", - "**/.settings", - "**/target/**", - "**/*.log", - "**/build/**", - "**/file:/**", - "**/SecurityAuth.audit*", - "**/site2/**", - "**/.idea/**", - "**/.vscode/**", - "**/.mvn/**", - "**/*.a", - "**/*.so", - "**/*.so.*", - "**/*.dylib", - "**/*.patch", - "src/test/resources/*.txt", - "**/*_pb2.py", - "**/*_pb2_grpc.py", - // Test output (local builds) - "**/test-output/**", - // Generated LightProto files - "**/generated-lightproto/**", - // Generated source files (e.g. Protobuf, Avro) - "**/generated-sources/**", - // Local runtime data - "**/data/**", - "**/logs/**", - // Hidden directories (AI tools, etc.) - ".*/**", - // Gradle/Kotlin files - ".gradle/**", - "gradle/wrapper/**", - "**/.gradle/**", - "**/.kotlin/**", - "**/gradle/wrapper/**", - "gradlew", - "gradlew.bat", - "gradle/libs.versions.toml", - )) -} - -// ── License header check (Mycila/hierynomus) ──────────────────────────────── -subprojects { - apply(plugin = "com.github.hierynomus.license") - - // The hierynomus license plugin calls Task.project at execution time, - // which is incompatible with Gradle's configuration cache. - tasks.matching { it.name.startsWith("license") }.configureEach { - notCompatibleWithConfigurationCache("license plugin uses Task.project at execution time") - } - - afterEvaluate { - val licenseExt = extensions.getByName("license") - val cls = licenseExt.javaClass - - cls.getMethod("setHeader", File::class.java).invoke(licenseExt, rootProject.file("src/license-header.txt")) - cls.getMethod("setSkipExistingHeaders", Boolean::class.java).invoke(licenseExt, true) - cls.getMethod("setStrictCheck", Boolean::class.java).invoke(licenseExt, true) - - val mappingMethod = cls.getMethod("mapping", String::class.java, String::class.java) - mappingMethod.invoke(licenseExt, "java", "SLASHSTAR_STYLE") - mappingMethod.invoke(licenseExt, "proto", "JAVADOC_STYLE") - mappingMethod.invoke(licenseExt, "go", "DOUBLESLASH_STYLE") - mappingMethod.invoke(licenseExt, "conf", "SCRIPT_STYLE") - mappingMethod.invoke(licenseExt, "ini", "SCRIPT_STYLE") - mappingMethod.invoke(licenseExt, "yaml", "SCRIPT_STYLE") - mappingMethod.invoke(licenseExt, "tf", "SCRIPT_STYLE") - mappingMethod.invoke(licenseExt, "cfg", "SCRIPT_STYLE") - mappingMethod.invoke(licenseExt, "cc", "JAVADOC_STYLE") - mappingMethod.invoke(licenseExt, "scss", "JAVADOC_STYLE") - - // Limit license check to only hand-written source files (exclude generated code). - // The license plugin's tasks extend SourceTask, so we can filter the source. - project.tasks.withType(org.gradle.api.tasks.SourceTask::class.java).matching { - it.name.startsWith("license") - }.configureEach { - // Only scan files under src/ directories, not build/generated/ - source = project.files(source).asFileTree.matching { - exclude { it.file.path.contains("/build/") } - exclude { it.file.path.contains("/generated-lightproto/") } - exclude { it.file.path.contains("/generated-sources/") } - } - } - - val excludeMethod = cls.getMethod("exclude", String::class.java) - listOf( - "**/*.txt", "**/*.pem", "**/*.crt", "**/*.key", "**/*.csr", - "**/*.log", "**/*.patch", "**/*.avsc", "**/*.versionsBackup", - "**/*.pyc", "**/*.graffle", "**/*.hgrm", "**/*.md", "**/*.json", - "**/proto/MLDataFormats.java", - "**/proto/PulsarTransactionMetadata.java", - "**/proto/SchemaRegistryFormat.java", - "**/common/api/proto/*.java", - "**/kinesis/fbs/*.java", - "**/AbstractCASReferenceCounted.java", - "**/ByteBufCodedInputStream.java", - "**/ByteBufCodedOutputStream.java", - "**/ahc.properties", - "**/circe/**", - "**/generated/**", - "**/generated-lightproto/**", - "**/generated-sources/**", - "**/zk-3.5-test-data/*", - "**/*_pb2.py", - "**/*_pb2_grpc.py", - "**/data/**", - "**/logs/**", - "**/.kotlin/**", - ).forEach { excludeMethod.invoke(licenseExt, it) } - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1bc19f6581b4f..fb14d62e4727a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,19 +16,15 @@ # specific language governing permissions and limitations # under the License. # - [versions] # Core pulsar = "4.3.0-SNAPSHOT" java = "17" - # Docker docker-jdk = "21" pulsar-client-python = "3.10.0" - # Code quality checkstyle = "10.14.2" - # Major frameworks bookkeeper = "4.17.3" zookeeper = "3.9.5" @@ -42,14 +38,12 @@ grpc = "1.75.0" slf4j = "2.0.17" log4j2 = "2.25.3" lombok = "1.18.42" - # OpenTelemetry opentelemetry = "1.56.0" opentelemetry-alpha = "1.56.0-alpha" opentelemetry-instrumentation = "2.21.0" opentelemetry-instrumentation-alpha = "2.21.0-alpha" opentelemetry-semconv = "1.37.0" - # Apache Commons commons-lang3 = "3.19.0" commons-io = "2.21.0" @@ -62,7 +56,6 @@ commons-math3 = "3.6.1" commons-logging = "1.3.5" commons-beanutils = "1.11.0" commons-configuration2 = "2.12.0" - # BouncyCastle bouncycastle-bcprov = "1.78.1" bouncycastle-bcpkix = "1.81" @@ -70,15 +63,12 @@ bouncycastle-bcutil = "1.81" bouncycastle-bcprov-ext = "1.78.1" bouncycastle-bcpkix-fips = "2.0.10" bouncycastle-bc-fips = "2.0.1" - # Serialization avro = "1.12.0" gson = "2.13.2" snakeyaml = "2.0" - # Vert.x vertx = "4.5.24" - # Networking / HTTP asynchttpclient = "2.12.4" conscrypt = "2.5.2" @@ -87,14 +77,12 @@ okio = "3.16.3" netty-tcnative = "2.0.75.Final" httpcomponents-httpclient = "4.5.13" httpcomponents-httpcore = "4.4.15" - # Google libraries (transitive deps, versions managed to match Maven) google-auth = "1.24.1" google-http-client = "1.41.0" j2objc-annotations = "1.3" opencensus = "0.28.0" opentelemetry-gcp-resources = "1.48.0-alpha" - # Data structures / Utils guava = "33.4.8-jre" caffeine = "3.2.3" @@ -104,14 +92,12 @@ hppc = "0.9.1" aircompressor = "2.0.3" completable-futures = "0.3.6" re2j = "1.8" - # Metrics / Observability prometheus = "0.16.0" prometheus-jmx = "0.16.1" dropwizardmetrics = "4.1.12.1" hdrHistogram = "2.1.9" perfmark = "0.26.0" - # Auth jsonwebtoken = "0.13.0" athenz = "1.10.62" @@ -119,18 +105,15 @@ jose4j = "0.9.6" nimbus-jose-jwt = "9.37.4" auth0-java-jwt = "4.3.0" auth0-jwks-rsa = "0.22.0" - # CLI picocli = "4.7.5" jline3 = "3.21.0" jline2 = "2.14.6" - javassist = "3.25.0-GA" rocksdb = "7.9.2" kotlin-stdlib = "1.8.20" audience-annotations = "0.12.0" jetbrains-annotations = "13.0" - # Misc curator = "5.7.1" reflections = "0.10.2" @@ -149,7 +132,6 @@ guice = "5.1.0" snappy = "1.1.10.8" ipaddress = "5.5.0" zt-zip = "1.17" - # Jakarta jakarta-ws-rs = "2.1.6" jakarta-annotation = "1.3.5" @@ -157,17 +139,14 @@ jakarta-activation = "1.2.2" jakarta-xml-bind = "2.3.3" jakarta-validation = "2.0.2" javax-servlet = "3.1.0" - # Oxia / etcd oxia = "0.7.4" - # Build plugins lightproto = "0.6.2" errorprone = "2.45.0" spotbugs = "4.9.6" checkerframework = "3.33.0" jsr305 = "3.0.2" - # Test testng = "7.7.1" mockito = "5.19.0" @@ -187,50 +166,27 @@ skyscreamer = "1.5.0" zstd-jni = "1.5.7-3" lz4java = "1.10.3" spring = "6.2.12" - -# Connectors / IO -kafka-client = "4.1.1" -confluent = "8.1.1" -opensearch = "2.19.4" -elasticsearch-java = "8.15.3" -debezium = "3.4.2.Final" -debezium-mysql-connector = "9.4.0" kubernetesclient = "23.0.0" - -# IO connector specific -aerospike-client = "4.5.0" aws-sdk = "1.12.788" -aws-sdk2 = "2.32.28" -rabbitmq-client = "5.28.0" -cassandra-driver = "3.11.2" -mongodb-driver = "5.4.0" -influxdb-client = "7.3.0" -influxdb-java = "2.25" -nsq-client = "1.0" -lettuce = "6.5.1.RELEASE" -solr = "9.8.0" -hbase = "2.6.4-hadoop3" hadoop3 = "3.4.3" jclouds = "2.6.0" - # Shading -shadow = "9.3.2" +shadow = "9.4.1" [libraries] # SLF4J +slf4j-bom = { module = "org.slf4j:slf4j-bom", version.ref = "slf4j" } slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } jcl-over-slf4j = { module = "org.slf4j:jcl-over-slf4j", version.ref = "slf4j" } - # Log4j2 +log4j-bom = { module = "org.apache.logging.log4j:log4j-bom", version.ref = "log4j2" } log4j-api = { module = "org.apache.logging.log4j:log4j-api", version.ref = "log4j2" } log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "log4j2" } log4j-web = { module = "org.apache.logging.log4j:log4j-web", version.ref = "log4j2" } log4j-layout-template-json = { module = "org.apache.logging.log4j:log4j-layout-template-json", version.ref = "log4j2" } log4j-slf4j2-impl = { module = "org.apache.logging.log4j:log4j-slf4j2-impl", version.ref = "log4j2" } - # Lombok lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" } - # Jackson jackson-bom = { module = "com.fasterxml.jackson:jackson-bom", version.ref = "jackson" } jackson-annotations = { module = "com.fasterxml.jackson.core:jackson-annotations", version.ref = "jackson" } @@ -242,7 +198,6 @@ jackson-datatype-jdk8 = { module = "com.fasterxml.jackson.datatype:jackson-datat jackson-dataformat-yaml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml", version.ref = "jackson" } jackson-module-jsonSchema = { module = "com.fasterxml.jackson.module:jackson-module-jsonSchema", version.ref = "jackson" } jackson-jaxrs-json-provider = { module = "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider", version.ref = "jackson" } - # Netty netty-bom = { module = "io.netty:netty-bom", version.ref = "netty" } netty-common = { module = "io.netty:netty-common", version.ref = "netty" } @@ -262,17 +217,16 @@ netty-tcnative-boringssl-static = { module = "io.netty:netty-tcnative-boringssl- netty-incubator-transport-classes-io_uring = { module = "io.netty.incubator:netty-incubator-transport-classes-io_uring", version.ref = "netty-iouring" } netty-incubator-transport-native-io-uring = { module = "io.netty.incubator:netty-incubator-transport-native-io_uring", version.ref = "netty-iouring" } netty-reactive-streams = { module = "com.typesafe.netty:netty-reactive-streams", version.ref = "netty-reactive-streams" } - # Protobuf / gRPC +protobuf-bom = { module = "com.google.protobuf:protobuf-bom", version.ref = "protobuf" } protobuf-java = { module = "com.google.protobuf:protobuf-java", version.ref = "protobuf" } protobuf-java-util = { module = "com.google.protobuf:protobuf-java-util", version.ref = "protobuf" } +grpc-bom = { module = "io.grpc:grpc-bom", version.ref = "grpc" } grpc-all = { module = "io.grpc:grpc-all", version.ref = "grpc" } grpc-netty-shaded = { module = "io.grpc:grpc-netty-shaded", version.ref = "grpc" } grpc-stub = { module = "io.grpc:grpc-stub", version.ref = "grpc" } - # Guava guava = { module = "com.google.guava:guava", version.ref = "guava" } - # Apache Commons commons-lang3 = { module = "org.apache.commons:commons-lang3", version.ref = "commons-lang3" } commons-io = { module = "commons-io:commons-io", version.ref = "commons-io" } @@ -281,7 +235,6 @@ commons-compress = { module = "org.apache.commons:commons-compress", version.ref commons-collections4 = { module = "org.apache.commons:commons-collections4", version.ref = "commons-collections4" } commons-cli = { module = "commons-cli:commons-cli", version.ref = "commons-cli" } commons-math3 = { module = "org.apache.commons:commons-math3", version.ref = "commons-math3" } - # BookKeeper bookkeeper-server = { module = "org.apache.bookkeeper:bookkeeper-server", version.ref = "bookkeeper" } bookkeeper-common-allocator = { module = "org.apache.bookkeeper:bookkeeper-common-allocator", version.ref = "bookkeeper" } @@ -295,18 +248,15 @@ bookkeeper-stream-storage-service-impl = { module = "org.apache.bookkeeper:strea bookkeeper-tools-framework = { module = "org.apache.bookkeeper:bookkeeper-tools-framework", version.ref = "bookkeeper" } bookkeeper-http-vertx-server = { module = "org.apache.bookkeeper.http:vertx-http-server", version.ref = "bookkeeper" } distributedlog-core = { module = "org.apache.distributedlog:distributedlog-core", version.ref = "bookkeeper" } - # ZooKeeper zookeeper = { module = "org.apache.zookeeper:zookeeper", version.ref = "zookeeper" } zookeeper-tests = { module = "org.apache.zookeeper:zookeeper", version.ref = "zookeeper" } - # Curator curator-recipes = { module = "org.apache.curator:curator-recipes", version.ref = "curator" } - # Conscrypt conscrypt-openjdk-uber = { module = "org.conscrypt:conscrypt-openjdk-uber", version.ref = "conscrypt" } - # Jetty +jetty-bom = { module = "org.eclipse.jetty:jetty-bom", version.ref = "jetty" } jetty-server = { module = "org.eclipse.jetty:jetty-server", version.ref = "jetty" } jetty-util = { module = "org.eclipse.jetty:jetty-util", version.ref = "jetty" } jetty-alpn-conscrypt-server = { module = "org.eclipse.jetty:jetty-alpn-conscrypt-server", version.ref = "jetty" } @@ -319,7 +269,6 @@ jetty-ee8-proxy = { module = "org.eclipse.jetty.ee8:jetty-ee8-proxy", version.re jetty-websocket-jetty-api = { module = "org.eclipse.jetty.websocket:jetty-websocket-jetty-api", version.ref = "jetty" } jetty-websocket-jetty-client = { module = "org.eclipse.jetty.websocket:jetty-websocket-jetty-client", version.ref = "jetty" } jetty-ee8-websocket-jetty-server = { module = "org.eclipse.jetty.ee8.websocket:jetty-ee8-websocket-jetty-server", version.ref = "jetty" } - # Jersey jersey-server = { module = "org.glassfish.jersey.core:jersey-server", version.ref = "jersey" } jersey-container-servlet-core = { module = "org.glassfish.jersey.containers:jersey-container-servlet-core", version.ref = "jersey" } @@ -330,8 +279,8 @@ jersey-hk2 = { module = "org.glassfish.jersey.inject:jersey-hk2", version.ref = jersey-media-multipart = { module = "org.glassfish.jersey.media:jersey-media-multipart", version.ref = "jersey" } jersey-test-framework-core = { module = "org.glassfish.jersey.test-framework:jersey-test-framework-core", version.ref = "jersey" } jersey-test-framework-grizzly2 = { module = "org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-grizzly2", version.ref = "jersey" } - # Prometheus +simpleclient-bom = { module = "io.prometheus:simpleclient_bom", version.ref = "prometheus" } simpleclient = { module = "io.prometheus:simpleclient", version.ref = "prometheus" } simpleclient-hotspot = { module = "io.prometheus:simpleclient_hotspot", version.ref = "prometheus" } simpleclient-caffeine = { module = "io.prometheus:simpleclient_caffeine", version.ref = "prometheus" } @@ -340,8 +289,11 @@ simpleclient-servlet = { module = "io.prometheus:simpleclient_servlet", version. simpleclient-common = { module = "io.prometheus:simpleclient_common", version.ref = "prometheus" } simpleclient-log4j2 = { module = "io.prometheus:simpleclient_log4j2", version.ref = "prometheus" } prometheus-jmx-collector = { module = "io.prometheus.jmx:collector", version.ref = "prometheus-jmx" } - # OpenTelemetry +opentelemetry-bom = { module = "io.opentelemetry:opentelemetry-bom", version.ref = "opentelemetry" } +opentelemetry-bom-alpha = { module = "io.opentelemetry:opentelemetry-bom-alpha", version.ref = "opentelemetry-alpha" } +opentelemetry-instrumentation-bom = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom", version.ref = "opentelemetry-instrumentation" } +opentelemetry-instrumentation-bom-alpha = { module = "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha", version.ref = "opentelemetry-instrumentation-alpha" } opentelemetry-api = { module = "io.opentelemetry:opentelemetry-api", version.ref = "opentelemetry" } opentelemetry-api-incubator = { module = "io.opentelemetry:opentelemetry-api-incubator", version.ref = "opentelemetry-alpha" } opentelemetry-sdk = { module = "io.opentelemetry:opentelemetry-sdk", version.ref = "opentelemetry" } @@ -353,27 +305,22 @@ opentelemetry-instrumentation-resources = { module = "io.opentelemetry.instrumen opentelemetry-instrumentation-runtime-telemetry-java17 = { module = "io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java17", version.ref = "opentelemetry-instrumentation-alpha" } opentelemetry-semconv = { module = "io.opentelemetry.semconv:opentelemetry-semconv", version.ref = "opentelemetry-semconv" } opentelemetry-gcp-resources = { module = "io.opentelemetry.contrib:opentelemetry-gcp-resources", version.ref = "opentelemetry-gcp-resources" } - # BouncyCastle bcpkix-jdk18on = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bouncycastle-bcpkix" } bcprov-ext-jdk18on = { module = "org.bouncycastle:bcprov-ext-jdk18on", version.ref = "bouncycastle-bcprov-ext" } bcpkix-fips = { module = "org.bouncycastle:bcpkix-fips", version.ref = "bouncycastle-bcpkix-fips" } bc-fips = { module = "org.bouncycastle:bc-fips", version.ref = "bouncycastle-bc-fips" } -bcutil-fips = { module = "org.bouncycastle:bcutil-fips", version = "2.0.5" } - +bcutil-fips = "org.bouncycastle:bcutil-fips:2.0.5" # RocksDB rocksdbjni = { module = "org.rocksdb:rocksdbjni", version.ref = "rocksdb" } - # Error Prone error-prone-annotations = { module = "com.google.errorprone:error_prone_annotations", version.ref = "errorprone" } - # Data structures caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" } jctools-core = { module = "org.jctools:jctools-core", version.ref = "jctools" } roaringbitmap = { module = "org.roaringbitmap:RoaringBitmap", version.ref = "roaringbitmap" } hppc = { module = "com.carrotsearch:hppc", version.ref = "hppc" } aircompressor = { module = "io.airlift:aircompressor", version.ref = "aircompressor" } - # Misc libs gson = { module = "com.google.code.gson:gson", version.ref = "gson" } re2j = { module = "com.google.re2j:re2j", version.ref = "re2j" } @@ -388,8 +335,10 @@ javassist = { module = "org.javassist:javassist", version.ref = "javassist" } commons-text = { module = "org.apache.commons:commons-text", version.ref = "commons-text" } typetools = { module = "net.jodah:typetools", version.ref = "typetools" } perfmark-api = { module = "io.perfmark:perfmark-api", version.ref = "perfmark" } +okhttp3-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp3" } okhttp3 = { module = "com.squareup.okhttp3:okhttp-jvm", version.ref = "okhttp3" } okhttp3-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okhttp3" } +okio-bom = { module = "com.squareup.okio:okio-bom", version.ref = "okio" } okio = { module = "com.squareup.okio:okio", version.ref = "okio" } # Transitive dep version pins (enforced by pulsar-dependencies platform) google-auth-library-credentials = { module = "com.google.auth:google-auth-library-credentials", version.ref = "google-auth" } @@ -403,7 +352,6 @@ httpcomponents-httpclient = { module = "org.apache.httpcomponents:httpclient", v httpcomponents-httpcore = { module = "org.apache.httpcomponents:httpcore", version.ref = "httpcomponents-httpcore" } jakarta-annotation-api = { module = "jakarta.annotation:jakarta.annotation-api", version.ref = "jakarta-annotation" } kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin-stdlib" } - snakeyaml = { module = "org.yaml:snakeyaml", version.ref = "snakeyaml" } ant = { module = "org.apache.ant:ant", version.ref = "ant" } guice = { module = "com.google.inject:guice", version.ref = "guice" } @@ -413,7 +361,7 @@ vertx-core = { module = "io.vertx:vertx-core", version.ref = "vertx" } vertx-web = { module = "io.vertx:vertx-web", version.ref = "vertx" } avro = { module = "org.apache.avro:avro", version.ref = "avro" } avro-protobuf = { module = "org.apache.avro:avro-protobuf", version.ref = "avro" } -joda-time = { module = "joda-time:joda-time", version = "2.10.10" } +joda-time = "joda-time:joda-time:2.10.10" sketches-core = { module = "com.yahoo.datasketches:sketches-core", version.ref = "sketches" } java-semver = { module = "com.github.zafarkhaja:java-semver", version.ref = "java-semver" } oshi-core = { module = "com.github.oshi:oshi-core-java11", version.ref = "oshi" } @@ -423,16 +371,14 @@ dropwizardmetrics-core = { module = "io.dropwizard.metrics:metrics-core", versio dropwizardmetrics-graphite = { module = "io.dropwizard.metrics:metrics-graphite", version.ref = "dropwizardmetrics" } dropwizardmetrics-jvm = { module = "io.dropwizard.metrics:metrics-jvm", version.ref = "dropwizardmetrics" } snappy-java = { module = "org.xerial.snappy:snappy-java", version.ref = "snappy" } -jspecify = { module = "org.jspecify:jspecify", version = "1.0.0" } +jspecify = "org.jspecify:jspecify:1.0.0" reflections = { module = "org.reflections:reflections", version.ref = "reflections" } - # Auth / Security jjwt-api = { module = "io.jsonwebtoken:jjwt-api", version.ref = "jsonwebtoken" } jjwt-impl = { module = "io.jsonwebtoken:jjwt-impl", version.ref = "jsonwebtoken" } jjwt-jackson = { module = "io.jsonwebtoken:jjwt-jackson", version.ref = "jsonwebtoken" } auth0-java-jwt = { module = "com.auth0:java-jwt", version.ref = "auth0-java-jwt" } auth0-jwks-rsa = { module = "com.auth0:jwks-rsa", version.ref = "auth0-jwks-rsa" } - # Jakarta jakarta-ws-rs-api = { module = "jakarta.ws.rs:jakarta.ws.rs-api", version.ref = "jakarta-ws-rs" } jakarta-activation-api = { module = "jakarta.activation:jakarta.activation-api", version.ref = "jakarta-activation" } @@ -441,17 +387,15 @@ jakarta-xml-bind-api = { module = "jakarta.xml.bind:jakarta.xml.bind-api", versi javax-servlet-api = { module = "javax.servlet:javax.servlet-api", version.ref = "javax-servlet" } zt-zip = { module = "org.zeroturnaround:zt-zip", version.ref = "zt-zip" } ipaddress = { module = "com.github.seancfoley:ipaddress", version.ref = "ipaddress" } - # Oxia / etcd oxia-client = { module = "io.github.oxia-db:oxia-client", version.ref = "oxia" } oxia-testcontainers = { module = "io.github.oxia-db:oxia-testcontainers", version.ref = "oxia" } - # Static analysis spotbugs-annotations = { module = "com.github.spotbugs:spotbugs-annotations", version.ref = "spotbugs" } jsr305 = { module = "com.google.code.findbugs:jsr305", version.ref = "jsr305" } - # Test testng = { module = "org.testng:testng", version.ref = "testng" } +mockito-bom = { module = "org.mockito:mockito-bom", version.ref = "mockito" } mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility" } assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" } @@ -467,126 +411,50 @@ zstd-jni = { module = "com.github.luben:zstd-jni", version.ref = "zstd-jni" } lz4-java = { module = "at.yawk.lz4:lz4-java", version.ref = "lz4java" } spring-context = { module = "org.springframework:spring-context", version.ref = "spring" } spring-core = { module = "org.springframework:spring-core", version.ref = "spring" } -spring-aop = { module = "org.springframework:spring-aop", version.ref = "spring" } -spring-jdbc = { module = "org.springframework:spring-jdbc", version.ref = "spring" } -spring-orm = { module = "org.springframework:spring-orm", version.ref = "spring" } kubernetes-client-java = { module = "io.kubernetes:client-java", version.ref = "kubernetesclient" } kubernetes-client-java-api-fluent = { module = "io.kubernetes:client-java-api-fluent", version.ref = "kubernetesclient" } +testcontainers-bom = { module = "org.testcontainers:testcontainers-bom", version.ref = "testcontainers" } testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } -testcontainers-elasticsearch = { module = "org.testcontainers:elasticsearch", version.ref = "testcontainers" } -testcontainers-toxiproxy = { module = "org.testcontainers:toxiproxy", version.ref = "testcontainers" } -testcontainers-localstack = { module = "org.testcontainers:localstack", version.ref = "testcontainers" } -testcontainers-rabbitmq = { module = "org.testcontainers:rabbitmq", version.ref = "testcontainers" } -testcontainers-kafka = { module = "org.testcontainers:kafka", version.ref = "testcontainers" } -testcontainers-mysql = { module = "org.testcontainers:mysql", version.ref = "testcontainers" } -testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainers" } -testcontainers-mongodb = { module = "org.testcontainers:mongodb", version.ref = "testcontainers" } testcontainers-k3s = { module = "org.testcontainers:k3s", version.ref = "testcontainers" } kerby-simplekdc = { module = "org.apache.kerby:kerb-simplekdc", version.ref = "kerby" } json = { module = "org.json:json", version.ref = "json" } - # AWS SDKs +aws-java-sdk-bom = { module = "com.amazonaws:aws-java-sdk-bom", version.ref = "aws-sdk" } aws-java-sdk-core = { module = "com.amazonaws:aws-java-sdk-core", version.ref = "aws-sdk" } aws-java-sdk-sts = { module = "com.amazonaws:aws-java-sdk-sts", version.ref = "aws-sdk" } -aws-sdk2-regions = { module = "software.amazon.awssdk:regions", version.ref = "aws-sdk2" } -aws-sdk2-sts = { module = "software.amazon.awssdk:sts", version.ref = "aws-sdk2" } -aws-sdk2-utils = { module = "software.amazon.awssdk:utils", version.ref = "aws-sdk2" } -dynamodb-streams-kinesis-adapter = { module = "com.amazonaws:dynamodb-streams-kinesis-adapter", version = "1.6.0" } -amazon-kinesis-client = { module = "software.amazon.kinesis:amazon-kinesis-client", version = "2.6.0" } -amazon-kinesis-client-v3 = { module = "software.amazon.kinesis:amazon-kinesis-client", version = "3.1.2" } -amazon-kinesis-producer = { module = "software.amazon.kinesis:amazon-kinesis-producer", version = "1.0.4" } - -# Kafka / Confluent -kafka-clients = { module = "org.apache.kafka:kafka-clients", version.ref = "kafka-client" } -kafka-connect-runtime = { module = "org.apache.kafka:connect-runtime", version.ref = "kafka-client" } -kafka-connect-json = { module = "org.apache.kafka:connect-json", version.ref = "kafka-client" } -kafka-connect-api = { module = "org.apache.kafka:connect-api", version.ref = "kafka-client" } -kafka-connect-transforms = { module = "org.apache.kafka:connect-transforms", version.ref = "kafka-client" } -kafka-connect-file = { module = "org.apache.kafka:connect-file", version.ref = "kafka-client" } -kafka-schema-registry-client = { module = "io.confluent:kafka-schema-registry-client", version.ref = "confluent" } -kafka-avro-serializer = { module = "io.confluent:kafka-avro-serializer", version.ref = "confluent" } -kafka-connect-avro-converter = { module = "io.confluent:kafka-connect-avro-converter", version.ref = "confluent" } - -# ElasticSearch / OpenSearch -opensearch-rest-high-level-client = { module = "org.opensearch.client:opensearch-rest-high-level-client", version.ref = "opensearch" } -elasticsearch-java = { module = "co.elastic.clients:elasticsearch-java", version.ref = "elasticsearch-java" } - -# Debezium -debezium-core = { module = "io.debezium:debezium-core", version.ref = "debezium" } -debezium-connector-mysql = { module = "io.debezium:debezium-connector-mysql", version.ref = "debezium" } -debezium-connector-mongodb = { module = "io.debezium:debezium-connector-mongodb", version.ref = "debezium" } -debezium-connector-postgres = { module = "io.debezium:debezium-connector-postgres", version.ref = "debezium" } -debezium-connector-oracle = { module = "io.debezium:debezium-connector-oracle", version.ref = "debezium" } -debezium-connector-sqlserver = { module = "io.debezium:debezium-connector-sqlserver", version.ref = "debezium" } - -# Database drivers -postgresql-jdbc = { module = "org.postgresql:postgresql", version = "42.7.10" } -sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version = "3.47.1.0" } -clickhouse-jdbc = { module = "com.clickhouse:clickhouse-jdbc", version = "0.4.6" } -mariadb-jdbc = { module = "org.mariadb.jdbc:mariadb-java-client", version = "3.5.5" } -openmldb-jdbc = { module = "com.4paradigm.openmldb:openmldb-jdbc", version = "0.4.4-hotfix1" } -openmldb-native = { module = "com.4paradigm.openmldb:openmldb-native", version = "0.4.4-hotfix1" } - # JClouds jclouds-allblobstore = { module = "org.apache.jclouds:jclouds-allblobstore", version.ref = "jclouds" } jclouds-blobstore = { module = "org.apache.jclouds:jclouds-blobstore", version.ref = "jclouds" } - # Hadoop hadoop-common = { module = "org.apache.hadoop:hadoop-common", version.ref = "hadoop3" } hadoop-hdfs-client = { module = "org.apache.hadoop:hadoop-hdfs-client", version.ref = "hadoop3" } -hadoop-client = { module = "org.apache.hadoop:hadoop-client", version.ref = "hadoop3" } hadoop-minicluster = { module = "org.apache.hadoop:hadoop-minicluster", version.ref = "hadoop3" } - -# HBase -hbase-client = { module = "org.apache.hbase:hbase-client", version.ref = "hbase" } -hbase-common = { module = "org.apache.hbase:hbase-common", version.ref = "hbase" } - -# NoSQL / Search -aerospike-client = { module = "com.aerospike:aerospike-client-bc", version.ref = "aerospike-client" } -cassandra-driver = { module = "com.datastax.cassandra:cassandra-driver-core", version.ref = "cassandra-driver" } failsafe = { module = "dev.failsafe:failsafe", version.ref = "failsafe" } -docker-java-core = { module = "com.github.docker-java:docker-java-core", version = "3.4.1" } -mongodb-driver-reactivestreams = { module = "org.mongodb:mongodb-driver-reactivestreams", version.ref = "mongodb-driver" } -lettuce-core = { module = "io.lettuce:lettuce-core", version.ref = "lettuce" } -solr-solrj = { module = "org.apache.solr:solr-solrj", version.ref = "solr" } -solr-test-framework = { module = "org.apache.solr:solr-test-framework", version.ref = "solr" } -solr-core = { module = "org.apache.solr:solr-core", version.ref = "solr" } - -# Messaging -rabbitmq-amqp-client = { module = "com.rabbitmq:amqp-client", version.ref = "rabbitmq-client" } -nsq-j = { module = "com.sproutsocial:nsq-j", version.ref = "nsq-client" } - -# Time series -influxdb-client-java = { module = "com.influxdb:influxdb-client-java", version.ref = "influxdb-client" } -influxdb-java = { module = "org.influxdb:influxdb-java", version.ref = "influxdb-java" } - -# IO specific -jackson-dataformat-cbor = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor", version.ref = "jackson" } -json-smart = { module = "net.minidev:json-smart", version = "2.5.2" } -json-flattener = { module = "com.github.wnameless.json:json-flattener", version = "0.16.4" } -flatbuffers-java = { module = "com.google.flatbuffers:flatbuffers-java", version = "1.9.0" } -jfairy = { module = "io.codearte.jfairy:jfairy", version = "0.5.9" } -embedded-redis = { module = "com.github.kstyrc:embedded-redis", version = "0.6" } - +docker-java-core = "com.github.docker-java:docker-java-core:3.4.1" +json-smart = "net.minidev:json-smart:2.5.2" +jfairy = "io.codearte.jfairy:jfairy:0.5.9" # Auth athenz-zts-java-client = { module = "com.yahoo.athenz:athenz-zts-java-client", version.ref = "athenz" } athenz-cert-refresher = { module = "com.yahoo.athenz:athenz-cert-refresher", version.ref = "athenz" } athenz-auth-core = { module = "com.yahoo.athenz:athenz-auth-core", version.ref = "athenz" } athenz-zpe-java-client = { module = "com.yahoo.athenz:athenz-zpe-java-client", version.ref = "athenz" } - # Misc bcprov-jdk18on = { module = "org.bouncycastle:bcprov-jdk18on", version.ref = "bouncycastle-bcprov" } commons-logging = { module = "commons-logging:commons-logging", version.ref = "commons-logging" } commons-beanutils = { module = "commons-beanutils:commons-beanutils", version.ref = "commons-beanutils" } commons-configuration2 = { module = "org.apache.commons:commons-configuration2", version.ref = "commons-configuration2" } bookkeeper-stats-api = { module = "org.apache.bookkeeper.stats:bookkeeper-stats-api", version.ref = "bookkeeper" } -datasketches-memory = { module = "org.apache.datasketches:datasketches-memory", version = "2.2.0" } -datasketches-java = { module = "org.apache.datasketches:datasketches-java", version = "6.1.1" } +datasketches-memory = "org.apache.datasketches:datasketches-memory:2.2.0" +datasketches-java = "org.apache.datasketches:datasketches-java:6.1.1" [plugins] lightproto = { id = "io.streamnative.lightproto", version.ref = "lightproto" } -nar = { id = "io.github.merlimat.nar", version = "0.1.3" } -protobuf = { id = "com.google.protobuf", version = "0.9.6" } +nar = "io.github.merlimat.nar:0.1.3" +protobuf = "com.google.protobuf:0.9.6" shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } -rat = { id = "org.nosphere.apache.rat", version = "0.8.1" } -license = { id = "com.github.hierynomus.license", version = "0.16.1" } +rat = "org.nosphere.apache.rat:0.8.1" +spotless = "com.diffplug.spotless:8.4.0" +version-catalog-update = "nl.littlerobots.version-catalog-update:1.1.0" +versions = "com.github.ben-manes.versions:0.53.0" +crlf = "com.github.vlsi.crlf:3.0.1" +idea-ext = "org.jetbrains.gradle.plugin.idea-ext:1.4.1" diff --git a/jclouds-shaded/build.gradle.kts b/jclouds-shaded/build.gradle.kts index a14a5a9d92270..597e32e6e3b0c 100644 --- a/jclouds-shaded/build.gradle.kts +++ b/jclouds-shaded/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.shadow-conventions") } diff --git a/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts b/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts index aea7c270c0942..d4cdc61638f18 100644 --- a/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts +++ b/jetty-upgrade/bookkeeper-prometheus-metrics-provider/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.bookkeeper.stats.api) implementation(libs.simpleclient) diff --git a/jetty-upgrade/bookkeeper-prometheus-metrics-provider/src/main/java/org/apache/pulsar/metrics/prometheus/bookkeeper/package-info.java b/jetty-upgrade/bookkeeper-prometheus-metrics-provider/src/main/java/org/apache/pulsar/metrics/prometheus/bookkeeper/package-info.java index fd5cf0e154a06..6bd1f9d6bf0d3 100644 --- a/jetty-upgrade/bookkeeper-prometheus-metrics-provider/src/main/java/org/apache/pulsar/metrics/prometheus/bookkeeper/package-info.java +++ b/jetty-upgrade/bookkeeper-prometheus-metrics-provider/src/main/java/org/apache/pulsar/metrics/prometheus/bookkeeper/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * A stats provider implementation for BookKeeper that uses Jetty 12. */ diff --git a/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts b/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts index 736c5102bdb1c..7a3104fd20a2e 100644 --- a/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts +++ b/jetty-upgrade/zookeeper-prometheus-metrics/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.zookeeper) implementation(libs.simpleclient) diff --git a/jetty-upgrade/zookeeper-prometheus-metrics/src/main/java/org/apache/pulsar/metrics/prometheus/zookeeper/package-info.java b/jetty-upgrade/zookeeper-prometheus-metrics/src/main/java/org/apache/pulsar/metrics/prometheus/zookeeper/package-info.java index 59e2add5b97be..463b76b562655 100644 --- a/jetty-upgrade/zookeeper-prometheus-metrics/src/main/java/org/apache/pulsar/metrics/prometheus/zookeeper/package-info.java +++ b/jetty-upgrade/zookeeper-prometheus-metrics/src/main/java/org/apache/pulsar/metrics/prometheus/zookeeper/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Prometheus metrics provider for ZooKeeper that is using Jetty 12. */ diff --git a/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts b/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts index cde00ccfa4df4..e0543e6117eae 100644 --- a/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts +++ b/jetty-upgrade/zookeeper-with-patched-admin/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.shadow-conventions") } diff --git a/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/PostCommand.java b/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/PostCommand.java index 14c1f494c74ea..9c91954799b2c 100644 --- a/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/PostCommand.java +++ b/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/PostCommand.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * Command that represents HTTP POST request */ diff --git a/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/package-info.java b/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/package-info.java index 85e5a06e70604..9ac6dfb5eb0ad 100644 --- a/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/package-info.java +++ b/jetty-upgrade/zookeeper-with-patched-admin/src/main/java/org/apache/zookeeper/server/admin/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Admin server for ZooKeeper that is using Jetty 12. */ diff --git a/managed-ledger/build.gradle.kts b/managed-ledger/build.gradle.kts index 58c1583e7056a..83f7cef06f668 100644 --- a/managed-ledger/build.gradle.kts +++ b/managed-ledger/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") alias(libs.plugins.lightproto) } @@ -25,9 +26,7 @@ dependencies { api(project(":pulsar-common")) api(project(":pulsar-metadata")) implementation(project(":pulsar-opentelemetry")) - implementation(libs.bookkeeper.server) { - exclude(group = "org.slf4j") - } + implementation(libs.bookkeeper.server) implementation(libs.guava) implementation(libs.roaringbitmap) implementation(libs.jctools.core) @@ -42,5 +41,4 @@ dependencies { testImplementation(libs.opentelemetry.sdk.testing) testImplementation(libs.opentelemetry.sdk.extension.autoconfigure) testImplementation(libs.zookeeper) { artifact { classifier = "tests" } } - testImplementation(project(path = ":", configuration = "filteredBkServerTestJar")) } diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java index 6865bf1bbe2ce..00277459a9cec 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerBkTest.java @@ -42,8 +42,8 @@ import lombok.Cleanup; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.client.BookKeeper; -import org.apache.bookkeeper.client.BookKeeperTestClient; import org.apache.bookkeeper.client.LedgerEntry; +import org.apache.bookkeeper.client.PulsarBookKeeperTestClient; import org.apache.bookkeeper.client.api.DigestType; import org.apache.bookkeeper.mledger.AsyncCallbacks; import org.apache.bookkeeper.mledger.AsyncCallbacks.AddEntryCallback; @@ -133,7 +133,7 @@ public void testBookieFailure() throws Exception { bkc.close(); metadataStore.unsetAlwaysFail(); - bkc = new BookKeeperTestClient(baseClientConf); + bkc = new PulsarBookKeeperTestClient(baseClientConf); int port = startNewBookie(); // Reconnect a new bk client diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java b/managed-ledger/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java index d3a2e83ba891a..07d8f7cbd27cb 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This file is derived from BookKeeperClusterTestCase from Apache BookKeeper * http://bookkeeper.apache.org @@ -48,8 +49,8 @@ import java.util.stream.Collectors; import org.apache.bookkeeper.bookie.Bookie; import org.apache.bookkeeper.bookie.BookieException; -import org.apache.bookkeeper.client.BookKeeperTestClient; -import org.apache.bookkeeper.client.TestStatsProvider; +import org.apache.bookkeeper.client.PulsarBookKeeperTestClient; +import org.apache.bookkeeper.client.PulsarBookKeeperTestStatsProvider; import org.apache.bookkeeper.common.allocator.PoolingPolicy; import org.apache.bookkeeper.conf.AbstractConfiguration; import org.apache.bookkeeper.conf.ClientConfiguration; @@ -101,7 +102,7 @@ public void handleTestMethodName(Method method) { private final List servers = new LinkedList<>(); protected int numBookies; - protected BookKeeperTestClient bkc; + protected PulsarBookKeeperTestClient bkc; protected boolean useUUIDasBookieId = true; /* @@ -267,7 +268,7 @@ protected void startBKCluster(String metadataServiceUri) throws Exception { baseClientConf.setAllocatorPoolingPolicy(PoolingPolicy.UnpooledHeap); if (numBookies > 0) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } // Create Bookie Servers (B1, B2, B3) @@ -684,7 +685,7 @@ protected ServerTester startBookie(ServerConfiguration conf) ServerTester tester = new ServerTester(conf); if (bkc == null) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } BookieId address = tester.getServer().getBookieId(); @@ -725,7 +726,7 @@ protected ServerTester startBookie(ServerConfiguration conf, final Bookie b) throws Exception { ServerTester tester = new ServerTester(conf, b); if (bkc == null) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } BookieId address = tester.getServer().getBookieId(); Future waitForBookie = conf.isForceReadOnlyBookie() @@ -846,11 +847,11 @@ public void resetBookieOpLoggers() { servers.forEach(t -> t.getStatsProvider().clear()); } - public TestStatsProvider getStatsProvider(BookieId addr) throws UnknownHostException { + public PulsarBookKeeperTestStatsProvider getStatsProvider(BookieId addr) throws UnknownHostException { return byAddress(addr).get().getStatsProvider(); } - public TestStatsProvider getStatsProvider(int index) throws Exception { + public PulsarBookKeeperTestStatsProvider getStatsProvider(int index) throws Exception { return servers.get(index).getStatsProvider(); } diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java b/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java index aa618e2639c4f..51e5c4a526f3e 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/test/ZooKeeperUtil.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This file is derived from ZooKeeperUtil from Apache BookKeeper * http://bookkeeper.apache.org diff --git a/microbench/build.gradle.kts b/microbench/build.gradle.kts index 5d4e130453583..cb6529fa28fcf 100644 --- a/microbench/build.gradle.kts +++ b/microbench/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - id("pulsar.shadow-conventions") + id("pulsar.java-conventions") + alias(libs.plugins.shadow) } dependencies { @@ -32,9 +33,16 @@ dependencies { annotationProcessor("org.openjdk.jmh:jmh-generator-annprocess:1.37") } +// Don't build the benchmarks fat JAR during ./gradlew assemble — only on demand +shadow { + addShadowJarToAssembleLifecycle.set(false) +} + tasks.shadowJar { archiveClassifier.set("benchmarks") isZip64 = true + mergeServiceFiles() + exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA") manifest { attributes("Main-Class" to "org.openjdk.jmh.Main") } diff --git a/microbench/src/main/java/org/apache/pulsar/broker/qos/package-info.java b/microbench/src/main/java/org/apache/pulsar/broker/qos/package-info.java index ccea21a210f86..5f473cd0a823f 100644 --- a/microbench/src/main/java/org/apache/pulsar/broker/qos/package-info.java +++ b/microbench/src/main/java/org/apache/pulsar/broker/qos/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Benchmarks for Pulsar broker Quality of Service (QoS) related classes. */ diff --git a/pulsar-bom/build.gradle.kts b/pulsar-bom/build.gradle.kts index 982d117294a7d..12ee01d6b341a 100644 --- a/pulsar-bom/build.gradle.kts +++ b/pulsar-bom/build.gradle.kts @@ -25,6 +25,9 @@ plugins { `java-platform` } +group = "org.apache.pulsar" +version = the().named("libs").findVersion("pulsar").get().requiredVersion + // Allow the platform to depend on other projects javaPlatform { allowDependencies() @@ -96,11 +99,15 @@ dependencies { api(project(":bouncy-castle:bouncy-castle-bc")) api(project(":bouncy-castle:bcfips")) - // Modules only available in full build (not -PcoreModules) - findProject(":pulsar-client-auth-athenz")?.let { api(it) } - findProject(":pulsar-broker-auth-athenz")?.let { api(it) } - findProject(":pulsar-functions:pulsar-functions-local-runner-shaded")?.let { api(it) } - findProject(":tiered-storage:tiered-storage-jcloud")?.let { api(it) } - findProject(":tiered-storage:tiered-storage-file-system")?.let { api(it) } + // Athenz auth + api(project(":pulsar-client-auth-athenz")) + api(project(":pulsar-broker-auth-athenz")) + + // Functions + api(project(":pulsar-functions:pulsar-functions-local-runner-shaded")) + + // Tiered storage + api(project(":tiered-storage:tiered-storage-jcloud")) + api(project(":tiered-storage:tiered-storage-file-system")) } } diff --git a/pulsar-broker-auth-athenz/build.gradle.kts b/pulsar-broker-auth-athenz/build.gradle.kts index b71cc3092d05a..7438ce5202549 100644 --- a/pulsar-broker-auth-athenz/build.gradle.kts +++ b/pulsar-broker-auth-athenz/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-broker")) compileOnly(libs.opentelemetry.api) diff --git a/pulsar-broker-auth-oidc/build.gradle.kts b/pulsar-broker-auth-oidc/build.gradle.kts index 6951f032f5e33..9c324d9628fef 100644 --- a/pulsar-broker-auth-oidc/build.gradle.kts +++ b/pulsar-broker-auth-oidc/build.gradle.kts @@ -17,6 +17,11 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") +} + dependencies { implementation(project(":pulsar-broker-common")) implementation(libs.auth0.java.jwt) diff --git a/pulsar-broker-auth-sasl/build.gradle.kts b/pulsar-broker-auth-sasl/build.gradle.kts index d36067b35237f..794851b2a97ba 100644 --- a/pulsar-broker-auth-sasl/build.gradle.kts +++ b/pulsar-broker-auth-sasl/build.gradle.kts @@ -17,6 +17,11 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") +} + // Each test class gets its own JVM fork because AuthenticationSasl has static JAAS state // (jaasCredentialsContainer, initializedJAAS) that leaks between test classes sharing a fork. tasks.withType { diff --git a/pulsar-broker-common/build.gradle.kts b/pulsar-broker-common/build.gradle.kts index e6c1f514526f4..9fee76bc0f0d0 100644 --- a/pulsar-broker-common/build.gradle.kts +++ b/pulsar-broker-common/build.gradle.kts @@ -17,13 +17,16 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") +} + dependencies { api(project(":pulsar-metadata")) implementation(libs.guava) implementation(libs.commons.lang3) - implementation(libs.bookkeeper.server) { - exclude(group = "org.slf4j") - } + implementation(libs.bookkeeper.server) implementation(libs.opentelemetry.api) implementation(libs.simpleclient) implementation(libs.caffeine) diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/package-info.java index 18616b10ac599..6a1a3d989f4d4 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/metrics/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/metrics/package-info.java index acfc53788ee10..f88dad25793df 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/metrics/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/metrics/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/package-info.java index 3104a84ec7f22..f941b5eabdd17 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/package-info.java index 4bdf8e66bc47c..fb3ce06ef1a00 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/package-info.java index d17d8d91f0adb..008662e7d2f38 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/package-info.java index db36dc5e66e19..71307474fd44c 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/package-info.java index 4df99bf52ada3..85c93713ce619 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/package-info.java index e23a45fc39fd5..c62d7f79c1a19 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/resources/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/topiclistlimit/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/topiclistlimit/package-info.java index 42911acf708bd..f6e736f31843e 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/topiclistlimit/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/topiclistlimit/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Topic Listing memory limiter, PIP-442 */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/package-info.java index 7f1cdeda66ffc..0599ded15a6bb 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/package-info.java index 1c201419df475..49c6de4da5050 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java index 71f2737abb426..2c9fd35b946d7 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar additional servlet plugin. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/anonymizer/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/anonymizer/package-info.java index 7b1c506bf7251..bbd4a98b87911 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/anonymizer/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/anonymizer/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/package-info.java index 7e2494b1537a7..ba8dbc5170944 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/common/configuration/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/zookeeper/package-info.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/zookeeper/package-info.java index 18f76f21e54d5..0d635fd2d769a 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/zookeeper/package-info.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/zookeeper/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-broker/build.gradle.kts b/pulsar-broker/build.gradle.kts index 9baa9043322a3..b0390397ed1e5 100644 --- a/pulsar-broker/build.gradle.kts +++ b/pulsar-broker/build.gradle.kts @@ -18,6 +18,8 @@ */ plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") alias(libs.plugins.protobuf) alias(libs.plugins.lightproto) } @@ -107,7 +109,6 @@ dependencies { testImplementation(project(path = ":managed-ledger", configuration = "testJar")) testImplementation(project(path = ":pulsar-metadata", configuration = "testJar")) testImplementation(project(path = ":pulsar-package-management:pulsar-package-core", configuration = "testJar")) - testImplementation(project(path = ":", configuration = "filteredBkServerTestJar")) testImplementation(libs.bookkeeper.common) { artifact { classifier = "tests" } } testImplementation(libs.zookeeper) { artifact { classifier = "tests" } } testImplementation(project(":pulsar-functions:pulsar-functions-local-runner-original")) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/package-info.java index 89ec9c1b4ae86..4d1ddc44c2cf9 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar broker interceptor. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/package-info.java index 3c18262d8a3bf..ebefa94ca5678 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar broker protocol handlers. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/package-info.java index 1078d86894efe..92602b0860e80 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar broker Quality of Service (QoS) related classes. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/storage/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/storage/package-info.java index 275127607a1a2..2bb418f575a43 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/storage/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/storage/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * The storage layer for Apache Pulsar. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/package-info.java index 605459e0d0172..f20f793b7cb83 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Tools for broker related operations. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/package-info.java index 790c51ae65450..3466cf2162750 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * The implementation of a transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/package-info.java index 4cf5549ffd52c..c1a7bf587308e 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/metadata/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * The transaction buffer snapshot metadata. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/package-info.java index c588a1319f03c..28b7801e56672 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/buffer/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of a transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/buffer/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/buffer/package-info.java index 2264a08ab08d1..217f006a822d4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/buffer/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/buffer/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Exceptions thrown when encountering errors in transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/coordinator/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/coordinator/package-info.java index 54fee91d16e1f..a9a7e42fa95c1 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/coordinator/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/coordinator/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Exceptions thrown when encountering errors in transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/package-info.java index 3c329cf0ed55e..8f39cf46fd595 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Exceptions thrown when encountering errors in transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/pendingack/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/pendingack/package-info.java index 37b05827db204..ac8e71b23930d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/pendingack/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/exception/pendingack/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Exceptions thrown when encountering errors in transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/exceptions/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/exceptions/package-info.java index 0a970f2a96228..c3f85deb3ec42 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/exceptions/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/exceptions/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * The implementation for pending ack exceptions. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/package-info.java index 4315a5d0a01c7..be7b470d451af 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * The implementation for processing pending acks in transactions. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/package-info.java index 95520028df4a9..a0aa7639d9e34 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Component for processing pending acks for transactions. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/recover/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/recover/package-info.java index bb07ed283ec94..ecb50563a34df 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/recover/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/recover/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of a transaction recover tracker. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/timeout/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/timeout/package-info.java index 7949c4359e92c..3d92c2624fd3f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/timeout/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/timeout/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of a transaction buffer. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/util/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/util/package-info.java index 004767e258c2e..14a0c65b95e33 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/util/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/util/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of a transaction tools. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java index a18427a4fa6db..6e797df0cbd5b 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar broker servlet plugin. */ diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/common/naming/TopicBundleAssignmentFactory.java b/pulsar-broker/src/main/java/org/apache/pulsar/common/naming/TopicBundleAssignmentFactory.java index 164d9a3f1deef..1d40002b8d07d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/common/naming/TopicBundleAssignmentFactory.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/common/naming/TopicBundleAssignmentFactory.java @@ -18,6 +18,7 @@ */ package org.apache.pulsar.common.naming; +import com.google.common.annotations.VisibleForTesting; import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.common.util.Reflections; @@ -28,6 +29,11 @@ public class TopicBundleAssignmentFactory { private static volatile TopicBundleAssignmentStrategy strategy; + @VisibleForTesting + static void reset() { + strategy = null; + } + public static TopicBundleAssignmentStrategy create(PulsarService pulsar) { if (strategy != null) { return strategy; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java b/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java index 219498284e0ed..51da8ba099779 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * This file is derived from LocalBookkeeperEnsemble from Apache BookKeeper * http://bookkeeper.apache.org diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorMockTest.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorMockTest.java index fe491ce6adb5e..24a0e7db4ef15 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorMockTest.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorMockTest.java @@ -1,4 +1,3 @@ - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file 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 7c807752fe35d..8a76d113da6d2 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 @@ -1,179 +1,179 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -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 java.util.UUID; -import java.util.concurrent.atomic.AtomicInteger; -import org.apache.pulsar.client.admin.PulsarAdminException; -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.AutoSubscriptionCreationOverride; -import org.awaitility.Awaitility; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -@Test(groups = "broker") -public class BrokerServiceAutoSubscriptionCreationTest extends BrokerTestBase { - - private final AtomicInteger testId = new AtomicInteger(0); - - @BeforeClass - @Override - protected void setup() throws Exception { - super.baseSetup(); - } - - @AfterClass(alwaysRun = true) - @Override - protected void cleanup() throws Exception { - super.internalCleanup(); - } - - @AfterMethod(alwaysRun = true) - protected void cleanupTest() throws Exception { - pulsar.getAdminClient().namespaces().removeAutoSubscriptionCreation("prop/ns-abc"); - } - - @Test - public void testAutoSubscriptionCreationDisable() throws Exception { - pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); - - final String topicName = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); - final String subscriptionName = "test-subtopic-sub"; - - admin.topics().createNonPartitionedTopic(topicName); - - try { - pulsarClient.newConsumer().topic(topicName).subscriptionName(subscriptionName).subscribe(); - fail("Subscribe operation should have failed"); - } catch (Exception e) { - assertTrue(e instanceof PulsarClientException); - } - assertFalse(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); - } - - @Test - public void testSubscriptionCreationWithAutoCreationDisable() throws Exception { - pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); - - final String topicName = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); - final String subscriptionName = "test-subtopic-sub-1"; - - admin.topics().createNonPartitionedTopic(topicName); - assertFalse(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); - - // Create the subscription by PulsarAdmin - admin.topics().createSubscription(topicName, subscriptionName, MessageId.earliest); - assertTrue(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); - - // Subscribe operation should be successful - pulsarClient.newConsumer().topic(topicName).subscriptionName(subscriptionName).subscribe(); - } - - @Test - public void testAutoSubscriptionCreationNamespaceAllowOverridesBroker() throws Exception { - final String topic = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); - final String subscriptionName = "test-subtopic-sub-2"; - final TopicName topicName = TopicName.get(topic); - - admin.topics().createNonPartitionedTopic(topicName.toString()); - - pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); - AutoSubscriptionCreationOverride autoSubscriptionCreationOverride = AutoSubscriptionCreationOverride.builder() - .allowAutoSubscriptionCreation(true) - .build(); - pulsar.getAdminClient().namespaces().setAutoSubscriptionCreation(topicName.getNamespace(), - autoSubscriptionCreationOverride); - Assert.assertEquals(pulsar.getAdminClient().namespaces().getAutoSubscriptionCreation(topicName.getNamespace()), - autoSubscriptionCreationOverride); - - // Subscribe operation should be successful - pulsarClient.newConsumer().topic(topicName.toString()).subscriptionName(subscriptionName).subscribe(); - assertTrue(admin.topics().getSubscriptions(topicName.toString()).contains(subscriptionName)); - } - - @Test - public void testAutoSubscriptionCreationNamespaceDisallowOverridesBroker() throws Exception { - final String topic = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); - final String subscriptionName = "test-subtopic-sub-3"; - final TopicName topicName = TopicName.get(topic); - - admin.topics().createNonPartitionedTopic(topicName.toString()); - - pulsar.getConfiguration().setAllowAutoSubscriptionCreation(true); - AutoSubscriptionCreationOverride autoSubscriptionCreationOverride = AutoSubscriptionCreationOverride.builder() - .allowAutoSubscriptionCreation(false) - .build(); - pulsar.getAdminClient().namespaces().setAutoSubscriptionCreation(topicName.getNamespace(), - autoSubscriptionCreationOverride); - Assert.assertEquals(pulsar.getAdminClient().namespaces().getAutoSubscriptionCreation(topicName.getNamespace()), - autoSubscriptionCreationOverride); - - try { - pulsarClient.newConsumer().topic(topicName.toString()).subscriptionName(subscriptionName).subscribe(); - fail("Subscribe operation should have failed"); - } catch (Exception e) { - assertTrue(e instanceof PulsarClientException); - } - assertFalse(admin.topics().getSubscriptions(topicName.toString()).contains(subscriptionName)); - } - - @Test - public void testNonPersistentTopicSubscriptionCreationWithAutoCreationDisable() throws Exception { - pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); - - final String topicName = "non-persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); - final String subscriptionName = "test-subtopic-sub"; - - admin.topics().createNonPartitionedTopic(topicName); - - // Subscribe operation should be successful - pulsarClient.newConsumer().topic(topicName).subscriptionName(subscriptionName).subscribe(); - assertTrue(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); - } - - @Test - public void testDynamicConfigurationTopicAutoSubscriptionCreation() - throws PulsarAdminException, PulsarClientException { - pulsar.getConfiguration().setAllowAutoTopicCreation(false); - pulsar.getConfiguration().setAllowAutoSubscriptionCreation(true); - String allowAutoSubscriptionCreation = "allowAutoSubscriptionCreation"; - admin.brokers().updateDynamicConfiguration(allowAutoSubscriptionCreation, "false"); - String topicString = "persistent://prop/ns-abc/non-partitioned-topic" + UUID.randomUUID(); - String subscriptionName = "non-partitioned-topic-sub"; - admin.topics().createNonPartitionedTopic(topicString); - Assert.assertThrows(PulsarClientException.class, - ()-> pulsarClient.newConsumer().topic(topicString).subscriptionName(subscriptionName).subscribe()); - admin.brokers().updateDynamicConfiguration(allowAutoSubscriptionCreation, "true"); - Awaitility.await().untilAsserted(() -> { - Assert.assertEquals(admin.brokers().getAllDynamicConfigurations() - .get(allowAutoSubscriptionCreation), "true"); - pulsarClient.newConsumer().topic(topicString).subscriptionName(subscriptionName).subscribe(); - assertTrue(admin.topics().getSubscriptions(topicString).contains(subscriptionName)); - }); - } - -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +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 java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; +import org.apache.pulsar.client.admin.PulsarAdminException; +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.AutoSubscriptionCreationOverride; +import org.awaitility.Awaitility; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +@Test(groups = "broker") +public class BrokerServiceAutoSubscriptionCreationTest extends BrokerTestBase { + + private final AtomicInteger testId = new AtomicInteger(0); + + @BeforeClass + @Override + protected void setup() throws Exception { + super.baseSetup(); + } + + @AfterClass(alwaysRun = true) + @Override + protected void cleanup() throws Exception { + super.internalCleanup(); + } + + @AfterMethod(alwaysRun = true) + protected void cleanupTest() throws Exception { + pulsar.getAdminClient().namespaces().removeAutoSubscriptionCreation("prop/ns-abc"); + } + + @Test + public void testAutoSubscriptionCreationDisable() throws Exception { + pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); + + final String topicName = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); + final String subscriptionName = "test-subtopic-sub"; + + admin.topics().createNonPartitionedTopic(topicName); + + try { + pulsarClient.newConsumer().topic(topicName).subscriptionName(subscriptionName).subscribe(); + fail("Subscribe operation should have failed"); + } catch (Exception e) { + assertTrue(e instanceof PulsarClientException); + } + assertFalse(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); + } + + @Test + public void testSubscriptionCreationWithAutoCreationDisable() throws Exception { + pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); + + final String topicName = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); + final String subscriptionName = "test-subtopic-sub-1"; + + admin.topics().createNonPartitionedTopic(topicName); + assertFalse(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); + + // Create the subscription by PulsarAdmin + admin.topics().createSubscription(topicName, subscriptionName, MessageId.earliest); + assertTrue(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); + + // Subscribe operation should be successful + pulsarClient.newConsumer().topic(topicName).subscriptionName(subscriptionName).subscribe(); + } + + @Test + public void testAutoSubscriptionCreationNamespaceAllowOverridesBroker() throws Exception { + final String topic = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); + final String subscriptionName = "test-subtopic-sub-2"; + final TopicName topicName = TopicName.get(topic); + + admin.topics().createNonPartitionedTopic(topicName.toString()); + + pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); + AutoSubscriptionCreationOverride autoSubscriptionCreationOverride = AutoSubscriptionCreationOverride.builder() + .allowAutoSubscriptionCreation(true) + .build(); + pulsar.getAdminClient().namespaces().setAutoSubscriptionCreation(topicName.getNamespace(), + autoSubscriptionCreationOverride); + Assert.assertEquals(pulsar.getAdminClient().namespaces().getAutoSubscriptionCreation(topicName.getNamespace()), + autoSubscriptionCreationOverride); + + // Subscribe operation should be successful + pulsarClient.newConsumer().topic(topicName.toString()).subscriptionName(subscriptionName).subscribe(); + assertTrue(admin.topics().getSubscriptions(topicName.toString()).contains(subscriptionName)); + } + + @Test + public void testAutoSubscriptionCreationNamespaceDisallowOverridesBroker() throws Exception { + final String topic = "persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); + final String subscriptionName = "test-subtopic-sub-3"; + final TopicName topicName = TopicName.get(topic); + + admin.topics().createNonPartitionedTopic(topicName.toString()); + + pulsar.getConfiguration().setAllowAutoSubscriptionCreation(true); + AutoSubscriptionCreationOverride autoSubscriptionCreationOverride = AutoSubscriptionCreationOverride.builder() + .allowAutoSubscriptionCreation(false) + .build(); + pulsar.getAdminClient().namespaces().setAutoSubscriptionCreation(topicName.getNamespace(), + autoSubscriptionCreationOverride); + Assert.assertEquals(pulsar.getAdminClient().namespaces().getAutoSubscriptionCreation(topicName.getNamespace()), + autoSubscriptionCreationOverride); + + try { + pulsarClient.newConsumer().topic(topicName.toString()).subscriptionName(subscriptionName).subscribe(); + fail("Subscribe operation should have failed"); + } catch (Exception e) { + assertTrue(e instanceof PulsarClientException); + } + assertFalse(admin.topics().getSubscriptions(topicName.toString()).contains(subscriptionName)); + } + + @Test + public void testNonPersistentTopicSubscriptionCreationWithAutoCreationDisable() throws Exception { + pulsar.getConfiguration().setAllowAutoSubscriptionCreation(false); + + final String topicName = "non-persistent://prop/ns-abc/test-subtopic-" + testId.getAndIncrement(); + final String subscriptionName = "test-subtopic-sub"; + + admin.topics().createNonPartitionedTopic(topicName); + + // Subscribe operation should be successful + pulsarClient.newConsumer().topic(topicName).subscriptionName(subscriptionName).subscribe(); + assertTrue(admin.topics().getSubscriptions(topicName).contains(subscriptionName)); + } + + @Test + public void testDynamicConfigurationTopicAutoSubscriptionCreation() + throws PulsarAdminException, PulsarClientException { + pulsar.getConfiguration().setAllowAutoTopicCreation(false); + pulsar.getConfiguration().setAllowAutoSubscriptionCreation(true); + String allowAutoSubscriptionCreation = "allowAutoSubscriptionCreation"; + admin.brokers().updateDynamicConfiguration(allowAutoSubscriptionCreation, "false"); + String topicString = "persistent://prop/ns-abc/non-partitioned-topic" + UUID.randomUUID(); + String subscriptionName = "non-partitioned-topic-sub"; + admin.topics().createNonPartitionedTopic(topicString); + Assert.assertThrows(PulsarClientException.class, + ()-> pulsarClient.newConsumer().topic(topicString).subscriptionName(subscriptionName).subscribe()); + admin.brokers().updateDynamicConfiguration(allowAutoSubscriptionCreation, "true"); + Awaitility.await().untilAsserted(() -> { + Assert.assertEquals(admin.brokers().getAllDynamicConfigurations() + .get(allowAutoSubscriptionCreation), "true"); + pulsarClient.newConsumer().topic(topicString).subscriptionName(subscriptionName).subscribe(); + assertTrue(admin.topics().getSubscriptions(topicString).contains(subscriptionName)); + }); + } + +} diff --git a/pulsar-broker/src/test/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java similarity index 72% rename from pulsar-broker/src/test/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java rename to pulsar-broker/src/test/java/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java index b371106cad85a..1331800963f1b 100644 --- a/pulsar-broker/src/test/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/common/naming/TopicBundleAssignmentStrategyTest.java @@ -20,10 +20,8 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; - import com.google.common.collect.BoundType; import com.google.common.collect.Range; - import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.broker.ServiceConfiguration; import org.testng.Assert; @@ -34,16 +32,20 @@ public class TopicBundleAssignmentStrategyTest { @Test public void testStrategyFactory() { ServiceConfiguration conf = new ServiceConfiguration(); - conf.setTopicBundleAssignmentStrategy( - "org.apache.pulsar.common.naming.TopicBundleAssignmentStrategyTest$TestStrategy"); + conf.setTopicBundleAssignmentStrategy(TestStrategy.class.getName()); PulsarService pulsarService = mock(PulsarService.class); doReturn(conf).when(pulsarService).getConfiguration(); - TopicBundleAssignmentStrategy strategy = TopicBundleAssignmentFactory.create(pulsarService); - NamespaceBundle bundle = strategy.findBundle(null, null); - Range keyRange = Range.range(0L, BoundType.CLOSED, 0xffffffffL, BoundType.CLOSED); - String range = String.format("0x%08x_0x%08x", keyRange.lowerEndpoint(), keyRange.upperEndpoint()); - Assert.assertEquals(bundle.getBundleRange(), range); - Assert.assertEquals(bundle.getNamespaceObject(), NamespaceName.get("my/test")); + TopicBundleAssignmentFactory.reset(); + try { + TopicBundleAssignmentStrategy strategy = TopicBundleAssignmentFactory.create(pulsarService); + NamespaceBundle bundle = strategy.findBundle(null, null); + Range keyRange = Range.range(0L, BoundType.CLOSED, 0xffffffffL, BoundType.CLOSED); + String range = String.format("0x%08x_0x%08x", keyRange.lowerEndpoint(), keyRange.upperEndpoint()); + Assert.assertEquals(bundle.getBundleRange(), range); + Assert.assertEquals(bundle.getNamespaceObject(), NamespaceName.get("my/test")); + } finally { + TopicBundleAssignmentFactory.reset(); + } } public static class TestStrategy implements TopicBundleAssignmentStrategy { @@ -56,7 +58,7 @@ public NamespaceBundle findBundle(TopicName topicName, NamespaceBundles namespac @Override public void init(PulsarService pulsarService) { - + } } } diff --git a/pulsar-build/run_integration_group_gradle.sh b/pulsar-build/run_integration_group_gradle.sh index 2acbdcb56419d..388aa16dcfe50 100755 --- a/pulsar-build/run_integration_group_gradle.sh +++ b/pulsar-build/run_integration_group_gradle.sh @@ -35,9 +35,9 @@ function gradle_integration_test() { fi local failfast_args="" if [ $use_fail_fast -eq 1 ]; then - failfast_args="-DtestFailFast=true" + failfast_args="-PtestFailFast=true" else - failfast_args="-DtestFailFast=false" + failfast_args="-PtestFailFast=false" fi local coverage_args="" @@ -135,18 +135,7 @@ test_group_pulsar_io_ora() { gradle_integration_test -PintegrationTestSuiteFile=pulsar-io-ora-source.xml -PtestGroups=source -PtestRetryCount=0 "$@" } -# Shade tests are handled differently — they test the shaded JARs -test_group_shade_build() { - echo "::group::Build shaded JARs" - ./gradlew --no-configuration-cache \ - :pulsar-client-shaded:shadowJar \ - :pulsar-client-admin-shaded:shadowJar \ - :pulsar-client-all:shadowJar - echo "::endgroup::" -} - test_group_shade_run() { - local runtime_jdk="${RUNTIME_JDK:-}" echo "::group::Run shade tests" ./gradlew --no-configuration-cache \ :tests:pulsar-client-shade-test:test \ diff --git a/pulsar-build/run_unit_group_gradle.sh b/pulsar-build/run_unit_group_gradle.sh index 51969f698a00b..72d0ff4e14c66 100755 --- a/pulsar-build/run_unit_group_gradle.sh +++ b/pulsar-build/run_unit_group_gradle.sh @@ -37,9 +37,9 @@ function gradle_test() { local failfast_args="" local continue_args="" if [ $use_fail_fast -eq 1 ]; then - failfast_args="-DtestFailFast=true" + failfast_args="-PtestFailFast=true" else - failfast_args="-DtestFailFast=false" + failfast_args="-PtestFailFast=false" # When fail-fast is off, use --continue so Gradle runs all test tasks # even if one module's tests fail (similar to Maven's --fail-at-end). continue_args="--continue" @@ -140,6 +140,9 @@ function test_group_other() { -x :pulsar-io:pulsar-io-data-generator:test \ -x :pulsar-io:pulsar-io-batch-data-generator:test \ -x :pulsar-io:pulsar-io-batch-discovery-triggerers:test \ + -x :tests:pulsar-client-admin-shade-test:test \ + -x :tests:pulsar-client-all-shade-test:test \ + -x :tests:pulsar-client-shade-test:test \ test # Run DnsResolverTest separately since it relies on static field values diff --git a/pulsar-cli-utils/build.gradle.kts b/pulsar-cli-utils/build.gradle.kts index 58732736a74f7..74d5aa1babb1c 100644 --- a/pulsar-cli-utils/build.gradle.kts +++ b/pulsar-cli-utils/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.picocli) implementation(libs.commons.lang3) diff --git a/pulsar-client-admin-api/build.gradle.kts b/pulsar-client-admin-api/build.gradle.kts index f66b759a2262c..bb17ceff64086 100644 --- a/pulsar-client-admin-api/build.gradle.kts +++ b/pulsar-client-admin-api/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-client-api")) implementation(libs.jackson.annotations) diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/utils/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/utils/package-info.java index 54479200dc6a4..284eae6c63c87 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/utils/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/utils/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helpers which provide useful functionality for the implementation of Pulsar Client API. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/conf/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/conf/package-info.java index 95ac74bd9e6ec..2c53baefb00c0 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/conf/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/conf/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes for internal configuration. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/package-info.java index ec5532250d683..3853c2346b993 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/functions/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/io/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/io/package-info.java index 654582b4c010f..b96961897edb7 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/io/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/io/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/migration/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/migration/package-info.java index 87bb87c72b655..0f6cd9fec1ed9 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/migration/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/migration/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/naming/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/naming/package-info.java index f451c124a7a9b..2f4b703ed5026 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/naming/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/naming/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/partition/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/partition/package-info.java index 039efa2927e55..eb5b01b399b90 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/partition/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/partition/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/package-info.java index d00003e4eeb53..eaf46d7de9c68 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java index 30cf028e09d29..322da071bce9f 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/package-info.java index bf91382f248c3..8d64810ae6dcc 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java index 22f963e0e09bd..18cd7924b8a2a 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/stats/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/stats/package-info.java index 194220b47d823..b727904cb8b02 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/stats/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/stats/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java index 66faf846ec752..a220dc9c2f4ec 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Packages management general classes. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/exceptions/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/exceptions/package-info.java index 6f56950e09878..4b17b513c55e8 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/exceptions/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/packages/management/core/exceptions/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Exceptions of the packages management service thrown. */ diff --git a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java index 0dcb9fe333edc..3511685a2f431 100644 --- a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java +++ b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-client-admin-shaded/build.gradle.kts b/pulsar-client-admin-shaded/build.gradle.kts index e1da303e84e2a..c4d8b9edbc8dd 100644 --- a/pulsar-client-admin-shaded/build.gradle.kts +++ b/pulsar-client-admin-shaded/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.client-shade-conventions") } diff --git a/pulsar-client-admin/build.gradle.kts b/pulsar-client-admin/build.gradle.kts index 6b01d180bfdc4..89a71c9a26d68 100644 --- a/pulsar-client-admin/build.gradle.kts +++ b/pulsar-client-admin/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-client-admin-api")) implementation(project(":pulsar-client-original")) diff --git a/pulsar-client-all/build.gradle.kts b/pulsar-client-all/build.gradle.kts index 9b32c779138c1..f661d5f3b6ac7 100644 --- a/pulsar-client-all/build.gradle.kts +++ b/pulsar-client-all/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.client-shade-conventions") } diff --git a/pulsar-client-api/build.gradle.kts b/pulsar-client-api/build.gradle.kts index b03f077031728..fa77751849180 100644 --- a/pulsar-client-api/build.gradle.kts +++ b/pulsar-client-api/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(libs.protobuf.java) compileOnly(libs.opentelemetry.api) diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/package-info.java index c702effb0826b..e212d465007f7 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar interceptors. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/package-info.java index 57896b5e27235..b0a49d284e5c3 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client API. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/package-info.java index 2357e83e55880..bb685b6a131db 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/schema/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Schema definitions for Pulsar Client API. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/package-info.java index 654030bf57460..f72eb90f7eb2f 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/transaction/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar transaction related API. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/package-info.java index 1747e24e6fe3d..4566079c5d8e0 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/internal/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helpers which provide useful functionality for the implementation of Pulsar Client API. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/common/api/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/common/api/package-info.java index e5efc7b6cde26..150d6118f47a4 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/common/api/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/common/api/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Common data classes used in the Pulsar Client API. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/common/classification/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/common/classification/package-info.java index 645fbb49d0eef..97e70ba734ba0 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/common/classification/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/common/classification/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Annotations used across the whole project. */ diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/common/schema/package-info.java b/pulsar-client-api/src/main/java/org/apache/pulsar/common/schema/package-info.java index 4a0f1a631ac85..74736209c21d5 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/common/schema/package-info.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/common/schema/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This package contains data structures for schema definitions used in the Pulsar Client API. */ diff --git a/pulsar-client-auth-athenz/build.gradle.kts b/pulsar-client-auth-athenz/build.gradle.kts index b0ed35d3920d5..7f8b24b3e2567 100644 --- a/pulsar-client-auth-athenz/build.gradle.kts +++ b/pulsar-client-auth-athenz/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(project(":pulsar-client-api")) implementation(project(":pulsar-client-original")) diff --git a/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java b/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java index 5432d336de19c..03d2efe17ccee 100644 --- a/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java +++ b/pulsar-client-auth-athenz/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helper class to access AirCompressor package private classes. */ diff --git a/pulsar-client-auth-sasl/build.gradle.kts b/pulsar-client-auth-sasl/build.gradle.kts index 0481cb495f7f3..a70a9bec66eb0 100644 --- a/pulsar-client-auth-sasl/build.gradle.kts +++ b/pulsar-client-auth-sasl/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-client-original")) implementation(project(":pulsar-common")) diff --git a/pulsar-client-auth-sasl/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java b/pulsar-client-auth-sasl/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java index 5432d336de19c..03d2efe17ccee 100644 --- a/pulsar-client-auth-sasl/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java +++ b/pulsar-client-auth-sasl/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helper class to access AirCompressor package private classes. */ diff --git a/pulsar-client-messagecrypto-bc/build.gradle.kts b/pulsar-client-messagecrypto-bc/build.gradle.kts index 9d00cff9dfae8..2cc7efd4005fb 100644 --- a/pulsar-client-messagecrypto-bc/build.gradle.kts +++ b/pulsar-client-messagecrypto-bc/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-common")) compileOnly(libs.slf4j.api) diff --git a/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/package-info.java b/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/package-info.java index 1ff9c63db51dd..2812026571c25 100644 --- a/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/package-info.java +++ b/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helper class to for message encrypt or decrypt. */ diff --git a/pulsar-client-shaded/build.gradle.kts b/pulsar-client-shaded/build.gradle.kts index 8cc9c60f186fe..afb04c0aab4d4 100644 --- a/pulsar-client-shaded/build.gradle.kts +++ b/pulsar-client-shaded/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.client-shade-conventions") } diff --git a/pulsar-client-tools-api/build.gradle.kts b/pulsar-client-tools-api/build.gradle.kts index ad1cc34ee1796..acb84f991a85c 100644 --- a/pulsar-client-tools-api/build.gradle.kts +++ b/pulsar-client-tools-api/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-client-admin-api")) } diff --git a/pulsar-client-tools-customcommand-example/build.gradle.kts b/pulsar-client-tools-customcommand-example/build.gradle.kts index a3d64eaa6c18e..308ce20579570 100644 --- a/pulsar-client-tools-customcommand-example/build.gradle.kts +++ b/pulsar-client-tools-customcommand-example/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - alias(libs.plugins.nar) + id("pulsar.java-conventions") + id("pulsar.nar-conventions") } dependencies { diff --git a/pulsar-client-tools-test/build.gradle.kts b/pulsar-client-tools-test/build.gradle.kts index 9000764365948..8b35a484542c4 100644 --- a/pulsar-client-tools-test/build.gradle.kts +++ b/pulsar-client-tools-test/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-client-tools")) compileOnly(project(":pulsar-broker")) diff --git a/pulsar-client-tools/build.gradle.kts b/pulsar-client-tools/build.gradle.kts index 0f2a772e92349..d22156476a14d 100644 --- a/pulsar-client-tools/build.gradle.kts +++ b/pulsar-client-tools/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-client-tools-api")) implementation(project(":pulsar-client-admin-api")) diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/IOUtils.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/IOUtils.java index e67ca47f38972..5d62ae1da6194 100644 --- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/IOUtils.java +++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/IOUtils.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This file is derived from IOUtils from Apache BookKeeper * http://bookkeeper.apache.org diff --git a/pulsar-client/build.gradle.kts b/pulsar-client/build.gradle.kts index 2ce1e57112b13..6dd1566ad8bb3 100644 --- a/pulsar-client/build.gradle.kts +++ b/pulsar-client/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") alias(libs.plugins.protobuf) } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/Murmur3Hash32.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/Murmur3Hash32.java index 3d26b9b176942..dc5ae09fbe9ee 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/Murmur3Hash32.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/Murmur3Hash32.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * The original MurmurHash3 was written by Austin Appleby, and is placed in the * public domain. This source code, implemented by Licht Takeuchi, is based on diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java index c8ccc0678edec..a457811c1eaec 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client authentication. */ diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/customroute/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/customroute/package-info.java index ac49ffdfed401..e15453d00c747 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/customroute/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/customroute/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client customized routing mode. */ diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/package-info.java index 145db2ecd9c39..290b0736a3186 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client implementation. */ diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/package-info.java index 8ad04a6c61fa6..ca6a6fb296785 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client schema. */ diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/package-info.java index f71a8a24ffdd0..c650752ef5b54 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client schema reader. */ diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/package-info.java index 8afa45ffdfbd0..d71b4ea0355ab 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/transaction/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Transaction client implementation. */ diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/util/package-info.java b/pulsar-client/src/main/java/org/apache/pulsar/client/util/package-info.java index cd9b2d48c990d..b4d7ebdeddd19 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/util/package-info.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/util/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Client Utils. */ diff --git a/pulsar-common/build.gradle.kts b/pulsar-common/build.gradle.kts index fd95ba09d0793..706814968f4d4 100644 --- a/pulsar-common/build.gradle.kts +++ b/pulsar-common/build.gradle.kts @@ -23,6 +23,8 @@ import java.time.ZonedDateTime import java.time.format.DateTimeFormatter plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") alias(libs.plugins.lightproto) } @@ -53,8 +55,12 @@ val generatePulsarVersion by tasks.registering { inputs.file(templateFile) inputs.property("version", projectVersion) - inputs.property("gitCommitId", gitCommitId) - inputs.property("gitDirty", gitDirty) + // TODO: Replace git/build metadata with a Gradle configuration cache and build cache + // compatible solution. Currently gitCommitId and gitDirty are not declared as inputs + // because they cause cascading rebuilds of pulsar-common and all its dependents. + // gitCommitId changes on every commit, and gitDirty changes whenever any file is + // modified (via `git status --porcelain`). The values are still captured in the output + // when the task runs for other reasons (same as buildTime/buildHost). outputs.dir(outputDir) doLast { @@ -77,7 +83,6 @@ val generatePulsarVersion by tasks.registering { sourceSets["main"].java.srcDir(generatePulsarVersion.map { layout.buildDirectory.dir("generated-sources/java-templates").get() }) -sourceSets["test"].resources.srcDir(rootProject.layout.projectDirectory.dir("tests")) dependencies { api(project(":pulsar-client-api")) diff --git a/pulsar-common/src/main/java/io/airlift/compress/zstd/package-info.java b/pulsar-common/src/main/java/io/airlift/compress/zstd/package-info.java index b3759ad34cdce..70f5c109d97da 100644 --- a/pulsar-common/src/main/java/io/airlift/compress/zstd/package-info.java +++ b/pulsar-common/src/main/java/io/airlift/compress/zstd/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helper class to access AirCompressor package private classes. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/client/api/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/client/api/package-info.java index 3f6d1d56e1032..7bc9617f72d96 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/client/api/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/client/api/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Additional helper classes to the pulsar-client-api module. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/client/api/url/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/client/api/url/package-info.java index 6b26398c599fd..0ec35922d8d90 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/client/api/url/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/client/api/url/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes to work with URLs. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/allocator/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/allocator/package-info.java index fa00eb699b11c..3d5b584bad612 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/allocator/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/allocator/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes implementing pulsar allocator. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/api/raw/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/api/raw/package-info.java index 74d1b8598c6c7..da1bc981747bf 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/api/raw/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/api/raw/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes implementing raw API messages. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/compression/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/compression/package-info.java index 4047b8973cff3..3cd28c004f08c 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/compression/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/compression/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of different compression codecs. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/exception/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/exception/package-info.java index f5315be7022c1..06cc5faa7e806 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/exception/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/exception/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Exception classes */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/functions/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/functions/package-info.java index f3e2eaeddb04e..930a93719f29e 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/functions/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/functions/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes needed for pulsar functions. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/intercept/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/intercept/package-info.java index c7a10ec056f1e..2e0d5f5182a12 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/intercept/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/intercept/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes needed for broker interceptor. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/io/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/io/package-info.java index 7b1bec81ae6b2..e6a40847062bf 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/io/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/io/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Configuration classes for IO. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/data/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/data/package-info.java index e08216ac83a8f..ddae508be23ef 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/data/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/data/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Lookup data. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/package-info.java index 96a068db6e54c..382ffbc3342bf 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/lookup/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Lookup data. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/naming/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/naming/package-info.java index fb8c7821a825a..ba6b04ae5b545 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/naming/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/naming/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes to work different configuration values. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoader.java b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoader.java index 27132df1607d8..48c2db725d811 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoader.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoader.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * This class was adapted from NiFi NAR Utils * https://github.com/apache/nifi/tree/master/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoaderBuilder.java b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoaderBuilder.java index e44bce87b4c8e..16225da53a667 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoaderBuilder.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarClassLoaderBuilder.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * This class was adapted from NiFi NAR Utils * https://github.com/apache/nifi/tree/master/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarUnpacker.java b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarUnpacker.java index 9be9a98b9e89d..b30aa37ff1604 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarUnpacker.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/NarUnpacker.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * This class was adapted from NiFi NAR Utils * https://github.com/apache/nifi/tree/master/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-nar-utils diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/package-info.java index 33f4a8e11e92a..5e8969e16c2f7 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/nar/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/nar/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes to work with NARs. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/net/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/net/package-info.java index eddc277b4fe1c..c8a36fe690027 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/net/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/net/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes for network configuration. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/package-info.java index 82c190ab71026..0974352a3516b 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/data/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Definition of different data structures for policies. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java index 30cf028e09d29..322da071bce9f 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of policies. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/package-info.java index f6e50a15d62f2..65827bc64f80f 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Common policies. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/path/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/path/package-info.java index 8951969a7f1a0..76a07a0eb9c7e 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/policies/path/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/policies/path/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Paths for pulsar policies. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/package-info.java index 631ca74df8aca..e18ca49ee3e2b 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Common protocol. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java index cec8aa4292155..add7bdfa25ea5 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/protocol/schema/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes to work with schemas. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/sasl/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/sasl/package-info.java index b78ebe4d796f3..9633123988651 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/sasl/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/sasl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of Simple Authentication and Security Layer. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/schema/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/schema/package-info.java index 9df04b6c6c386..a35b61fc1a3a6 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/schema/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/schema/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of the common of the pulsar schema. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/stats/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/stats/package-info.java index 884b3bf7c7760..a589b7032170d 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/stats/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/stats/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Definition of classes responsible for statistics. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/InetAddressUtils.java b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/InetAddressUtils.java index 58c5f7831bf67..3eb45ed6b74b3 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/InetAddressUtils.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/InetAddressUtils.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * From Apache HTTP client */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/NoopHostnameVerifier.java b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/NoopHostnameVerifier.java index b55a6b4e32024..2ea6fed4d6569 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/NoopHostnameVerifier.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/NoopHostnameVerifier.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * From Apache HTTP client */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixList.java b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixList.java index 9cab12ef7224c..6e77ebe448e08 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixList.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixList.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * From Apache HTTP client */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixMatcher.java b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixMatcher.java index 54fd20e6e02e4..c4f3e3eb987f7 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixMatcher.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/PublicSuffixMatcher.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * From Apache HTTP client */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/SubjectName.java b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/SubjectName.java index 59a7860f163e8..74542707d9ea8 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/SubjectName.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/SubjectName.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * From Apache HTTP client */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/TlsHostnameVerifier.java b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/TlsHostnameVerifier.java index 9cec96fe1a4e1..d5f51be08b800 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/tls/TlsHostnameVerifier.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/tls/TlsHostnameVerifier.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * From Apache HTTP client */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/Murmur3_32Hash.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/Murmur3_32Hash.java index 15d49c1b9bbcf..0d3d104862275 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/Murmur3_32Hash.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/Murmur3_32Hash.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * The original MurmurHash3 was written by Austin Appleby, and is placed in the * public domain. This source code, implemented by Licht Takeuchi, is based on diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/package-info.java index 40dedcdb6f87a..6a3bdda7bed17 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Set of different collections working in the concurrent environment. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/keystoretls/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/keystoretls/package-info.java index ff88da46f318f..a9b27bb759501 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/keystoretls/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/keystoretls/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helpers to work with events from the non-blocking I/O client-server framework. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/netty/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/netty/package-info.java index e7217305261fa..deb697680d188 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/netty/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/netty/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Helpers to work with events from the non-blocking I/O client-server framework. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/package-info.java index b394f26a7f816..4af4025b7ec69 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Common utils. */ diff --git a/pulsar-common/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java b/pulsar-common/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java index aa6b9c0d5477c..f7fff659aa858 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/policies/data/loadbalancer/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes to define policies for the load distribution. */ diff --git a/pulsar-config-validation/build.gradle.kts b/pulsar-config-validation/build.gradle.kts index d713d361481a5..75c8c25913f87 100644 --- a/pulsar-config-validation/build.gradle.kts +++ b/pulsar-config-validation/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.slf4j.api) } diff --git a/pulsar-config-validation/src/main/java/org/apache/pulsar/config/validation/package-info.java b/pulsar-config-validation/src/main/java/org/apache/pulsar/config/validation/package-info.java index ae7d4436d547e..5ed6050c19128 100644 --- a/pulsar-config-validation/src/main/java/org/apache/pulsar/config/validation/package-info.java +++ b/pulsar-config-validation/src/main/java/org/apache/pulsar/config/validation/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementation of Validator interfaces and annotations. */ diff --git a/pulsar-dependencies/build.gradle.kts b/pulsar-dependencies/build.gradle.kts index 7bead9941fb14..f6af10303f481 100644 --- a/pulsar-dependencies/build.gradle.kts +++ b/pulsar-dependencies/build.gradle.kts @@ -24,20 +24,27 @@ plugins { `java-platform` } +group = "org.apache.pulsar" +version = the().named("libs").findVersion("pulsar").get().requiredVersion + // Allow declaring constraints on dependencies that also appear as direct dependencies javaPlatform { allowDependencies() } dependencies { - constraints { - // Iterate over all library declarations in the version catalog and add them as constraints. - // This ensures that any transitive dependency matching a catalog entry gets pinned to - // the version we specify, regardless of what version a transitive dependency requests. - val catalog = project.extensions.getByType().named("libs") - catalog.libraryAliases.forEach { alias -> - catalog.findLibrary(alias).ifPresent { provider -> - api(provider) + val catalog = project.extensions.getByType().named("libs") + // Iterate over all library declarations in the version catalog and add them as constraints. + // This ensures that any transitive dependency matching a catalog entry gets pinned to + // the version we specify, regardless of what version a transitive dependency requests. + catalog.libraryAliases.forEach { alias -> + catalog.findLibrary(alias).ifPresent { provider -> + val module = provider.get().module + if (module.name.endsWith("-bom") || module.name.endsWith("_bom") || module.name == "bom" + || module.name.contains("-bom-") || module.name.contains("_bom_")) { + api(platform(provider)) + } else { + constraints.api(provider) } } } diff --git a/pulsar-docs-tools/build.gradle.kts b/pulsar-docs-tools/build.gradle.kts index 236c15d758383..85195ae40cf18 100644 --- a/pulsar-docs-tools/build.gradle.kts +++ b/pulsar-docs-tools/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.swagger.annotations) implementation(libs.swagger.core) diff --git a/pulsar-functions/api-java/build.gradle.kts b/pulsar-functions/api-java/build.gradle.kts index 8c358ba5cf870..03f70ca6749b6 100644 --- a/pulsar-functions/api-java/build.gradle.kts +++ b/pulsar-functions/api-java/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-client-api")) api(project(":pulsar-client-admin-api")) diff --git a/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/package-info.java b/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/package-info.java index b88b41c700e1c..4631ecf0c0792 100644 --- a/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/package-info.java +++ b/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Provides a simple model for enabling lightweight computation on Apache Pulsar. */ diff --git a/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/state/package-info.java b/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/state/package-info.java index 1dfb98b363058..f86df02e43bd5 100644 --- a/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/state/package-info.java +++ b/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/state/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * State Store API. */ diff --git a/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/utils/package-info.java b/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/utils/package-info.java index 7835456877b29..30e4adbe25412 100644 --- a/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/utils/package-info.java +++ b/pulsar-functions/api-java/src/main/java/org/apache/pulsar/functions/api/utils/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * State Store API. */ diff --git a/pulsar-functions/instance/build.gradle.kts b/pulsar-functions/instance/build.gradle.kts index d3e7c9353083f..18e150a702bb4 100644 --- a/pulsar-functions/instance/build.gradle.kts +++ b/pulsar-functions/instance/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-functions:pulsar-functions-utils")) implementation(project(":pulsar-functions:pulsar-functions-api")) diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/package-info.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/package-info.java index c01fc4fc1d8ac..caa42c5e84d1f 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/package-info.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Provides the implementation of the Instance module for Pulsar Functions. */ diff --git a/pulsar-functions/java-examples-builtin/build.gradle.kts b/pulsar-functions/java-examples-builtin/build.gradle.kts index dfeb07cdb85e6..41ddd77a347ee 100644 --- a/pulsar-functions/java-examples-builtin/build.gradle.kts +++ b/pulsar-functions/java-examples-builtin/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - alias(libs.plugins.nar) + id("pulsar.java-conventions") + id("pulsar.nar-conventions") } dependencies { diff --git a/pulsar-functions/java-examples/build.gradle.kts b/pulsar-functions/java-examples/build.gradle.kts index 38a003147b29a..6fe3e64dcedec 100644 --- a/pulsar-functions/java-examples/build.gradle.kts +++ b/pulsar-functions/java-examples/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { compileOnly(project(":pulsar-functions:pulsar-functions-api")) compileOnly(project(":pulsar-client-api")) diff --git a/pulsar-functions/localrun-shaded/build.gradle.kts b/pulsar-functions/localrun-shaded/build.gradle.kts index 9d3b1674df59f..963da1354566d 100644 --- a/pulsar-functions/localrun-shaded/build.gradle.kts +++ b/pulsar-functions/localrun-shaded/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.shadow-conventions") } diff --git a/pulsar-functions/localrun/build.gradle.kts b/pulsar-functions/localrun/build.gradle.kts index 9cc17ee38bab1..79657ce50c1d7 100644 --- a/pulsar-functions/localrun/build.gradle.kts +++ b/pulsar-functions/localrun/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-functions:pulsar-functions-instance")) api(project(":pulsar-functions:pulsar-functions-runtime")) diff --git a/pulsar-functions/proto/build.gradle.kts b/pulsar-functions/proto/build.gradle.kts index 50354a220df03..6ac0a590d21ab 100644 --- a/pulsar-functions/proto/build.gradle.kts +++ b/pulsar-functions/proto/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") alias(libs.plugins.protobuf) } diff --git a/pulsar-functions/runtime-all/build.gradle.kts b/pulsar-functions/runtime-all/build.gradle.kts index eda4539f23ed9..c4a6cad390a70 100644 --- a/pulsar-functions/runtime-all/build.gradle.kts +++ b/pulsar-functions/runtime-all/build.gradle.kts @@ -17,6 +17,11 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") + alias(libs.plugins.shadow) +} + dependencies { implementation(project(":pulsar-io:pulsar-io-core")) implementation(project(":pulsar-functions:pulsar-functions-api")) @@ -32,18 +37,15 @@ dependencies { implementation(libs.log4j.core) } -// Build a fat JAR as java-instance.jar -tasks.jar { +// Build a fat JAR as java-instance.jar using the Shadow plugin. +// Shadow handles dependency resolution lazily, avoiding configuration cache invalidation +// that occurred with the previous manual dependsOn(runtimeClasspath) + zipTree() approach. +tasks.named("shadowJar") { archiveFileName.set("java-instance.jar") - // Use provider to properly declare task dependencies on upstream jars - val runtimeCp = configurations.runtimeClasspath - dependsOn(runtimeCp) - from(provider { runtimeCp.get().map { if (it.isDirectory) it else zipTree(it) } }) { - exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA") - } - duplicatesStrategy = DuplicatesStrategy.EXCLUDE + mergeServiceFiles() + exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA") } -tasks.withType { - dependsOn(tasks.jar) +tasks.withType().configureEach { + dependsOn(tasks.named("shadowJar")) } diff --git a/pulsar-functions/runtime/build.gradle.kts b/pulsar-functions/runtime/build.gradle.kts index d89056914e50a..81d303fe3f838 100644 --- a/pulsar-functions/runtime/build.gradle.kts +++ b/pulsar-functions/runtime/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Include parent module's test resources (YAML config files used by WorkerApiV2ResourceConfigTest) // This mirrors Maven's maven-antrun-plugin that copies pulsar-functions/src/test/resources/*.yml sourceSets { diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/package-info.java index 2dd125ed8b4d8..4a1a82af14d04 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions enables lightweight computation in Apache Pulsar. */ diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/package-info.java index 5e9d989247719..2d0051c99f9c0 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions enables lightweight computation in Apache Pulsar. */ diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java index 4d7f87ffdaab4..c42355c2e7216 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * RuntimeSpawner is the module responsible for running one particular instance servicing one * function. It is responsible for starting/stopping the instance and passing data to the diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java index afdbf3321686a..588899c5a79ef 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java @@ -363,6 +363,12 @@ public static List getCmd(InstanceConfig instanceConfig, args.add(String.format("-D%s=%s", FUNCTIONS_INSTANCE_CLASSPATH, systemFunctionInstanceClasspath)); } args.add("-Dlog4j.configurationFile=" + logConfigFile); + // Use a single LoggerContext for the function process. The default + // ClassLoaderContextSelector creates separate contexts per classloader, + // which causes the LogAppender (added from the instance classloader) to + // miss log events from the SLF4J logger (resolved via the root classloader). + args.add("-Dlog4j2.contextSelector=" + + "org.apache.logging.log4j.core.selector.BasicContextSelector"); args.add("-Dpulsar.function.log.dir=" + genFunctionLogFolder(logDirectory, instanceConfig)); args.add("-Dpulsar.function.log.file=" + String.format( "%s-%s", diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/package-info.java index 2c33baea79c16..408d30afb483f 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions enables lightweight computation in Apache Pulsar. */ diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/package-info.java index 4e2f14a960f7a..398f2ff161362 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions Execution Runtime. */ diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/package-info.java index 5a348601c6345..bb6e71e875fed 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions enables lightweight computation in Apache Pulsar. */ diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/package-info.java index 73cabb10fd5c0..711ff43d3a334 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions enables lightweight computation in Apache Pulsar. */ diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/worker/package-info.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/worker/package-info.java index 78e26d148263d..b5fa8aab23f84 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/worker/package-info.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/worker/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions enables lightweight computation in Apache Pulsar. */ diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java index 5bbdba9c71335..f6a13d3921dbe 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java @@ -457,14 +457,14 @@ private void verifyJavaInstance(InstanceConfig config, String depsDir, boolean s if (null != depsDir) { extraDepsEnv = " -Dpulsar.functions.extra.dependencies.dir=" + depsDir; classpath = classpath + ":" + depsDir + "/*"; - totalArgs = 52; - portArg = 39; - metricsPortArg = 41; + totalArgs = 53; + portArg = 40; + metricsPortArg = 42; } else { extraDepsEnv = ""; - portArg = 38; - metricsPortArg = 40; - totalArgs = 51; + portArg = 39; + metricsPortArg = 41; + totalArgs = 52; } if (secretsAttached) { totalArgs += 4; @@ -491,7 +491,8 @@ private void verifyJavaInstance(InstanceConfig config, String depsDir, boolean s String expectedArgs = "exec java -cp " + classpath + extraDepsEnv + " -Dpulsar.functions.instance.classpath=/pulsar/lib/*" - + " -Dlog4j.configurationFile=kubernetes_instance_log4j2.xml " + + " -Dlog4j.configurationFile=kubernetes_instance_log4j2.xml" + + " -Dlog4j2.contextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector " + "-Dpulsar.function.log.dir=" + logDirectory + "/" + FunctionCommon.getFullyQualifiedName(config.getFunctionDetails()) + " -Dpulsar.function.log.file=" + config.getFunctionDetails().getName() + "-$SHARD_ID" diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java index 7c7f7c8437412..f1fd738e90e60 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java @@ -297,7 +297,7 @@ private void verifyJavaInstance(InstanceConfig config, Path depsDir, String webS String extraDepsEnv; int portArg; int metricsPortArg; - int totalArgCount = 54; + int totalArgCount = 55; if (webServiceUrl != null && config.isExposePulsarAdminClientEnabled()) { totalArgCount += 3; } @@ -305,13 +305,13 @@ private void verifyJavaInstance(InstanceConfig config, Path depsDir, String webS assertEquals(args.size(), totalArgCount); extraDepsEnv = " -Dpulsar.functions.extra.dependencies.dir=" + depsDir; classpath = classpath + ":" + depsDir + "/*"; - portArg = 37; - metricsPortArg = 39; + portArg = 38; + metricsPortArg = 40; } else { assertEquals(args.size(), totalArgCount - 1); extraDepsEnv = ""; - portArg = 36; - metricsPortArg = 38; + portArg = 37; + metricsPortArg = 39; } if (webServiceUrl != null && config.isExposePulsarAdminClientEnabled()) { portArg += 3; @@ -324,7 +324,8 @@ private void verifyJavaInstance(InstanceConfig config, Path depsDir, String webS String expectedArgs = "java -cp " + classpath + extraDepsEnv + " -Dpulsar.functions.instance.classpath=/pulsar/lib/*" - + " -Dlog4j.configurationFile=java_instance_log4j2.xml " + + " -Dlog4j.configurationFile=java_instance_log4j2.xml" + + " -Dlog4j2.contextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector " + "-Dpulsar.function.log.dir=" + logDirectory + "/functions/" + FunctionCommon.getFullyQualifiedName(config.getFunctionDetails()) + " -Dpulsar.function.log.file=" + config.getFunctionDetails().getName() + "-" + config.getInstanceId() diff --git a/pulsar-functions/secrets/build.gradle.kts b/pulsar-functions/secrets/build.gradle.kts index 96dffc3662757..41c15e9d968de 100644 --- a/pulsar-functions/secrets/build.gradle.kts +++ b/pulsar-functions/secrets/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(project(":pulsar-functions:pulsar-functions-proto")) implementation(libs.kubernetes.client.java) diff --git a/pulsar-functions/utils/build.gradle.kts b/pulsar-functions/utils/build.gradle.kts index 0f921be0af1ac..878d474b8c8c1 100644 --- a/pulsar-functions/utils/build.gradle.kts +++ b/pulsar-functions/utils/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-common")) api(project(":pulsar-functions:pulsar-functions-api")) diff --git a/pulsar-functions/worker/build.gradle.kts b/pulsar-functions/worker/build.gradle.kts index 814b2cb5a2883..2a387fa3ccdb3 100644 --- a/pulsar-functions/worker/build.gradle.kts +++ b/pulsar-functions/worker/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Include parent module's test resources (YAML config files) // This mirrors Maven's maven-antrun-plugin that copies pulsar-functions/src/test/resources/*.yml sourceSets { diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/api/package-info.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/api/package-info.java index 601e94e0193a5..e831209e026d6 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/api/package-info.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/api/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Worker Services API. */ diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/package-info.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/package-info.java index b148142d83fcc..a413a9477c431 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/package-info.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/service/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Pulsar Functions Worker Service. */ diff --git a/pulsar-io/batch-data-generator/build.gradle.kts b/pulsar-io/batch-data-generator/build.gradle.kts index b8790f7d8a138..86d22762fb381 100644 --- a/pulsar-io/batch-data-generator/build.gradle.kts +++ b/pulsar-io/batch-data-generator/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - alias(libs.plugins.nar) + id("pulsar.java-conventions") + id("pulsar.nar-conventions") } dependencies { implementation(project(":pulsar-io:pulsar-io-core")) diff --git a/pulsar-io/batch-discovery-triggerers/build.gradle.kts b/pulsar-io/batch-discovery-triggerers/build.gradle.kts index 5cb0ced7a02fe..9db6850d4109a 100644 --- a/pulsar-io/batch-discovery-triggerers/build.gradle.kts +++ b/pulsar-io/batch-discovery-triggerers/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-io:pulsar-io-core")) implementation(libs.spring.context) diff --git a/pulsar-io/common/build.gradle.kts b/pulsar-io/common/build.gradle.kts index c9e6dd2029331..eb7d0298ae139 100644 --- a/pulsar-io/common/build.gradle.kts +++ b/pulsar-io/common/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-io:pulsar-io-core")) implementation(libs.jackson.databind) diff --git a/pulsar-io/core/build.gradle.kts b/pulsar-io/core/build.gradle.kts index 3c9c94247363d..ef3d69c68c72e 100644 --- a/pulsar-io/core/build.gradle.kts +++ b/pulsar-io/core/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-functions:pulsar-functions-api")) } diff --git a/pulsar-io/data-generator/build.gradle.kts b/pulsar-io/data-generator/build.gradle.kts index 4d510ad617f23..ad629d02c12ce 100644 --- a/pulsar-io/data-generator/build.gradle.kts +++ b/pulsar-io/data-generator/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - alias(libs.plugins.nar) + id("pulsar.java-conventions") + id("pulsar.nar-conventions") } dependencies { implementation(project(":pulsar-io:pulsar-io-core")) diff --git a/pulsar-metadata/build.gradle.kts b/pulsar-metadata/build.gradle.kts index 21fd5cbcdee76..5e5ec2bada4c5 100644 --- a/pulsar-metadata/build.gradle.kts +++ b/pulsar-metadata/build.gradle.kts @@ -17,12 +17,13 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-common")) - implementation(libs.bookkeeper.server) { - exclude(group = "org.slf4j") - exclude(group = "org.apache.logging.log4j", module = "log4j-slf4j-impl") - } + implementation(libs.bookkeeper.server) implementation(libs.zookeeper) { exclude(group = "org.slf4j") } @@ -35,7 +36,6 @@ dependencies { testImplementation(project(":buildtools")) testImplementation(project(":testmocks")) testImplementation(project(path = ":managed-ledger", configuration = "testJar")) - testImplementation(project(path = ":", configuration = "filteredBkServerTestJar")) testImplementation(libs.bookkeeper.common) { artifact { classifier = "tests" } } testImplementation(libs.zookeeper) { artifact { classifier = "tests" } } testImplementation(libs.oxia.testcontainers) diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java index 701ef45bf1877..0189c7a0e7d43 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookKeeperClusterTestCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This file is derived from BookKeeperClusterTestCase from Apache BookKeeper * http://bookkeeper.apache.org @@ -47,8 +48,8 @@ import java.util.stream.Collectors; import org.apache.bookkeeper.bookie.Bookie; import org.apache.bookkeeper.bookie.BookieException; -import org.apache.bookkeeper.client.BookKeeperTestClient; -import org.apache.bookkeeper.client.TestStatsProvider; +import org.apache.bookkeeper.client.PulsarBookKeeperTestClient; +import org.apache.bookkeeper.client.PulsarBookKeeperTestStatsProvider; import org.apache.bookkeeper.common.allocator.PoolingPolicy; import org.apache.bookkeeper.conf.AbstractConfiguration; import org.apache.bookkeeper.conf.ClientConfiguration; @@ -100,7 +101,7 @@ public void handleTestMethodName(Method method) { protected final List servers = new LinkedList<>(); protected int numBookies; - protected BookKeeperTestClient bkc; + protected PulsarBookKeeperTestClient bkc; protected boolean useUUIDasBookieId = true; /* @@ -286,7 +287,7 @@ protected void startBKCluster(String metadataServiceUri) throws Exception { baseClientConf.setAllocatorPoolingPolicy(PoolingPolicy.UnpooledHeap); if (numBookies > 0) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } // Create Bookie Servers (B1, B2, B3) @@ -702,7 +703,7 @@ protected ServerTester startBookie(ServerConfiguration conf) ServerTester tester = new ServerTester(conf); if (bkc == null) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } BookieId address = tester.getServer().getBookieId(); @@ -743,7 +744,7 @@ protected ServerTester startBookie(ServerConfiguration conf, final Bookie b) throws Exception { ServerTester tester = new ServerTester(conf, b); if (bkc == null) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } BookieId address = tester.getServer().getBookieId(); Future waitForBookie = conf.isForceReadOnlyBookie() @@ -864,11 +865,11 @@ public void resetBookieOpLoggers() { servers.forEach(t -> t.getStatsProvider().clear()); } - public TestStatsProvider getStatsProvider(BookieId addr) throws UnknownHostException { + public PulsarBookKeeperTestStatsProvider getStatsProvider(BookieId addr) throws UnknownHostException { return byAddress(addr).get().getStatsProvider(); } - public TestStatsProvider getStatsProvider(int index) throws Exception { + public PulsarBookKeeperTestStatsProvider getStatsProvider(int index) throws Exception { return servers.get(index).getStatsProvider(); } diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieAutoRecoveryTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieAutoRecoveryTest.java index 888303d3e665c..d375ee75e42c6 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieAutoRecoveryTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/BookieAutoRecoveryTest.java @@ -31,8 +31,8 @@ import java.util.concurrent.TimeUnit; import org.apache.bookkeeper.client.BKException; import org.apache.bookkeeper.client.BookKeeper.DigestType; -import org.apache.bookkeeper.client.BookKeeperTestClient; import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.PulsarBookKeeperTestClient; import org.apache.bookkeeper.common.util.OrderedScheduler; import org.apache.bookkeeper.conf.ServerConfiguration; import org.apache.bookkeeper.meta.LedgerManager; @@ -431,7 +431,7 @@ public void testEmptyLedgerLosesQuorumEventually() throws Exception { public void testLedgerMetadataContainsIpAddressAsBookieID() throws Exception { stopBKCluster(); - bkc = new BookKeeperTestClient(baseClientConf); + bkc = new PulsarBookKeeperTestClient(baseClientConf); // start bookie with useHostNameAsBookieID=false, as old bookie ServerConfiguration serverConf1 = newServerConfiguration(); // start 2 more bookies with useHostNameAsBookieID=true @@ -507,7 +507,7 @@ public void testLedgerMetadataContainsHostNameAsBookieID() throws Exception { stopBKCluster(); - bkc = new BookKeeperTestClient(baseClientConf); + bkc = new PulsarBookKeeperTestClient(baseClientConf); // start bookie with useHostNameAsBookieID=false, as old bookie ServerConfiguration serverConf1 = newServerConfiguration(); // start 2 more bookies with useHostNameAsBookieID=true @@ -552,7 +552,7 @@ public void testLedgerMetadataContainsHostNameAsBookieID() watchUrLedgerNode(urLedgerZNode, latch)); // creates new bkclient - bkc = new BookKeeperTestClient(baseClientConf); + bkc = new PulsarBookKeeperTestClient(baseClientConf); // starting the replication service, so that he will be able to act as // target bookie ServerConfiguration serverConf = newServerConfiguration(); diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java index c8c0f7dea8917..832f5bcbea976 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java @@ -49,11 +49,11 @@ import org.apache.bookkeeper.bookie.BookieImpl; import org.apache.bookkeeper.client.BKException; import org.apache.bookkeeper.client.BookKeeper; -import org.apache.bookkeeper.client.BookKeeperTestClient; import org.apache.bookkeeper.client.ClientUtil; import org.apache.bookkeeper.client.EnsemblePlacementPolicy; import org.apache.bookkeeper.client.LedgerEntry; import org.apache.bookkeeper.client.LedgerHandle; +import org.apache.bookkeeper.client.PulsarBookKeeperTestClient; import org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy; import org.apache.bookkeeper.client.ZoneawareEnsemblePlacementPolicy; import org.apache.bookkeeper.client.api.LedgerMetadata; @@ -1050,7 +1050,7 @@ private void testRepairedNotAdheringPlacementPolicyLedgerFragments( baseClientConf.setProperty("reppDnsResolverClass", StaticDNSResolver.class.getName()); baseClientConf.setProperty("enforceStrictZoneawarePlacement", false); bkc.close(); - bkc = new BookKeeperTestClient(baseClientConf) { + bkc = new PulsarBookKeeperTestClient(baseClientConf) { @Override protected EnsemblePlacementPolicy initializeEnsemblePlacementPolicy(ClientConfiguration conf, DNSToSwitchMapping dnsResolver, @@ -1113,7 +1113,7 @@ protected EnsemblePlacementPolicy initializeEnsemblePlacementPolicy(ClientConfig assertNotNull(stat); baseConf.setRepairedPlacementPolicyNotAdheringBookieEnable(true); - BookKeeper bookKeeper = new BookKeeperTestClient(baseClientConf) { + BookKeeper bookKeeper = new PulsarBookKeeperTestClient(baseClientConf) { @Override protected EnsemblePlacementPolicy initializeEnsemblePlacementPolicy(ClientConfiguration conf, DNSToSwitchMapping dnsResolver, diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java index 6f63ecf9145ba..f34230a52e3a3 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/ZooKeeperUtil.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This file is derived from ZooKeeperUtil from Apache BookKeeper * http://bookkeeper.apache.org diff --git a/pulsar-opentelemetry/build.gradle.kts b/pulsar-opentelemetry/build.gradle.kts index bd68f68bc044a..d5f1484db1bdb 100644 --- a/pulsar-opentelemetry/build.gradle.kts +++ b/pulsar-opentelemetry/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(libs.opentelemetry.api) implementation(libs.opentelemetry.exporter.otlp) diff --git a/pulsar-package-management/bookkeeper-storage/build.gradle.kts b/pulsar-package-management/bookkeeper-storage/build.gradle.kts index 1f06015de0dec..7259549bb66ca 100644 --- a/pulsar-package-management/bookkeeper-storage/build.gradle.kts +++ b/pulsar-package-management/bookkeeper-storage/build.gradle.kts @@ -17,14 +17,16 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-package-management:pulsar-package-core")) implementation(libs.distributedlog.core) testImplementation(project(":managed-ledger")) testImplementation(project(":testmocks")) - testImplementation(libs.bookkeeper.server) - testImplementation(project(path = ":", configuration = "filteredBkServerTestJar")) testImplementation(libs.zookeeper) { artifact { classifier = "tests" } } testRuntimeOnly(libs.dropwizardmetrics.core) testRuntimeOnly(libs.snappy.java) diff --git a/pulsar-package-management/bookkeeper-storage/src/main/java/org/apache/pulsar/packages/management/storage/bookkeeper/package-info.java b/pulsar-package-management/bookkeeper-storage/src/main/java/org/apache/pulsar/packages/management/storage/bookkeeper/package-info.java index 8d01ef49c0329..c76cc3ee10c09 100644 --- a/pulsar-package-management/bookkeeper-storage/src/main/java/org/apache/pulsar/packages/management/storage/bookkeeper/package-info.java +++ b/pulsar-package-management/bookkeeper-storage/src/main/java/org/apache/pulsar/packages/management/storage/bookkeeper/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Packages management storage implementation with bookkeeper. */ diff --git a/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/BookKeeperClusterTestCase.java b/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/BookKeeperClusterTestCase.java index 43db5ad4ba845..089681e771faf 100644 --- a/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/BookKeeperClusterTestCase.java +++ b/pulsar-package-management/bookkeeper-storage/src/test/java/org/apache/pulsar/packages/management/storage/bookkeeper/bookkeeper/test/BookKeeperClusterTestCase.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * This file is derived from BookKeeperClusterTestCase from Apache BookKeeper * http://bookkeeper.apache.org @@ -57,8 +58,8 @@ import org.apache.bookkeeper.bookie.ReadOnlyBookie; import org.apache.bookkeeper.bookie.UncleanShutdownDetection; import org.apache.bookkeeper.bookie.UncleanShutdownDetectionImpl; -import org.apache.bookkeeper.client.BookKeeperTestClient; -import org.apache.bookkeeper.client.TestStatsProvider; +import org.apache.bookkeeper.client.PulsarBookKeeperTestClient; +import org.apache.bookkeeper.client.PulsarBookKeeperTestStatsProvider; import org.apache.bookkeeper.common.allocator.ByteBufAllocatorWithOomHandler; import org.apache.bookkeeper.common.allocator.PoolingPolicy; import org.apache.bookkeeper.conf.AbstractConfiguration; @@ -115,7 +116,7 @@ public void handleTestMethodName(Method method) { private final List servers = new LinkedList<>(); protected int numBookies; - protected BookKeeperTestClient bkc; + protected PulsarBookKeeperTestClient bkc; protected boolean useUUIDasBookieId = true; /* @@ -260,7 +261,7 @@ protected void startBKCluster(String metadataServiceUri) throws Exception { baseClientConf.setMetadataServiceUri(metadataServiceUri); baseClientConf.setAllocatorPoolingPolicy(PoolingPolicy.UnpooledHeap); if (numBookies > 0) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } // Create Bookie Servers (B1, B2, B3) @@ -676,7 +677,7 @@ protected ServerTester startBookie(ServerConfiguration conf) ServerTester tester = new ServerTester(conf); if (bkc == null) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } BookieId address = tester.getServer().getBookieId(); @@ -703,7 +704,7 @@ protected ServerTester startBookie(ServerConfiguration conf, final Bookie b) throws Exception { ServerTester tester = new ServerTester(conf, b); if (bkc == null) { - bkc = new BookKeeperTestClient(baseClientConf, new TestStatsProvider()); + bkc = new PulsarBookKeeperTestClient(baseClientConf, new PulsarBookKeeperTestStatsProvider()); } BookieId address = tester.getServer().getBookieId(); Future waitForBookie = conf.isForceReadOnlyBookie() @@ -816,11 +817,11 @@ public void resetBookieOpLoggers() { servers.forEach(t -> t.getStatsProvider().clear()); } - public TestStatsProvider getStatsProvider(BookieId addr) throws UnknownHostException { + public PulsarBookKeeperTestStatsProvider getStatsProvider(BookieId addr) throws UnknownHostException { return byAddress(addr).get().getStatsProvider(); } - public TestStatsProvider getStatsProvider(int index) throws Exception { + public PulsarBookKeeperTestStatsProvider getStatsProvider(int index) throws Exception { return servers.get(index).getStatsProvider(); } @@ -829,7 +830,7 @@ public TestStatsProvider getStatsProvider(int index) throws Exception { */ public class ServerTester { private final ServerConfiguration conf; - private final TestStatsProvider provider; + private final PulsarBookKeeperTestStatsProvider provider; private final Bookie bookie; private final BookieServer server; private final BookieSocketAddress address; @@ -843,7 +844,7 @@ public class ServerTester { ServerTester(ServerConfiguration conf) throws Exception { this.conf = conf; - provider = new TestStatsProvider(); + provider = new PulsarBookKeeperTestStatsProvider(); StatsLogger rootStatsLogger = provider.getStatsLogger(""); StatsLogger bookieStats = rootStatsLogger.scope(BOOKIE_SCOPE); @@ -887,7 +888,7 @@ public class ServerTester { ServerTester(ServerConfiguration conf, Bookie b) throws Exception { this.conf = conf; - provider = new TestStatsProvider(); + provider = new PulsarBookKeeperTestStatsProvider(); metadataDriver = null; registrationManager = null; @@ -940,7 +941,7 @@ public BookieServer getServer() { return server; } - TestStatsProvider getStatsProvider() { + PulsarBookKeeperTestStatsProvider getStatsProvider() { return provider; } diff --git a/pulsar-package-management/core/build.gradle.kts b/pulsar-package-management/core/build.gradle.kts index 247ff228cb1ef..f6ef9d6783ceb 100644 --- a/pulsar-package-management/core/build.gradle.kts +++ b/pulsar-package-management/core/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-client-admin-api")) implementation(libs.guava) diff --git a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java index 66faf846ec752..a220dc9c2f4ec 100644 --- a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java +++ b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/common/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Packages management general classes. */ diff --git a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/package-info.java b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/package-info.java index 030565bc2d2cd..5cf3257c9f464 100644 --- a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/package-info.java +++ b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Packages management service implementation. */ diff --git a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/package-info.java b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/package-info.java index 03449c9f35148..6e3423c68c0a2 100644 --- a/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/package-info.java +++ b/pulsar-package-management/core/src/main/java/org/apache/pulsar/packages/management/core/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Packages management provides an easier way to manage the packages. * We abstract the storage so we can store the packages anywhere. And we can store the diff --git a/pulsar-package-management/filesystem-storage/build.gradle.kts b/pulsar-package-management/filesystem-storage/build.gradle.kts index 997cd638aeef8..426b69e5cf8d6 100644 --- a/pulsar-package-management/filesystem-storage/build.gradle.kts +++ b/pulsar-package-management/filesystem-storage/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-package-management:pulsar-package-core")) implementation(libs.guava) diff --git a/pulsar-package-management/filesystem-storage/src/main/java/org/apache/pulsar/packages/management/storage/filesystem/package-info.java b/pulsar-package-management/filesystem-storage/src/main/java/org/apache/pulsar/packages/management/storage/filesystem/package-info.java index bd40590f35228..a69cd9a32a38f 100644 --- a/pulsar-package-management/filesystem-storage/src/main/java/org/apache/pulsar/packages/management/storage/filesystem/package-info.java +++ b/pulsar-package-management/filesystem-storage/src/main/java/org/apache/pulsar/packages/management/storage/filesystem/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Packages management storage implementation with filesystem. */ diff --git a/pulsar-proxy/build.gradle.kts b/pulsar-proxy/build.gradle.kts index 8acb9c92b1656..0d15fdff6bffe 100644 --- a/pulsar-proxy/build.gradle.kts +++ b/pulsar-proxy/build.gradle.kts @@ -17,6 +17,11 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") +} + dependencies { api(project(":pulsar-broker-common")) implementation(project(":pulsar-client-original")) diff --git a/pulsar-testclient/build.gradle.kts b/pulsar-testclient/build.gradle.kts index be727fe7ad7ec..4ccf89f03004f 100644 --- a/pulsar-testclient/build.gradle.kts +++ b/pulsar-testclient/build.gradle.kts @@ -17,6 +17,11 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") + id("pulsar.test-certs-conventions") +} + dependencies { implementation(project(":pulsar-client-original")) implementation(project(":pulsar-client-admin-original")) @@ -37,9 +42,7 @@ dependencies { implementation(libs.zookeeper) { exclude(group = "org.slf4j") } - implementation(libs.bookkeeper.server) { - exclude(group = "org.slf4j") - } + implementation(libs.bookkeeper.server) implementation(libs.re2j) implementation(libs.gson) implementation(libs.jetty.client) diff --git a/pulsar-transaction/common/build.gradle.kts b/pulsar-transaction/common/build.gradle.kts index 3eac9083a9eef..6b804f410972d 100644 --- a/pulsar-transaction/common/build.gradle.kts +++ b/pulsar-transaction/common/build.gradle.kts @@ -17,4 +17,8 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // pulsar-transaction-common has no internal Pulsar dependencies diff --git a/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/common/exception/package-info.java b/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/common/exception/package-info.java index c01186b3fcb6c..c6f25f4df8a01 100644 --- a/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/common/exception/package-info.java +++ b/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/common/exception/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Common exception used by pulsar transaction related modules. */ diff --git a/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/impl/common/package-info.java b/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/impl/common/package-info.java index d8fa72c0a8ce1..4da5e5de9edd9 100644 --- a/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/impl/common/package-info.java +++ b/pulsar-transaction/common/src/main/java/org/apache/pulsar/transaction/impl/common/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Common classes used by pulsar transaction related modules. */ diff --git a/pulsar-transaction/coordinator/build.gradle.kts b/pulsar-transaction/coordinator/build.gradle.kts index d3b7011f42bfc..90c1e41505f6e 100644 --- a/pulsar-transaction/coordinator/build.gradle.kts +++ b/pulsar-transaction/coordinator/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") alias(libs.plugins.lightproto) } diff --git a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/exceptions/package-info.java b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/exceptions/package-info.java index 4ca3e808f0043..a48b4d09caf66 100644 --- a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/exceptions/package-info.java +++ b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/exceptions/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Internal exceptions for transaction coordinator. */ diff --git a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/impl/package-info.java b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/impl/package-info.java index bd9b575605381..a816062001834 100644 --- a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/impl/package-info.java +++ b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/impl/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementations of the transaction coordinator. */ diff --git a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/package-info.java b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/package-info.java index e09eb996e8749..2a0000f8c4860 100644 --- a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/package-info.java +++ b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Classes for implementing pulsar transaction coordinator. */ diff --git a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/util/package-info.java b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/util/package-info.java index 4127f06a7f625..02c112c82173e 100644 --- a/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/util/package-info.java +++ b/pulsar-transaction/coordinator/src/main/java/org/apache/pulsar/transaction/coordinator/util/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Implementations of the transaction coordinator. */ diff --git a/pulsar-websocket/build.gradle.kts b/pulsar-websocket/build.gradle.kts index e462e48e8d096..f926f6548ae7b 100644 --- a/pulsar-websocket/build.gradle.kts +++ b/pulsar-websocket/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { api(project(":pulsar-broker-common")) implementation(project(":pulsar-common")) diff --git a/settings.gradle.kts b/settings.gradle.kts index 647fde294c915..45ba3587e7f45 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,6 +22,7 @@ pluginManagement { gradlePluginPortal() mavenCentral() } + includeBuild("build-logic") } dependencyResolutionManagement { @@ -40,8 +41,7 @@ dependencyResolutionManagement { rootProject.name = "pulsar" // ────────────────────────────────────────────────────────────────────────────── -// Core modules (equivalent to Maven -Pcore-modules) -// Build only these with: ./gradlew assemble -PcoreModules +// Core modules // ────────────────────────────────────────────────────────────────────────────── // Enforced platform for dependency version management (Maven dependencyManagement equivalent) @@ -187,78 +187,64 @@ include("distribution:pulsar-server-distribution") project(":distribution:pulsar-server-distribution").projectDir = file("distribution/server") // ────────────────────────────────────────────────────────────────────────────── -// Extra modules (excluded when building with -PcoreModules) +// Extra modules // ────────────────────────────────────────────────────────────────────────────── -if (!settings.extra.has("coreModules")) { - // Functions — localrun-shaded (not in Maven core-modules) - include("pulsar-functions:pulsar-functions-local-runner-shaded") - project(":pulsar-functions:pulsar-functions-local-runner-shaded").projectDir = file("pulsar-functions/localrun-shaded") - - // Tiered storage - include("jclouds-shaded") - include("tiered-storage:tiered-storage-jcloud") - project(":tiered-storage:tiered-storage-jcloud").projectDir = file("tiered-storage/jcloud") - include("tiered-storage:tiered-storage-file-system") - project(":tiered-storage:tiered-storage-file-system").projectDir = file("tiered-storage/file-system") - - // Athenz auth - include("pulsar-broker-auth-athenz") - include("pulsar-client-auth-athenz") - - // Distribution — extra (shell, offloaders) - include("distribution:pulsar-shell-distribution") - project(":distribution:pulsar-shell-distribution").projectDir = file("distribution/shell") - include("distribution:pulsar-offloader-distribution") - project(":distribution:pulsar-offloader-distribution").projectDir = file("distribution/offloaders") - - // Misc - include("microbench") -} +// Functions — localrun-shaded +include("pulsar-functions:pulsar-functions-local-runner-shaded") +project(":pulsar-functions:pulsar-functions-local-runner-shaded").projectDir = file("pulsar-functions/localrun-shaded") + +// Tiered storage +include("jclouds-shaded") +include("tiered-storage:tiered-storage-jcloud") +project(":tiered-storage:tiered-storage-jcloud").projectDir = file("tiered-storage/jcloud") +include("tiered-storage:tiered-storage-file-system") +project(":tiered-storage:tiered-storage-file-system").projectDir = file("tiered-storage/file-system") + +// Athenz auth +include("pulsar-broker-auth-athenz") +include("pulsar-client-auth-athenz") + +// Distribution — extra (shell, offloaders) +include("distribution:pulsar-shell-distribution") +project(":distribution:pulsar-shell-distribution").projectDir = file("distribution/shell") +include("distribution:pulsar-offloader-distribution") +project(":distribution:pulsar-offloader-distribution").projectDir = file("distribution/offloaders") + +// Misc +include("microbench") // ────────────────────────────────────────────────────────────────────────────── -// Docker modules (enabled with -Pdocker) +// Docker modules // ────────────────────────────────────────────────────────────────────────────── -// Also auto-enable when running docker-related tasks (e.g., ./gradlew docker) -val dockerRequested = settings.extra.has("docker") || - gradle.startParameter.taskNames.any { it.contains("docker", ignoreCase = true) } -if (dockerRequested) { - include("docker:pulsar-docker-image") - project(":docker:pulsar-docker-image").projectDir = file("docker/pulsar") - - // Test Docker images - include("tests:java-test-functions") - project(":tests:java-test-functions").projectDir = file("tests/docker-images/java-test-functions") - include("tests:java-test-plugins") - project(":tests:java-test-plugins").projectDir = file("tests/docker-images/java-test-plugins") - include("tests:java-test-image") - project(":tests:java-test-image").projectDir = file("tests/docker-images/java-test-image") - include("tests:latest-version-image") - project(":tests:latest-version-image").projectDir = file("tests/docker-images/latest-version-image") -} +include("docker:pulsar-docker-image") +project(":docker:pulsar-docker-image").projectDir = file("docker/pulsar") + +// Test Docker images +include("tests:java-test-functions") +project(":tests:java-test-functions").projectDir = file("tests/docker-images/java-test-functions") +include("tests:java-test-plugins") +project(":tests:java-test-plugins").projectDir = file("tests/docker-images/java-test-plugins") +include("tests:java-test-image") +project(":tests:java-test-image").projectDir = file("tests/docker-images/java-test-image") +include("tests:latest-version-image") +project(":tests:latest-version-image").projectDir = file("tests/docker-images/latest-version-image") // ────────────────────────────────────────────────────────────────────────────── -// Integration test modules (enabled with -PintegrationTests) +// Integration test modules // ────────────────────────────────────────────────────────────────────────────── -val integrationTestsRequested = settings.extra.has("integrationTests") || - gradle.startParameter.taskNames.any { it.contains("integrationTest", ignoreCase = false) } -if (integrationTestsRequested) { - include("tests:integration") - project(":tests:integration").projectDir = file("tests/integration") -} +include("tests:integration") +project(":tests:integration").projectDir = file("tests/integration") // ────────────────────────────────────────────────────────────────────────────── -// Shade test modules (only included when their tasks are invoked) +// Shade test modules // ────────────────────────────────────────────────────────────────────────────── -val shadeTestsRequested = gradle.startParameter.taskNames.any { it.contains("shade-test") } -if (shadeTestsRequested) { - include("tests:pulsar-client-shade-test") - project(":tests:pulsar-client-shade-test").projectDir = file("tests/pulsar-client-shade-test") - include("tests:pulsar-client-admin-shade-test") - project(":tests:pulsar-client-admin-shade-test").projectDir = file("tests/pulsar-client-admin-shade-test") - include("tests:pulsar-client-all-shade-test") - project(":tests:pulsar-client-all-shade-test").projectDir = file("tests/pulsar-client-all-shade-test") -} +include("tests:pulsar-client-shade-test") +project(":tests:pulsar-client-shade-test").projectDir = file("tests/pulsar-client-shade-test") +include("tests:pulsar-client-admin-shade-test") +project(":tests:pulsar-client-admin-shade-test").projectDir = file("tests/pulsar-client-admin-shade-test") +include("tests:pulsar-client-all-shade-test") +project(":tests:pulsar-client-all-shade-test").projectDir = file("tests/pulsar-client-all-shade-test") diff --git a/structured-event-log/build.gradle.kts b/structured-event-log/build.gradle.kts index 7ed34694f41b7..d5646e34e2bb5 100644 --- a/structured-event-log/build.gradle.kts +++ b/structured-event-log/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { implementation(libs.slf4j.api) compileOnly(libs.log4j.core) diff --git a/testmocks/build.gradle.kts b/testmocks/build.gradle.kts index dadd63cc52d38..74d8027753e40 100644 --- a/testmocks/build.gradle.kts +++ b/testmocks/build.gradle.kts @@ -17,9 +17,14 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { - implementation(libs.bookkeeper.server) { - exclude(group = "org.slf4j") + api(libs.bookkeeper.server) + api(libs.bookkeeper.server) { + artifact { classifier = "tests" } } implementation(libs.commons.lang3) implementation(libs.testng) diff --git a/testmocks/src/main/java/org/apache/bookkeeper/client/BookKeeperTestClient.java b/testmocks/src/main/java/org/apache/bookkeeper/client/PulsarBookKeeperTestClient.java similarity index 91% rename from testmocks/src/main/java/org/apache/bookkeeper/client/BookKeeperTestClient.java rename to testmocks/src/main/java/org/apache/bookkeeper/client/PulsarBookKeeperTestClient.java index 6aa949d7524c0..4f58d8e2616f7 100644 --- a/testmocks/src/main/java/org/apache/bookkeeper/client/BookKeeperTestClient.java +++ b/testmocks/src/main/java/org/apache/bookkeeper/client/PulsarBookKeeperTestClient.java @@ -37,10 +37,10 @@ * wish to expose in the public API. */ @Slf4j -public class BookKeeperTestClient extends BookKeeper { - TestStatsProvider statsProvider; +public class PulsarBookKeeperTestClient extends BookKeeper { + PulsarBookKeeperTestStatsProvider statsProvider; - public BookKeeperTestClient(ClientConfiguration conf, TestStatsProvider statsProvider) + public PulsarBookKeeperTestClient(ClientConfiguration conf, PulsarBookKeeperTestStatsProvider statsProvider) throws IOException, InterruptedException, BKException { super(conf, null, null, new UnpooledByteBufAllocator(false), statsProvider == null ? NullStatsLogger.INSTANCE : statsProvider.getStatsLogger(""), @@ -48,15 +48,15 @@ public BookKeeperTestClient(ClientConfiguration conf, TestStatsProvider statsPro this.statsProvider = statsProvider; } - public BookKeeperTestClient(ClientConfiguration conf, ZooKeeper zkc) + public PulsarBookKeeperTestClient(ClientConfiguration conf, ZooKeeper zkc) throws IOException, InterruptedException, BKException { super(conf, zkc, null, new UnpooledByteBufAllocator(false), NullStatsLogger.INSTANCE, null, null, null); } - public BookKeeperTestClient(ClientConfiguration conf) + public PulsarBookKeeperTestClient(ClientConfiguration conf) throws InterruptedException, BKException, IOException { - this(conf, (TestStatsProvider) null); + this(conf, (PulsarBookKeeperTestStatsProvider) null); } public ZooKeeper getZkHandle() { @@ -145,7 +145,7 @@ public void readBookiesBlocking() throws InterruptedException, BKException { bookieWatcher.initialBlockingBookieRead(); } - public TestStatsProvider getTestStatsProvider() { + public PulsarBookKeeperTestStatsProvider getTestStatsProvider() { return statsProvider; } } diff --git a/testmocks/src/main/java/org/apache/bookkeeper/client/TestStatsProvider.java b/testmocks/src/main/java/org/apache/bookkeeper/client/PulsarBookKeeperTestStatsProvider.java similarity index 94% rename from testmocks/src/main/java/org/apache/bookkeeper/client/TestStatsProvider.java rename to testmocks/src/main/java/org/apache/bookkeeper/client/PulsarBookKeeperTestStatsProvider.java index 43a39bf4f8452..8e5dd508d8958 100644 --- a/testmocks/src/main/java/org/apache/bookkeeper/client/TestStatsProvider.java +++ b/testmocks/src/main/java/org/apache/bookkeeper/client/PulsarBookKeeperTestStatsProvider.java @@ -35,7 +35,7 @@ /** * Simple in-memory stat provider for use in unit tests. */ -public class TestStatsProvider implements StatsProvider { +public class PulsarBookKeeperTestStatsProvider implements StatsProvider { /** * In-memory counter. */ @@ -173,12 +173,12 @@ private String getSubPath(String name) { @Override public OpStatsLogger getOpStatsLogger(String name) { - return TestStatsProvider.this.getOrCreateOpStatsLogger(getSubPath(name)); + return PulsarBookKeeperTestStatsProvider.this.getOrCreateOpStatsLogger(getSubPath(name)); } @Override public Counter getCounter(String name) { - return TestStatsProvider.this.getOrCreateCounter(getSubPath(name)); + return PulsarBookKeeperTestStatsProvider.this.getOrCreateCounter(getSubPath(name)); } public Gauge getGauge(String name) { @@ -187,12 +187,12 @@ public Gauge getGauge(String name) { @Override public void registerGauge(String name, Gauge gauge) { - TestStatsProvider.this.registerGauge(getSubPath(name), gauge); + PulsarBookKeeperTestStatsProvider.this.registerGauge(getSubPath(name), gauge); } @Override public void unregisterGauge(String name, Gauge gauge) { - TestStatsProvider.this.unregisterGauge(getSubPath(name), gauge); + PulsarBookKeeperTestStatsProvider.this.unregisterGauge(getSubPath(name), gauge); } @Override diff --git a/testmocks/src/main/java/org/apache/bookkeeper/test/ServerTester.java b/testmocks/src/main/java/org/apache/bookkeeper/test/ServerTester.java index a808123a86f1d..517b7258b1081 100644 --- a/testmocks/src/main/java/org/apache/bookkeeper/test/ServerTester.java +++ b/testmocks/src/main/java/org/apache/bookkeeper/test/ServerTester.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /* * This file is derived from BookKeeperClusterTestCase from Apache BookKeeper * http://bookkeeper.apache.org @@ -35,7 +36,7 @@ import org.apache.bookkeeper.bookie.ReadOnlyBookie; import org.apache.bookkeeper.bookie.UncleanShutdownDetection; import org.apache.bookkeeper.bookie.UncleanShutdownDetectionImpl; -import org.apache.bookkeeper.client.TestStatsProvider; +import org.apache.bookkeeper.client.PulsarBookKeeperTestStatsProvider; import org.apache.bookkeeper.common.allocator.ByteBufAllocatorWithOomHandler; import org.apache.bookkeeper.common.allocator.PoolingPolicy; import org.apache.bookkeeper.conf.ServerConfiguration; @@ -94,7 +95,7 @@ public boolean getShutdownRegistered() { } private final ServerConfiguration conf; - private final TestStatsProvider provider; + private final PulsarBookKeeperTestStatsProvider provider; private final Bookie bookie; private final BookieServer server; private final BookieSocketAddress address; @@ -110,7 +111,7 @@ public boolean getShutdownRegistered() { public ServerTester(ServerConfiguration conf) throws Exception { this.conf = conf; - provider = new TestStatsProvider(); + provider = new PulsarBookKeeperTestStatsProvider(); StatsLogger rootStatsLogger = provider.getStatsLogger(""); StatsLogger bookieStats = rootStatsLogger.scope(BOOKIE_SCOPE); @@ -154,7 +155,7 @@ public ServerTester(ServerConfiguration conf) throws Exception { public ServerTester(ServerConfiguration conf, Bookie b) throws Exception { this.conf = conf; - provider = new TestStatsProvider(); + provider = new PulsarBookKeeperTestStatsProvider(); metadataDriver = null; registrationManager = null; @@ -207,7 +208,7 @@ public BookieServer getServer() { return server; } - public TestStatsProvider getStatsProvider() { + public PulsarBookKeeperTestStatsProvider getStatsProvider() { return provider; } diff --git a/tests/README.md b/tests/README.md index 965f0e81d0cf8..6d46413b59029 100644 --- a/tests/README.md +++ b/tests/README.md @@ -26,9 +26,8 @@ The integration tests use a framework called [Test Containers](https://www.testc The tests require that docker is installed and running. To run the tests: ```shell # in the top level directory -pulsar/ $ ./gradlew assemble # builds all modules -pulsar/ $ ./gradlew -Pdocker :tests:latest-version-image:dockerBuild # builds the docker test image -pulsar/ $ ./gradlew :tests:integration:integrationTest # runs the integration tests +pulsar/ $ ./gradlew :tests:latest-version-image:dockerBuild # builds the docker test image +pulsar/ $ ./gradlew :tests:integration:integrationTest # runs the integration tests ``` The directories are as follows: diff --git a/tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java b/tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java deleted file mode 100644 index a6adaaf410e24..0000000000000 --- a/tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.pulsar.tests.integration; - -import static java.time.temporal.ChronoUnit.SECONDS; -import java.time.Duration; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; - -public class PulsarContainer extends GenericContainer { - - public static final int PULSAR_PORT = 6650; - public static final int BROKER_HTTP_PORT = 8080; - public static final String DEFAULT_IMAGE_NAME = System.getenv().getOrDefault("PULSAR_TEST_IMAGE_NAME", - "apachepulsar/pulsar-test-latest-version:latest"); - - public PulsarContainer() { - this(DEFAULT_IMAGE_NAME); - } - - public PulsarContainer(final String pulsarVersion) { - super(pulsarVersion); - withExposedPorts(BROKER_HTTP_PORT, PULSAR_PORT); - withCommand("/pulsar/bin/pulsar standalone --advertised-address localhost"); - waitingFor(new HttpWaitStrategy() - .forPort(BROKER_HTTP_PORT) - .forStatusCode(200) - .forPath("/admin/v2/namespaces/public/default") - .withStartupTimeout(Duration.of(300, SECONDS))); - } - - public String getPlainTextPulsarBrokerUrl() { - return String.format("pulsar://%s:%s", this.getHost(), this.getMappedPort(PULSAR_PORT)); - } - -} diff --git a/tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java b/tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java deleted file mode 100644 index 3c4c0c3ac9568..0000000000000 --- a/tests/bc_2_0_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.pulsar.tests.integration; - -import java.util.concurrent.TimeUnit; -import lombok.Cleanup; -import org.apache.pulsar.client.api.Consumer; -import org.apache.pulsar.client.api.Message; -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.Schema; -import org.apache.pulsar.client.api.SubscriptionType; -import org.apache.pulsar.tests.TestRetrySupport; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class SmokeTest extends TestRetrySupport { - - private PulsarContainer pulsarContainer; - - @Override - @BeforeClass(alwaysRun = true) - public final void setup(){ - incrementSetupNumber(); - pulsarContainer = new PulsarContainer(); - pulsarContainer.start(); - } - - @Test - public void checkMessages() throws PulsarClientException { - - @Cleanup - PulsarClient client = PulsarClient.builder() - .serviceUrl(pulsarContainer.getPlainTextPulsarBrokerUrl()) - .build(); - - final String inputTopic = "input"; - - Producer producer = client.newProducer(Schema.STRING) - .topic(inputTopic) - .enableBatching(false) - .create(); - - Consumer consumer = client.newConsumer(Schema.STRING) - .topic(inputTopic) - .subscriptionName("test-subs") - .ackTimeout(10, TimeUnit.SECONDS) - .subscriptionType(SubscriptionType.Exclusive) - .subscribe(); - - producer.send("Hello!"); - Message message = consumer.receive(10, TimeUnit.SECONDS); - - Assert.assertEquals(message.getValue(), "Hello!"); - - } - - @Override - @AfterClass(alwaysRun = true) - public final void cleanup(){ - markCurrentSetupNumberCleaned(); - pulsarContainer.stop(); - } - -} diff --git a/tests/bc_2_0_0/src/test/resources/pulsar.xml b/tests/bc_2_0_0/src/test/resources/pulsar.xml deleted file mode 100644 index 43dfaea15813c..0000000000000 --- a/tests/bc_2_0_0/src/test/resources/pulsar.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java b/tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java deleted file mode 100644 index a6adaaf410e24..0000000000000 --- a/tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.pulsar.tests.integration; - -import static java.time.temporal.ChronoUnit.SECONDS; -import java.time.Duration; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; - -public class PulsarContainer extends GenericContainer { - - public static final int PULSAR_PORT = 6650; - public static final int BROKER_HTTP_PORT = 8080; - public static final String DEFAULT_IMAGE_NAME = System.getenv().getOrDefault("PULSAR_TEST_IMAGE_NAME", - "apachepulsar/pulsar-test-latest-version:latest"); - - public PulsarContainer() { - this(DEFAULT_IMAGE_NAME); - } - - public PulsarContainer(final String pulsarVersion) { - super(pulsarVersion); - withExposedPorts(BROKER_HTTP_PORT, PULSAR_PORT); - withCommand("/pulsar/bin/pulsar standalone --advertised-address localhost"); - waitingFor(new HttpWaitStrategy() - .forPort(BROKER_HTTP_PORT) - .forStatusCode(200) - .forPath("/admin/v2/namespaces/public/default") - .withStartupTimeout(Duration.of(300, SECONDS))); - } - - public String getPlainTextPulsarBrokerUrl() { - return String.format("pulsar://%s:%s", this.getHost(), this.getMappedPort(PULSAR_PORT)); - } - -} diff --git a/tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java b/tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java deleted file mode 100644 index 3c4c0c3ac9568..0000000000000 --- a/tests/bc_2_0_1/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.pulsar.tests.integration; - -import java.util.concurrent.TimeUnit; -import lombok.Cleanup; -import org.apache.pulsar.client.api.Consumer; -import org.apache.pulsar.client.api.Message; -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.Schema; -import org.apache.pulsar.client.api.SubscriptionType; -import org.apache.pulsar.tests.TestRetrySupport; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class SmokeTest extends TestRetrySupport { - - private PulsarContainer pulsarContainer; - - @Override - @BeforeClass(alwaysRun = true) - public final void setup(){ - incrementSetupNumber(); - pulsarContainer = new PulsarContainer(); - pulsarContainer.start(); - } - - @Test - public void checkMessages() throws PulsarClientException { - - @Cleanup - PulsarClient client = PulsarClient.builder() - .serviceUrl(pulsarContainer.getPlainTextPulsarBrokerUrl()) - .build(); - - final String inputTopic = "input"; - - Producer producer = client.newProducer(Schema.STRING) - .topic(inputTopic) - .enableBatching(false) - .create(); - - Consumer consumer = client.newConsumer(Schema.STRING) - .topic(inputTopic) - .subscriptionName("test-subs") - .ackTimeout(10, TimeUnit.SECONDS) - .subscriptionType(SubscriptionType.Exclusive) - .subscribe(); - - producer.send("Hello!"); - Message message = consumer.receive(10, TimeUnit.SECONDS); - - Assert.assertEquals(message.getValue(), "Hello!"); - - } - - @Override - @AfterClass(alwaysRun = true) - public final void cleanup(){ - markCurrentSetupNumberCleaned(); - pulsarContainer.stop(); - } - -} diff --git a/tests/bc_2_0_1/src/test/resources/pulsar.xml b/tests/bc_2_0_1/src/test/resources/pulsar.xml deleted file mode 100644 index 43dfaea15813c..0000000000000 --- a/tests/bc_2_0_1/src/test/resources/pulsar.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java b/tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java deleted file mode 100644 index a6adaaf410e24..0000000000000 --- a/tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/PulsarContainer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.pulsar.tests.integration; - -import static java.time.temporal.ChronoUnit.SECONDS; -import java.time.Duration; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; - -public class PulsarContainer extends GenericContainer { - - public static final int PULSAR_PORT = 6650; - public static final int BROKER_HTTP_PORT = 8080; - public static final String DEFAULT_IMAGE_NAME = System.getenv().getOrDefault("PULSAR_TEST_IMAGE_NAME", - "apachepulsar/pulsar-test-latest-version:latest"); - - public PulsarContainer() { - this(DEFAULT_IMAGE_NAME); - } - - public PulsarContainer(final String pulsarVersion) { - super(pulsarVersion); - withExposedPorts(BROKER_HTTP_PORT, PULSAR_PORT); - withCommand("/pulsar/bin/pulsar standalone --advertised-address localhost"); - waitingFor(new HttpWaitStrategy() - .forPort(BROKER_HTTP_PORT) - .forStatusCode(200) - .forPath("/admin/v2/namespaces/public/default") - .withStartupTimeout(Duration.of(300, SECONDS))); - } - - public String getPlainTextPulsarBrokerUrl() { - return String.format("pulsar://%s:%s", this.getHost(), this.getMappedPort(PULSAR_PORT)); - } - -} diff --git a/tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java b/tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java deleted file mode 100644 index 3c4c0c3ac9568..0000000000000 --- a/tests/bc_2_6_0/src/test/java/org/apache/pulsar/tests/integration/SmokeTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.pulsar.tests.integration; - -import java.util.concurrent.TimeUnit; -import lombok.Cleanup; -import org.apache.pulsar.client.api.Consumer; -import org.apache.pulsar.client.api.Message; -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.Schema; -import org.apache.pulsar.client.api.SubscriptionType; -import org.apache.pulsar.tests.TestRetrySupport; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -public class SmokeTest extends TestRetrySupport { - - private PulsarContainer pulsarContainer; - - @Override - @BeforeClass(alwaysRun = true) - public final void setup(){ - incrementSetupNumber(); - pulsarContainer = new PulsarContainer(); - pulsarContainer.start(); - } - - @Test - public void checkMessages() throws PulsarClientException { - - @Cleanup - PulsarClient client = PulsarClient.builder() - .serviceUrl(pulsarContainer.getPlainTextPulsarBrokerUrl()) - .build(); - - final String inputTopic = "input"; - - Producer producer = client.newProducer(Schema.STRING) - .topic(inputTopic) - .enableBatching(false) - .create(); - - Consumer consumer = client.newConsumer(Schema.STRING) - .topic(inputTopic) - .subscriptionName("test-subs") - .ackTimeout(10, TimeUnit.SECONDS) - .subscriptionType(SubscriptionType.Exclusive) - .subscribe(); - - producer.send("Hello!"); - Message message = consumer.receive(10, TimeUnit.SECONDS); - - Assert.assertEquals(message.getValue(), "Hello!"); - - } - - @Override - @AfterClass(alwaysRun = true) - public final void cleanup(){ - markCurrentSetupNumberCleaned(); - pulsarContainer.stop(); - } - -} diff --git a/tests/bc_2_6_0/src/test/resources/backwards-client.xml b/tests/bc_2_6_0/src/test/resources/backwards-client.xml deleted file mode 100644 index 43dfaea15813c..0000000000000 --- a/tests/bc_2_6_0/src/test/resources/backwards-client.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/tests/compose/README.md b/tests/compose/README.md index 3f8b3111b1c67..4c9e4718021ac 100644 --- a/tests/compose/README.md +++ b/tests/compose/README.md @@ -21,7 +21,7 @@ This are docker compose files to quickly bring up a pulsar cluster. They use the pulsar testing docker image. To generate this, -run ```./gradlew assemble && ./gradlew -Pdocker :docker:pulsar-all-docker-image:dockerBuild``` in the top-level directory +run ```./gradlew assemble && ./gradlew :docker:pulsar-docker-image:dockerBuild``` in the top-level directory of the project. To run, change directory into multi or simple, and run: diff --git a/tests/docker-images/java-test-functions/build.gradle.kts b/tests/docker-images/java-test-functions/build.gradle.kts index 499c25096a68a..40480c1eb2db4 100644 --- a/tests/docker-images/java-test-functions/build.gradle.kts +++ b/tests/docker-images/java-test-functions/build.gradle.kts @@ -18,6 +18,7 @@ */ plugins { + id("pulsar.java-conventions") id("pulsar.shadow-conventions") } diff --git a/tests/docker-images/java-test-image/build.gradle.kts b/tests/docker-images/java-test-image/build.gradle.kts index 46b2cc36680b0..0f7646856fd04 100644 --- a/tests/docker-images/java-test-image/build.gradle.kts +++ b/tests/docker-images/java-test-image/build.gradle.kts @@ -17,10 +17,9 @@ * under the License. */ -// Docker image module — no Java compilation needed -tasks.named("compileJava") { enabled = false } -tasks.named("compileTestJava") { enabled = false } -tasks.named("jar") { enabled = false } +group = "org.apache.pulsar" +version = the().named("libs").findVersion("pulsar").get().requiredVersion + val pulsarVersion = project.version.toString() val dockerOrganization = providers.gradleProperty("docker.organization").getOrElse("apachepulsar") @@ -92,7 +91,3 @@ val dockerBuild by tasks.registering(Exec::class) { commandLine(args) } - -tasks.named("assemble") { - dependsOn(dockerBuild) -} diff --git a/tests/docker-images/java-test-plugins/build.gradle.kts b/tests/docker-images/java-test-plugins/build.gradle.kts index 52bdf83acd60a..995c4bbabec9a 100644 --- a/tests/docker-images/java-test-plugins/build.gradle.kts +++ b/tests/docker-images/java-test-plugins/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { // Use compileOnly so the plugin JAR doesn't bundle broker deps, // but need the full transitive classpath for compilation diff --git a/tests/docker-images/latest-version-image/build.gradle.kts b/tests/docker-images/latest-version-image/build.gradle.kts index 48cccee7d25c5..d283d69c6150c 100644 --- a/tests/docker-images/latest-version-image/build.gradle.kts +++ b/tests/docker-images/latest-version-image/build.gradle.kts @@ -17,10 +17,9 @@ * under the License. */ -// Docker image module — no Java compilation needed -tasks.named("compileJava") { enabled = false } -tasks.named("compileTestJava") { enabled = false } -tasks.named("jar") { enabled = false } +group = "org.apache.pulsar" +version = the().named("libs").findVersion("pulsar").get().requiredVersion + val pulsarVersion = project.version.toString() val dockerOrganization = providers.gradleProperty("docker.organization").getOrElse("apachepulsar") @@ -93,7 +92,3 @@ val dockerBuild by tasks.registering(Exec::class) { commandLine(args) } - -tasks.named("assemble") { - dependsOn(dockerBuild) -} diff --git a/tests/integration/build.gradle.kts b/tests/integration/build.gradle.kts index 51cb3cf6c6bd5..955f5c1686551 100644 --- a/tests/integration/build.gradle.kts +++ b/tests/integration/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + dependencies { testImplementation(libs.gson) testImplementation(project(":pulsar-functions:pulsar-functions-api-examples")) @@ -91,6 +95,11 @@ val integrationTest by tasks.registering(Test::class) { } } + val failFastValue = providers.gradleProperty("testFailFast").getOrElse("true").toBoolean() + failFast = failFastValue + systemProperty("testRetryCount", providers.gradleProperty("testRetryCount").getOrElse("1")) + systemProperty("testFailFast", failFastValue.toString()) + systemProperty("currentVersion", project.version.toString()) systemProperty("buildDirectory", layout.buildDirectory.get().asFile.absolutePath) diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/package-info.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/package-info.java index c0b2978614d12..ef1e8e64ee860 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/package-info.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/package-info.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Test containers used for running integration tests. */ 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 fdda3144e8bd4..0d45bfcb9ed86 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 @@ -629,7 +629,7 @@ protected void testPublishFunction(Runtime runtime) throws Exception { if (Runtime.JAVA == runtime || Runtime.PYTHON == runtime) { // java and python supports schema - publishAndConsumeMessages(inputTopicName, outputTopicName, numMessages); + publishAndConsumeLogMessages(inputTopicName, outputTopicName, numMessages); } else { // Does Go support schema? Maybe we need a switch instead for the Go case. @@ -764,7 +764,7 @@ protected void testExclamationFunction(Runtime runtime, // publish and consume result if (Runtime.JAVA == runtime || Runtime.PYTHON == runtime) { // java supports schema - publishAndConsumeMessages(inputTopicName, outputTopicName, numMessages); + publishAndConsumeLogMessages(inputTopicName, outputTopicName, numMessages); } else { // golang doesn't support schema publishAndConsumeMessagesBytes(inputTopicName, outputTopicName, numMessages); @@ -1414,9 +1414,9 @@ private void doGetFunctionStatus(String functionName, int numMessages, boolean c assertEquals(totalMessagesSuccessfullyProcessed, numMessages); } - private void publishAndConsumeMessages(String inputTopic, - String outputTopic, - int numMessages) throws Exception { + private void publishAndConsumeLogMessages(String inputTopic, + String outputTopic, + int numMessages) throws Exception { @Cleanup PulsarClient client = PulsarClient.builder() .serviceUrl(pulsarCluster.getPlainTextServiceUrl()) .build(); @@ -1776,7 +1776,7 @@ protected void testInitFunction(Runtime runtime) throws Exception { Collections.singletonMap("publish-topic", outputTopicName), null, null, null, null, null, null); // publish and consume result - publishAndConsumeMessages(inputTopicName, outputTopicName, numMessages); + publishAndConsumeLogMessages(inputTopicName, outputTopicName, numMessages); // delete function deleteFunction(functionName); @@ -1806,6 +1806,7 @@ protected void testLoggingFunction(Runtime runtime) throws Exception { try (PulsarAdmin admin = PulsarAdmin.builder().serviceHttpUrl(pulsarCluster.getHttpServiceUrl()).build()) { admin.topics().createNonPartitionedTopic(inputTopicName); admin.topics().createNonPartitionedTopic(logTopicName); + admin.topics().createSubscription(logTopicName, "test-sub", MessageId.earliest); } String functionName = "test-logging-fn-" + randomName(8); @@ -1823,7 +1824,7 @@ protected void testLoggingFunction(Runtime runtime) throws Exception { try { // publish and consume result - publishAndConsumeMessages(inputTopicName, logTopicName, numMessages, "-log"); + publishAndConsumeLogMessages(inputTopicName, logTopicName, numMessages, "-log"); } finally { // dump function logs so that it's easier to investigate failures pulsarCluster.dumpFunctionLogs(functionName); @@ -1875,10 +1876,10 @@ private void submitJavaLoggingFunction(String inputTopicName, assertTrue(result.getStdout().contains("Created successfully")); } - private void publishAndConsumeMessages(String inputTopic, - String outputTopic, - int numMessages, - String messagePostfix) throws Exception { + private void publishAndConsumeLogMessages(String inputTopic, + String outputTopic, + int numMessages, + String messagePostfix) throws Exception { @Cleanup PulsarClient client = PulsarClient.builder() .serviceUrl(pulsarCluster.getPlainTextServiceUrl()) .build(); @@ -1902,7 +1903,8 @@ private void publishAndConsumeMessages(String inputTopic, expectedMessages.add("message-" + i + messagePostfix); } - for (int i = 0; i < numMessages; i++) { + int i = 0; + while (i < numMessages) { Message msg = consumer.receive(30, TimeUnit.SECONDS); if (msg == null) { log.info("Input topic stats: {}", @@ -1920,9 +1922,16 @@ private void publishAndConsumeMessages(String inputTopic, } else { String logMsg = new String(msg.getValue(), UTF_8); log.info("Received message: '{}'", logMsg); - assertTrue(expectedMessages.contains(logMsg), "Message '" + logMsg + "' not expected"); - expectedMessages.remove(logMsg); + if (logMsg.endsWith(messagePostfix)) { + assertTrue(expectedMessages.contains(logMsg), "Message '" + logMsg + "' not expected"); + expectedMessages.remove(logMsg); + } else { + // logs contain everything that gets logged, just ignore other messages + log.info("Skipping unrelated log message: '{}'", logMsg); + continue; + } } + i++; } consumer.close(); diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java index 4bef699076288..46416c1a97ab5 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + /** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/tests/pulsar-client-admin-shade-test/build.gradle.kts b/tests/pulsar-client-admin-shade-test/build.gradle.kts index f6e0cf69c58ad..72bd81b6e258e 100644 --- a/tests/pulsar-client-admin-shade-test/build.gradle.kts +++ b/tests/pulsar-client-admin-shade-test/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Use the shadow JAR which contains relocated netty/jackson/etc classes. // In Maven, pulsar-client-admin-shaded produces the "pulsar-client-admin" artifact, // so the Maven shade test depends on the shaded JAR, not the original. diff --git a/tests/pulsar-client-all-shade-test/build.gradle.kts b/tests/pulsar-client-all-shade-test/build.gradle.kts index 75a5ce3f87f49..4e1ed37a584f4 100644 --- a/tests/pulsar-client-all-shade-test/build.gradle.kts +++ b/tests/pulsar-client-all-shade-test/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Use the shadow JAR from pulsar-client-all which contains relocated netty/jackson/etc classes. dependencies { diff --git a/tests/pulsar-client-shade-test/build.gradle.kts b/tests/pulsar-client-shade-test/build.gradle.kts index 283b9ea3805cb..32c54b0ef63e9 100644 --- a/tests/pulsar-client-shade-test/build.gradle.kts +++ b/tests/pulsar-client-shade-test/build.gradle.kts @@ -17,6 +17,10 @@ * under the License. */ +plugins { + id("pulsar.java-conventions") +} + // Use the shadow JARs which contain relocated netty/jackson/etc classes. // In Maven, pulsar-client-shaded produces the "pulsar-client" artifact and // pulsar-client-admin-shaded produces the "pulsar-client-admin" artifact, diff --git a/tiered-storage/file-system/build.gradle.kts b/tiered-storage/file-system/build.gradle.kts index aecca6d40d941..ab9366d15733e 100644 --- a/tiered-storage/file-system/build.gradle.kts +++ b/tiered-storage/file-system/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - alias(libs.plugins.nar) + id("pulsar.java-conventions") + id("pulsar.nar-conventions") } // Force Jetty 9 for this module. Hadoop MiniDFSCluster requires Jetty 9 classes diff --git a/tiered-storage/jcloud/build.gradle.kts b/tiered-storage/jcloud/build.gradle.kts index eafc3198d8a8a..40eef5d5cddeb 100644 --- a/tiered-storage/jcloud/build.gradle.kts +++ b/tiered-storage/jcloud/build.gradle.kts @@ -18,7 +18,8 @@ */ plugins { - alias(libs.plugins.nar) + id("pulsar.java-conventions") + id("pulsar.nar-conventions") } dependencies { compileOnly(project(":managed-ledger")) @@ -39,7 +40,6 @@ dependencies { testImplementation(project(":testmocks")) testImplementation(libs.guava) testImplementation(libs.netty.buffer) - testImplementation(libs.bookkeeper.server) testCompileOnly(libs.jclouds.blobstore) testCompileOnly(libs.jclouds.allblobstore) // The "transient" blobstore provider (for in-memory tests) is registered via From ce9a1948223eaa4005dac94e8fadec8be5bceabb Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 18:06:07 -0700 Subject: [PATCH 11/22] [improve][fn] Migrate pulsar-functions-proto from protobuf to LightProto (#25407) --- gradle/libs.versions.toml | 2 +- .../pulsar/broker/admin/v2/Functions.java | 4 +- .../worker/PulsarWorkerAssignmentTest.java | 2 +- .../impl/schema/ProtobufSchemaTest.java | 13 +- .../functions/instance/ContextImpl.java | 28 +- .../functions/instance/InstanceConfig.java | 6 +- .../functions/instance/InstanceUtils.java | 24 +- .../instance/JavaInstanceRunnable.java | 199 ++++--- .../instance/go/GoInstanceConfig.java | 4 +- .../instance/state/StateStoreProvider.java | 2 +- .../instance/stats/ComponentStatsManager.java | 26 +- .../instance/stats/FunctionStatsManager.java | 14 +- .../instance/stats/SinkStatsManager.java | 21 +- .../instance/stats/SourceStatsManager.java | 21 +- .../source/PulsarFunctionRecord.java | 13 +- .../source/batch/BatchSourceExecutor.java | 4 +- .../functions/instance/ContextImplTest.java | 7 +- .../functions/instance/InstanceUtilsTest.java | 51 +- .../instance/JavaInstanceRunnableTest.java | 60 +- .../functions/instance/JavaInstanceTest.java | 9 +- .../source/PulsarFunctionRecordTest.java | 23 +- .../functions/source/TopicSchemaTest.java | 7 +- .../apache/pulsar/functions/LocalRunner.java | 10 +- pulsar-functions/proto/build.gradle.kts | 23 +- .../main/proto/InstanceCommunication.proto | 15 +- .../functions/proto/FunctionDetailsTest.java | 6 +- pulsar-functions/runtime-all/build.gradle.kts | 1 - .../ClearTextFunctionTokenAuthProvider.java | 8 +- .../functions/auth/FunctionAuthProvider.java | 8 +- .../functions/auth/FunctionAuthUtils.java | 6 +- .../auth/KubernetesFunctionAuthProvider.java | 8 +- .../KubernetesSecretsTokenAuthProvider.java | 18 +- ...rnetesServiceAccountTokenAuthProvider.java | 10 +- .../runtime/JavaInstanceStarter.java | 119 ++-- .../pulsar/functions/runtime/Runtime.java | 9 +- .../functions/runtime/RuntimeFactory.java | 4 +- .../functions/runtime/RuntimeSpawner.java | 27 +- .../functions/runtime/RuntimeUtils.java | 61 +- .../BasicKubernetesManifestCustomizer.java | 12 +- .../KubernetesManifestCustomizer.java | 10 +- .../runtime/kubernetes/KubernetesRuntime.java | 93 +-- .../kubernetes/KubernetesRuntimeFactory.java | 18 +- .../runtime/process/ProcessRuntime.java | 125 ++-- .../runtime/thread/ThreadRuntime.java | 36 +- ...learTextFunctionTokenAuthProviderTest.java | 6 +- ...ubernetesSecretsTokenAuthProviderTest.java | 10 +- .../functions/runtime/RuntimeUtilsTest.java | 40 +- .../KubernetesRuntimeFactoryTest.java | 42 +- .../kubernetes/KubernetesRuntimeTest.java | 164 +++--- .../runtime/process/ProcessRuntimeTest.java | 47 +- .../DefaultSecretsProviderConfigurator.java | 10 +- ...KubernetesSecretsProviderConfigurator.java | 12 +- ...onfigBasedSecretsProviderConfigurator.java | 10 +- .../SecretsProviderConfigurator.java | 12 +- ...rnetesSecretsProviderConfiguratorTest.java | 14 +- .../pulsar/functions/utils/BatchingUtils.java | 24 +- .../functions/utils/ComponentTypeUtils.java | 2 +- .../pulsar/functions/utils/CryptoUtils.java | 49 +- .../functions/utils/FunctionCommon.java | 61 +- .../functions/utils/FunctionConfigUtils.java | 292 +++++----- .../utils/FunctionMetaDataUtils.java | 55 +- .../utils/FunctionRuntimeCommon.java | 8 +- .../utils/MessagePayloadProcessorUtils.java | 12 +- .../functions/utils/SinkConfigUtils.java | 201 ++++--- .../functions/utils/SourceConfigUtils.java | 102 ++-- .../functions/utils/BatchingUtilsTest.java | 13 +- .../utils/FunctionConfigUtilsTest.java | 129 +++-- .../utils/FunctionMetaDataUtilsTest.java | 67 ++- .../MessagePayloadProcessorUtilsTest.java | 18 +- .../functions/utils/SinkConfigUtilsTest.java | 29 +- .../utils/SourceConfigUtilsTest.java | 12 +- .../functions/worker/FunctionActioner.java | 124 ++-- .../worker/FunctionMetaDataManager.java | 35 +- .../functions/worker/FunctionRuntimeInfo.java | 2 +- .../worker/FunctionRuntimeManager.java | 50 +- .../functions/worker/MembershipManager.java | 82 +-- .../functions/worker/PackageUrlValidator.java | 4 +- .../functions/worker/SchedulerManager.java | 89 +-- .../functions/worker/WorkerStatsManager.java | 6 +- .../pulsar/functions/worker/WorkerUtils.java | 26 +- .../worker/rest/api/ComponentImpl.java | 57 +- .../worker/rest/api/FunctionsImpl.java | 120 ++-- .../worker/rest/api/FunctionsImplV2.java | 120 ++-- .../functions/worker/rest/api/SinksImpl.java | 136 +++-- .../worker/rest/api/SourcesImpl.java | 120 ++-- .../functions/worker/rest/api/WorkerImpl.java | 9 +- .../rest/api/v2/FunctionsApiV2Resource.java | 10 +- .../worker/scheduler/IScheduler.java | 7 +- .../worker/scheduler/RoundRobinScheduler.java | 16 +- .../worker/FunctionActionerTest.java | 53 +- .../worker/FunctionAssignmentTailerTest.java | 86 +-- .../worker/FunctionMetaDataManagerTest.java | 98 ++-- .../FunctionMetaDataTopicTailerTest.java | 4 +- .../worker/FunctionRuntimeManagerTest.java | 346 +++++------ .../worker/MembershipManagerTest.java | 143 +++-- .../worker/SchedulerManagerTest.java | 540 +++++++----------- .../worker/rest/api/FunctionsImplTest.java | 43 +- .../api/v2/FunctionApiV2ResourceTest.java | 66 +-- .../v3/AbstractFunctionApiResourceTest.java | 44 +- .../api/v3/AbstractFunctionsResourceTest.java | 7 +- .../api/v3/FunctionApiV3ResourceTest.java | 77 ++- .../rest/api/v3/SinkApiV3ResourceTest.java | 133 ++--- .../rest/api/v3/SourceApiV3ResourceTest.java | 113 ++-- .../scheduler/RoundRobinSchedulerTest.java | 29 +- 104 files changed, 2563 insertions(+), 2840 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fb14d62e4727a..cafc8c5cb29a6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -142,7 +142,7 @@ javax-servlet = "3.1.0" # Oxia / etcd oxia = "0.7.4" # Build plugins -lightproto = "0.6.2" +lightproto = "0.6.6" errorprone = "2.45.0" spotbugs = "4.9.6" checkerframework = "3.33.0" diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java index 69f99a42d0685..84e0b8a48c94f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java @@ -39,8 +39,8 @@ import org.apache.pulsar.broker.admin.AdminResource; import org.apache.pulsar.client.api.Message; import org.apache.pulsar.common.io.ConnectorDefinition; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; -import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionStatus; import org.apache.pulsar.functions.worker.WorkerService; import org.apache.pulsar.functions.worker.service.api.FunctionsV2; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java index 4fb0f2ac0fbaf..53deaf5307d51 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java @@ -47,7 +47,7 @@ import org.apache.pulsar.common.policies.data.ClusterData; import org.apache.pulsar.common.policies.data.TenantInfo; import org.apache.pulsar.common.util.ObjectMapperFactory; -import org.apache.pulsar.functions.proto.Function.Assignment; +import org.apache.pulsar.functions.proto.Assignment; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactory; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactoryConfig; import org.apache.pulsar.zookeeper.LocalBookkeeperEnsemble; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java index 9e283b6799dfd..0565c43ab40ff 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java @@ -37,7 +37,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.avro.Schema; import org.apache.pulsar.common.schema.SchemaType; -import org.apache.pulsar.functions.proto.Function; import org.testng.Assert; import org.testng.annotations.Test; @@ -112,15 +111,17 @@ private static ObjectNode normalizeAllProps(Map props, String sp @Test public void testEncodeAndDecode() { - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder().setName(NAME).build(); + org.apache.pulsar.client.schema.proto.Test.TestMessage testMessage = + org.apache.pulsar.client.schema.proto.Test.TestMessage.newBuilder().setStringField(NAME).build(); - ProtobufSchema protobufSchema = ProtobufSchema.of(Function.FunctionDetails.class); + ProtobufSchema protobufSchema = + ProtobufSchema.of(org.apache.pulsar.client.schema.proto.Test.TestMessage.class); - byte[] bytes = protobufSchema.encode(functionDetails); + byte[] bytes = protobufSchema.encode(testMessage); - Function.FunctionDetails message = protobufSchema.decode(bytes); + org.apache.pulsar.client.schema.proto.Test.TestMessage message = protobufSchema.decode(bytes); - Assert.assertEquals(message.getName(), NAME); + Assert.assertEquals(message.getStringField(), NAME); } @Test diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java index 94bb1ca896622..fe4948397af50 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/ContextImpl.java @@ -25,6 +25,7 @@ import com.google.gson.reflect.TypeToken; import io.prometheus.client.Summary; import java.nio.ByteBuffer; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -68,8 +69,10 @@ import org.apache.pulsar.functions.instance.stats.FunctionStatsManager; import org.apache.pulsar.functions.instance.stats.SinkStatsManager; import org.apache.pulsar.functions.instance.stats.SourceStatsManager; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.SinkSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProducerSpec; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.secretsprovider.SecretsProvider; import org.apache.pulsar.functions.source.PulsarFunctionRecord; import org.apache.pulsar.functions.source.TopicSchema; @@ -133,7 +136,7 @@ class ContextImpl implements Context, SinkContext, SourceContext, AutoCloseable userMetricsLabelNames[ComponentStatsManager.METRICS_LABEL_NAMES.length] = "metric"; } - private final Function.FunctionDetails.ComponentType componentType; + private final FunctionDetails.ComponentType componentType; private final java.util.function.Consumer fatalHandler; @@ -143,7 +146,7 @@ class ContextImpl implements Context, SinkContext, SourceContext, AutoCloseable public ContextImpl(InstanceConfig config, Logger logger, PulsarClient client, SecretsProvider secretsProvider, FunctionCollectorRegistry collectorRegistry, String[] metricsLabels, - Function.FunctionDetails.ComponentType componentType, ComponentStatsManager statsManager, + FunctionDetails.ComponentType componentType, ComponentStatsManager statsManager, StateManager stateManager, PulsarAdmin pulsarAdmin, ClientBuilder clientBuilder, java.util.function.Consumer fatalHandler, ProducerCache producerCache) { this.config = config; @@ -157,14 +160,9 @@ public ContextImpl(InstanceConfig config, Logger logger, PulsarClient client, this.producerCache = producerCache; - Function.ProducerSpec producerSpec = config.getFunctionDetails().getSink().getProducerSpec(); - ProducerConfig producerConfig = null; - if (producerSpec != null) { - producerConfig = FunctionConfigUtils.convertProducerSpecToProducerConfig(producerSpec); - useThreadLocalProducers = producerSpec.getUseThreadLocalProducers(); - } else { - useThreadLocalProducers = false; - } + ProducerSpec producerSpec = config.getFunctionDetails().getSink().getProducerSpec(); + ProducerConfig producerConfig = FunctionConfigUtils.convertProducerSpecToProducerConfig(producerSpec); + useThreadLocalProducers = producerSpec.isUseThreadLocalProducers(); producerBuilderFactory = new ProducerBuilderFactory(client, producerConfig, Thread.currentThread().getContextClassLoader(), @@ -230,7 +228,7 @@ public ContextImpl(InstanceConfig config, Logger logger, PulsarClient client, ); this.exposePulsarAdminClientEnabled = config.isExposePulsarAdminClientEnabled(); - Function.SourceSpec sourceSpec = config.getFunctionDetails().getSource(); + SourceSpec sourceSpec = config.getFunctionDetails().getSource(); switch (sourceSpec.getSubscriptionType()) { case FAILOVER: subscriptionType = SubscriptionType.Failover; @@ -255,7 +253,9 @@ public Record getCurrentRecord() { @Override public Collection getInputTopics() { - return config.getFunctionDetails().getSource().getInputSpecsMap().keySet(); + List topics = new ArrayList<>(); + config.getFunctionDetails().getSource().forEachInputSpecs((topic, spec) -> topics.add(topic)); + return topics; } @Override diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceConfig.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceConfig.java index fcee6d734d6c9..f4c5ca3808601 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceConfig.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceConfig.java @@ -22,8 +22,8 @@ import java.util.List; import lombok.Data; import lombok.Getter; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionAuthenticationSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * This is the config passed to the Java Instance. Contains all the information @@ -37,7 +37,7 @@ public class InstanceConfig { private String functionVersion; private FunctionDetails functionDetails; private int maxBufferedTuples; - private Function.FunctionAuthenticationSpec functionAuthenticationSpec; + private FunctionAuthenticationSpec functionAuthenticationSpec; private int port; private String clusterName; // Max pending async requests per instance to avoid large number of concurrent requests. diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java index 8866392a2ffd4..9f15cbaefb959 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java @@ -39,7 +39,9 @@ import org.apache.pulsar.client.api.SizeUnit; import org.apache.pulsar.common.util.Reflections; import org.apache.pulsar.functions.api.SerDe; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.sink.PulsarSink; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -93,40 +95,40 @@ private static T createInstance(String className, ClassLoader clsLoader, Cla } } - public Function.FunctionDetails.ComponentType calculateSubjectType(Function.FunctionDetails functionDetails) { - if (functionDetails.getComponentType() != Function.FunctionDetails.ComponentType.UNKNOWN) { + public FunctionDetails.ComponentType calculateSubjectType(FunctionDetails functionDetails) { + if (functionDetails.getComponentType() != FunctionDetails.ComponentType.UNKNOWN) { return functionDetails.getComponentType(); } - Function.SourceSpec sourceSpec = functionDetails.getSource(); - Function.SinkSpec sinkSpec = functionDetails.getSink(); + SourceSpec sourceSpec = functionDetails.getSource(); + SinkSpec sinkSpec = functionDetails.getSink(); if (sourceSpec.getInputSpecsCount() == 0) { - return Function.FunctionDetails.ComponentType.SOURCE; + return FunctionDetails.ComponentType.SOURCE; } // Now its between sink and function if (!isEmpty(sinkSpec.getBuiltin())) { // if its built in, its a sink - return Function.FunctionDetails.ComponentType.SINK; + return FunctionDetails.ComponentType.SINK; } if (isEmpty(sinkSpec.getClassName()) || sinkSpec.getClassName().equals(PulsarSink.class.getName())) { - return Function.FunctionDetails.ComponentType.FUNCTION; + return FunctionDetails.ComponentType.FUNCTION; } - return Function.FunctionDetails.ComponentType.SINK; + return FunctionDetails.ComponentType.SINK; } public static String getDefaultSubscriptionName(String tenant, String namespace, String name) { return FunctionCommon.getFullyQualifiedName(tenant, namespace, name); } - public static String getDefaultSubscriptionName(Function.FunctionDetails functionDetails) { + public static String getDefaultSubscriptionName(FunctionDetails functionDetails) { return getDefaultSubscriptionName( functionDetails.getTenant(), functionDetails.getNamespace(), functionDetails.getName()); } - public static Map getProperties(Function.FunctionDetails.ComponentType componentType, + public static Map getProperties(FunctionDetails.ComponentType componentType, String fullyQualifiedName, int instanceId) { Map properties = new HashMap<>(); switch (componentType) { diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java index efec75ef53ce0..08398b99c18a7 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java @@ -86,10 +86,13 @@ import org.apache.pulsar.functions.instance.state.StateStoreProvider; import org.apache.pulsar.functions.instance.stats.ComponentStatsManager; import org.apache.pulsar.functions.instance.stats.FunctionCollectorRegistry; -import org.apache.pulsar.functions.proto.Function.SinkSpec; -import org.apache.pulsar.functions.proto.Function.SourceSpec; -import org.apache.pulsar.functions.proto.InstanceCommunication; -import org.apache.pulsar.functions.proto.InstanceCommunication.MetricsData.Builder; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.MetricsData; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.ProducerSpec; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.secretsprovider.SecretsProvider; import org.apache.pulsar.functions.sink.PulsarSink; import org.apache.pulsar.functions.sink.PulsarSinkConfig; @@ -153,7 +156,7 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable { private InstanceCache instanceCache; - private final org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType componentType; + private final FunctionDetails.ComponentType componentType; private final Map properties; @@ -328,8 +331,8 @@ public void run() { @SuppressWarnings("deprecation") boolean atMostOnceAutoAck = instanceConfig.getFunctionDetails().getProcessingGuarantees() - == org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.ATMOST_ONCE - && instanceConfig.getFunctionDetails().getAutoAck(); + == ProcessingGuarantees.ATMOST_ONCE + && instanceConfig.getFunctionDetails().isAutoAck(); if (atMostOnceAutoAck) { currentRecord.ack(); } @@ -435,15 +438,15 @@ void handleResult(Record srcRecord, JavaExecutionResult result) throws Except if (result.getResult() != null) { sendOutputMessage(srcRecord, result.getResult()); } else { - org.apache.pulsar.functions.proto.Function.FunctionDetails functionDetails = + FunctionDetails functionDetails = instanceConfig.getFunctionDetails(); // When function return null, needs to be acked directly. if (functionDetails.getProcessingGuarantees() - != org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.MANUAL) { + != ProcessingGuarantees.MANUAL) { // This condition has been automatically acked. // After waiting to remove the autoAck configuration,can be removing the judgment condition. - if (!functionDetails.getAutoAck() || functionDetails.getProcessingGuarantees() - != org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.ATMOST_ONCE) { + if (!functionDetails.isAutoAck() || functionDetails.getProcessingGuarantees() + != ProcessingGuarantees.ATMOST_ONCE) { srcRecord.ack(); } } @@ -457,7 +460,7 @@ void handleResult(Record srcRecord, JavaExecutionResult result) throws Except @SuppressWarnings({"unchecked", "rawtypes"}) private void sendOutputMessage(Record srcRecord, Object output) throws Exception { - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SINK) { + if (componentType == FunctionDetails.ComponentType.SINK) { Thread.currentThread().setContextClassLoader(componentClassLoader); } AbstractSinkRecord sinkRecord; @@ -530,7 +533,7 @@ private OutputRecordSinkRecord encodeWithRecordSchemaAndDecodeWithSinkSchema( private Record readInput() throws Exception { Record record; - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) { + if (componentType == FunctionDetails.ComponentType.SOURCE) { Thread.currentThread().setContextClassLoader(componentClassLoader); } try { @@ -569,7 +572,7 @@ public synchronized void close() { } if (source != null) { - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) { + if (componentType == FunctionDetails.ComponentType.SOURCE) { Thread.currentThread().setContextClassLoader(componentClassLoader); } try { @@ -584,7 +587,7 @@ public synchronized void close() { } if (sink != null) { - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SINK) { + if (componentType == FunctionDetails.ComponentType.SINK) { Thread.currentThread().setContextClassLoader(componentClassLoader); } try { @@ -644,21 +647,21 @@ void setStats(ComponentStatsManager stats) { this.stats = stats; } - public InstanceCommunication.MetricsData getAndResetMetrics() { + public MetricsData getAndResetMetrics() { if (isInitialized) { statsLock.writeLock().lock(); try { - InstanceCommunication.MetricsData metricsData = internalGetMetrics(); + MetricsData metricsData = internalGetMetrics(); internalResetMetrics(); return metricsData; } finally { statsLock.writeLock().unlock(); } } - return InstanceCommunication.MetricsData.getDefaultInstance(); + return new MetricsData(); } - public InstanceCommunication.MetricsData getMetrics() { + public MetricsData getMetrics() { if (isInitialized) { statsLock.readLock().lock(); try { @@ -667,7 +670,7 @@ public InstanceCommunication.MetricsData getMetrics() { statsLock.readLock().unlock(); } } - return InstanceCommunication.MetricsData.getDefaultInstance(); + return new MetricsData(); } public void resetMetrics() { @@ -681,13 +684,13 @@ public void resetMetrics() { } } - private InstanceCommunication.MetricsData internalGetMetrics() { - InstanceCommunication.MetricsData.Builder bldr = createMetricsDataBuilder(); + private MetricsData internalGetMetrics() { + MetricsData metricsData = createMetricsData(); Map userMetrics = javaInstance.getMetrics(); if (userMetrics != null) { - bldr.putAllUserMetrics(userMetrics); + userMetrics.forEach(metricsData::putUserMetrics); } - return bldr.build(); + return metricsData; } private void internalResetMetrics() { @@ -695,55 +698,62 @@ private void internalResetMetrics() { javaInstance.resetMetrics(); } - private Builder createMetricsDataBuilder() { - InstanceCommunication.MetricsData.Builder bldr = InstanceCommunication.MetricsData.newBuilder(); + private MetricsData createMetricsData() { + MetricsData metricsData = new MetricsData(); if (stats != null) { - bldr.setProcessedSuccessfullyTotal((long) stats.getTotalProcessedSuccessfully()); - bldr.setSystemExceptionsTotal((long) stats.getTotalSysExceptions()); - bldr.setUserExceptionsTotal((long) stats.getTotalUserExceptions()); - bldr.setReceivedTotal((long) stats.getTotalRecordsReceived()); - bldr.setAvgProcessLatency(stats.getAvgProcessLatency()); - bldr.setLastInvocation((long) stats.getLastInvocation()); - - bldr.setProcessedSuccessfullyTotal1Min((long) stats.getTotalProcessedSuccessfully1min()); - bldr.setSystemExceptionsTotal1Min((long) stats.getTotalSysExceptions1min()); - bldr.setUserExceptionsTotal1Min((long) stats.getTotalUserExceptions1min()); - bldr.setReceivedTotal1Min((long) stats.getTotalRecordsReceived1min()); - bldr.setAvgProcessLatency1Min(stats.getAvgProcessLatency1min()); + metricsData.setProcessedSuccessfullyTotal((long) stats.getTotalProcessedSuccessfully()); + metricsData.setSystemExceptionsTotal((long) stats.getTotalSysExceptions()); + metricsData.setUserExceptionsTotal((long) stats.getTotalUserExceptions()); + metricsData.setReceivedTotal((long) stats.getTotalRecordsReceived()); + metricsData.setAvgProcessLatency(stats.getAvgProcessLatency()); + metricsData.setLastInvocation((long) stats.getLastInvocation()); + + metricsData.setProcessedsuccessfullytotal1min((long) stats.getTotalProcessedSuccessfully1min()); + metricsData.setSystemexceptionstotal1min((long) stats.getTotalSysExceptions1min()); + metricsData.setUserexceptionstotal1min((long) stats.getTotalUserExceptions1min()); + metricsData.setReceivedtotal1min((long) stats.getTotalRecordsReceived1min()); + metricsData.setAvgprocesslatency1min(stats.getAvgProcessLatency1min()); } - return bldr; + return metricsData; } - public InstanceCommunication.FunctionStatus.Builder getFunctionStatus() { - InstanceCommunication.FunctionStatus.Builder functionStatusBuilder = - InstanceCommunication.FunctionStatus.newBuilder(); + public FunctionStatus getFunctionStatus() { + FunctionStatus functionStatus = new FunctionStatus(); if (isInitialized) { statsLock.readLock().lock(); try { - functionStatusBuilder.setNumReceived((long) stats.getTotalRecordsReceived()); - functionStatusBuilder.setNumSuccessfullyProcessed((long) stats.getTotalProcessedSuccessfully()); - functionStatusBuilder.setNumUserExceptions((long) stats.getTotalUserExceptions()); - stats.getLatestUserExceptions().forEach(ex -> { - functionStatusBuilder.addLatestUserExceptions(ex); - }); - functionStatusBuilder.setNumSystemExceptions((long) stats.getTotalSysExceptions()); - stats.getLatestSystemExceptions().forEach(ex -> { - functionStatusBuilder.addLatestSystemExceptions(ex); - }); - stats.getLatestSourceExceptions().forEach(ex -> { - functionStatusBuilder.addLatestSourceExceptions(ex); - }); - stats.getLatestSinkExceptions().forEach(ex -> { - functionStatusBuilder.addLatestSinkExceptions(ex); - }); - functionStatusBuilder.setAverageLatency(stats.getAvgProcessLatency()); - functionStatusBuilder.setLastInvocationTime((long) stats.getLastInvocation()); + functionStatus.setNumReceived((long) stats.getTotalRecordsReceived()); + functionStatus.setNumSuccessfullyProcessed((long) stats.getTotalProcessedSuccessfully()); + functionStatus.setNumUserExceptions((long) stats.getTotalUserExceptions()); + for (FunctionStatus.ExceptionInformation ex : stats.getLatestUserExceptions()) { + functionStatus.addLatestUserException() + .setExceptionString(ex.getExceptionString()) + .setMsSinceEpoch(ex.getMsSinceEpoch()); + } + functionStatus.setNumSystemExceptions((long) stats.getTotalSysExceptions()); + for (FunctionStatus.ExceptionInformation ex : stats.getLatestSystemExceptions()) { + functionStatus.addLatestSystemException() + .setExceptionString(ex.getExceptionString()) + .setMsSinceEpoch(ex.getMsSinceEpoch()); + } + for (FunctionStatus.ExceptionInformation ex : stats.getLatestSourceExceptions()) { + functionStatus.addLatestSourceException() + .setExceptionString(ex.getExceptionString()) + .setMsSinceEpoch(ex.getMsSinceEpoch()); + } + for (FunctionStatus.ExceptionInformation ex : stats.getLatestSinkExceptions()) { + functionStatus.addLatestSinkException() + .setExceptionString(ex.getExceptionString()) + .setMsSinceEpoch(ex.getMsSinceEpoch()); + } + functionStatus.setAverageLatency(stats.getAvgProcessLatency()); + functionStatus.setLastInvocationTime((long) stats.getLastInvocation()); } finally { statsLock.readLock().unlock(); } } - return functionStatusBuilder; + return functionStatus; } private void setupLogHandler() { @@ -788,16 +798,20 @@ private void setupInput(ContextImpl contextImpl) throws Exception { // If source classname is not set, we default pulsar source if (sourceSpec.getClassName().isEmpty()) { Map topicSchema = new TreeMap<>(); - sourceSpec.getInputSpecsMap().forEach((topic, conf) -> { + sourceSpec.forEachInputSpecs((topic, conf) -> { ConsumerConfig consumerConfig = - ConsumerConfig.builder().isRegexPattern(conf.getIsRegexPattern()).build(); + ConsumerConfig.builder().isRegexPattern(conf.isIsRegexPattern()).build(); if (conf.getSchemaType() != null && !conf.getSchemaType().isEmpty()) { consumerConfig.setSchemaType(conf.getSchemaType()); } else if (conf.getSerdeClassName() != null && !conf.getSerdeClassName().isEmpty()) { consumerConfig.setSerdeClassName(conf.getSerdeClassName()); } - consumerConfig.setSchemaProperties(conf.getSchemaPropertiesMap()); - consumerConfig.setConsumerProperties(conf.getConsumerPropertiesMap()); + Map schemaProperties = new HashMap<>(); + conf.forEachSchemaProperties(schemaProperties::put); + consumerConfig.setSchemaProperties(schemaProperties); + Map consumerProperties = new HashMap<>(); + conf.forEachConsumerProperties(consumerProperties::put); + consumerConfig.setConsumerProperties(consumerProperties); if (conf.hasReceiverQueueSize()) { consumerConfig.setReceiverQueueSize(conf.getReceiverQueueSize().getValue()); } @@ -808,12 +822,12 @@ private void setupInput(ContextImpl contextImpl) throws Exception { consumerConfig.setMessagePayloadProcessorConfig( MessagePayloadProcessorUtils.convertFromSpec(conf.getMessagePayloadProcessorSpec())); } - consumerConfig.setPoolMessages(conf.getPoolMessages()); + consumerConfig.setPoolMessages(conf.isPoolMessages()); topicSchema.put(topic, consumerConfig); }); - sourceSpec.getTopicsToSerDeClassNameMap().forEach((topic, serde) -> { + sourceSpec.forEachTopicsToSerDeClassName((topic, serde) -> { topicSchema.put(topic, ConsumerConfig.builder() .serdeClassName(serde) @@ -852,7 +866,7 @@ private void setupInput(ContextImpl contextImpl) throws Exception { ); pulsarSourceConfig.setSkipToLatest( - sourceSpec.getSkipToLatest() + sourceSpec.isSkipToLatest() ); Objects.requireNonNull(contextImpl.getSubscriptionType()); @@ -910,7 +924,7 @@ private void setupInput(ContextImpl contextImpl) throws Exception { } this.source = (Source) object; - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) { + if (componentType == FunctionDetails.ComponentType.SOURCE) { Thread.currentThread().setContextClassLoader(this.componentClassLoader); } try { @@ -957,16 +971,15 @@ static Map augmentAndFilterConnectorConfig(String connectorConfi InstanceConfig instanceConfig, SecretsProvider secretsProvider, ClassLoader componentClassLoader, - org.apache.pulsar.functions.proto.Function - .FunctionDetails.ComponentType componentType) + FunctionDetails.ComponentType componentType) throws IOException { final Map config = connectorConfigs.isEmpty() ? new HashMap<>() : ObjectMapperFactory .getMapper() .reader() .forType(new TypeReference>() {}) .readValue(connectorConfigs); - if (componentType != org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SINK - && componentType != org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) { + if (componentType != FunctionDetails.ComponentType.SINK + && componentType != FunctionDetails.ComponentType.SOURCE) { return config; } @@ -974,7 +987,7 @@ static Map augmentAndFilterConnectorConfig(String connectorConfi if (instanceConfig.isIgnoreUnknownConfigFields() && componentClassLoader instanceof NarClassLoader) { final String configClassName; - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) { + if (componentType == FunctionDetails.ComponentType.SOURCE) { configClassName = ConnectorUtils .getConnectorDefinition((NarClassLoader) componentClassLoader).getSourceConfigClass(); } else { @@ -1048,7 +1061,7 @@ private void setupOutput(ContextImpl contextImpl) throws Exception { this.instanceConfig.getFunctionDetails().getProcessingGuarantees().name())); pulsarSinkConfig.setTopic(sinkSpec.getTopic()); pulsarSinkConfig.setForwardSourceMessageProperty( - this.instanceConfig.getFunctionDetails().getSink().getForwardSourceMessageProperty()); + this.instanceConfig.getFunctionDetails().getSink().isForwardSourceMessageProperty()); if (!StringUtils.isEmpty(sinkSpec.getSchemaType())) { pulsarSinkConfig.setSchemaType(sinkSpec.getSchemaType()); @@ -1057,22 +1070,24 @@ private void setupOutput(ContextImpl contextImpl) throws Exception { } pulsarSinkConfig.setTypeClassName(sinkSpec.getTypeClassName()); - pulsarSinkConfig.setSchemaProperties(sinkSpec.getSchemaPropertiesMap()); - - if (this.instanceConfig.getFunctionDetails().getSink().getProducerSpec() != null) { - org.apache.pulsar.functions.proto.Function.ProducerSpec conf = - this.instanceConfig.getFunctionDetails().getSink().getProducerSpec(); - ProducerConfig.ProducerConfigBuilder builder = ProducerConfig.builder() - .maxPendingMessages(conf.getMaxPendingMessages()) - .maxPendingMessagesAcrossPartitions(conf.getMaxPendingMessagesAcrossPartitions()) - .batchBuilder(conf.getBatchBuilder()) - .useThreadLocalProducers(conf.getUseThreadLocalProducers()) - .cryptoConfig(CryptoUtils.convertFromSpec(conf.getCryptoSpec())) - .batchingConfig(BatchingUtils.convertFromSpec(conf.getBatchingSpec())) - .compressionType(FunctionCommon.convertFromFunctionDetailsCompressionType( - conf.getCompressionType())); - pulsarSinkConfig.setProducerConfig(builder.build()); - } + Map schemaProperties = new HashMap<>(); + sinkSpec.forEachSchemaProperties(schemaProperties::put); + pulsarSinkConfig.setSchemaProperties(schemaProperties); + + ProducerSpec conf = + this.instanceConfig.getFunctionDetails().getSink().getProducerSpec(); + ProducerConfig.ProducerConfigBuilder builder = ProducerConfig.builder() + .maxPendingMessages(conf.getMaxPendingMessages()) + .maxPendingMessagesAcrossPartitions(conf.getMaxPendingMessagesAcrossPartitions()) + .batchBuilder(conf.getBatchBuilder()) + .useThreadLocalProducers(conf.isUseThreadLocalProducers()) + .cryptoConfig(conf.hasCryptoSpec() + ? CryptoUtils.convertFromSpec(conf.getCryptoSpec()) : null) + .batchingConfig(BatchingUtils.convertFromSpec( + conf.hasBatchingSpec() ? conf.getBatchingSpec() : null)) + .compressionType(FunctionCommon.convertFromFunctionDetailsCompressionType( + conf.getCompressionType())); + pulsarSinkConfig.setProducerConfig(builder.build()); object = new PulsarSink(this.client, pulsarSinkConfig, this.properties, this.stats, this.functionClassLoader, this.producerCache); @@ -1090,7 +1105,7 @@ private void setupOutput(ContextImpl contextImpl) throws Exception { throw new RuntimeException("Sink does not implement correct interface"); } - if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SINK) { + if (componentType == FunctionDetails.ComponentType.SINK) { Thread.currentThread().setContextClassLoader(this.componentClassLoader); } try { diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/go/GoInstanceConfig.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/go/GoInstanceConfig.java index 467ec74921330..cd0f8a90ca910 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/go/GoInstanceConfig.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/go/GoInstanceConfig.java @@ -21,7 +21,7 @@ import java.util.Map; import lombok.Getter; import lombok.Setter; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.SubscriptionPosition; @Setter @Getter @@ -61,7 +61,7 @@ public class GoInstanceConfig { private long timeoutMs; private String subscriptionName = ""; private boolean cleanupSubscription; - private int subscriptionPosition = Function.SubscriptionPosition.LATEST.getNumber(); + private int subscriptionPosition = SubscriptionPosition.LATEST.getValue(); // value is the json string of ConsumerSpec private Map sourceInputSpecs; diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/StateStoreProvider.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/StateStoreProvider.java index 4088888e4a5d4..a92a3f140d908 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/StateStoreProvider.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/StateStoreProvider.java @@ -20,7 +20,7 @@ import java.util.Map; import org.apache.pulsar.functions.api.StateStore; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * The State Store Provider provides the state stores for a function. diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/ComponentStatsManager.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/ComponentStatsManager.java index eefd6992ad94f..e147da93ecf94 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/ComponentStatsManager.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/ComponentStatsManager.java @@ -26,8 +26,8 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; @Slf4j public abstract class ComponentStatsManager implements AutoCloseable { @@ -39,7 +39,7 @@ public abstract class ComponentStatsManager implements AutoCloseable { protected final FunctionCollectorRegistry collectorRegistry; @SuppressWarnings("unchecked") // empty queue is used as a typed return value - protected final EvictingQueue emptyQueue = + protected final EvictingQueue emptyQueue = EvictingQueue.create(0); public static final String USER_METRIC_PREFIX = "user_metric_"; @@ -57,7 +57,7 @@ public abstract class ComponentStatsManager implements AutoCloseable { public static ComponentStatsManager getStatsManager(FunctionCollectorRegistry collectorRegistry, String[] metricsLabels, ScheduledExecutorService scheduledExecutorService, - Function.FunctionDetails.ComponentType componentType) { + FunctionDetails.ComponentType componentType) { switch (componentType) { case FUNCTION: return new FunctionStatsManager(collectorRegistry, metricsLabels, scheduledExecutorService); @@ -127,16 +127,16 @@ public ComponentStatsManager(FunctionCollectorRegistry collectorRegistry, public abstract double getAvgProcessLatency1min(); - public abstract EvictingQueue + public abstract EvictingQueue getLatestUserExceptions(); - public abstract EvictingQueue + public abstract EvictingQueue getLatestSystemExceptions(); - public abstract EvictingQueue + public abstract EvictingQueue getLatestSourceExceptions(); - public abstract EvictingQueue + public abstract EvictingQueue getLatestSinkExceptions(); public String getStatsAsString() throws IOException { @@ -147,14 +147,14 @@ public String getStatsAsString() throws IOException { return outputWriter.toString(); } - protected InstanceCommunication.FunctionStatus.ExceptionInformation getExceptionInfo(Throwable th, long ts) { - InstanceCommunication.FunctionStatus.ExceptionInformation.Builder exceptionInfoBuilder = - InstanceCommunication.FunctionStatus.ExceptionInformation.newBuilder().setMsSinceEpoch(ts); + protected FunctionStatus.ExceptionInformation getExceptionInfo(Throwable th, long ts) { + FunctionStatus.ExceptionInformation exceptionInfo = new FunctionStatus.ExceptionInformation(); + exceptionInfo.setMsSinceEpoch(ts); String msg = String.format("[%s]: %s", th.getClass().getName(), th.getMessage()); if (msg != null) { - exceptionInfoBuilder.setExceptionString(msg); + exceptionInfo.setExceptionString(msg); } - return exceptionInfoBuilder.build(); + return exceptionInfo; } diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionStatsManager.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionStatsManager.java index 0009fcea6671a..96dd976d8969d 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionStatsManager.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionStatsManager.java @@ -28,7 +28,7 @@ import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.FunctionStatus; /** * Function stats. @@ -108,10 +108,10 @@ public class FunctionStatsManager extends ComponentStatsManager { private Counter.Child statTotalRecordsReceivedChild1min; @Getter - private EvictingQueue latestUserExceptions = + private EvictingQueue latestUserExceptions = EvictingQueue.create(10); @Getter - private EvictingQueue latestSystemExceptions = + private EvictingQueue latestSystemExceptions = EvictingQueue.create(10); private final RateLimiter userExceptionRateLimiter; @@ -267,7 +267,7 @@ public FunctionStatsManager(FunctionCollectorRegistry collectorRegistry, public void addUserException(Throwable ex) { long ts = System.currentTimeMillis(); - InstanceCommunication.FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); + FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); latestUserExceptions.add(info); // report exception throw prometheus @@ -279,7 +279,7 @@ public void addUserException(Throwable ex) { public void addSystemException(Throwable ex) { long ts = System.currentTimeMillis(); - InstanceCommunication.FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); + FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); latestSystemExceptions.add(info); // report exception throw prometheus @@ -418,12 +418,12 @@ public double getAvgProcessLatency1min() { } @Override - public EvictingQueue getLatestSourceExceptions() { + public EvictingQueue getLatestSourceExceptions() { return emptyQueue; } @Override - public EvictingQueue getLatestSinkExceptions() { + public EvictingQueue getLatestSinkExceptions() { return emptyQueue; } diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java index 853fe5d96073e..10436d75607f2 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java @@ -24,7 +24,8 @@ import io.prometheus.client.Gauge; import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import lombok.Getter; +import org.apache.pulsar.functions.proto.FunctionStatus; public class SinkStatsManager extends ComponentStatsManager { @@ -81,9 +82,11 @@ public class SinkStatsManager extends ComponentStatsManager { private Counter.Child statTotalSinkExceptionsChild1min; private Counter.Child statTotalWrittenChild1min; - private EvictingQueue latestSystemExceptions = + @Getter + private EvictingQueue latestSystemExceptions = EvictingQueue.create(10); - private EvictingQueue latestSinkExceptions = + @Getter + private EvictingQueue latestSinkExceptions = EvictingQueue.create(10); private final RateLimiter sysExceptionRateLimiter; @@ -229,7 +232,7 @@ public void incrSysExceptions(Throwable ex) { statTotalSysExceptions1minChild.inc(); long ts = System.currentTimeMillis(); - InstanceCommunication.FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); + FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); latestSystemExceptions.add(info); // report exception throw prometheus @@ -255,7 +258,7 @@ public void incrSinkExceptions(Throwable ex) { statTotalSinkExceptionsChild1min.inc(); long ts = System.currentTimeMillis(); - InstanceCommunication.FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); + FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); latestSinkExceptions.add(info); // report exception throw prometheus @@ -338,22 +341,22 @@ public double getAvgProcessLatency1min() { } @Override - public EvictingQueue getLatestUserExceptions() { + public EvictingQueue getLatestUserExceptions() { return emptyQueue; } @Override - public EvictingQueue getLatestSystemExceptions() { + public EvictingQueue getLatestSystemExceptions() { return latestSystemExceptions; } @Override - public EvictingQueue getLatestSourceExceptions() { + public EvictingQueue getLatestSourceExceptions() { return emptyQueue; } @Override - public EvictingQueue getLatestSinkExceptions() { + public EvictingQueue getLatestSinkExceptions() { return latestSinkExceptions; } } diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java index b21bb2e943c22..454df8fe377d1 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java @@ -24,7 +24,8 @@ import io.prometheus.client.Gauge; import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import lombok.Getter; +import org.apache.pulsar.functions.proto.FunctionStatus; public class SourceStatsManager extends ComponentStatsManager { @@ -81,9 +82,11 @@ public class SourceStatsManager extends ComponentStatsManager { private Counter.Child statTotalSourceExceptionsChild1min; private Counter.Child statTotalWrittenChild1min; - private EvictingQueue latestSystemExceptions = + @Getter + private EvictingQueue latestSystemExceptions = EvictingQueue.create(10); - private EvictingQueue latestSourceExceptions = + @Getter + private EvictingQueue latestSourceExceptions = EvictingQueue.create(10); protected final RateLimiter sysExceptionRateLimiter; @@ -229,7 +232,7 @@ public void incrSysExceptions(Throwable ex) { statTotalSysExceptions1minChild.inc(); long ts = System.currentTimeMillis(); - InstanceCommunication.FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); + FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); latestSystemExceptions.add(info); // report exception throw prometheus @@ -250,7 +253,7 @@ public void incrSourceExceptions(Throwable ex) { statTotalSourceExceptionsChild1min.inc(); long ts = System.currentTimeMillis(); - InstanceCommunication.FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); + FunctionStatus.ExceptionInformation info = getExceptionInfo(ex, ts); latestSourceExceptions.add(info); // report exception throw prometheus @@ -338,22 +341,22 @@ public double getAvgProcessLatency1min() { } @Override - public EvictingQueue getLatestUserExceptions() { + public EvictingQueue getLatestUserExceptions() { return EvictingQueue.create(0); } @Override - public EvictingQueue getLatestSystemExceptions() { + public EvictingQueue getLatestSystemExceptions() { return latestSystemExceptions; } @Override - public EvictingQueue getLatestSourceExceptions() { + public EvictingQueue getLatestSourceExceptions() { return latestSourceExceptions; } @Override - public EvictingQueue getLatestSinkExceptions() { + public EvictingQueue getLatestSinkExceptions() { return EvictingQueue.create(0); } } diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarFunctionRecord.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarFunctionRecord.java index 5071c25665850..56c6dc657077c 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarFunctionRecord.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarFunctionRecord.java @@ -24,7 +24,8 @@ import org.apache.pulsar.client.api.Message; import org.apache.pulsar.client.api.Schema; import org.apache.pulsar.functions.api.Record; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; /** * The record returned by the proxy to the user. @@ -33,9 +34,9 @@ public class PulsarFunctionRecord implements Record { private final Record record; - private final Function.FunctionDetails functionConfig; + private final FunctionDetails functionConfig; - public PulsarFunctionRecord(Record record, Function.FunctionDetails functionConfig) { + public PulsarFunctionRecord(Record record, FunctionDetails functionConfig) { this.record = record; this.functionConfig = functionConfig; } @@ -88,12 +89,12 @@ public Map getProperties() { @SuppressWarnings("deprecation") @Override public void ack() { - Function.ProcessingGuarantees processingGuarantees = functionConfig.getProcessingGuarantees(); - if (processingGuarantees == Function.ProcessingGuarantees.MANUAL) { + ProcessingGuarantees processingGuarantees = functionConfig.getProcessingGuarantees(); + if (processingGuarantees == ProcessingGuarantees.MANUAL) { record.ack(); } else { log.warn("Ignore this ack option, under this configuration Guarantees:[{}] autoAck:[{}], " - + "the framework will automatically ack", processingGuarantees, functionConfig.getAutoAck()); + + "the framework will automatically ack", processingGuarantees, functionConfig.isAutoAck()); } } diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutor.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutor.java index 4a890250a50b4..c5fdd988e099c 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutor.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutor.java @@ -36,7 +36,7 @@ import org.apache.pulsar.common.util.Reflections; import org.apache.pulsar.functions.api.Record; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.utils.Actions; import org.apache.pulsar.functions.utils.FunctionCommon; import org.apache.pulsar.functions.utils.SourceConfigUtils; @@ -283,7 +283,7 @@ private void createIntermediateTopicConsumer() { .subscriptionType(SubscriptionType.Shared) .topic(intermediateTopicName) .properties(InstanceUtils.getProperties( - Function.FunctionDetails.ComponentType.SOURCE, fqfn, sourceContext.getInstanceId())) + FunctionDetails.ComponentType.SOURCE, fqfn, sourceContext.getInstanceId())) .subscribeAsync(); intermediateTopicConsumer = cf.join(); return Actions.ActionResult.builder() diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java index 4192407eff1d8..92d20a6221b6a 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java @@ -64,7 +64,7 @@ import org.apache.pulsar.functions.instance.state.BKStateStoreImpl; import org.apache.pulsar.functions.instance.state.InstanceStateManager; import org.apache.pulsar.functions.instance.stats.FunctionCollectorRegistry; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.secretsprovider.EnvironmentBasedSecretsProvider; import org.apache.pulsar.functions.source.PulsarFunctionRecord; import org.apache.pulsar.io.core.SinkContext; @@ -96,9 +96,8 @@ public class ContextImplTest { public void setup() throws PulsarClientException { config = new InstanceConfig(); config.setExposePulsarAdminClientEnabled(true); - FunctionDetails functionDetails = FunctionDetails.newBuilder() - .setUserConfig("") - .build(); + FunctionDetails functionDetails = new FunctionDetails() + .setUserConfig(""); config.setFunctionDetails(functionDetails); logger = mock(Logger.class); pulsarAdmin = mock(PulsarAdmin.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/InstanceUtilsTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/InstanceUtilsTest.java index 86c2aa341d0bc..cdadce49926b5 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/InstanceUtilsTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/InstanceUtilsTest.java @@ -19,8 +19,7 @@ package org.apache.pulsar.functions.instance; import static org.testng.Assert.assertEquals; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.testng.annotations.Test; public class InstanceUtilsTest { @@ -30,15 +29,15 @@ public class InstanceUtilsTest { */ @Test public void testCalculateSubjectTypeForSource() { - FunctionDetails.Builder builder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); // no input topics mean source - builder.setSource(Function.SourceSpec.newBuilder().build()); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.SOURCE); + functionDetails.setSource(); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.SOURCE); // make sure that if the componenttype is set, that gets precedence. - builder.setComponentType(FunctionDetails.ComponentType.SINK); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.SINK); - builder.setComponentType(FunctionDetails.ComponentType.FUNCTION); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.FUNCTION); + functionDetails.setComponentType(FunctionDetails.ComponentType.SINK); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.SINK); + functionDetails.setComponentType(FunctionDetails.ComponentType.FUNCTION); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.FUNCTION); } /** @@ -46,17 +45,15 @@ public void testCalculateSubjectTypeForSource() { */ @Test public void testCalculateSubjectTypeForFunction() { - FunctionDetails.Builder builder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); // an input but no sink classname is a function - builder.setSource( - Function.SourceSpec.newBuilder().putInputSpecs("topic", Function.ConsumerSpec.newBuilder().build()) - .build()); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.FUNCTION); + functionDetails.setSource().putInputSpecs("topic"); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.FUNCTION); // make sure that if the componenttype is set, that gets precedence. - builder.setComponentType(FunctionDetails.ComponentType.SOURCE); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.SOURCE); - builder.setComponentType(FunctionDetails.ComponentType.SINK); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.SINK); + functionDetails.setComponentType(FunctionDetails.ComponentType.SOURCE); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.SOURCE); + functionDetails.setComponentType(FunctionDetails.ComponentType.SINK); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.SINK); } /** @@ -64,17 +61,15 @@ public void testCalculateSubjectTypeForFunction() { */ @Test public void testCalculateSubjectTypeForSink() { - FunctionDetails.Builder builder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); // an input and a sink classname is a sink - builder.setSource( - Function.SourceSpec.newBuilder().putInputSpecs("topic", Function.ConsumerSpec.newBuilder().build()) - .build()); - builder.setSink(Function.SinkSpec.newBuilder().setClassName("something").build()); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.SINK); + functionDetails.setSource().putInputSpecs("topic"); + functionDetails.setSink().setClassName("something"); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.SINK); // make sure that if the componenttype is set, that gets precedence. - builder.setComponentType(FunctionDetails.ComponentType.SOURCE); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.SOURCE); - builder.setComponentType(FunctionDetails.ComponentType.FUNCTION); - assertEquals(InstanceUtils.calculateSubjectType(builder.build()), FunctionDetails.ComponentType.FUNCTION); + functionDetails.setComponentType(FunctionDetails.ComponentType.SOURCE); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.SOURCE); + functionDetails.setComponentType(FunctionDetails.ComponentType.FUNCTION); + assertEquals(InstanceUtils.calculateSubjectType(functionDetails), FunctionDetails.ComponentType.FUNCTION); } } diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java index 84a0e9a574af8..c66910fd0f0a9 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java @@ -53,10 +53,12 @@ import org.apache.pulsar.functions.api.SerDe; import org.apache.pulsar.functions.instance.stats.ComponentStatsManager; import org.apache.pulsar.functions.instance.stats.FunctionStatsManager; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.SinkSpec; -import org.apache.pulsar.functions.proto.Function.SourceSpec; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.MetricsData; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.secretsprovider.EnvironmentBasedSecretsProvider; import org.apache.pulsar.io.core.Sink; import org.apache.pulsar.io.core.SinkContext; @@ -95,11 +97,11 @@ private static InstanceConfig createInstanceConfig(FunctionDetails functionDetai } private JavaInstanceRunnable createRunnable(String outputSerde) throws Exception { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); if (outputSerde != null) { - functionDetailsBuilder.setSink(SinkSpec.newBuilder().setSerDeClassName(outputSerde).build()); + functionDetails.setSink().setSerDeClassName(outputSerde); } - return createRunnable(functionDetailsBuilder.build()); + return createRunnable(functionDetails); } private JavaInstanceRunnable createRunnable(FunctionDetails functionDetails) throws Exception { @@ -116,11 +118,10 @@ private JavaInstanceRunnable createRunnable(SourceSpec sourceSpec, throws PulsarClientException { ClientBuilder clientBuilder = mock(ClientBuilder.class); when(clientBuilder.build()).thenReturn(null); - FunctionDetails functionDetails = FunctionDetails.newBuilder() - .setSource(sourceSpec) - .setClassName(functionClassName) - .setSink(sinkSpec) - .build(); + FunctionDetails functionDetails = new FunctionDetails() + .setClassName(functionClassName); + functionDetails.setSource().copyFrom(sourceSpec); + functionDetails.setSink().copyFrom(sinkSpec); InstanceConfig config = createInstanceConfig(functionDetails); config.setClusterName("test-cluster"); PulsarClient pulsarClient = PulsarClient.builder().serviceUrl("pulsar://test-cluster:6650").build(); @@ -180,10 +181,9 @@ public Void process(String input, Context context) throws Exception { @SuppressWarnings("deprecation") @Test public void testFunctionAsyncTime() throws Exception { - FunctionDetails functionDetails = FunctionDetails.newBuilder() + FunctionDetails functionDetails = new FunctionDetails() .setAutoAck(true) - .setProcessingGuarantees(org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.MANUAL) - .build(); + .setProcessingGuarantees(ProcessingGuarantees.MANUAL); JavaInstanceRunnable javaInstanceRunnable = createRunnable(functionDetails); FunctionStatsManager manager = mock(FunctionStatsManager.class); javaInstanceRunnable.setStats(manager); @@ -202,23 +202,23 @@ public void testFunctionResultNull() throws Exception { // ProcessingGuarantees == MANUAL, not need ack. Record record = mock(Record.class); - getJavaInstanceRunnable(true, org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.MANUAL) + getJavaInstanceRunnable(true, ProcessingGuarantees.MANUAL) .handleResult(record, javaExecutionResult); verify(record, times(0)).ack(); // ProcessingGuarantees == ATMOST_ONCE and autoAck == true, not need ack clearInvocations(record); - getJavaInstanceRunnable(true, org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.ATMOST_ONCE) + getJavaInstanceRunnable(true, ProcessingGuarantees.ATMOST_ONCE) .handleResult(record, javaExecutionResult); verify(record, times(0)).ack(); // other case, need ack clearInvocations(record); - getJavaInstanceRunnable(true, org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.ATLEAST_ONCE) + getJavaInstanceRunnable(true, ProcessingGuarantees.ATLEAST_ONCE) .handleResult(record, javaExecutionResult); verify(record, times(1)).ack(); clearInvocations(record); - getJavaInstanceRunnable(true, org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.EFFECTIVELY_ONCE) + getJavaInstanceRunnable(true, ProcessingGuarantees.EFFECTIVELY_ONCE) .handleResult(record, javaExecutionResult); verify(record, times(1)).ack(); } @@ -226,10 +226,10 @@ public void testFunctionResultNull() throws Exception { @SuppressWarnings("deprecation") @NonNull private JavaInstanceRunnable getJavaInstanceRunnable(boolean autoAck, - org.apache.pulsar.functions.proto.Function.ProcessingGuarantees processingGuarantees) throws Exception { - FunctionDetails functionDetails = FunctionDetails.newBuilder() + ProcessingGuarantees processingGuarantees) throws Exception { + FunctionDetails functionDetails = new FunctionDetails() .setAutoAck(autoAck) - .setProcessingGuarantees(processingGuarantees).build(); + .setProcessingGuarantees(processingGuarantees); JavaInstanceRunnable javaInstanceRunnable = createRunnable(functionDetails); Field stats = JavaInstanceRunnable.class.getDeclaredField("stats"); @@ -243,10 +243,11 @@ private JavaInstanceRunnable getJavaInstanceRunnable(boolean autoAck, public void testStatsManagerNull() throws Exception { JavaInstanceRunnable javaInstanceRunnable = createRunnable((String) null); - Assert.assertEquals(javaInstanceRunnable.getFunctionStatus().build(), - InstanceCommunication.FunctionStatus.newBuilder().build()); + Assert.assertEquals(javaInstanceRunnable.getFunctionStatus().toByteArray(), + new FunctionStatus().toByteArray()); - Assert.assertEquals(javaInstanceRunnable.getMetrics(), InstanceCommunication.MetricsData.newBuilder().build()); + Assert.assertEquals(javaInstanceRunnable.getMetrics().toByteArray(), + new MetricsData().toByteArray()); } @Test @@ -490,11 +491,14 @@ public Object[][] failType() { @Test(dataProvider = "failComponentType") public void testFatalTheInstance(FailComponentType failComponentType) throws Exception { + SourceSpec sourceSpec = new SourceSpec() + .setClassName(TestSourceConnector.class.getName()); + SinkSpec sinkSpec = new SinkSpec() + .setClassName(TestSinkConnector.class.getName()); JavaInstanceRunnable javaInstanceRunnable = createRunnable( - SourceSpec.newBuilder() - .setClassName(TestSourceConnector.class.getName()).build(), + sourceSpec, TestFunction.class.getName(), - SinkSpec.newBuilder().setClassName(TestSinkConnector.class.getName()).build() + sinkSpec ); Thread fnThread = new Thread(javaInstanceRunnable); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceTest.java index b9ed69f992120..c5e1ab9fb402f 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceTest.java @@ -35,6 +35,7 @@ import org.apache.pulsar.functions.api.Function; import org.apache.pulsar.functions.api.Record; import org.apache.pulsar.functions.instance.JavaInstance.AsyncFuncRequest; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.testng.Assert; import org.testng.annotations.Test; @@ -253,11 +254,9 @@ public UserException(String msg) { public void testAsyncFunctionMaxPendingVoidResult() throws Exception { CountDownLatch count = new CountDownLatch(1); InstanceConfig instanceConfig = new InstanceConfig(); - instanceConfig.setFunctionDetails(org.apache.pulsar.functions.proto.Function.FunctionDetails.newBuilder() - .setSink(org.apache.pulsar.functions.proto.Function.SinkSpec.newBuilder() - .setTypeClassName(Void.class.getName()) - .build()) - .build()); + FunctionDetails fd = new FunctionDetails(); + fd.setSink().setTypeClassName(Void.class.getName()); + instanceConfig.setFunctionDetails(fd); int pendingQueueSize = 3; instanceConfig.setMaxPendingAsyncRequests(pendingQueueSize); @Cleanup("shutdownNow") diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java index a418b9814d7cd..c585f27d5d3fa 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java @@ -23,7 +23,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import org.apache.pulsar.functions.api.Record; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; import org.testng.annotations.Test; public class PulsarFunctionRecordTest { @@ -32,29 +33,33 @@ public class PulsarFunctionRecordTest { @Test public void testAck() { Record record = mock(Record.class); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder().setAutoAck(true) - .setProcessingGuarantees(Function.ProcessingGuarantees.ATMOST_ONCE).build(); + FunctionDetails functionDetails = new FunctionDetails() + .setAutoAck(true) + .setProcessingGuarantees(ProcessingGuarantees.ATMOST_ONCE); PulsarFunctionRecord pulsarFunctionRecord = new PulsarFunctionRecord<>(record, functionDetails); pulsarFunctionRecord.ack(); verify(record, times(0)).ack(); clearInvocations(record); - functionDetails = Function.FunctionDetails.newBuilder().setAutoAck(true) - .setProcessingGuarantees(Function.ProcessingGuarantees.ATLEAST_ONCE).build(); + functionDetails = new FunctionDetails() + .setAutoAck(true) + .setProcessingGuarantees(ProcessingGuarantees.ATLEAST_ONCE); pulsarFunctionRecord = new PulsarFunctionRecord<>(record, functionDetails); pulsarFunctionRecord.ack(); verify(record, times(0)).ack(); clearInvocations(record); - functionDetails = Function.FunctionDetails.newBuilder().setAutoAck(true) - .setProcessingGuarantees(Function.ProcessingGuarantees.EFFECTIVELY_ONCE).build(); + functionDetails = new FunctionDetails() + .setAutoAck(true) + .setProcessingGuarantees(ProcessingGuarantees.EFFECTIVELY_ONCE); pulsarFunctionRecord = new PulsarFunctionRecord<>(record, functionDetails); pulsarFunctionRecord.ack(); verify(record, times(0)).ack(); clearInvocations(record); - functionDetails = Function.FunctionDetails.newBuilder().setAutoAck(true) - .setProcessingGuarantees(Function.ProcessingGuarantees.MANUAL).build(); + functionDetails = new FunctionDetails() + .setAutoAck(true) + .setProcessingGuarantees(ProcessingGuarantees.MANUAL); pulsarFunctionRecord = new PulsarFunctionRecord<>(record, functionDetails); pulsarFunctionRecord.ack(); verify(record, times(1)).ack(); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/TopicSchemaTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/TopicSchemaTest.java index 6b065fc237a94..4ec4bc3a6f1af 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/TopicSchemaTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/TopicSchemaTest.java @@ -33,7 +33,6 @@ import org.apache.pulsar.client.impl.schema.ProtobufNativeSchema; import org.apache.pulsar.client.impl.schema.ProtobufSchema; import org.apache.pulsar.common.schema.SchemaType; -import org.apache.pulsar.functions.proto.Request; import org.testng.annotations.Test; @Slf4j @@ -50,12 +49,12 @@ public void testGetSchema() { schema = topicSchema.getSchema(topic + "2", DummyClass.class, Optional.of(SchemaType.AVRO)); assertEquals(schema.getClass(), AvroSchema.class); - // use an arbitrary protobuf class for testing purpose - schema = topicSchema.getSchema(topic + "3", Request.ServiceRequest.class, Optional.of(SchemaType.PROTOBUF)); + // use a standard protobuf class (not LightProto) for testing ProtobufSchema + schema = topicSchema.getSchema(topic + "3", Any.class, Optional.of(SchemaType.PROTOBUF)); assertEquals(schema.getClass(), ProtobufSchema.class); schema = topicSchema - .getSchema(topic + "4", Request.ServiceRequest.class, Optional.of(SchemaType.PROTOBUF_NATIVE)); + .getSchema(topic + "4", Any.class, Optional.of(SchemaType.PROTOBUF_NATIVE)); assertEquals(schema.getClass(), ProtobufNativeSchema.class); } diff --git a/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java b/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java index 3413c15b6952f..77a610dd52a42 100644 --- a/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java +++ b/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java @@ -60,8 +60,8 @@ import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.instance.stats.FunctionCollectorRegistry; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails.ComponentType; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.RuntimeSpawner; import org.apache.pulsar.functions.runtime.RuntimeUtils; @@ -352,7 +352,7 @@ public void start(boolean blocking) throws Exception { throw new IllegalArgumentException("Pulsar Function local run already started!"); } Runtime.getRuntime().addShutdownHook(shutdownHook); - Function.FunctionDetails functionDetails = null; + FunctionDetails functionDetails = null; String userCodeFile; String transformFunctionFile = null; int parallelism; @@ -538,7 +538,7 @@ private UserCodeClassLoader extractClassLoader(String userCodeFile, ComponentTyp return new UserCodeClassLoader(classLoader, classLoaderCreated); } - private void startProcessMode(org.apache.pulsar.functions.proto.Function.FunctionDetails functionDetails, + private void startProcessMode(FunctionDetails functionDetails, int parallelism, int instanceIdOffset, String serviceUrl, String stateStorageServiceUrl, AuthenticationConfig authConfig, String userCodeFile, String transformFunctionFile) throws Exception { @@ -622,7 +622,7 @@ public void run() { } - private void startThreadedMode(org.apache.pulsar.functions.proto.Function.FunctionDetails functionDetails, + private void startThreadedMode(FunctionDetails functionDetails, int parallelism, int instanceIdOffset, String serviceUrl, String stateStorageServiceUrl, AuthenticationConfig authConfig, String userCodeFile, String transformFunctionFile) throws Exception { diff --git a/pulsar-functions/proto/build.gradle.kts b/pulsar-functions/proto/build.gradle.kts index 6ac0a590d21ab..677c50dffe69a 100644 --- a/pulsar-functions/proto/build.gradle.kts +++ b/pulsar-functions/proto/build.gradle.kts @@ -19,32 +19,13 @@ plugins { id("pulsar.java-conventions") - alias(libs.plugins.protobuf) + alias(libs.plugins.lightproto) } dependencies { - implementation(libs.protobuf.java) + implementation(libs.netty.buffer) implementation(libs.grpc.all) { exclude(group = "io.netty") } runtimeOnly(libs.perfmark.api) } - -protobuf { - protoc { - val protocVersion = providers.gradleProperty("protobufVersion").getOrElse(libs.versions.protobuf.get()) - artifact = "com.google.protobuf:protoc:$protocVersion" - } - plugins { - create("grpc") { - artifact = "io.grpc:protoc-gen-grpc-java:${libs.versions.grpc.get()}" - } - } - generateProtoTasks { - all().forEach { task -> - task.plugins { - create("grpc") - } - } - } -} diff --git a/pulsar-functions/proto/src/main/proto/InstanceCommunication.proto b/pulsar-functions/proto/src/main/proto/InstanceCommunication.proto index 1bab23d2dac20..fe25c5e7d9d18 100644 --- a/pulsar-functions/proto/src/main/proto/InstanceCommunication.proto +++ b/pulsar-functions/proto/src/main/proto/InstanceCommunication.proto @@ -19,11 +19,12 @@ syntax = "proto3"; package proto; -import "google/protobuf/empty.proto"; - option java_package = "org.apache.pulsar.functions.proto"; option java_outer_classname = "InstanceCommunication"; +message Empty { +} + message FunctionStatus { message ExceptionInformation { string exceptionString = 1; @@ -117,11 +118,11 @@ message HealthCheckResult { } service InstanceControl { - rpc GetFunctionStatus(google.protobuf.Empty) returns (FunctionStatus) {} - rpc GetAndResetMetrics(google.protobuf.Empty) returns (MetricsData) {} - rpc ResetMetrics(google.protobuf.Empty) returns (google.protobuf.Empty) {} - rpc GetMetrics(google.protobuf.Empty) returns (MetricsData) {} - rpc HealthCheck(google.protobuf.Empty) returns (HealthCheckResult) {} + rpc GetFunctionStatus(Empty) returns (FunctionStatus) {} + rpc GetAndResetMetrics(Empty) returns (MetricsData) {} + rpc ResetMetrics(Empty) returns (Empty) {} + rpc GetMetrics(Empty) returns (MetricsData) {} + rpc HealthCheck(Empty) returns (HealthCheckResult) {} } message Metrics { diff --git a/pulsar-functions/proto/src/test/java/org/apache/pulsar/functions/proto/FunctionDetailsTest.java b/pulsar-functions/proto/src/test/java/org/apache/pulsar/functions/proto/FunctionDetailsTest.java index c4208c7a4c512..c9eb8733a3763 100644 --- a/pulsar-functions/proto/src/test/java/org/apache/pulsar/functions/proto/FunctionDetailsTest.java +++ b/pulsar-functions/proto/src/test/java/org/apache/pulsar/functions/proto/FunctionDetailsTest.java @@ -20,8 +20,8 @@ import static org.testng.Assert.assertEquals; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; import org.testng.annotations.Test; /** @@ -34,7 +34,7 @@ public class FunctionDetailsTest { */ @Test public void testDefaultProcessingGuarantee() { - FunctionDetails fc = FunctionDetails.newBuilder().build(); + FunctionDetails fc = new FunctionDetails(); assertEquals(ProcessingGuarantees.ATLEAST_ONCE, fc.getProcessingGuarantees()); } diff --git a/pulsar-functions/runtime-all/build.gradle.kts b/pulsar-functions/runtime-all/build.gradle.kts index c4a6cad390a70..cd6fbfee2a162 100644 --- a/pulsar-functions/runtime-all/build.gradle.kts +++ b/pulsar-functions/runtime-all/build.gradle.kts @@ -29,7 +29,6 @@ dependencies { implementation(libs.avro) implementation(libs.jackson.databind) implementation(libs.protobuf.java) - implementation(libs.protobuf.java.util) implementation(libs.gson) implementation(libs.slf4j.api) implementation(libs.log4j.slf4j2.impl) diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProvider.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProvider.java index 2e95e48489f26..484aefd82b63f 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProvider.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProvider.java @@ -23,7 +23,7 @@ import org.apache.pulsar.broker.authentication.AuthenticationDataSource; import org.apache.pulsar.client.impl.auth.AuthenticationToken; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; public class ClearTextFunctionTokenAuthProvider implements FunctionAuthProvider { @Override @@ -40,7 +40,7 @@ public void configureAuthenticationConfig(AuthenticationConfig authConfig, } @Override - public Optional cacheAuthData(Function.FunctionDetails funcDetails, + public Optional cacheAuthData(FunctionDetails funcDetails, AuthenticationDataSource authenticationDataSource) throws Exception { String token = null; @@ -57,7 +57,7 @@ public Optional cacheAuthData(Function.FunctionDetails funcDet } @Override - public Optional updateAuthData(Function.FunctionDetails funcDetails, + public Optional updateAuthData(FunctionDetails funcDetails, Optional existingFunctionAuthData, AuthenticationDataSource authenticationDataSource) throws Exception { @@ -65,7 +65,7 @@ public Optional updateAuthData(Function.FunctionDetails funcDe } @Override - public void cleanUpAuthData(Function.FunctionDetails funcDetails, + public void cleanUpAuthData(FunctionDetails funcDetails, Optional functionAuthData) throws Exception { //no-op } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthProvider.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthProvider.java index bb900e4143af0..81e9dfe33c37e 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthProvider.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthProvider.java @@ -22,7 +22,7 @@ import org.apache.pulsar.broker.authentication.AuthenticationDataSource; import org.apache.pulsar.common.util.Reflections; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * This is a generic interface that functions can use to cache and distribute appropriate authentication @@ -45,10 +45,10 @@ public interface FunctionAuthProvider { * @return * @throws Exception */ - Optional cacheAuthData(Function.FunctionDetails funcDetails, + Optional cacheAuthData(FunctionDetails funcDetails, AuthenticationDataSource authenticationDataSource) throws Exception; - Optional updateAuthData(Function.FunctionDetails funcDetails, + Optional updateAuthData(FunctionDetails funcDetails, Optional existingFunctionAuthData, AuthenticationDataSource authenticationDataSource) throws Exception; @@ -58,7 +58,7 @@ Optional updateAuthData(Function.FunctionDetails funcDetails, * @param functionAuthData function auth data * @throws Exception */ - void cleanUpAuthData(Function.FunctionDetails funcDetails, Optional functionAuthData) + void cleanUpAuthData(FunctionDetails funcDetails, Optional functionAuthData) throws Exception; static FunctionAuthProvider getAuthProvider(String className) { diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthUtils.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthUtils.java index 6a19596cf97ae..0b4c17b1ccd8f 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthUtils.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/FunctionAuthUtils.java @@ -19,14 +19,14 @@ package org.apache.pulsar.functions.auth; import java.util.Optional; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionAuthenticationSpec; public final class FunctionAuthUtils { public static FunctionAuthData getFunctionAuthData( - Optional functionAuthenticationSpec) { + Optional functionAuthenticationSpec) { return functionAuthenticationSpec - .map(authenticationSpec -> FunctionAuthData.builder().data(authenticationSpec.getData().toByteArray()) + .map(authenticationSpec -> FunctionAuthData.builder().data(authenticationSpec.getData()) .build()) .orElse(null); } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesFunctionAuthProvider.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesFunctionAuthProvider.java index 3d05d519552c9..904019373f002 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesFunctionAuthProvider.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesFunctionAuthProvider.java @@ -23,7 +23,7 @@ import java.util.Map; import java.util.Optional; import org.apache.pulsar.common.util.Reflections; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * Kubernetes runtime specific functions authentication provider. @@ -38,14 +38,14 @@ public interface KubernetesFunctionAuthProvider extends FunctionAuthProvider { */ @Deprecated(since = "3.0.0") default void initialize(CoreV1Api coreClient, byte[] caBytes, - java.util.function.Function namespaceCustomizerFunc) { + java.util.function.Function namespaceCustomizerFunc) { setCaBytes(caBytes); setNamespaceProviderFunc(namespaceCustomizerFunc); initialize(coreClient); } default void initialize(CoreV1Api coreClient, byte[] caBytes, - java.util.function.Function namespaceCustomizerFunc, + java.util.function.Function namespaceCustomizerFunc, Map config) { initialize(coreClient, caBytes, namespaceCustomizerFunc); } @@ -54,7 +54,7 @@ default void setCaBytes(byte[] caBytes) { } - default void setNamespaceProviderFunc(java.util.function.Function funcDetails) { + default void setNamespaceProviderFunc(java.util.function.Function funcDetails) { } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProvider.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProvider.java index d3e7365a1eb2c..d24c75b2f7db1 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProvider.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProvider.java @@ -44,7 +44,7 @@ import org.apache.pulsar.broker.authentication.AuthenticationDataSource; import org.apache.pulsar.client.impl.auth.AuthenticationToken; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.utils.Actions; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -61,7 +61,7 @@ public class KubernetesSecretsTokenAuthProvider implements KubernetesFunctionAut private CoreV1Api coreClient; private byte[] caBytes; - private java.util.function.Function getNamespaceFromDetails; + private java.util.function.Function getNamespaceFromDetails; @Override public void initialize(CoreV1Api coreClient) { @@ -75,11 +75,11 @@ public void setCaBytes(byte[] caBytes) { @Override public void setNamespaceProviderFunc( - java.util.function.Function getNamespaceFromDetails) { + java.util.function.Function getNamespaceFromDetails) { this.getNamespaceFromDetails = getNamespaceFromDetails; } - private String getKubeNamespace(Function.FunctionDetails funcDetails) { + private String getKubeNamespace(FunctionDetails funcDetails) { return getNamespaceFromDetails.apply(funcDetails); } @@ -127,7 +127,7 @@ public void configureAuthenticationConfig(AuthenticationConfig authConfig, @Override - public Optional cacheAuthData(Function.FunctionDetails funcDetails, + public Optional cacheAuthData(FunctionDetails funcDetails, AuthenticationDataSource authenticationDataSource) { String id = null; String tenant = funcDetails.getTenant(); @@ -151,7 +151,7 @@ public Optional cacheAuthData(Function.FunctionDetails funcDet } @Override - public void cleanUpAuthData(Function.FunctionDetails funcDetails, Optional functionAuthData) + public void cleanUpAuthData(FunctionDetails funcDetails, Optional functionAuthData) throws Exception { if (!functionAuthData.isPresent()) { return; @@ -247,7 +247,7 @@ public void cleanUpAuthData(Function.FunctionDetails funcDetails, Optional updateAuthData(Function.FunctionDetails funcDetails, + public Optional updateAuthData(FunctionDetails funcDetails, Optional existingFunctionAuthData, AuthenticationDataSource authenticationDataSource) throws Exception { @@ -289,7 +289,7 @@ Map buildSecretMap(String token) { return valueMap; } - private void upsertSecret(String token, Function.FunctionDetails funcDetails, String secretName) + private void upsertSecret(String token, FunctionDetails funcDetails, String secretName) throws InterruptedException { String tenant = funcDetails.getTenant(); String namespace = funcDetails.getNamespace(); @@ -349,7 +349,7 @@ private void upsertSecret(String token, Function.FunctionDetails funcDetails, St } } - private String createSecret(String token, Function.FunctionDetails funcDetails) + private String createSecret(String token, FunctionDetails funcDetails) throws ApiException, InterruptedException { String kubeNamespace = getKubeNamespace(funcDetails); String tenant = funcDetails.getTenant(); diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesServiceAccountTokenAuthProvider.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesServiceAccountTokenAuthProvider.java index 06fadec42d42f..e14927cb425bb 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesServiceAccountTokenAuthProvider.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/auth/KubernetesServiceAccountTokenAuthProvider.java @@ -35,7 +35,7 @@ import org.apache.pulsar.broker.authentication.AuthenticationDataSource; import org.apache.pulsar.client.impl.auth.AuthenticationToken; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.eclipse.jetty.util.StringUtil; /** @@ -76,7 +76,7 @@ public class KubernetesServiceAccountTokenAuthProvider implements KubernetesFunc @Override public void initialize(CoreV1Api coreClient, byte[] caBytes, - java.util.function.Function namespaceCustomizerFunc, + java.util.function.Function namespaceCustomizerFunc, Map config) { setNamespaceProviderFunc(namespaceCustomizerFunc); Object certSecretName = config.get(BROKER_CLIENT_TRUST_CERTS_SECRET_NAME); @@ -126,7 +126,7 @@ public void configureAuthenticationConfig(AuthenticationConfig authConfig, * No need to cache anything. Kubernetes generates the token used for authentication. */ @Override - public Optional cacheAuthData(Function.FunctionDetails funcDetails, + public Optional cacheAuthData(FunctionDetails funcDetails, AuthenticationDataSource authenticationDataSource) throws Exception { return Optional.empty(); @@ -136,7 +136,7 @@ public Optional cacheAuthData(Function.FunctionDetails funcDet * No need to update anything. Kubernetes updates the token used for authentication. */ @Override - public Optional updateAuthData(Function.FunctionDetails funcDetails, + public Optional updateAuthData(FunctionDetails funcDetails, Optional existingFunctionAuthData, AuthenticationDataSource authenticationDataSource) throws Exception { @@ -147,7 +147,7 @@ public Optional updateAuthData(Function.FunctionDetails funcDe * No need to clean up anything. Kubernetes cleans up the secret when the pod is deleted. */ @Override - public void cleanUpAuthData(Function.FunctionDetails funcDetails, Optional functionAuthData) + public void cleanUpAuthData(FunctionDetails funcDetails, Optional functionAuthData) throws Exception { } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/JavaInstanceStarter.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/JavaInstanceStarter.java index 11a557a48d6ca..be56728d4694e 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/JavaInstanceStarter.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/JavaInstanceStarter.java @@ -22,8 +22,6 @@ import static org.apache.pulsar.functions.utils.FunctionCommon.getSourceType; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.google.protobuf.Empty; -import com.google.protobuf.util.JsonFormat; import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.stub.StreamObserver; @@ -46,9 +44,14 @@ import org.apache.pulsar.functions.instance.InstanceCache; import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.instance.stats.FunctionCollectorRegistry; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.Empty; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.HealthCheckResult; import org.apache.pulsar.functions.proto.InstanceControlGrpc; +import org.apache.pulsar.functions.proto.MetricsData; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.runtime.thread.ThreadRuntime; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactory; import org.apache.pulsar.functions.secretsprovider.ClearTextSecretsProvider; @@ -186,19 +189,18 @@ public void start(String[] args, ClassLoader functionInstanceClassLoader, ClassL instanceConfig.setMaxPendingAsyncRequests(maxPendingAsyncRequests); instanceConfig.setExposePulsarAdminClientEnabled(exposePulsarAdminClientEnabled); instanceConfig.setIgnoreUnknownConfigFields(ignoreUnknownConfigFields); - Function.FunctionDetails.Builder functionDetailsBuilder = Function.FunctionDetails.newBuilder(); if (functionDetailsJsonString.charAt(0) == '\'') { functionDetailsJsonString = functionDetailsJsonString.substring(1); } if (functionDetailsJsonString.charAt(functionDetailsJsonString.length() - 1) == '\'') { functionDetailsJsonString = functionDetailsJsonString.substring(0, functionDetailsJsonString.length() - 1); } - JsonFormat.parser().merge(functionDetailsJsonString, functionDetailsBuilder); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.parseFromJson(functionDetailsJsonString); FunctionCacheManager fnCache = new FunctionCacheManagerImpl(rootClassLoader); ClassLoader functionClassLoader = ThreadRuntime.loadJars(jarFile, instanceConfig, functionId, - functionDetailsBuilder.getName(), narExtractionDirectory, fnCache); - inferringMissingTypeClassName(functionDetailsBuilder, functionClassLoader); - Function.FunctionDetails functionDetails = functionDetailsBuilder.build(); + functionDetails.getName(), narExtractionDirectory, fnCache); + inferringMissingTypeClassName(functionDetails, functionClassLoader); instanceConfig.setFunctionDetails(functionDetails); instanceConfig.setPort(port); instanceConfig.setMetricsPort(metricsPort); @@ -324,21 +326,21 @@ public void close() { } } - private void inferringMissingTypeClassName(Function.FunctionDetails.Builder functionDetailsBuilder, + private void inferringMissingTypeClassName(FunctionDetails functionDetails, ClassLoader classLoader) { TypePool typePool = TypePool.Default.of(ClassFileLocator.ForClassLoader.of(classLoader)); - switch (functionDetailsBuilder.getComponentType()) { + switch (functionDetails.getComponentType()) { case FUNCTION: - if ((functionDetailsBuilder.hasSource() - && functionDetailsBuilder.getSource().getTypeClassName().isEmpty()) - || (functionDetailsBuilder.hasSink() - && functionDetailsBuilder.getSink().getTypeClassName().isEmpty())) { - Map userConfigs = new Gson().fromJson(functionDetailsBuilder.getUserConfig(), + if ((functionDetails.hasSource() + && functionDetails.getSource().getTypeClassName().isEmpty()) + || (functionDetails.hasSink() + && functionDetails.getSink().getTypeClassName().isEmpty())) { + Map userConfigs = new Gson().fromJson(functionDetails.getUserConfig(), new TypeToken>() { }.getType()); boolean isWindowConfigPresent = userConfigs != null && userConfigs.containsKey(WindowConfig.WINDOW_CONFIG_KEY); - String className = functionDetailsBuilder.getClassName(); + String className = functionDetails.getClassName(); if (isWindowConfigPresent) { WindowConfig windowConfig = new Gson().fromJson( (new Gson().toJson(userConfigs.get(WindowConfig.WINDOW_CONFIG_KEY))), @@ -347,60 +349,46 @@ private void inferringMissingTypeClassName(Function.FunctionDetails.Builder func } TypeDefinition[] typeArgs = FunctionCommon.getFunctionTypes(typePool.describe(className).resolve(), isWindowConfigPresent); - if (functionDetailsBuilder.hasSource() - && functionDetailsBuilder.getSource().getTypeClassName().isEmpty() + if (functionDetails.hasSource() + && functionDetails.getSource().getTypeClassName().isEmpty() && typeArgs[0] != null) { - Function.SourceSpec.Builder sourceBuilder = functionDetailsBuilder.getSource().toBuilder(); - sourceBuilder.setTypeClassName(typeArgs[0].asErasure().getTypeName()); - functionDetailsBuilder.setSource(sourceBuilder.build()); + functionDetails.setSource().setTypeClassName(typeArgs[0].asErasure().getTypeName()); } - if (functionDetailsBuilder.hasSink() - && functionDetailsBuilder.getSink().getTypeClassName().isEmpty() + if (functionDetails.hasSink() + && functionDetails.getSink().getTypeClassName().isEmpty() && typeArgs[1] != null) { - Function.SinkSpec.Builder sinkBuilder = functionDetailsBuilder.getSink().toBuilder(); - sinkBuilder.setTypeClassName(typeArgs[1].asErasure().getTypeName()); - functionDetailsBuilder.setSink(sinkBuilder.build()); + functionDetails.setSink().setTypeClassName(typeArgs[1].asErasure().getTypeName()); } } break; case SINK: - if ((functionDetailsBuilder.hasSink() - && functionDetailsBuilder.getSink().getTypeClassName().isEmpty())) { + if ((functionDetails.hasSink() + && functionDetails.getSink().getTypeClassName().isEmpty())) { String typeArg = - getSinkType(functionDetailsBuilder.getSink().getClassName(), typePool).asErasure() + getSinkType(functionDetails.getSink().getClassName(), typePool).asErasure() .getTypeName(); - Function.SinkSpec.Builder sinkBuilder = - Function.SinkSpec.newBuilder(functionDetailsBuilder.getSink()); - sinkBuilder.setTypeClassName(typeArg); - functionDetailsBuilder.setSink(sinkBuilder); + functionDetails.setSink().setTypeClassName(typeArg); - Function.SourceSpec sourceSpec = functionDetailsBuilder.getSource(); + SourceSpec sourceSpec = functionDetails.hasSource() ? functionDetails.getSource() : null; if (null == sourceSpec || StringUtils.isEmpty(sourceSpec.getTypeClassName())) { - Function.SourceSpec.Builder sourceBuilder = Function.SourceSpec.newBuilder(sourceSpec); - sourceBuilder.setTypeClassName(typeArg); - functionDetailsBuilder.setSource(sourceBuilder); + functionDetails.setSource().setTypeClassName(typeArg); } } break; case SOURCE: - if ((functionDetailsBuilder.hasSource() - && functionDetailsBuilder.getSource().getTypeClassName().isEmpty())) { + if ((functionDetails.hasSource() + && functionDetails.getSource().getTypeClassName().isEmpty())) { String typeArg = - getSourceType(functionDetailsBuilder.getSource().getClassName(), typePool).asErasure() + getSourceType(functionDetails.getSource().getClassName(), typePool).asErasure() .getTypeName(); - Function.SourceSpec.Builder sourceBuilder = - Function.SourceSpec.newBuilder(functionDetailsBuilder.getSource()); - sourceBuilder.setTypeClassName(typeArg); - functionDetailsBuilder.setSource(sourceBuilder); + functionDetails.setSource().setTypeClassName(typeArg); - Function.SinkSpec sinkSpec = functionDetailsBuilder.getSink(); + SinkSpec sinkSpec = functionDetails.hasSink() ? functionDetails.getSink() : null; if (null == sinkSpec || StringUtils.isEmpty(sinkSpec.getTypeClassName())) { - Function.SinkSpec.Builder sinkBuilder = Function.SinkSpec.newBuilder(sinkSpec); - sinkBuilder.setTypeClassName(typeArg); - functionDetailsBuilder.setSink(sinkBuilder); + functionDetails.setSink().setTypeClassName(typeArg); } } break; @@ -418,9 +406,9 @@ public InstanceControlImpl(RuntimeSpawner runtimeSpawner) { @Override public void getFunctionStatus(Empty request, - StreamObserver responseObserver) { + StreamObserver responseObserver) { try { - InstanceCommunication.FunctionStatus response = + FunctionStatus response = runtimeSpawner.getFunctionStatus(runtimeSpawner.getInstanceConfig().getInstanceId()).get(); responseObserver.onNext(response); responseObserver.onCompleted(); @@ -431,13 +419,12 @@ public void getFunctionStatus(Empty request, } @Override - public void getAndResetMetrics(com.google.protobuf.Empty request, - io.grpc.stub.StreamObserver - responseObserver) { + public void getAndResetMetrics(Empty request, + StreamObserver responseObserver) { Runtime runtime = runtimeSpawner.getRuntime(); if (runtime != null) { try { - InstanceCommunication.MetricsData metrics = runtime.getAndResetMetrics().get(); + MetricsData metrics = runtime.getAndResetMetrics().get(); responseObserver.onNext(metrics); responseObserver.onCompleted(); } catch (InterruptedException | ExecutionException e) { @@ -448,13 +435,12 @@ public void getAndResetMetrics(com.google.protobuf.Empty request, } @Override - public void getMetrics(com.google.protobuf.Empty request, - io.grpc.stub.StreamObserver - responseObserver) { + public void getMetrics(Empty request, + StreamObserver responseObserver) { Runtime runtime = runtimeSpawner.getRuntime(); if (runtime != null) { try { - InstanceCommunication.MetricsData metrics = runtime.getMetrics(instanceId).get(); + MetricsData metrics = runtime.getMetrics(instanceId).get(); responseObserver.onNext(metrics); responseObserver.onCompleted(); } catch (InterruptedException | ExecutionException e) { @@ -464,13 +450,13 @@ public void getMetrics(com.google.protobuf.Empty request, } } - public void resetMetrics(com.google.protobuf.Empty request, - io.grpc.stub.StreamObserver responseObserver) { + public void resetMetrics(Empty request, + StreamObserver responseObserver) { Runtime runtime = runtimeSpawner.getRuntime(); if (runtime != null) { try { runtime.resetMetrics().get(); - responseObserver.onNext(com.google.protobuf.Empty.getDefaultInstance()); + responseObserver.onNext(new Empty()); responseObserver.onCompleted(); } catch (InterruptedException | ExecutionException e) { log.error("Exception in JavaInstance doing resetMetrics", e); @@ -480,12 +466,11 @@ public void resetMetrics(com.google.protobuf.Empty request, } @Override - public void healthCheck(com.google.protobuf.Empty request, - io.grpc.stub.StreamObserver - responseObserver) { + public void healthCheck(Empty request, + StreamObserver responseObserver) { log.debug("Received health check request..."); - InstanceCommunication.HealthCheckResult healthCheckResult = - InstanceCommunication.HealthCheckResult.newBuilder().setSuccess(true).build(); + HealthCheckResult healthCheckResult = new HealthCheckResult(); + healthCheckResult.setSuccess(true); responseObserver.onNext(healthCheckResult); responseObserver.onCompleted(); diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/Runtime.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/Runtime.java index edb564e82af78..a64ea355a2c57 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/Runtime.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/Runtime.java @@ -20,7 +20,8 @@ import java.io.IOException; import java.util.concurrent.CompletableFuture; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.MetricsData; /** * A function container is an environment for invoking functions. @@ -45,13 +46,13 @@ default void terminate() throws Exception { Throwable getDeathException(); - CompletableFuture getFunctionStatus(int instanceId); + CompletableFuture getFunctionStatus(int instanceId); - CompletableFuture getAndResetMetrics(); + CompletableFuture getAndResetMetrics(); CompletableFuture resetMetrics(); - CompletableFuture getMetrics(int instanceId); + CompletableFuture getMetrics(int instanceId); String getPrometheusMetrics() throws IOException; } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeFactory.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeFactory.java index af33656106359..d27290ae4735d 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeFactory.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeFactory.java @@ -23,7 +23,7 @@ import org.apache.pulsar.functions.auth.FunctionAuthProvider; import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.secretsproviderconfigurator.SecretsProviderConfigurator; import org.apache.pulsar.functions.worker.ConnectorsManager; import org.apache.pulsar.functions.worker.FunctionsManager; @@ -59,7 +59,7 @@ default boolean externallyManaged() { return false; } - default void doAdmissionChecks(Function.FunctionDetails functionDetails) { + default void doAdmissionChecks(FunctionDetails functionDetails) { } default Optional getAuthProvider() { diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java index c42355c2e7216..b0396f11b9411 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeSpawner.java @@ -25,7 +25,6 @@ package org.apache.pulsar.functions.runtime; import static org.apache.pulsar.common.util.Runnables.catchingAndLoggingThrowables; -import java.io.IOException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -34,9 +33,8 @@ import org.apache.pulsar.common.util.FutureUtil; import org.apache.pulsar.functions.instance.InstanceCache; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; -import org.apache.pulsar.functions.utils.FunctionCommon; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; @Slf4j public class RuntimeSpawner implements AutoCloseable { @@ -118,24 +116,19 @@ public CompletableFuture getFunctionStatus(int instanceId) { return FutureUtil.failedFuture(new IllegalStateException("Function runtime is not started yet")); } return runtime.getFunctionStatus(instanceId).thenApply(f -> { - FunctionStatus.Builder builder = FunctionStatus.newBuilder(); - builder.mergeFrom(f).setNumRestarts(numRestarts).setInstanceId(String.valueOf(instanceId)); - if (!f.getRunning() && runtimeDeathException != null) { - builder.setFailureException(runtimeDeathException.getMessage()); + FunctionStatus status = new FunctionStatus(); + status.copyFrom(f); + status.setNumRestarts(numRestarts); + status.setInstanceId(String.valueOf(instanceId)); + if (!f.isRunning() && runtimeDeathException != null) { + status.setFailureException(runtimeDeathException.getMessage()); } - return builder.build(); + return status; }); } public CompletableFuture getFunctionStatusAsJson(int instanceId) { - return this.getFunctionStatus(instanceId).thenApply(msg -> { - try { - return FunctionCommon.printJson(msg); - } catch (IOException e) { - throw new RuntimeException( - instanceConfig.getFunctionDetails().getName() + " Exception parsing getStatus", e); - } - }); + return this.getFunctionStatus(instanceId).thenApply(msg -> msg.toString()); } @Override diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java index 588899c5a79ef..fbabcce036a31 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/RuntimeUtils.java @@ -22,7 +22,6 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank; import static org.apache.commons.lang3.StringUtils.isNotEmpty; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.protobuf.util.JsonFormat; import io.prometheus.client.hotspot.BufferPoolsExports; import io.prometheus.client.hotspot.ClassLoadingExports; import io.prometheus.client.hotspot.GarbageCollectorExports; @@ -53,7 +52,8 @@ import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.instance.go.GoInstanceConfig; import org.apache.pulsar.functions.instance.stats.FunctionCollectorRegistry; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.Resources; import org.apache.pulsar.functions.utils.FunctionCommon; /** @@ -102,9 +102,9 @@ public static List composeCmd(InstanceConfig instanceConfig, public static List getArgsBeforeCmd(InstanceConfig instanceConfig, String extraDependenciesDir) { final List args = new LinkedList<>(); - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.JAVA) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.JAVA) { //no-op - } else if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.PYTHON) { + } else if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.PYTHON) { // add `extraDependenciesDir` to python package searching path if (StringUtils.isNotEmpty(extraDependenciesDir)) { args.add("PYTHONPATH=${PYTHONPATH}:" + extraDependenciesDir); @@ -139,10 +139,7 @@ public static List getGoInstanceCmd(InstanceConfig instanceConfig, final List args = new LinkedList<>(); GoInstanceConfig goInstanceConfig = new GoInstanceConfig(); - // pass the raw functino details directly so that we don't need to assemble the `instanceConf.funcDetails` - // manually in Go instance - String functionDetails = - JsonFormat.printer().omittingInsignificantWhitespace().print(instanceConfig.getFunctionDetails()); + String functionDetails = instanceConfig.getFunctionDetails().toJson(); goInstanceConfig.setFunctionDetails(functionDetails); if (instanceConfig.getClusterName() != null) { @@ -170,7 +167,7 @@ public static List getGoInstanceCmd(InstanceConfig instanceConfig, } @SuppressWarnings("deprecation") - boolean autoAck = instanceConfig.getFunctionDetails().getAutoAck(); + boolean autoAck = instanceConfig.getFunctionDetails().isAutoAck(); if (autoAck) { goInstanceConfig.setAutoAck(autoAck); } @@ -192,10 +189,10 @@ public static List getGoInstanceCmd(InstanceConfig instanceConfig, } if (instanceConfig.getFunctionDetails().getProcessingGuarantees() != null) { goInstanceConfig - .setProcessingGuarantees(instanceConfig.getFunctionDetails().getProcessingGuaranteesValue()); + .setProcessingGuarantees(instanceConfig.getFunctionDetails().getProcessingGuarantees().getValue()); } if (instanceConfig.getFunctionDetails().getRuntime() != null) { - goInstanceConfig.setRuntime(instanceConfig.getFunctionDetails().getRuntimeValue()); + goInstanceConfig.setRuntime(instanceConfig.getFunctionDetails().getRuntime().getValue()); } if (instanceConfig.getFunctionDetails().getSecretsMap() != null) { goInstanceConfig.setSecretsMap(instanceConfig.getFunctionDetails().getSecretsMap()); @@ -231,25 +228,22 @@ && isNotBlank(authConfig.getClientAuthenticationParameters())) { if (pulsarServiceUrl != null) { goInstanceConfig.setPulsarServiceURL(pulsarServiceUrl); } - if (instanceConfig.getFunctionDetails().getSource().getCleanupSubscription()) { + if (instanceConfig.getFunctionDetails().getSource().isCleanupSubscription()) { goInstanceConfig - .setCleanupSubscription(instanceConfig.getFunctionDetails().getSource().getCleanupSubscription()); + .setCleanupSubscription(instanceConfig.getFunctionDetails().getSource().isCleanupSubscription()); } if (instanceConfig.getFunctionDetails().getSource().getSubscriptionName() != null) { goInstanceConfig.setSubscriptionName(instanceConfig.getFunctionDetails().getSource().getSubscriptionName()); } goInstanceConfig.setSubscriptionPosition( - instanceConfig.getFunctionDetails().getSource().getSubscriptionPosition().getNumber()); + instanceConfig.getFunctionDetails().getSource().getSubscriptionPosition().getValue()); - if (instanceConfig.getFunctionDetails().getSource().getInputSpecsMap() != null) { + if (instanceConfig.getFunctionDetails().getSource().getInputSpecsCount() > 0) { Map sourceInputSpecs = new HashMap<>(); - for (Map.Entry entry : - instanceConfig.getFunctionDetails().getSource().getInputSpecsMap().entrySet()) { - String topic = entry.getKey(); - Function.ConsumerSpec spec = entry.getValue(); - sourceInputSpecs.put(topic, JsonFormat.printer().omittingInsignificantWhitespace().print(spec)); + instanceConfig.getFunctionDetails().getSource().forEachInputSpecs((topic, spec) -> { + sourceInputSpecs.put(topic, spec.toJson()); goInstanceConfig.setSourceSpecsTopic(topic); - } + }); goInstanceConfig.setSourceInputSpecs(sourceInputSpecs); } @@ -273,12 +267,14 @@ && isNotBlank(authConfig.getClientAuthenticationParameters())) { goInstanceConfig.setDisk(instanceConfig.getFunctionDetails().getResources().getDisk()); } - if (instanceConfig.getFunctionDetails().getRetryDetails().getDeadLetterTopic() != null) { + if (instanceConfig.getFunctionDetails().hasRetryDetails() + && instanceConfig.getFunctionDetails().getRetryDetails().getDeadLetterTopic() != null) { goInstanceConfig .setDeadLetterTopic(instanceConfig.getFunctionDetails().getRetryDetails().getDeadLetterTopic()); } - if (instanceConfig.getFunctionDetails().getRetryDetails().getMaxMessageRetries() != 0) { + if (instanceConfig.getFunctionDetails().hasRetryDetails() + && instanceConfig.getFunctionDetails().getRetryDetails().getMaxMessageRetries() != 0) { goInstanceConfig .setMaxMessageRetries(instanceConfig.getFunctionDetails().getRetryDetails().getMaxMessageRetries()); } @@ -328,13 +324,13 @@ public static List getCmd(InstanceConfig instanceConfig, String pulsarWebServiceUrl) throws Exception { final List args = new LinkedList<>(); - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.GO) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.GO) { return getGoInstanceCmd(instanceConfig, authConfig, originalCodeFileName, pulsarServiceUrl, stateStorageServiceUrl, pulsarWebServiceUrl, k8sRuntime); } - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.JAVA) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.JAVA) { args.add("java"); args.add("-cp"); @@ -404,8 +400,8 @@ public static List getCmd(InstanceConfig instanceConfig, if (!isEmpty(instanceConfig.getFunctionDetails().getRuntimeFlags())) { Collections.addAll(args, splitRuntimeArgs(instanceConfig.getFunctionDetails().getRuntimeFlags())); } - if (instanceConfig.getFunctionDetails().getResources() != null) { - Function.Resources resources = instanceConfig.getFunctionDetails().getResources(); + if (instanceConfig.getFunctionDetails().hasResources()) { + Resources resources = instanceConfig.getFunctionDetails().getResources(); if (resources.getRam() != 0) { args.add("-Xmx" + String.valueOf(resources.getRam())); } @@ -420,7 +416,7 @@ public static List getCmd(InstanceConfig instanceConfig, args.add("--transform_function_id"); args.add(instanceConfig.getTransformFunctionId()); } - } else if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.PYTHON) { + } else if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.PYTHON) { args.add("python3"); if (!isEmpty(instanceConfig.getFunctionDetails().getRuntimeFlags())) { Collections.addAll(args, splitRuntimeArgs(instanceConfig.getFunctionDetails().getRuntimeFlags())); @@ -457,12 +453,11 @@ public static List getCmd(InstanceConfig instanceConfig, args.add("--function_version"); args.add(instanceConfig.getFunctionVersion()); args.add("--function_details"); - args.add("'" + JsonFormat.printer().omittingInsignificantWhitespace() - .print(instanceConfig.getFunctionDetails()) + "'"); + args.add("'" + instanceConfig.getFunctionDetails().toJson() + "'"); args.add("--pulsar_serviceurl"); args.add(pulsarServiceUrl); - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.JAVA) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.JAVA) { // TODO: for now only Java function context exposed pulsar admin, so python/go no need to pass this argument // until pulsar admin client enabled in python/go function context. // For backward compatibility, pass `--web_serviceurl` parameter only if @@ -502,7 +497,7 @@ && isNotBlank(authConfig.getClientAuthenticationParameters())) { args.add(String.valueOf(instanceConfig.getMetricsPort())); // params supported only by the Java instance runtime. - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.JAVA) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.JAVA) { args.add("--pending_async_requests"); args.add(String.valueOf(instanceConfig.getMaxPendingAsyncRequests())); @@ -531,7 +526,7 @@ && isNotBlank(authConfig.getClientAuthenticationParameters())) { args.add("--cluster_name"); args.add(instanceConfig.getClusterName()); - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.JAVA) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.JAVA) { if (!StringUtils.isEmpty(narExtractionDirectory)) { args.add("--nar_extraction_directory"); args.add(narExtractionDirectory); diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizer.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizer.java index 3f02ff4849563..199e3df46b0e2 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizer.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizer.java @@ -40,7 +40,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.common.util.ObjectMapperFactory; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * An implementation of the {@link KubernetesManifestCustomizer} that allows @@ -105,7 +105,7 @@ public void initialize(Map config) { } @Override - public String customizeNamespace(Function.FunctionDetails funcDetails, String currentNamespace) { + public String customizeNamespace(FunctionDetails funcDetails, String currentNamespace) { RuntimeOpts opts = getOptsFromDetails(funcDetails); opts = mergeRuntimeOpts(runtimeOpts, opts); if (!StringUtils.isEmpty(opts.getJobNamespace())) { @@ -116,7 +116,7 @@ public String customizeNamespace(Function.FunctionDetails funcDetails, String cu } @Override - public String customizeName(Function.FunctionDetails funcDetails, String currentName) { + public String customizeName(FunctionDetails funcDetails, String currentName) { RuntimeOpts opts = getOptsFromDetails(funcDetails); opts = mergeRuntimeOpts(runtimeOpts, opts); if (!StringUtils.isEmpty(opts.getJobName())) { @@ -127,7 +127,7 @@ public String customizeName(Function.FunctionDetails funcDetails, String current } @Override - public V1Service customizeService(Function.FunctionDetails funcDetails, V1Service service) { + public V1Service customizeService(FunctionDetails funcDetails, V1Service service) { RuntimeOpts opts = getOptsFromDetails(funcDetails); opts = mergeRuntimeOpts(runtimeOpts, opts); service.setMetadata(updateMeta(opts, service.getMetadata())); @@ -135,7 +135,7 @@ public V1Service customizeService(Function.FunctionDetails funcDetails, V1Servic } @Override - public V1StatefulSet customizeStatefulSet(Function.FunctionDetails funcDetails, V1StatefulSet statefulSet) { + public V1StatefulSet customizeStatefulSet(FunctionDetails funcDetails, V1StatefulSet statefulSet) { RuntimeOpts opts = mergeRuntimeOpts(runtimeOpts, getOptsFromDetails(funcDetails)); statefulSet.setMetadata(updateMeta(opts, statefulSet.getMetadata())); V1PodTemplateSpec pt = statefulSet.getSpec().getTemplate(); @@ -170,7 +170,7 @@ private void updateContainerResources(V1Container container, RuntimeOpts opts) { } } - private RuntimeOpts getOptsFromDetails(Function.FunctionDetails funcDetails) { + private RuntimeOpts getOptsFromDetails(FunctionDetails funcDetails) { String customRuntimeOptions = funcDetails.getCustomRuntimeOptions(); RuntimeOpts opts = new Gson().fromJson(customRuntimeOptions, RuntimeOpts.class); // ensure that we always have at least the default diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesManifestCustomizer.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesManifestCustomizer.java index 2df01c9e3540d..f5be4238e9aa5 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesManifestCustomizer.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesManifestCustomizer.java @@ -20,24 +20,24 @@ import io.kubernetes.client.openapi.models.V1Service; import io.kubernetes.client.openapi.models.V1StatefulSet; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.runtime.RuntimeCustomizer; public interface KubernetesManifestCustomizer extends RuntimeCustomizer { - default V1StatefulSet customizeStatefulSet(Function.FunctionDetails funcDetails, V1StatefulSet statefulSet) { + default V1StatefulSet customizeStatefulSet(FunctionDetails funcDetails, V1StatefulSet statefulSet) { return statefulSet; } - default V1Service customizeService(Function.FunctionDetails funcDetails, V1Service service) { + default V1Service customizeService(FunctionDetails funcDetails, V1Service service) { return service; } - default String customizeNamespace(Function.FunctionDetails funcDetails, String currentNamespace) { + default String customizeNamespace(FunctionDetails funcDetails, String currentNamespace) { return currentNamespace; } - default String customizeName(Function.FunctionDetails funcDetails, String currentName) { + default String customizeName(FunctionDetails funcDetails, String currentName) { return currentName; } } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntime.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntime.java index bbd692177cbba..7253de3386d8b 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntime.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntime.java @@ -26,14 +26,10 @@ import static org.apache.pulsar.functions.auth.FunctionAuthUtils.getFunctionAuthData; import static org.apache.pulsar.functions.utils.FunctionCommon.roundDecimal; import com.google.common.annotations.VisibleForTesting; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; import com.google.gson.Gson; -import com.google.protobuf.Empty; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; +import io.grpc.stub.StreamObserver; import io.kubernetes.client.custom.Quantity; import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.JSON; @@ -77,10 +73,12 @@ import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; -import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; +import org.apache.pulsar.functions.proto.Empty; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; import org.apache.pulsar.functions.proto.InstanceControlGrpc; +import org.apache.pulsar.functions.proto.MetricsData; +import org.apache.pulsar.functions.proto.Resources; import org.apache.pulsar.functions.runtime.Runtime; import org.apache.pulsar.functions.runtime.RuntimeUtils; import org.apache.pulsar.functions.secretsproviderconfigurator.SecretsProviderConfigurator; @@ -125,7 +123,7 @@ public class KubernetesRuntime implements Runtime { private List processArgs; @Getter private ManagedChannel[] channel; - private InstanceControlGrpc.InstanceControlFutureStub[] stub; + private InstanceControlGrpc.InstanceControlStub[] stub; private InstanceConfig instanceConfig; private final String jobNamespace; private final String jobName; @@ -247,7 +245,7 @@ public class KubernetesRuntime implements Runtime { this.processArgs = new LinkedList<>(); this.processArgs.addAll(RuntimeUtils.getArgsBeforeCmd(instanceConfig, extraDependenciesDir)); - if (instanceConfig.getFunctionDetails().getRuntime() == Function.FunctionDetails.Runtime.GO) { + if (instanceConfig.getFunctionDetails().getRuntime() == FunctionDetails.Runtime.GO) { // before we run the command, make sure the go executable with correct permissions this.processArgs.add("chmod"); this.processArgs.add("777"); @@ -317,7 +315,7 @@ public void reinitialize() { private synchronized void setupGrpcChannelIfNeeded() { if (channel == null || stub == null) { channel = new ManagedChannel[instanceConfig.getFunctionDetails().getParallelism()]; - stub = new InstanceControlGrpc.InstanceControlFutureStub[instanceConfig.getFunctionDetails() + stub = new InstanceControlGrpc.InstanceControlStub[instanceConfig.getFunctionDetails() .getParallelism()]; String jobName = createJobName(instanceConfig.getFunctionDetails(), this.jobName); @@ -326,7 +324,7 @@ private synchronized void setupGrpcChannelIfNeeded() { channel[i] = ManagedChannelBuilder.forAddress(address, grpcPort) .usePlaintext() .build(); - stub[i] = InstanceControlGrpc.newFutureStub(channel[i]); + stub[i] = InstanceControlGrpc.newStub(channel[i]); } } } @@ -376,29 +374,31 @@ public CompletableFuture getFunctionStatus(int instanceId) { retval.completeExceptionally(new RuntimeException("Invalid InstanceId")); return retval; } - ListenableFuture response = - stub[instanceId].withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) - .getFunctionStatus(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub[instanceId].withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) + .getFunctionStatus(new Empty(), new StreamObserver<>() { @Override - public void onFailure(Throwable throwable) { - FunctionStatus.Builder builder = FunctionStatus.newBuilder(); - builder.setRunning(false); - builder.setFailureException(throwable.getMessage()); - retval.complete(builder.build()); + public void onNext(FunctionStatus t) { + retval.complete(t); } @Override - public void onSuccess(FunctionStatus t) { - retval.complete(t); + public void onError(Throwable throwable) { + FunctionStatus status = new FunctionStatus(); + status.setRunning(false); + status.setFailureException(throwable.getMessage()); + retval.complete(status); + } + + @Override + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } @Override - public CompletableFuture getAndResetMetrics() { - CompletableFuture retval = new CompletableFuture<>(); + public CompletableFuture getAndResetMetrics() { + CompletableFuture retval = new CompletableFuture<>(); retval.completeExceptionally( new RuntimeException("Kubernetes Runtime doesn't support getAndReset metrics via rest")); return retval; @@ -413,8 +413,8 @@ public CompletableFuture resetMetrics() { } @Override - public CompletableFuture getMetrics(int instanceId) { - CompletableFuture retval = new CompletableFuture<>(); + public CompletableFuture getMetrics(int instanceId) { + CompletableFuture retval = new CompletableFuture<>(); if (stub == null) { retval.completeExceptionally(new RuntimeException("Not alive")); return retval; @@ -425,21 +425,22 @@ public CompletableFuture getMetrics(int insta return retval; } - ListenableFuture response = - stub[instanceId].withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) - .getMetrics(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub[instanceId].withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) + .getMetrics(new Empty(), new StreamObserver<>() { @Override - public void onFailure(Throwable throwable) { - InstanceCommunication.MetricsData.Builder builder = InstanceCommunication.MetricsData.newBuilder(); - retval.complete(builder.build()); + public void onNext(MetricsData t) { + retval.complete(t); } @Override - public void onSuccess(InstanceCommunication.MetricsData t) { - retval.complete(t); + public void onError(Throwable throwable) { + retval.complete(new MetricsData()); + } + + @Override + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } @@ -814,7 +815,7 @@ protected List getExecutorCommand() { return Arrays.asList("sh", "-c", String.join(" ", cmds)); } - private List getDownloadCommand(Function.FunctionDetails functionDetails, String userCodeFilePath, + private List getDownloadCommand(FunctionDetails functionDetails, String userCodeFilePath, boolean transformFunction) { return getDownloadCommand(functionDetails.getTenant(), functionDetails.getNamespace(), functionDetails.getName(), userCodeFilePath, transformFunction); @@ -940,9 +941,9 @@ private Map getPrometheusAnnotations() { } } - private Map getLabels(Function.FunctionDetails functionDetails) { + private Map getLabels(FunctionDetails functionDetails) { final Map labels = new HashMap<>(); - Function.FunctionDetails.ComponentType componentType = InstanceUtils.calculateSubjectType(functionDetails); + FunctionDetails.ComponentType componentType = InstanceUtils.calculateSubjectType(functionDetails); String component; switch (componentType) { case FUNCTION: @@ -969,7 +970,7 @@ private Map getLabels(Function.FunctionDetails functionDetails) return labels; } - private V1PodSpec getPodSpec(List instanceCommand, Function.Resources resource) { + private V1PodSpec getPodSpec(List instanceCommand, Resources resource) { final V1PodSpec podSpec = new V1PodSpec(); // set the termination period to 0 so pods can be deleted quickly @@ -1006,10 +1007,10 @@ private static List getTolerations() { } @VisibleForTesting - V1Container getFunctionContainer(List instanceCommand, Function.Resources resource) { + V1Container getFunctionContainer(List instanceCommand, Resources resource) { final V1Container container = new V1Container().name(PULSARFUNCTIONS_CONTAINER_NAME); - Function.FunctionDetails.Runtime runtime = instanceConfig.getFunctionDetails().getRuntime(); + FunctionDetails.Runtime runtime = instanceConfig.getFunctionDetails().getRuntime(); String imageName = null; if (functionDockerImages != null) { @@ -1109,7 +1110,7 @@ private V1ContainerPort getPrometheusPort() { return port; } - public static String createJobName(Function.FunctionDetails functionDetails, String jobName) { + public static String createJobName(FunctionDetails functionDetails, String jobName) { return jobName == null ? createJobName(functionDetails.getTenant(), functionDetails.getNamespace(), functionDetails.getName()) : createJobName(jobName, functionDetails.getTenant(), @@ -1150,7 +1151,7 @@ private static String getServiceUrl(String jobName, String jobNamespace, int ins return String.format("%s-%d.%s.%s.svc.cluster.local", jobName, instanceId, jobName, jobNamespace); } - public static void doChecks(Function.FunctionDetails functionDetails, String overridenJobName) { + public static void doChecks(FunctionDetails functionDetails, String overridenJobName) { final String jobName = createJobName(functionDetails, overridenJobName); if (!jobName.equals(jobName.toLowerCase())) { throw new RuntimeException("Kubernetes does not allow upper case jobNames."); diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactory.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactory.java index 3f0a2ae9cc351..1aa1745901fbf 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactory.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactory.java @@ -44,7 +44,7 @@ import org.apache.pulsar.functions.auth.KubernetesFunctionAuthProvider; import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.runtime.RuntimeCustomizer; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.RuntimeUtils; @@ -358,7 +358,7 @@ public void close() { } @Override - public void doAdmissionChecks(Function.FunctionDetails functionDetails){ + public void doAdmissionChecks(FunctionDetails functionDetails){ final String overriddenJobName = getOverriddenName(functionDetails); KubernetesRuntime.doChecks(functionDetails, overriddenJobName); validateMinResourcesRequired(functionDetails); @@ -434,13 +434,13 @@ static void overRideKubernetesConfig(Map data, } } - void validateMinResourcesRequired(Function.FunctionDetails functionDetails) { + void validateMinResourcesRequired(FunctionDetails functionDetails) { if (functionInstanceMinResources != null) { Double minCpu = functionInstanceMinResources.getCpu(); Long minRam = functionInstanceMinResources.getRam(); if (minCpu != null) { - if (functionDetails.getResources() == null) { + if (!functionDetails.hasResources()) { throw new IllegalArgumentException( String.format("Per instance CPU requested is not specified. " + "Must specify CPU requested for function to be at least %s", minCpu)); @@ -453,7 +453,7 @@ void validateMinResourcesRequired(Function.FunctionDetails functionDetails) { } if (minRam != null) { - if (functionDetails.getResources() == null) { + if (!functionDetails.hasResources()) { throw new IllegalArgumentException( String.format("Per instance RAM requested is not specified. " + "Must specify RAM requested for function to be at least %s", minRam)); @@ -467,7 +467,7 @@ void validateMinResourcesRequired(Function.FunctionDetails functionDetails) { } } - void validateMaxResourcesRequired(Function.FunctionDetails functionDetails) { + void validateMaxResourcesRequired(FunctionDetails functionDetails) { if (functionInstanceMaxResources != null) { Double maxCpu = functionInstanceMaxResources.getCpu(); Long maxRam = functionInstanceMaxResources.getRam(); @@ -488,7 +488,7 @@ void validateMaxResourcesRequired(Function.FunctionDetails functionDetails) { } } - void validateResourcesGranularityAndProportion(Function.FunctionDetails functionDetails) { + void validateResourcesGranularityAndProportion(FunctionDetails functionDetails) { final long baseMillis = 1000; long multiples = 0L; if (functionInstanceResourceGranularities != null) { @@ -543,13 +543,13 @@ public Optional getRuntimeCustomizer() { return manifestCustomizer; } - private String getOverriddenNamespace(Function.FunctionDetails funcDetails) { + private String getOverriddenNamespace(FunctionDetails funcDetails) { Optional manifestCustomizer = getRuntimeCustomizer(); return manifestCustomizer.map(customizer -> customizer.customizeNamespace(funcDetails, jobNamespace)) .orElse(jobNamespace); } - private String getOverriddenName(Function.FunctionDetails funcDetails) { + private String getOverriddenName(FunctionDetails funcDetails) { Optional manifestCustomizer = getRuntimeCustomizer(); return manifestCustomizer.map(customizer -> customizer.customizeName(funcDetails, jobName)).orElse(jobName); } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java index 2edce0dc0cdc1..d8b866c7f63e1 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/process/ProcessRuntime.java @@ -19,14 +19,10 @@ package org.apache.pulsar.functions.runtime.process; import static org.apache.pulsar.common.util.Runnables.catchingAndLoggingThrowables; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; import com.google.gson.Gson; -import com.google.protobuf.Empty; import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; +import io.grpc.stub.StreamObserver; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; @@ -41,10 +37,12 @@ import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceCache; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.InstanceCommunication; -import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; +import org.apache.pulsar.functions.proto.Empty; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.HealthCheckResult; import org.apache.pulsar.functions.proto.InstanceControlGrpc; +import org.apache.pulsar.functions.proto.MetricsData; import org.apache.pulsar.functions.runtime.Runtime; import org.apache.pulsar.functions.runtime.RuntimeUtils; import org.apache.pulsar.functions.secretsproviderconfigurator.SecretsProviderConfigurator; @@ -66,7 +64,7 @@ class ProcessRuntime implements Runtime { @Getter private Throwable deathException; private ManagedChannel channel; - private InstanceControlGrpc.InstanceControlFutureStub stub; + private InstanceControlGrpc.InstanceControlStub stub; private ScheduledFuture timer; private InstanceConfig instanceConfig; private final Long expectedHealthCheckInterval; @@ -178,11 +176,11 @@ public void start() { channel = ManagedChannelBuilder.forAddress("127.0.0.1", instancePort) .usePlaintext() .build(); - stub = InstanceControlGrpc.newFutureStub(channel); + stub = InstanceControlGrpc.newStub(channel); timer = InstanceCache.getInstanceCache().getScheduledExecutorService() .scheduleAtFixedRate(catchingAndLoggingThrowables(() -> { - CompletableFuture result = healthCheck(); + CompletableFuture result = healthCheck(); try { result.get(); } catch (Exception e) { @@ -242,50 +240,55 @@ public CompletableFuture getFunctionStatus(int instanceId) { retval.completeExceptionally(new RuntimeException("Not alive")); return retval; } - ListenableFuture response = stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) - .getFunctionStatus(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) + .getFunctionStatus(new Empty(), new StreamObserver<>() { @Override - public void onFailure(Throwable throwable) { - FunctionStatus.Builder builder = FunctionStatus.newBuilder(); - builder.setRunning(false); + public void onNext(FunctionStatus t) { + retval.complete(t); + } + + @Override + public void onError(Throwable throwable) { + FunctionStatus status = new FunctionStatus(); + status.setRunning(false); if (deathException != null) { - builder.setFailureException(deathException.getMessage()); + status.setFailureException(deathException.getMessage()); } else { - builder.setFailureException(throwable.getMessage()); + status.setFailureException(throwable.getMessage()); } - retval.complete(builder.build()); + retval.complete(status); } @Override - public void onSuccess(InstanceCommunication.FunctionStatus t) { - retval.complete(t); + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } @Override - public CompletableFuture getAndResetMetrics() { - CompletableFuture retval = new CompletableFuture<>(); + public CompletableFuture getAndResetMetrics() { + CompletableFuture retval = new CompletableFuture<>(); if (stub == null) { retval.completeExceptionally(new RuntimeException("Not alive")); return retval; } - ListenableFuture response = - stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) - .getAndResetMetrics(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS) + .getAndResetMetrics(new Empty(), new StreamObserver<>() { @Override - public void onFailure(Throwable throwable) { + public void onNext(MetricsData t) { + retval.complete(t); + } + + @Override + public void onError(Throwable throwable) { retval.completeExceptionally(throwable); } @Override - public void onSuccess(InstanceCommunication.MetricsData t) { - retval.complete(t); + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } @@ -296,42 +299,46 @@ public CompletableFuture resetMetrics() { retval.completeExceptionally(new RuntimeException("Not alive")); return retval; } - ListenableFuture response = - stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS).resetMetrics(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS).resetMetrics(new Empty(), new StreamObserver<>() { @Override - public void onFailure(Throwable throwable) { + public void onNext(Empty t) { + retval.complete(null); + } + + @Override + public void onError(Throwable throwable) { retval.completeExceptionally(throwable); } @Override - public void onSuccess(Empty t) { - retval.complete(null); + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } @Override - public CompletableFuture getMetrics(int instanceId) { - CompletableFuture retval = new CompletableFuture<>(); + public CompletableFuture getMetrics(int instanceId) { + CompletableFuture retval = new CompletableFuture<>(); if (stub == null) { retval.completeExceptionally(new RuntimeException("Not alive")); return retval; } - ListenableFuture response = - stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS).getMetrics(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS).getMetrics(new Empty(), new StreamObserver<>() { + @Override + public void onNext(MetricsData t) { + retval.complete(t); + } + @Override - public void onFailure(Throwable throwable) { + public void onError(Throwable throwable) { retval.completeExceptionally(throwable); } @Override - public void onSuccess(InstanceCommunication.MetricsData t) { - retval.complete(t); + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } @@ -340,25 +347,27 @@ public String getPrometheusMetrics() throws IOException { return RuntimeUtils.getPrometheusMetrics(metricsPort); } - public CompletableFuture healthCheck() { - CompletableFuture retval = new CompletableFuture<>(); + public CompletableFuture healthCheck() { + CompletableFuture retval = new CompletableFuture<>(); if (stub == null) { retval.completeExceptionally(new RuntimeException("Not alive")); return retval; } - ListenableFuture response = - stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS).healthCheck(Empty.newBuilder().build()); - Futures.addCallback(response, new FutureCallback() { + stub.withDeadlineAfter(GRPC_TIMEOUT_SECS, TimeUnit.SECONDS).healthCheck(new Empty(), new StreamObserver<>() { + @Override + public void onNext(HealthCheckResult t) { + retval.complete(t); + } + @Override - public void onFailure(Throwable throwable) { + public void onError(Throwable throwable) { retval.completeExceptionally(throwable); } @Override - public void onSuccess(InstanceCommunication.HealthCheckResult t) { - retval.complete(t); + public void onCompleted() { } - }, MoreExecutors.directExecutor()); + }); return retval; } diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntime.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntime.java index 9dca4015d5ef5..d172929483cd2 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntime.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntime.java @@ -36,9 +36,9 @@ import org.apache.pulsar.functions.instance.InstanceUtils; import org.apache.pulsar.functions.instance.JavaInstanceRunnable; import org.apache.pulsar.functions.instance.stats.FunctionCollectorRegistry; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; -import org.apache.pulsar.functions.proto.InstanceCommunication.FunctionStatus; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.MetricsData; import org.apache.pulsar.functions.runtime.Runtime; import org.apache.pulsar.functions.secretsprovider.SecretsProvider; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -91,7 +91,7 @@ public class ThreadRuntime implements Runtime { Optional connectorsManager, Optional functionsManager) { this.instanceConfig = instanceConfig; - if (instanceConfig.getFunctionDetails().getRuntime() != Function.FunctionDetails.Runtime.JAVA) { + if (instanceConfig.getFunctionDetails().getRuntime() != FunctionDetails.Runtime.JAVA) { throw new RuntimeException("Thread Container only supports Java Runtime"); } @@ -118,20 +118,20 @@ private static ClassLoader getFunctionClassLoader(InstanceConfig instanceConfig, FunctionCacheManager fnCache, Optional connectorsManager, Optional functionsManager, - Function.FunctionDetails.ComponentType componentType) + FunctionDetails.ComponentType componentType) throws Exception { if (FunctionCommon.isFunctionCodeBuiltin(instanceConfig.getFunctionDetails(), componentType)) { - if (componentType == Function.FunctionDetails.ComponentType.FUNCTION && functionsManager.isPresent()) { + if (componentType == FunctionDetails.ComponentType.FUNCTION && functionsManager.isPresent()) { return functionsManager.get() .getFunction(instanceConfig.getFunctionDetails().getBuiltin()) .getFunctionPackage().getClassLoader(); } - if (componentType == Function.FunctionDetails.ComponentType.SOURCE && connectorsManager.isPresent()) { + if (componentType == FunctionDetails.ComponentType.SOURCE && connectorsManager.isPresent()) { return connectorsManager.get() .getConnector(instanceConfig.getFunctionDetails().getSource().getBuiltin()) .getConnectorFunctionPackage().getClassLoader(); } - if (componentType == Function.FunctionDetails.ComponentType.SINK && connectorsManager.isPresent()) { + if (componentType == FunctionDetails.ComponentType.SINK && connectorsManager.isPresent()) { return connectorsManager.get() .getConnector(instanceConfig.getFunctionDetails().getSink().getBuiltin()) .getConnectorFunctionPackage().getClassLoader(); @@ -203,7 +203,7 @@ public void start() throws Exception { ClassLoader transformFunctionClassLoader = transformFunctionFile == null ? null : getFunctionClassLoader( instanceConfig, instanceConfig.getTransformFunctionId(), transformFunctionFile, narExtractionDirectory, - fnCache, connectorsManager, functionsManager, Function.FunctionDetails.ComponentType.FUNCTION); + fnCache, connectorsManager, functionsManager, FunctionDetails.ComponentType.FUNCTION); // re-initialize JavaInstanceRunnable so that variables in constructor can be re-initialized this.javaInstanceRunnable = new JavaInstanceRunnable( @@ -277,29 +277,29 @@ public void stop() { public CompletableFuture getFunctionStatus(int instanceId) { CompletableFuture statsFuture = new CompletableFuture<>(); if (!isAlive()) { - FunctionStatus.Builder functionStatusBuilder = FunctionStatus.newBuilder(); - functionStatusBuilder.setRunning(false); + FunctionStatus functionStatus = new FunctionStatus(); + functionStatus.setRunning(false); Throwable ex = getDeathException(); if (ex != null && ex.getMessage() != null) { - functionStatusBuilder.setFailureException(ex.getMessage()); + functionStatus.setFailureException(ex.getMessage()); } - statsFuture.complete(functionStatusBuilder.build()); + statsFuture.complete(functionStatus); return statsFuture; } - FunctionStatus.Builder functionStatusBuilder = javaInstanceRunnable.getFunctionStatus(); - functionStatusBuilder.setRunning(true); - statsFuture.complete(functionStatusBuilder.build()); + FunctionStatus functionStatus = javaInstanceRunnable.getFunctionStatus(); + functionStatus.setRunning(true); + statsFuture.complete(functionStatus); return statsFuture; } @Override - public CompletableFuture getAndResetMetrics() { + public CompletableFuture getAndResetMetrics() { return CompletableFuture.completedFuture(javaInstanceRunnable.getAndResetMetrics()); } @Override - public CompletableFuture getMetrics(int instanceId) { + public CompletableFuture getMetrics(int instanceId) { return CompletableFuture.completedFuture(javaInstanceRunnable.getMetrics()); } diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProviderTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProviderTest.java index 2a4c2ae896f41..47c7c453a8512 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProviderTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/ClearTextFunctionTokenAuthProviderTest.java @@ -22,7 +22,7 @@ import org.apache.pulsar.broker.authentication.AuthenticationDataSource; import org.apache.pulsar.client.impl.auth.AuthenticationToken; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.testng.Assert; import org.testng.annotations.Test; @@ -33,8 +33,8 @@ public void testClearTextAuth() throws Exception { ClearTextFunctionTokenAuthProvider clearTextFunctionTokenAuthProvider = new ClearTextFunctionTokenAuthProvider(); - Function.FunctionDetails funcDetails = Function.FunctionDetails.newBuilder().setTenant("test-tenant") - .setNamespace("test-ns").setName("test-func").build(); + FunctionDetails funcDetails = new FunctionDetails().setTenant("test-tenant") + .setNamespace("test-ns").setName("test-func"); Optional functionAuthData = clearTextFunctionTokenAuthProvider.cacheAuthData(funcDetails, new AuthenticationDataSource() { diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java index bbc0e7a855587..af7b9a6347462 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/auth/KubernetesSecretsTokenAuthProviderTest.java @@ -37,7 +37,7 @@ import org.apache.pulsar.broker.authentication.AuthenticationDataSource; import org.apache.pulsar.client.impl.auth.AuthenticationToken; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.testng.Assert; import org.testng.annotations.Test; @@ -122,8 +122,8 @@ public void testCacheAuthData() throws ApiException { KubernetesSecretsTokenAuthProvider kubernetesSecretsTokenAuthProvider = new KubernetesSecretsTokenAuthProvider(); kubernetesSecretsTokenAuthProvider.initialize(coreV1Api, null, (fd) -> "default"); - Function.FunctionDetails funcDetails = Function.FunctionDetails.newBuilder().setTenant("test-tenant") - .setNamespace("test-ns").setName("test-func").build(); + FunctionDetails funcDetails = new FunctionDetails().setTenant("test-tenant") + .setNamespace("test-ns").setName("test-func"); Optional functionAuthData = kubernetesSecretsTokenAuthProvider.cacheAuthData(funcDetails, new AuthenticationDataSource() { @Override @@ -186,8 +186,8 @@ public void testUpdateAuthData() throws Exception { kubernetesSecretsTokenAuthProvider.initialize(coreV1Api, null, (fd) -> "default"); // test when existingFunctionAuthData is empty Optional existingFunctionAuthData = Optional.empty(); - Function.FunctionDetails funcDetails = Function.FunctionDetails.newBuilder().setTenant("test-tenant") - .setNamespace("test-ns").setName("test-func").build(); + FunctionDetails funcDetails = new FunctionDetails().setTenant("test-tenant") + .setNamespace("test-ns").setName("test-func"); CoreV1Api.APIcreateNamespacedSecretRequest namespacedSecretRequest = mock(); when(coreV1Api.createNamespacedSecret(anyString(), any())).thenReturn(namespacedSecretRequest); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java index eac5fda00652d..7c05fe100869c 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java @@ -29,7 +29,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.Resources; +import org.apache.pulsar.functions.proto.RetryDetails; +import org.apache.pulsar.functions.proto.SourceSpec; import org.jose4j.json.internal.json_simple.JSONObject; import org.testng.Assert; import org.testng.annotations.DataProvider; @@ -87,39 +91,35 @@ public void getGoInstanceCmd(boolean k8sRuntime) throws IOException { JSONObject secretsMap = new JSONObject(); secretsMap.put("secret", "cake is a lie"); - Function.SourceSpec sources = Function.SourceSpec.newBuilder() + SourceSpec sources = new SourceSpec() .setCleanupSubscription(true) .setSubscriptionName("go-func-sub") - .setTimeoutMs(500) - .putInputSpecs("go-func-input", Function.ConsumerSpec.newBuilder().setIsRegexPattern(false).build()) - .build(); + .setTimeoutMs(500); + sources.putInputSpecs("go-func-input").setIsRegexPattern(false); - Function.RetryDetails retryDetails = Function.RetryDetails.newBuilder() + RetryDetails retryDetails = new RetryDetails() .setDeadLetterTopic("go-func-deadletter") - .setMaxMessageRetries(1) - .build(); + .setMaxMessageRetries(1); - Function.Resources resources = Function.Resources.newBuilder() + Resources resources = new Resources() .setCpu(2) .setDisk(1024) - .setRam(32) - .build(); + .setRam(32); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder() + FunctionDetails functionDetails = new FunctionDetails() .setAutoAck(true) .setTenant("public") .setNamespace("default") .setName("go-func") .setLogTopic("go-func-log") - .setProcessingGuarantees(Function.ProcessingGuarantees.ATLEAST_ONCE) - .setRuntime(Function.FunctionDetails.Runtime.GO) + .setProcessingGuarantees(ProcessingGuarantees.ATLEAST_ONCE) + .setRuntime(FunctionDetails.Runtime.GO) .setSecretsMap(secretsMap.toJSONString()) .setParallelism(1) - .setSource(sources) - .setRetryDetails(retryDetails) - .setResources(resources) - .setUserConfig(userConfig.toJSONString()) - .build(); + .setUserConfig(userConfig.toJSONString()); + functionDetails.setSource().copyFrom(sources); + functionDetails.setRetryDetails().copyFrom(retryDetails); + functionDetails.setResources().copyFrom(resources); instanceConfig.setFunctionDetails(functionDetails); instanceConfig.setExposePulsarAdminClientEnabled(true); @@ -202,7 +202,7 @@ public void getAdditionalJavaRuntimeArguments(boolean k8sRuntime) throws Excepti instanceConfig.setFunctionVersion("1.0.0"); instanceConfig.setMaxBufferedTuples(5); instanceConfig.setPort(1337); - instanceConfig.setFunctionDetails(Function.FunctionDetails.newBuilder().build()); + instanceConfig.setFunctionDetails(new FunctionDetails()); instanceConfig.setAdditionalJavaRuntimeArguments(Arrays.asList("-XX:+ExitOnOutOfMemoryError")); List cmd = RuntimeUtils.getCmd(instanceConfig, "instanceFile", diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java index 659398ed48250..0653d6dcacbd8 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java @@ -43,8 +43,7 @@ import org.apache.pulsar.functions.auth.KubernetesFunctionAuthProvider; import org.apache.pulsar.functions.auth.KubernetesSecretsTokenAuthProvider; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.runtime.RuntimeCustomizer; import org.apache.pulsar.functions.secretsprovider.ClearTextSecretsProvider; import org.apache.pulsar.functions.secretsproviderconfigurator.DefaultSecretsProviderConfigurator; @@ -192,13 +191,13 @@ KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, } FunctionDetails createFunctionDetails() { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); - functionDetailsBuilder.setRuntime(FunctionDetails.Runtime.JAVA); - functionDetailsBuilder.setTenant("public"); - functionDetailsBuilder.setNamespace("default"); - functionDetailsBuilder.setName("function"); - functionDetailsBuilder.setSecretsMap("SomeMap"); - return functionDetailsBuilder.build(); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setRuntime(FunctionDetails.Runtime.JAVA); + functionDetails.setTenant("public"); + functionDetails.setNamespace("default"); + functionDetails.setName("function"); + functionDetails.setSecretsMap("SomeMap"); + return functionDetails; } @Test @@ -229,7 +228,8 @@ public void testValidateMinResourcesRequired() throws Exception { testMinResource(0.05, 512L, true, "Per instance CPU requested, 0.05, for function is less than the minimum required, 0.1"); testMinResource(null, null, true, - "Per instance CPU requested, 0.0, for function is less than the minimum required, 0.1"); + "Per instance CPU requested is not specified. Must specify CPU requested for function" + + " to be at least 0.1"); testMinResource(0.2, null, true, "Per instance RAM requested, 0, for function is less than the minimum required, 1024"); @@ -287,7 +287,8 @@ public void testValidateMinMaxResourcesRequired() throws Exception { "Per instance RAM requested, 512, for function is less than the minimum required, 1024"); testMinMaxResource(null, null, true, - "Per instance CPU requested, 0.0, for function is less than the minimum required, 0.1"); + "Per instance CPU requested is not specified. Must specify CPU requested for function" + + " to be at least 0.1"); testMinMaxResource(0.2, null, true, "Per instance RAM requested, 0, for function is less than the minimum required, 1024"); } @@ -382,20 +383,20 @@ public void configureAuthenticationConfig(AuthenticationConfig authConfig, } @Override - public Optional cacheAuthData(Function.FunctionDetails funcDetails, + public Optional cacheAuthData(FunctionDetails funcDetails, AuthenticationDataSource authenticationDataSource) throws Exception { return Optional.empty(); } @Override - public Optional updateAuthData(Function.FunctionDetails funcDetails, + public Optional updateAuthData(FunctionDetails funcDetails, Optional existingFunctionAuthData, AuthenticationDataSource authenticationDataSource) throws Exception { return Optional.empty(); } @Override - public void cleanUpAuthData(Function.FunctionDetails funcDetails, + public void cleanUpAuthData(FunctionDetails funcDetails, Optional functionAuthData) throws Exception { } @@ -418,20 +419,20 @@ public void configureAuthenticationConfig(AuthenticationConfig authConfig, } @Override - public Optional cacheAuthData(Function.FunctionDetails funcDetails, + public Optional cacheAuthData(FunctionDetails funcDetails, AuthenticationDataSource authenticationDataSource) throws Exception { return Optional.empty(); } @Override - public Optional updateAuthData(Function.FunctionDetails funcDetails, + public Optional updateAuthData(FunctionDetails funcDetails, Optional existingFunctionAuthData, AuthenticationDataSource authenticationDataSource) throws Exception { return Optional.empty(); } @Override - public void cleanUpAuthData(Function.FunctionDetails funcDetails, + public void cleanUpAuthData(FunctionDetails funcDetails, Optional functionAuthData) throws Exception { } @@ -476,7 +477,7 @@ private void testResourceRestrictions(Double cpu, Long ram, Resources minResourc factory = createKubernetesRuntimeFactory(null, minResources, maxResources, granularities, changeInLockStep); FunctionDetails functionDetailsBase = createFunctionDetails(); - Function.Resources.Builder resources = Function.Resources.newBuilder(); + org.apache.pulsar.functions.proto.Resources resources = new org.apache.pulsar.functions.proto.Resources(); if (cpu != null) { resources.setCpu(cpu); } @@ -485,9 +486,10 @@ private void testResourceRestrictions(Double cpu, Long ram, Resources minResourc } FunctionDetails functionDetails; if (ram != null || cpu != null) { - functionDetails = FunctionDetails.newBuilder(functionDetailsBase).setResources(resources).build(); + functionDetails = new FunctionDetails().copyFrom(functionDetailsBase); + functionDetails.setResources().copyFrom(resources); } else { - functionDetails = FunctionDetails.newBuilder(functionDetailsBase).build(); + functionDetails = new FunctionDetails().copyFrom(functionDetailsBase); } try { diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java index f6a13d3921dbe..37795100e0c00 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java @@ -39,7 +39,6 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.google.protobuf.util.JsonFormat; import io.kubernetes.client.custom.Quantity; import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.apis.AppsV1Api; @@ -69,9 +68,12 @@ import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.functions.instance.AuthenticationConfig; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.ConsumerSpec; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.ConsumerSpec; +import org.apache.pulsar.functions.proto.FunctionAuthenticationSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.Resources; +import org.apache.pulsar.functions.proto.SourceSpec; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.apache.pulsar.functions.runtime.RuntimeCustomizer; import org.apache.pulsar.functions.runtime.thread.ThreadRuntime; import org.apache.pulsar.functions.secretsprovider.ClearTextSecretsProvider; @@ -99,20 +101,20 @@ public class KubernetesRuntimeTest { private static final String TEST_NAME = "container"; private static final Map topicsToSerDeClassName = new HashMap<>(); private static final Map topicsToSchema = new HashMap<>(); - private static final Function.Resources RESOURCES = Function.Resources.newBuilder() - .setRam(1000L).setCpu(1).setDisk(10000L).build(); + private static final Resources RESOURCES = new Resources() + .setRam(1000L).setCpu(1).setDisk(10000L); private static final String narExtractionDirectory = "/tmp/foo"; static { topicsToSerDeClassName.put("test_src", ""); - topicsToSchema.put("test_src", - ConsumerSpec.newBuilder().setSerdeClassName("").setIsRegexPattern(false).build()); + ConsumerSpec consumerSpec = new ConsumerSpec().setSerdeClassName("").setIsRegexPattern(false); + topicsToSchema.put("test_src", consumerSpec); } public class TestKubernetesCustomManifestCustomizer implements KubernetesManifestCustomizer { @Override - public V1StatefulSet customizeStatefulSet(Function.FunctionDetails funcDetails, V1StatefulSet statefulSet) { + public V1StatefulSet customizeStatefulSet(FunctionDetails funcDetails, V1StatefulSet statefulSet) { assertEquals(funcDetails.getCustomRuntimeOptions(), "custom-service-account"); statefulSet.getSpec().getTemplate().getSpec().serviceAccountName("my-service-account"); return statefulSet; @@ -286,34 +288,35 @@ KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, int } FunctionDetails createFunctionDetails(FunctionDetails.Runtime runtime, boolean addSecrets) { - return createFunctionDetails(runtime, addSecrets, (fb) -> fb); + return createFunctionDetails(runtime, addSecrets, (fd) -> fd); } FunctionDetails createFunctionDetails(FunctionDetails.Runtime runtime, boolean addSecrets, - java.util.function.Function customize) { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); - functionDetailsBuilder.setRuntime(runtime); - functionDetailsBuilder.setTenant(TEST_TENANT); - functionDetailsBuilder.setNamespace(TEST_NAMESPACE); - functionDetailsBuilder.setName(TEST_NAME); - functionDetailsBuilder.setClassName("org.apache.pulsar.functions.utils.functioncache.AddFunction"); - functionDetailsBuilder.setSink(Function.SinkSpec.newBuilder() + java.util.function.Function customize) { + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setRuntime(runtime); + functionDetails.setTenant(TEST_TENANT); + functionDetails.setNamespace(TEST_NAMESPACE); + functionDetails.setName(TEST_NAME); + functionDetails.setClassName("org.apache.pulsar.functions.utils.functioncache.AddFunction"); + functionDetails.setSink() .setTopic(TEST_NAME + "-output") .setSerDeClassName("org.apache.pulsar.functions.runtime.serde.Utf8Serializer") .setClassName("org.pulsar.pulsar.TestSink") - .setTypeClassName(String.class.getName()) - .build()); - functionDetailsBuilder.setLogTopic(TEST_NAME + "-log"); - functionDetailsBuilder.setSource(Function.SourceSpec.newBuilder() - .setSubscriptionType(Function.SubscriptionType.FAILOVER) - .putAllInputSpecs(topicsToSchema) + .setTypeClassName(String.class.getName()); + functionDetails.setLogTopic(TEST_NAME + "-log"); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(SubscriptionType.FAILOVER) .setClassName("org.pulsar.pulsar.TestSource") - .setTypeClassName(String.class.getName())); + .setTypeClassName(String.class.getName()); + for (Map.Entry entry : topicsToSchema.entrySet()) { + sourceSpec.putInputSpecs(entry.getKey()).copyFrom(entry.getValue()); + } if (addSecrets) { - functionDetailsBuilder.setSecretsMap("SomeMap"); + functionDetails.setSecretsMap("SomeMap"); } - functionDetailsBuilder.setResources(RESOURCES); - return customize.apply(functionDetailsBuilder).build(); + functionDetails.setResources().copyFrom(RESOURCES); + return customize.apply(functionDetails); } InstanceConfig createJavaInstanceConfig(FunctionDetails.Runtime runtime, boolean addSecrets, @@ -352,7 +355,7 @@ private void verifyRamPadding(int percentMemoryPadding, long ram, long expectedR KubernetesRuntime container = factory.createContainer(config, userJarFile, userJarFile, null, null, 30L); - Function.Resources resources = Function.Resources.newBuilder().setRam(ram).build(); + Resources resources = new Resources().setRam(ram); V1Container containerSpec = container.getFunctionContainer(Collections.emptyList(), resources); Assert.assertEquals(containerSpec.getResources().getLimits().get("memory").getNumber().longValue(), @@ -407,8 +410,8 @@ public void testResources() throws Exception { private void testResources(double userCpuRequest, long userMemoryRequest, double cpuOverCommitRatio, double memoryOverCommitRatio) throws Exception { - Function.Resources resources = Function.Resources.newBuilder() - .setRam(userMemoryRequest).setCpu(userCpuRequest).setDisk(10000L).build(); + Resources resources = new Resources() + .setRam(userMemoryRequest).setCpu(userCpuRequest).setDisk(10000L); InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); factory = createKubernetesRuntimeFactory(null, 10, cpuOverCommitRatio, memoryOverCommitRatio); @@ -511,7 +514,7 @@ private void verifyJavaInstance(InstanceConfig config, String depsDir, boolean s + " --function_id " + config.getFunctionId() + " --function_version " + config.getFunctionVersion() + " --function_details '" - + JsonFormat.printer().omittingInsignificantWhitespace().print(config.getFunctionDetails()) + + config.getFunctionDetails().toJson() + "' --pulsar_serviceurl " + pulsarServiceUrl + pulsarAdminArg + " --max_buffered_tuples 1024 --port " + args.get(portArg) + " --metrics_port " @@ -604,7 +607,7 @@ private void verifyPythonInstance(InstanceConfig config, String extraDepsDir, bo + " --function_id " + config.getFunctionId() + " --function_version " + config.getFunctionVersion() + " --function_details '" - + JsonFormat.printer().omittingInsignificantWhitespace().print(config.getFunctionDetails()) + + config.getFunctionDetails().toJson() + "' --pulsar_serviceurl " + pulsarServiceUrl + " --max_buffered_tuples 1024 --port " + args.get(portArg) + " --metrics_port " + args.get(metricsPortArg) @@ -646,18 +649,17 @@ public void testCreateJobName() throws Exception { @Test public void testCreateFunctionLabels() throws Exception { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); - functionDetailsBuilder.setRuntime(FunctionDetails.Runtime.JAVA); - functionDetailsBuilder.setTenant("tenant"); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setRuntime(FunctionDetails.Runtime.JAVA); + functionDetails.setTenant("tenant"); // use long namespace to make sure label is truncated to 63 max characters for k8s requirements - functionDetailsBuilder.setNamespace(String.format("%-100s", + functionDetails.setNamespace(String.format("%-100s", "namespace:$second.part:third@test_0").replace(" ", "0")); - functionDetailsBuilder.setName("$function_name!"); + functionDetails.setName("$function_name!"); JsonObject configObj = new JsonObject(); configObj.addProperty("jobNamespace", "custom-ns"); configObj.addProperty("jobName", "custom-name"); - functionDetailsBuilder.setCustomRuntimeOptions(configObj.toString()); - final FunctionDetails functionDetails = functionDetailsBuilder.build(); + functionDetails.setCustomRuntimeOptions(configObj.toString()); InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); config.setFunctionDetails(functionDetails); @@ -672,27 +674,28 @@ public void testCreateFunctionLabels() throws Exception { } FunctionDetails createFunctionDetails(final String functionName) { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); - functionDetailsBuilder.setRuntime(FunctionDetails.Runtime.JAVA); - functionDetailsBuilder.setTenant(TEST_TENANT); - functionDetailsBuilder.setNamespace(TEST_NAMESPACE); - functionDetailsBuilder.setName(functionName); - functionDetailsBuilder.setClassName("org.apache.pulsar.functions.utils.functioncache.AddFunction"); - functionDetailsBuilder.setSink(Function.SinkSpec.newBuilder() + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setRuntime(FunctionDetails.Runtime.JAVA); + functionDetails.setTenant(TEST_TENANT); + functionDetails.setNamespace(TEST_NAMESPACE); + functionDetails.setName(functionName); + functionDetails.setClassName("org.apache.pulsar.functions.utils.functioncache.AddFunction"); + functionDetails.setSink() .setTopic(TEST_NAME + "-output") .setSerDeClassName("org.apache.pulsar.functions.runtime.serde.Utf8Serializer") .setClassName("org.pulsar.pulsar.TestSink") - .setTypeClassName(String.class.getName()) - .build()); - functionDetailsBuilder.setLogTopic(TEST_NAME + "-log"); - functionDetailsBuilder.setSource(Function.SourceSpec.newBuilder() - .setSubscriptionType(Function.SubscriptionType.FAILOVER) - .putAllInputSpecs(topicsToSchema) + .setTypeClassName(String.class.getName()); + functionDetails.setLogTopic(TEST_NAME + "-log"); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(SubscriptionType.FAILOVER) .setClassName("org.pulsar.pulsar.TestSource") - .setTypeClassName(String.class.getName())); - functionDetailsBuilder.setSecretsMap("SomeMap"); - functionDetailsBuilder.setResources(RESOURCES); - return functionDetailsBuilder.build(); + .setTypeClassName(String.class.getName()); + for (Map.Entry entry : topicsToSchema.entrySet()) { + sourceSpec.putInputSpecs(entry.getKey()).copyFrom(entry.getValue()); + } + functionDetails.setSecretsMap("SomeMap"); + functionDetails.setResources().copyFrom(RESOURCES); + return functionDetails; } // used for backward compatibility test @@ -760,12 +763,11 @@ private void verifyCreateJobNameWithOverriddenK8sPodNameNoCollisionWithSameName( // create a second function with the same name, but in different tenant/namespace to make sure collision // does not happen. If tenant, namespace, and function name are the same kubernetes handles collision issues - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); - functionDetailsBuilder.setRuntime(FunctionDetails.Runtime.JAVA); - functionDetailsBuilder.setTenant("tenantA"); - functionDetailsBuilder.setNamespace("nsA"); - functionDetailsBuilder.setName(functionName); - final FunctionDetails functionDetails2 = functionDetailsBuilder.build(); + FunctionDetails functionDetails2 = new FunctionDetails(); + functionDetails2.setRuntime(FunctionDetails.Runtime.JAVA); + functionDetails2.setTenant("tenantA"); + functionDetails2.setNamespace("nsA"); + functionDetails2.setName(functionName); final String jobName2 = KubernetesRuntime.createJobName(functionDetails2, customJobName); // create a third function with different name but in same tenant/namespace to make sure collision @@ -812,12 +814,13 @@ private void verifyCreateJobNameWithCollisionalAndInvalidMarksFunctionName() thr @Test public void testNoOpKubernetesManifestCustomizer() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); - config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fb) -> { + config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fd) -> { JsonObject configObj = new JsonObject(); configObj.addProperty("jobNamespace", "custom-ns"); configObj.addProperty("jobName", "custom-name"); - return fb.setCustomRuntimeOptions(configObj.toString()); + fd.setCustomRuntimeOptions(configObj.toString()); + return fd; })); factory = createKubernetesRuntimeFactory(null, 10, 1.0, 1.0); @@ -835,9 +838,10 @@ public void testNoOpKubernetesManifestCustomizer() throws Exception { @Test public void testBasicKubernetesManifestCustomizer() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); - config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fb) -> { + config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fd) -> { JsonObject configObj = createRuntimeCustomizerConfig(); - return fb.setCustomRuntimeOptions(configObj.toString()); + fd.setCustomRuntimeOptions(configObj.toString()); + return fd; })); factory = createKubernetesRuntimeFactory(null, 10, 1.0, 1.0, @@ -879,8 +883,9 @@ public void testBasicKubernetesManifestCustomizer() throws Exception { @Test public void testCustomKubernetesManifestCustomizer() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); - config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fb) -> { - return fb.setCustomRuntimeOptions("custom-service-account"); + config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fd) -> { + fd.setCustomRuntimeOptions("custom-service-account"); + return fd; })); factory = createKubernetesRuntimeFactory(null, 10, 1.0, 1.0, @@ -896,7 +901,7 @@ public void testCustomKubernetesManifestCustomizer() throws Exception { @Test public void testCustomKubernetesDownloadCommandsWithAuth() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); - config.setFunctionAuthenticationSpec(Function.FunctionAuthenticationSpec.newBuilder().build()); + config.setFunctionAuthenticationSpec(new FunctionAuthenticationSpec()); config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false)); factory = createKubernetesRuntimeFactory(null, @@ -1055,14 +1060,19 @@ private void verifyGolangInstance(InstanceConfig config) throws Exception { assertEquals(goInstanceConfig.get("expectedHealthCheckInterval"), 0); assertEquals(goInstanceConfig.get("deadLetterTopic"), ""); assertEquals(goInstanceConfig.get("metricsPort"), 4331); - assertEquals(goInstanceConfig.get("functionDetails"), "{\"tenant\":\"tenant\",\"namespace\":\"namespace\"," + // LightProto serializes JSON fields in declaration order (not field number order), + // so field ordering may differ from protobuf's JsonFormat. + // Compare as parsed JSON objects to be order-independent. + assertEquals( + new com.google.gson.JsonParser().parse((String) goInstanceConfig.get("functionDetails")), + new com.google.gson.JsonParser().parse("{\"tenant\":\"tenant\",\"namespace\":\"namespace\"," + "\"name\":\"container\",\"className\":\"org.apache.pulsar.functions.utils.functioncache" + ".AddFunction\",\"logTopic\":\"container-log\",\"runtime\":\"GO\",\"source\":{\"className\":\"org" + ".pulsar.pulsar.TestSource\",\"subscriptionType\":\"FAILOVER\",\"typeClassName\":\"java.lang" + ".String\",\"inputSpecs\":{\"test_src\":{}}},\"sink\":{\"className\":\"org.pulsar.pulsar" + ".TestSink\",\"topic\":\"container-output\",\"serDeClassName\":\"org.apache.pulsar.functions" + ".runtime.serde.Utf8Serializer\",\"typeClassName\":\"java.lang.String\"},\"resources\":{\"cpu\":1" - + ".0,\"ram\":\"1000\",\"disk\":\"10000\"}}"); + + ".0,\"ram\":\"1000\",\"disk\":\"10000\"}}")); // check padding and xmx V1Container containerSpec = container.getFunctionContainer(Collections.emptyList(), RESOURCES); @@ -1246,11 +1256,12 @@ public void testBasicKubernetesManifestCustomizerWithRuntimeCustomizerConfig() t @Test public void testBasicKubernetesManifestCustomizerWithRuntimeCustomizerConfigOverwrite() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); - config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fb) -> { + config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fd) -> { JsonObject configObj = new JsonObject(); configObj.addProperty("jobNamespace", "custom-ns-overwrite"); configObj.addProperty("jobName", "custom-name-overwrite"); - return fb.setCustomRuntimeOptions(configObj.toString()); + fd.setCustomRuntimeOptions(configObj.toString()); + return fd; })); Map configs = new Gson().fromJson(createRuntimeCustomizerConfig(), HashMap.class); @@ -1378,7 +1389,10 @@ private void assertMetricsPortConfigured(Map functionRuntimeFact public void testDeleteStatefulSetWithTranslatedKubernetesLabelChars() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, - (fb) -> fb.setTenant("c:tenant").setNamespace("c:ns").setName("c:fn"))); + (fd) -> { + fd.setTenant("c:tenant").setNamespace("c:ns").setName("c:fn"); + return fd; + })); CoreV1Api coreApi = mock(CoreV1Api.class); AppsV1Api appsApi = mock(AppsV1Api.class); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java index f1fd738e90e60..c8e7bbdb1a638 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java @@ -24,7 +24,6 @@ import com.google.common.io.MoreFiles; import com.google.common.io.RecursiveDeleteOption; import com.google.gson.reflect.TypeToken; -import com.google.protobuf.util.JsonFormat; import io.kubernetes.client.openapi.models.V1PodSpec; import java.lang.reflect.Type; import java.nio.file.Files; @@ -38,9 +37,10 @@ import org.apache.commons.lang3.SystemUtils; import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.functions.instance.InstanceConfig; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.ConsumerSpec; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.ConsumerSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.SourceSpec; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.apache.pulsar.functions.runtime.thread.ThreadRuntime; import org.apache.pulsar.functions.secretsprovider.ClearTextSecretsProvider; import org.apache.pulsar.functions.secretsproviderconfigurator.SecretsProviderConfigurator; @@ -103,8 +103,8 @@ public Type getSecretObjectType() { private static final Map topicsToSchema = new HashMap<>(); static { topicsToSerDeClassName.put("test_src", ""); - topicsToSchema.put("test_src", - ConsumerSpec.newBuilder().setSerdeClassName("").setIsRegexPattern(false).build()); + ConsumerSpec consumerSpec = new ConsumerSpec().setSerdeClassName("").setIsRegexPattern(false); + topicsToSchema.put("test_src", consumerSpec); } private ProcessRuntimeFactory factory; @@ -171,25 +171,26 @@ private ProcessRuntimeFactory createProcessRuntimeFactory(String extraDependenci } FunctionDetails createFunctionDetails(FunctionDetails.Runtime runtime) { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); - functionDetailsBuilder.setRuntime(runtime); - functionDetailsBuilder.setTenant(TEST_TENANT); - functionDetailsBuilder.setNamespace(TEST_NAMESPACE); - functionDetailsBuilder.setName(TEST_NAME); - functionDetailsBuilder.setClassName("org.apache.pulsar.functions.utils.functioncache.AddFunction"); - functionDetailsBuilder.setSink(Function.SinkSpec.newBuilder() + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setRuntime(runtime); + functionDetails.setTenant(TEST_TENANT); + functionDetails.setNamespace(TEST_NAMESPACE); + functionDetails.setName(TEST_NAME); + functionDetails.setClassName("org.apache.pulsar.functions.utils.functioncache.AddFunction"); + functionDetails.setSink() .setTopic(TEST_NAME + "-output") .setSerDeClassName("org.apache.pulsar.functions.runtime.serde.Utf8Serializer") .setClassName("org.pulsar.pulsar.TestSink") - .setTypeClassName(String.class.getName()) - .build()); - functionDetailsBuilder.setLogTopic(TEST_NAME + "-log"); - functionDetailsBuilder.setSource(Function.SourceSpec.newBuilder() - .setSubscriptionType(Function.SubscriptionType.FAILOVER) - .putAllInputSpecs(topicsToSchema) + .setTypeClassName(String.class.getName()); + functionDetails.setLogTopic(TEST_NAME + "-log"); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(SubscriptionType.FAILOVER) .setClassName("org.pulsar.pulsar.TestSource") - .setTypeClassName(String.class.getName())); - return functionDetailsBuilder.build(); + .setTypeClassName(String.class.getName()); + for (Map.Entry entry : topicsToSchema.entrySet()) { + sourceSpec.putInputSpecs(entry.getKey()).copyFrom(entry.getValue()); + } + return functionDetails; } InstanceConfig createJavaInstanceConfig(FunctionDetails.Runtime runtime) { @@ -343,7 +344,7 @@ private void verifyJavaInstance(InstanceConfig config, Path depsDir, String webS + " --function_id " + config.getFunctionId() + " --function_version " + config.getFunctionVersion() + " --function_details '" - + JsonFormat.printer().omittingInsignificantWhitespace().print(config.getFunctionDetails()) + + config.getFunctionDetails().toJson() + "' --pulsar_serviceurl " + pulsarServiceUrl + pulsarAdminArg + " --max_buffered_tuples 1024 --port " + args.get(portArg) + " --metrics_port " @@ -396,7 +397,7 @@ private void verifyPythonInstance(InstanceConfig config, String extraDepsDir) th + config.getInstanceId() + " --function_id " + config.getFunctionId() + " --function_version " + config.getFunctionVersion() + " --function_details '" - + JsonFormat.printer().omittingInsignificantWhitespace().print(config.getFunctionDetails()) + + config.getFunctionDetails().toJson() + "' --pulsar_serviceurl " + pulsarServiceUrl + " --max_buffered_tuples 1024 --port " + args.get(portArg) + " --metrics_port " + args.get(metricsPortArg) diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java index 02d9d00634e3a..8c0fb112fca8a 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java @@ -22,7 +22,7 @@ import io.kubernetes.client.openapi.models.V1PodSpec; import java.lang.reflect.Type; import java.util.Map; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.secretsprovider.ClearTextSecretsProvider; /** @@ -33,7 +33,7 @@ */ public class DefaultSecretsProviderConfigurator implements SecretsProviderConfigurator { @Override - public String getSecretsProviderClassName(Function.FunctionDetails functionDetails) { + public String getSecretsProviderClassName(FunctionDetails functionDetails) { switch (functionDetails.getRuntime()) { case JAVA: return ClearTextSecretsProvider.class.getName(); @@ -47,19 +47,19 @@ public String getSecretsProviderClassName(Function.FunctionDetails functionDetai } @Override - public Map getSecretsProviderConfig(Function.FunctionDetails functionDetails) { + public Map getSecretsProviderConfig(FunctionDetails functionDetails) { return null; } @Override public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { // noop } @Override public void configureProcessRuntimeSecretsProvider(ProcessBuilder processBuilder, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { // noop } diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java index f46b25482d899..29f80796b7a4d 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java @@ -30,7 +30,7 @@ import java.lang.reflect.Type; import java.util.Map; import org.apache.commons.lang3.StringUtils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.secretsprovider.EnvironmentBasedSecretsProvider; /** @@ -45,7 +45,7 @@ public class KubernetesSecretsProviderConfigurator implements SecretsProviderCon private static String keyKey = "key"; @Override - public String getSecretsProviderClassName(Function.FunctionDetails functionDetails) { + public String getSecretsProviderClassName(FunctionDetails functionDetails) { switch (functionDetails.getRuntime()) { case JAVA: return EnvironmentBasedSecretsProvider.class.getName(); @@ -60,7 +60,7 @@ public String getSecretsProviderClassName(Function.FunctionDetails functionDetai } @Override - public Map getSecretsProviderConfig(Function.FunctionDetails functionDetails) { + public Map getSecretsProviderConfig(FunctionDetails functionDetails) { return null; } @@ -71,7 +71,7 @@ public Map getSecretsProviderConfig(Function.FunctionDetails fun // of a pod and kubernetes magically makes the secret pointed to by this combination available as a env variable. @Override public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { V1Container container = null; for (V1Container v1Container : podSpec.getContainers()) { if (v1Container.getName().equals(functionsContainerName)) { @@ -102,7 +102,7 @@ public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String @Override public void configureProcessRuntimeSecretsProvider(ProcessBuilder processBuilder, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { throw new RuntimeException("KubernetesSecretsProviderConfigurator should only be setup for Kubernetes Runtime"); } @@ -115,7 +115,7 @@ public Type getSecretObjectType() { // The secret object should be of type Map and it should contain "id" and "key" @Override public void doAdmissionChecks(AppsV1Api appsV1Api, CoreV1Api coreV1Api, String jobNamespace, String jobName, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { if (!StringUtils.isEmpty(functionDetails.getSecretsMap())) { Type type = new TypeToken>() { }.getType(); diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/NameAndConfigBasedSecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/NameAndConfigBasedSecretsProviderConfigurator.java index e35814a359b7c..63ab49891b314 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/NameAndConfigBasedSecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/NameAndConfigBasedSecretsProviderConfigurator.java @@ -22,7 +22,7 @@ import io.kubernetes.client.openapi.models.V1PodSpec; import java.lang.reflect.Type; import java.util.Map; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * This is a very simple secrets provider which wires in a given secrets provider classname/config @@ -36,12 +36,12 @@ public NameAndConfigBasedSecretsProviderConfigurator(String className, Map getSecretsProviderConfig(Function.FunctionDetails functionDetails) { + public Map getSecretsProviderConfig(FunctionDetails functionDetails) { return config; } @@ -52,13 +52,13 @@ public Map getSecretsProviderConfig(Function.FunctionDetails fun // of a pod and kubernetes magically makes the secret pointed to by this combination available as a env variable. @Override public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { // noop } @Override public void configureProcessRuntimeSecretsProvider(ProcessBuilder processBuilder, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { // noop } diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java index 75ee7c20a49ae..99cabd2340218 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java @@ -23,7 +23,7 @@ import io.kubernetes.client.openapi.models.V1PodSpec; import java.lang.reflect.Type; import java.util.Map; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * This file defines the SecretsProviderConfigurator interface. This interface is used by the function_workers @@ -42,24 +42,24 @@ default void init(Map config) { * of the instance and should contain the logic of connecting with the secrets * provider and obtaining secrets. */ - String getSecretsProviderClassName(Function.FunctionDetails functionDetails); + String getSecretsProviderClassName(FunctionDetails functionDetails); /** * Return the secrets provider config. */ - Map getSecretsProviderConfig(Function.FunctionDetails functionDetails); + Map getSecretsProviderConfig(FunctionDetails functionDetails); /** * Attaches any secrets specific stuff to the k8 container for kubernetes runtime. */ void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, - Function.FunctionDetails functionDetails); + FunctionDetails functionDetails); /** * Attaches any secrets specific stuff to the ProcessBuilder for process runtime. */ void configureProcessRuntimeSecretsProvider(ProcessBuilder processBuilder, - Function.FunctionDetails functionDetails); + FunctionDetails functionDetails); /** * What is the type of the object that should be in the user secret config. @@ -72,7 +72,7 @@ void configureProcessRuntimeSecretsProvider(ProcessBuilder processBuilder, * Do config checks to see whether the secrets provided are conforming. */ default void doAdmissionChecks(AppsV1Api appsV1Api, CoreV1Api coreV1Api, String jobNamespace, String jobName, - Function.FunctionDetails functionDetails) { + FunctionDetails functionDetails) { } } diff --git a/pulsar-functions/secrets/src/test/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfiguratorTest.java b/pulsar-functions/secrets/src/test/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfiguratorTest.java index 045d7590572db..0a732bcf09b55 100644 --- a/pulsar-functions/secrets/src/test/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfiguratorTest.java +++ b/pulsar-functions/secrets/src/test/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfiguratorTest.java @@ -20,7 +20,7 @@ import com.google.gson.Gson; import java.util.HashMap; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.testng.Assert; import org.testng.annotations.Test; @@ -35,8 +35,8 @@ public void testConfigValidation() throws Exception { try { HashMap map = new HashMap(); map.put("secretname", "randomsecret"); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder() - .setSecretsMap(new Gson().toJson(map)).build(); + FunctionDetails functionDetails = new FunctionDetails() + .setSecretsMap(new Gson().toJson(map)); provider.doAdmissionChecks(null, null, null, null, functionDetails); Assert.fail("Non conforming secret object should not validate"); } catch (Exception e) { @@ -46,8 +46,8 @@ public void testConfigValidation() throws Exception { HashMap map1 = new HashMap(); map1.put("secretname", "secretvalue"); map.put("secretname", map1); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder() - .setSecretsMap(new Gson().toJson(map)).build(); + FunctionDetails functionDetails = new FunctionDetails() + .setSecretsMap(new Gson().toJson(map)); provider.doAdmissionChecks(null, null, null, null, functionDetails); Assert.fail("Non conforming secret object should not validate"); } catch (Exception e) { @@ -58,8 +58,8 @@ public void testConfigValidation() throws Exception { map1.put("path", "secretvalue"); map1.put("key", "secretvalue"); map.put("secretname", map1); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder() - .setSecretsMap(new Gson().toJson(map)).build(); + FunctionDetails functionDetails = new FunctionDetails() + .setSecretsMap(new Gson().toJson(map)); provider.doAdmissionChecks(null, null, null, null, functionDetails); } catch (Exception e) { Assert.fail("Conforming secret object should validate"); diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/BatchingUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/BatchingUtils.java index 7db61f7ace887..8ff6372e2a175 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/BatchingUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/BatchingUtils.java @@ -19,42 +19,42 @@ package org.apache.pulsar.functions.utils; import org.apache.pulsar.common.functions.BatchingConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.BatchingSpec; public final class BatchingUtils { - public static Function.BatchingSpec convert(BatchingConfig config) { + public static BatchingSpec convert(BatchingConfig config) { if (config == null) { return null; } - Function.BatchingSpec.Builder builder = Function.BatchingSpec.newBuilder() + BatchingSpec batchingSpec = new BatchingSpec() .setEnabled(config.isEnabled()); if (config.getBatchingMaxPublishDelayMs() != null && config.getBatchingMaxPublishDelayMs() > 0) { - builder.setBatchingMaxPublishDelayMs(config.getBatchingMaxPublishDelayMs()); + batchingSpec.setBatchingMaxPublishDelayMs(config.getBatchingMaxPublishDelayMs()); } if (config.getRoundRobinRouterBatchingPartitionSwitchFrequency() != null && config.getRoundRobinRouterBatchingPartitionSwitchFrequency() > 0) { - builder.setRoundRobinRouterBatchingPartitionSwitchFrequency( + batchingSpec.setRoundRobinRouterBatchingPartitionSwitchFrequency( config.getRoundRobinRouterBatchingPartitionSwitchFrequency()); } if (config.getBatchingMaxMessages() != null && config.getBatchingMaxMessages() > 0) { - builder.setBatchingMaxMessages(config.getBatchingMaxMessages()); + batchingSpec.setBatchingMaxMessages(config.getBatchingMaxMessages()); } if (config.getBatchingMaxBytes() != null && config.getBatchingMaxBytes() > 0) { - builder.setBatchingMaxBytes(config.getBatchingMaxBytes()); + batchingSpec.setBatchingMaxBytes(config.getBatchingMaxBytes()); } if (config.getBatchBuilder() != null && !config.getBatchBuilder().isEmpty()) { - builder.setBatchBuilder(config.getBatchBuilder()); + batchingSpec.setBatchBuilder(config.getBatchBuilder()); } - return builder.build(); + return batchingSpec; } - public static BatchingConfig convertFromSpec(Function.BatchingSpec spec) { + public static BatchingConfig convertFromSpec(BatchingSpec spec) { // to keep the backward compatibility, when batchingSpec is null or empty // the batching is enabled by default, and the default max publish delay is 10ms - if (spec == null || spec.toString().equals("")) { + if (spec == null) { return BatchingConfig.builder() .enabled(true) .batchingMaxPublishDelayMs(10) @@ -62,7 +62,7 @@ public static BatchingConfig convertFromSpec(Function.BatchingSpec spec) { } BatchingConfig.BatchingConfigBuilder builder = BatchingConfig.builder() - .enabled(spec.getEnabled()); + .enabled(spec.isEnabled()); if (spec.getBatchingMaxPublishDelayMs() > 0) { builder.batchingMaxPublishDelayMs(spec.getBatchingMaxPublishDelayMs()); diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/ComponentTypeUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/ComponentTypeUtils.java index 69aa845c5bc3a..474e12004df07 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/ComponentTypeUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/ComponentTypeUtils.java @@ -18,7 +18,7 @@ */ package org.apache.pulsar.functions.utils; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails; public class ComponentTypeUtils { public static String toString(FunctionDetails.ComponentType componentType) { diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/CryptoUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/CryptoUtils.java index 7eb1ad428e1fd..17c01a627c4b3 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/CryptoUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/CryptoUtils.java @@ -24,44 +24,46 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Type; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Map; import org.apache.pulsar.client.api.ConsumerCryptoFailureAction; import org.apache.pulsar.client.api.CryptoKeyReader; import org.apache.pulsar.client.api.ProducerCryptoFailureAction; import org.apache.pulsar.common.functions.CryptoConfig; import org.apache.pulsar.common.util.ClassLoaderUtils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.CryptoSpec; public final class CryptoUtils { - public static Function.CryptoSpec convert(CryptoConfig config) { - Function.CryptoSpec.Builder bldr = Function.CryptoSpec.newBuilder() + public static CryptoSpec convert(CryptoConfig config) { + CryptoSpec cryptoSpec = new CryptoSpec() .setCryptoKeyReaderClassName(config.getCryptoKeyReaderClassName()); if (config.getCryptoKeyReaderConfig() != null) { Type type = new TypeToken>() { }.getType(); String readerConfigString = new Gson().toJson(config.getCryptoKeyReaderConfig(), type); - bldr.setCryptoKeyReaderConfig(readerConfigString); + cryptoSpec.setCryptoKeyReaderConfig(readerConfigString); } if (config.getEncryptionKeys() != null && config.getEncryptionKeys().length > 0) { - bldr.addAllProducerEncryptionKeyName(Arrays.asList(config.getEncryptionKeys())); + cryptoSpec.addAllProducerEncryptionKeyNames(Arrays.asList(config.getEncryptionKeys())); } if (config.getProducerCryptoFailureAction() != null) { - bldr.setProducerCryptoFailureAction(getProtoFailureAction(config.getProducerCryptoFailureAction())); + cryptoSpec.setProducerCryptoFailureAction(getProtoFailureAction(config.getProducerCryptoFailureAction())); } if (config.getConsumerCryptoFailureAction() != null) { - bldr.setConsumerCryptoFailureAction(getProtoFailureAction(config.getConsumerCryptoFailureAction())); + cryptoSpec.setConsumerCryptoFailureAction(getProtoFailureAction(config.getConsumerCryptoFailureAction())); } - return bldr.build(); + return cryptoSpec; } - public static CryptoConfig convertFromSpec(Function.CryptoSpec spec) { + public static CryptoConfig convertFromSpec(CryptoSpec spec) { if (spec == null || isEmpty(spec.getCryptoKeyReaderClassName())) { return null; } @@ -72,11 +74,16 @@ public static CryptoConfig convertFromSpec(Function.CryptoSpec spec) { }.getType(); Map cryptoReaderConfig = new Gson().fromJson(spec.getCryptoKeyReaderConfig(), type); + List keyNames = new ArrayList<>(); + for (int i = 0; i < spec.getProducerEncryptionKeyNamesCount(); i++) { + keyNames.add(spec.getProducerEncryptionKeyNameAt(i)); + } + bldr.cryptoKeyReaderClassName(spec.getCryptoKeyReaderClassName()) .cryptoKeyReaderConfig(cryptoReaderConfig) .consumerCryptoFailureAction(getConsumerCryptoFailureAction(spec.getConsumerCryptoFailureAction())) .producerCryptoFailureAction(getProducerCryptoFailureAction(spec.getProducerCryptoFailureAction())) - .encryptionKeys(spec.getProducerEncryptionKeyNameList().toArray(new String[0])); + .encryptionKeys(keyNames.toArray(new String[0])); return bldr.build(); } @@ -101,7 +108,7 @@ public static CryptoKeyReader getCryptoKeyReaderInstance(String className, Map builder) throws IOException { - JsonFormat.parser().merge(json, builder); - } - public static int findAvailablePort() { // The logic here is a little flaky. There is no guarantee that this // port returned will be available later on when the instance starts @@ -182,10 +177,10 @@ public static FunctionConfig.Runtime convertRuntime(Runtime runtime) { throw new RuntimeException("Unrecognized runtime: " + runtime.name()); } - public static org.apache.pulsar.functions.proto.Function.ProcessingGuarantees convertProcessingGuarantee( + public static ProcessingGuarantees convertProcessingGuarantee( FunctionConfig.ProcessingGuarantees processingGuarantees) { - for (org.apache.pulsar.functions.proto.Function.ProcessingGuarantees type : - org.apache.pulsar.functions.proto.Function.ProcessingGuarantees + for (ProcessingGuarantees type : + ProcessingGuarantees .values()) { if (type.name().equals(processingGuarantees.name())) { return type; @@ -195,7 +190,7 @@ public static org.apache.pulsar.functions.proto.Function.ProcessingGuarantees co } public static FunctionConfig.ProcessingGuarantees convertProcessingGuarantee( - org.apache.pulsar.functions.proto.Function.ProcessingGuarantees processingGuarantees) { + ProcessingGuarantees processingGuarantees) { for (FunctionConfig.ProcessingGuarantees type : FunctionConfig.ProcessingGuarantees.values()) { if (type.name().equals(processingGuarantees.name())) { return type; @@ -273,7 +268,7 @@ public static File extractFileFromPkgURL(String destPkgUrl) throws IOException, } } - public static String getFullyQualifiedInstanceId(org.apache.pulsar.functions.proto.Function.Instance instance) { + public static String getFullyQualifiedInstanceId(Instance instance) { return getFullyQualifiedInstanceId( instance.getFunctionMetaData().getFunctionDetails().getTenant(), instance.getFunctionMetaData().getFunctionDetails().getNamespace(), @@ -323,7 +318,7 @@ public static String getStateNamespace(String tenant, String namespace) { } public static String getFullyQualifiedName( - org.apache.pulsar.functions.proto.Function.FunctionDetails functionDetails) { + org.apache.pulsar.functions.proto.FunctionDetails functionDetails) { return getFullyQualifiedName(functionDetails.getTenant(), functionDetails.getNamespace(), functionDetails.getName()); @@ -363,22 +358,22 @@ public static String capFirstLetter(Enum en) { } public static boolean isFunctionCodeBuiltin( - org.apache.pulsar.functions.proto.Function.FunctionDetailsOrBuilder functionDetail) { + FunctionDetails functionDetail) { return isFunctionCodeBuiltin(functionDetail, functionDetail.getComponentType()); } public static boolean isFunctionCodeBuiltin( - org.apache.pulsar.functions.proto.Function.FunctionDetailsOrBuilder functionDetails, + FunctionDetails functionDetails, ComponentType componentType) { if (componentType == ComponentType.SOURCE && functionDetails.hasSource()) { - org.apache.pulsar.functions.proto.Function.SourceSpec sourceSpec = functionDetails.getSource(); + SourceSpec sourceSpec = functionDetails.getSource(); if (!isEmpty(sourceSpec.getBuiltin())) { return true; } } if (componentType == ComponentType.SINK && functionDetails.hasSink()) { - org.apache.pulsar.functions.proto.Function.SinkSpec sinkSpec = functionDetails.getSink(); + SinkSpec sinkSpec = functionDetails.getSink(); if (!isEmpty(sinkSpec.getBuiltin())) { return true; } @@ -388,8 +383,8 @@ public static boolean isFunctionCodeBuiltin( } public static SubscriptionInitialPosition convertFromFunctionDetailsSubscriptionPosition( - org.apache.pulsar.functions.proto.Function.SubscriptionPosition subscriptionPosition) { - if (org.apache.pulsar.functions.proto.Function.SubscriptionPosition.EARLIEST.equals(subscriptionPosition)) { + SubscriptionPosition subscriptionPosition) { + if (SubscriptionPosition.EARLIEST.equals(subscriptionPosition)) { return SubscriptionInitialPosition.Earliest; } else { return SubscriptionInitialPosition.Latest; @@ -397,7 +392,7 @@ public static SubscriptionInitialPosition convertFromFunctionDetailsSubscription } public static CompressionType convertFromFunctionDetailsCompressionType( - org.apache.pulsar.functions.proto.Function.CompressionType compressionType) { + org.apache.pulsar.functions.proto.CompressionType compressionType) { if (compressionType == null) { return CompressionType.LZ4; } @@ -415,22 +410,22 @@ public static CompressionType convertFromFunctionDetailsCompressionType( } } - public static org.apache.pulsar.functions.proto.Function.CompressionType convertFromCompressionType( + public static org.apache.pulsar.functions.proto.CompressionType convertFromCompressionType( CompressionType compressionType) { if (compressionType == null) { - return org.apache.pulsar.functions.proto.Function.CompressionType.LZ4; + return org.apache.pulsar.functions.proto.CompressionType.LZ4; } switch (compressionType) { case NONE: - return org.apache.pulsar.functions.proto.Function.CompressionType.NONE; + return org.apache.pulsar.functions.proto.CompressionType.NONE; case ZLIB: - return org.apache.pulsar.functions.proto.Function.CompressionType.ZLIB; + return org.apache.pulsar.functions.proto.CompressionType.ZLIB; case ZSTD: - return org.apache.pulsar.functions.proto.Function.CompressionType.ZSTD; + return org.apache.pulsar.functions.proto.CompressionType.ZSTD; case SNAPPY: - return org.apache.pulsar.functions.proto.Function.CompressionType.SNAPPY; + return org.apache.pulsar.functions.proto.CompressionType.SNAPPY; default: - return org.apache.pulsar.functions.proto.Function.CompressionType.LZ4; + return org.apache.pulsar.functions.proto.CompressionType.LZ4; } } } diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java index a847e5075030a..c97e81aa536a5 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionConfigUtils.java @@ -53,8 +53,16 @@ import org.apache.pulsar.common.functions.WindowConfig; import org.apache.pulsar.common.naming.TopicName; import org.apache.pulsar.common.util.ObjectMapperFactory; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.CompressionType; +import org.apache.pulsar.functions.proto.ConsumerSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.ProducerSpec; +import org.apache.pulsar.functions.proto.RetryDetails; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; +import org.apache.pulsar.functions.proto.SubscriptionPosition; +import org.apache.pulsar.functions.proto.SubscriptionType; @Slf4j public class FunctionConfigUtils { @@ -97,44 +105,40 @@ public static FunctionDetails convert(FunctionConfig functionConfig, ExtractedFu boolean isBuiltin = !StringUtils.isEmpty(functionConfig.getJar()) && functionConfig.getJar().startsWith(org.apache.pulsar.common.functions.Utils.BUILTIN); - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); // Setup source - Function.SourceSpec.Builder sourceSpecBuilder = Function.SourceSpec.newBuilder(); + SourceSpec sourceSpec = functionDetails.setSource(); if (functionConfig.getInputs() != null) { functionConfig.getInputs().forEach((topicName -> - sourceSpecBuilder.putInputSpecs(topicName, - Function.ConsumerSpec.newBuilder() - .setIsRegexPattern(false) - .build()) + sourceSpec.putInputSpecs(topicName) + .setIsRegexPattern(false) )); } if (functionConfig.getTopicsPattern() != null && !functionConfig.getTopicsPattern().isEmpty()) { - sourceSpecBuilder.putInputSpecs(functionConfig.getTopicsPattern(), - Function.ConsumerSpec.newBuilder() - .setIsRegexPattern(true) - .build()); + sourceSpec.putInputSpecs(functionConfig.getTopicsPattern()) + .setIsRegexPattern(true); } if (functionConfig.getCustomSerdeInputs() != null) { functionConfig.getCustomSerdeInputs().forEach((topicName, serdeClassName) -> { - sourceSpecBuilder.putInputSpecs(topicName, - Function.ConsumerSpec.newBuilder() - .setSerdeClassName(serdeClassName) - .setIsRegexPattern(false) - .build()); + sourceSpec.putInputSpecs(topicName) + .setSerdeClassName(serdeClassName) + .setIsRegexPattern(false); }); } if (functionConfig.getCustomSchemaInputs() != null) { functionConfig.getCustomSchemaInputs().forEach((topicName, conf) -> { try { ConsumerConfig consumerConfig = OBJECT_MAPPER.readValue(conf, ConsumerConfig.class); - sourceSpecBuilder.putInputSpecs(topicName, - Function.ConsumerSpec.newBuilder() - .setSchemaType(consumerConfig.getSchemaType()) - .putAllSchemaProperties(consumerConfig.getSchemaProperties()) - .putAllConsumerProperties(consumerConfig.getConsumerProperties()) - .setIsRegexPattern(false) - .build()); + ConsumerSpec cs = sourceSpec.putInputSpecs(topicName) + .setSchemaType(consumerConfig.getSchemaType()) + .setIsRegexPattern(false); + if (consumerConfig.getSchemaProperties() != null) { + consumerConfig.getSchemaProperties().forEach(cs::putSchemaProperties); + } + if (consumerConfig.getConsumerProperties() != null) { + consumerConfig.getConsumerProperties().forEach(cs::putConsumerProperties); + } } catch (JsonProcessingException e) { throw new IllegalArgumentException( String.format("Incorrect custom schema inputs,Topic %s ", topicName)); @@ -143,7 +147,7 @@ public static FunctionDetails convert(FunctionConfig functionConfig, ExtractedFu } if (functionConfig.getInputSpecs() != null) { functionConfig.getInputSpecs().forEach((topicName, consumerConf) -> { - Function.ConsumerSpec.Builder bldr = Function.ConsumerSpec.newBuilder() + ConsumerSpec bldr = sourceSpec.putInputSpecs(topicName) .setIsRegexPattern(consumerConf.isRegexPattern()); if (isNotBlank(consumerConf.getSchemaType())) { bldr.setSchemaType(consumerConf.getSchemaType()); @@ -151,98 +155,101 @@ public static FunctionDetails convert(FunctionConfig functionConfig, ExtractedFu bldr.setSerdeClassName(consumerConf.getSerdeClassName()); } if (consumerConf.getReceiverQueueSize() != null) { - bldr.setReceiverQueueSize(Function.ConsumerSpec.ReceiverQueueSize.newBuilder() - .setValue(consumerConf.getReceiverQueueSize()).build()); + bldr.setReceiverQueueSize().setValue(consumerConf.getReceiverQueueSize()); } if (consumerConf.getSchemaProperties() != null) { - bldr.putAllSchemaProperties(consumerConf.getSchemaProperties()); + consumerConf.getSchemaProperties().forEach(bldr::putSchemaProperties); } if (consumerConf.getCryptoConfig() != null) { - bldr.setCryptoSpec(CryptoUtils.convert(consumerConf.getCryptoConfig())); + bldr.setCryptoSpec().copyFrom(CryptoUtils.convert(consumerConf.getCryptoConfig())); } if (consumerConf.getMessagePayloadProcessorConfig() != null) { - bldr.setMessagePayloadProcessorSpec( + bldr.setMessagePayloadProcessorSpec().copyFrom( MessagePayloadProcessorUtils.convert(consumerConf.getMessagePayloadProcessorConfig())); } - bldr.putAllConsumerProperties(consumerConf.getConsumerProperties()); + if (consumerConf.getConsumerProperties() != null) { + consumerConf.getConsumerProperties().forEach(bldr::putConsumerProperties); + } bldr.setPoolMessages(consumerConf.isPoolMessages()); - sourceSpecBuilder.putInputSpecs(topicName, bldr.build()); }); } // Set subscription type - Function.SubscriptionType subType; + SubscriptionType subType; if ((functionConfig.getRetainOrdering() != null && functionConfig.getRetainOrdering()) || FunctionConfig.ProcessingGuarantees.EFFECTIVELY_ONCE .equals(functionConfig.getProcessingGuarantees())) { - subType = Function.SubscriptionType.FAILOVER; + subType = SubscriptionType.FAILOVER; } else if (functionConfig.getRetainKeyOrdering() != null && functionConfig.getRetainKeyOrdering()) { - subType = Function.SubscriptionType.KEY_SHARED; + subType = SubscriptionType.KEY_SHARED; } else { - subType = Function.SubscriptionType.SHARED; + subType = SubscriptionType.SHARED; } - sourceSpecBuilder.setSubscriptionType(subType); + sourceSpec.setSubscriptionType(subType); // Set subscription name if (isNotBlank(functionConfig.getSubName())) { - sourceSpecBuilder.setSubscriptionName(functionConfig.getSubName()); + sourceSpec.setSubscriptionName(functionConfig.getSubName()); } // Set subscription position if (functionConfig.getSubscriptionPosition() != null) { - Function.SubscriptionPosition subPosition; + SubscriptionPosition subPosition; if (SubscriptionInitialPosition.Earliest == functionConfig.getSubscriptionPosition()) { - subPosition = Function.SubscriptionPosition.EARLIEST; + subPosition = SubscriptionPosition.EARLIEST; } else { - subPosition = Function.SubscriptionPosition.LATEST; + subPosition = SubscriptionPosition.LATEST; } - sourceSpecBuilder.setSubscriptionPosition(subPosition); + sourceSpec.setSubscriptionPosition(subPosition); } if (functionConfig.getSkipToLatest() != null) { - sourceSpecBuilder.setSkipToLatest(functionConfig.getSkipToLatest()); + sourceSpec.setSkipToLatest(functionConfig.getSkipToLatest()); } else { - sourceSpecBuilder.setSkipToLatest(false); + sourceSpec.setSkipToLatest(false); } if (extractedDetails.getTypeArg0() != null) { - sourceSpecBuilder.setTypeClassName(extractedDetails.getTypeArg0()); + sourceSpec.setTypeClassName(extractedDetails.getTypeArg0()); } else if (StringUtils.isNotEmpty(functionConfig.getInputTypeClassName())) { - sourceSpecBuilder.setTypeClassName(functionConfig.getInputTypeClassName()); + sourceSpec.setTypeClassName(functionConfig.getInputTypeClassName()); } if (functionConfig.getTimeoutMs() != null) { - sourceSpecBuilder.setTimeoutMs(functionConfig.getTimeoutMs()); + sourceSpec.setTimeoutMs(functionConfig.getTimeoutMs()); // We use negative acks for fast tracking failures - sourceSpecBuilder.setNegativeAckRedeliveryDelayMs(functionConfig.getTimeoutMs()); + sourceSpec.setNegativeAckRedeliveryDelayMs(functionConfig.getTimeoutMs()); } if (functionConfig.getCleanupSubscription() != null) { - sourceSpecBuilder.setCleanupSubscription(functionConfig.getCleanupSubscription()); + sourceSpec.setCleanupSubscription(functionConfig.getCleanupSubscription()); } else { - sourceSpecBuilder.setCleanupSubscription(true); + sourceSpec.setCleanupSubscription(true); } - functionDetailsBuilder.setSource(sourceSpecBuilder); // Setup sink - Function.SinkSpec.Builder sinkSpecBuilder = Function.SinkSpec.newBuilder(); + SinkSpec sinkSpec = functionDetails.setSink(); if (functionConfig.getOutput() != null) { - sinkSpecBuilder.setTopic(functionConfig.getOutput()); + sinkSpec.setTopic(functionConfig.getOutput()); } if (!StringUtils.isBlank(functionConfig.getOutputSerdeClassName())) { - sinkSpecBuilder.setSerDeClassName(functionConfig.getOutputSerdeClassName()); + sinkSpec.setSerDeClassName(functionConfig.getOutputSerdeClassName()); } if (!StringUtils.isBlank(functionConfig.getOutputSchemaType())) { - sinkSpecBuilder.setSchemaType(functionConfig.getOutputSchemaType()); + sinkSpec.setSchemaType(functionConfig.getOutputSchemaType()); } if (functionConfig.getForwardSourceMessageProperty() == Boolean.TRUE) { - sinkSpecBuilder.setForwardSourceMessageProperty(functionConfig.getForwardSourceMessageProperty()); + sinkSpec.setForwardSourceMessageProperty(functionConfig.getForwardSourceMessageProperty()); } if (functionConfig.getCustomSchemaOutputs() != null && functionConfig.getOutput() != null) { String conf = functionConfig.getCustomSchemaOutputs().get(functionConfig.getOutput()); try { if (StringUtils.isNotEmpty(conf)) { ConsumerConfig consumerConfig = OBJECT_MAPPER.readValue(conf, ConsumerConfig.class); - sinkSpecBuilder.putAllSchemaProperties(consumerConfig.getSchemaProperties()); - sinkSpecBuilder.putAllConsumerProperties(consumerConfig.getConsumerProperties()); + if (consumerConfig.getSchemaProperties() != null) { + consumerConfig.getSchemaProperties().forEach(sinkSpec::putSchemaProperties); + } + if (consumerConfig.getConsumerProperties() != null) { + consumerConfig.getConsumerProperties().forEach(sinkSpec::putConsumerProperties); + } } } catch (JsonProcessingException e) { throw new IllegalArgumentException( @@ -250,54 +257,56 @@ public static FunctionDetails convert(FunctionConfig functionConfig, ExtractedFu } } if (extractedDetails.getTypeArg1() != null) { - sinkSpecBuilder.setTypeClassName(extractedDetails.getTypeArg1()); + sinkSpec.setTypeClassName(extractedDetails.getTypeArg1()); } else if (StringUtils.isNotEmpty(functionConfig.getOutputTypeClassName())) { - sinkSpecBuilder.setTypeClassName(functionConfig.getOutputTypeClassName()); + sinkSpec.setTypeClassName(functionConfig.getOutputTypeClassName()); } if (functionConfig.getProducerConfig() != null) { - sinkSpecBuilder.setProducerSpec(convertProducerConfigToProducerSpec(functionConfig.getProducerConfig())); + sinkSpec.setProducerSpec() + .copyFrom(convertProducerConfigToProducerSpec(functionConfig.getProducerConfig())); } if (functionConfig.getBatchBuilder() != null) { - Function.ProducerSpec.Builder builder = sinkSpecBuilder.getProducerSpec() != null - ? sinkSpecBuilder.getProducerSpec().toBuilder() - : Function.ProducerSpec.newBuilder(); - sinkSpecBuilder.setProducerSpec(builder.setBatchBuilder(functionConfig.getBatchBuilder()).build()); + ProducerSpec producerSpec; + if (sinkSpec.hasProducerSpec()) { + producerSpec = sinkSpec.getProducerSpec(); + } else { + producerSpec = sinkSpec.setProducerSpec(); + } + producerSpec.setBatchBuilder(functionConfig.getBatchBuilder()); } - functionDetailsBuilder.setSink(sinkSpecBuilder); if (functionConfig.getTenant() != null) { - functionDetailsBuilder.setTenant(functionConfig.getTenant()); + functionDetails.setTenant(functionConfig.getTenant()); } if (functionConfig.getNamespace() != null) { - functionDetailsBuilder.setNamespace(functionConfig.getNamespace()); + functionDetails.setNamespace(functionConfig.getNamespace()); } if (functionConfig.getName() != null) { - functionDetailsBuilder.setName(functionConfig.getName()); + functionDetails.setName(functionConfig.getName()); } if (functionConfig.getLogTopic() != null) { - functionDetailsBuilder.setLogTopic(functionConfig.getLogTopic()); + functionDetails.setLogTopic(functionConfig.getLogTopic()); } if (functionConfig.getRuntime() != null) { - functionDetailsBuilder.setRuntime(FunctionCommon.convertRuntime(functionConfig.getRuntime())); + functionDetails.setRuntime(FunctionCommon.convertRuntime(functionConfig.getRuntime())); } if (functionConfig.getProcessingGuarantees() != null) { - functionDetailsBuilder.setProcessingGuarantees( + functionDetails.setProcessingGuarantees( FunctionCommon.convertProcessingGuarantee(functionConfig.getProcessingGuarantees())); } if (functionConfig.getRetainKeyOrdering() != null) { - functionDetailsBuilder.setRetainKeyOrdering(functionConfig.getRetainKeyOrdering()); + functionDetails.setRetainKeyOrdering(functionConfig.getRetainKeyOrdering()); } if (functionConfig.getRetainOrdering() != null) { - functionDetailsBuilder.setRetainOrdering(functionConfig.getRetainOrdering()); + functionDetails.setRetainOrdering(functionConfig.getRetainOrdering()); } if (functionConfig.getMaxMessageRetries() != null && functionConfig.getMaxMessageRetries() >= 0) { - Function.RetryDetails.Builder retryBuilder = Function.RetryDetails.newBuilder(); - retryBuilder.setMaxMessageRetries(functionConfig.getMaxMessageRetries()); + RetryDetails retryDetails = functionDetails.setRetryDetails(); + retryDetails.setMaxMessageRetries(functionConfig.getMaxMessageRetries()); if (isNotEmpty(functionConfig.getDeadLetterTopic())) { - retryBuilder.setDeadLetterTopic(functionConfig.getDeadLetterTopic()); + retryDetails.setDeadLetterTopic(functionConfig.getDeadLetterTopic()); } - functionDetailsBuilder.setRetryDetails(retryBuilder); } Map configs = new HashMap<>(); @@ -317,74 +326,72 @@ public static FunctionDetails convert(FunctionConfig functionConfig, ExtractedFu } else { // Override functionConfig.getProcessingGuarantees to MANUAL, and set windowsFunction is guarantees windowConfig.setProcessingGuarantees(WindowConfig.ProcessingGuarantees - .valueOf(functionDetailsBuilder.getProcessingGuarantees().name())); - functionDetailsBuilder.setProcessingGuarantees(Function.ProcessingGuarantees.MANUAL); + .valueOf(functionDetails.getProcessingGuarantees().name())); + functionDetails.setProcessingGuarantees(ProcessingGuarantees.MANUAL); } windowConfig.setActualWindowFunctionClassName(extractedDetails.getFunctionClassName()); configs.put(WindowConfig.WINDOW_CONFIG_KEY, windowConfig); // set class name to window function executor - functionDetailsBuilder.setClassName("org.apache.pulsar.functions.windowing.WindowFunctionExecutor"); + functionDetails.setClassName("org.apache.pulsar.functions.windowing.WindowFunctionExecutor"); } else { if (extractedDetails.getFunctionClassName() != null) { - functionDetailsBuilder.setClassName(extractedDetails.getFunctionClassName()); + functionDetails.setClassName(extractedDetails.getFunctionClassName()); } } if (!configs.isEmpty()) { - functionDetailsBuilder.setUserConfig(new Gson().toJson(configs)); + functionDetails.setUserConfig(new Gson().toJson(configs)); } if (functionConfig.getSecrets() != null && !functionConfig.getSecrets().isEmpty()) { - functionDetailsBuilder.setSecretsMap(new Gson().toJson(functionConfig.getSecrets())); + functionDetails.setSecretsMap(new Gson().toJson(functionConfig.getSecrets())); } - Boolean autoAck = functionConfig.getAutoAck(); - if (autoAck != null) { - functionDetailsBuilder.setAutoAck(autoAck); + if (functionConfig.getAutoAck() != null) { + functionDetails.setAutoAck(functionConfig.getAutoAck()); } else { - functionDetailsBuilder.setAutoAck(true); + functionDetails.setAutoAck(true); } if (functionConfig.getParallelism() != null) { - functionDetailsBuilder.setParallelism(functionConfig.getParallelism()); + functionDetails.setParallelism(functionConfig.getParallelism()); } else { - functionDetailsBuilder.setParallelism(1); + functionDetails.setParallelism(1); } // use default resources if resources not set Resources resources = Resources.mergeWithDefault(functionConfig.getResources()); - Function.Resources.Builder bldr = Function.Resources.newBuilder(); - bldr.setCpu(resources.getCpu()); - bldr.setRam(resources.getRam()); - bldr.setDisk(resources.getDisk()); - functionDetailsBuilder.setResources(bldr); + org.apache.pulsar.functions.proto.Resources res = functionDetails.setResources(); + res.setCpu(resources.getCpu()); + res.setRam(resources.getRam()); + res.setDisk(resources.getDisk()); if (!StringUtils.isEmpty(functionConfig.getRuntimeFlags())) { - functionDetailsBuilder.setRuntimeFlags(functionConfig.getRuntimeFlags()); + functionDetails.setRuntimeFlags(functionConfig.getRuntimeFlags()); } - functionDetailsBuilder.setComponentType(FunctionDetails.ComponentType.FUNCTION); + functionDetails.setComponentType(FunctionDetails.ComponentType.FUNCTION); if (!StringUtils.isEmpty(functionConfig.getCustomRuntimeOptions())) { - functionDetailsBuilder.setCustomRuntimeOptions(functionConfig.getCustomRuntimeOptions()); + functionDetails.setCustomRuntimeOptions(functionConfig.getCustomRuntimeOptions()); } if (isBuiltin) { String builtin = functionConfig.getJar().replaceFirst("^builtin://", ""); - functionDetailsBuilder.setBuiltin(builtin); + functionDetails.setBuiltin(builtin); } - return validateFunctionDetails(functionDetailsBuilder.build()); + return validateFunctionDetails(functionDetails); } @SuppressWarnings("deprecation") public static FunctionDetails validateFunctionDetails(FunctionDetails functionDetails) throws IllegalArgumentException { - if (!functionDetails.getAutoAck() && functionDetails.getProcessingGuarantees() - == Function.ProcessingGuarantees.ATMOST_ONCE) { + if (!functionDetails.isAutoAck() && functionDetails.getProcessingGuarantees() + == ProcessingGuarantees.ATMOST_ONCE) { throw new IllegalArgumentException("When Guarantees == ATMOST_ONCE, autoAck must be equal to true." + " This is a contradictory configuration, autoAck will be removed later." + " Please refer to PIP: https://github.com/apache/pulsar/issues/15560"); } - if (!functionDetails.getAutoAck()) { + if (!functionDetails.isAutoAck()) { log.warn("The autoAck configuration will be deprecated in the future." + " If you want not to automatically ack, please configure the processing guarantees as MANUAL."); } @@ -402,39 +409,40 @@ public static FunctionConfig convertFromDetails(FunctionDetails functionDetails) functionConfig.setProcessingGuarantees( FunctionCommon.convertProcessingGuarantee(functionDetails.getProcessingGuarantees())); Map consumerConfigMap = new HashMap<>(); - for (Map.Entry input : functionDetails.getSource().getInputSpecsMap() - .entrySet()) { + functionDetails.getSource().forEachInputSpecs((topicName, input) -> { ConsumerConfig consumerConfig = new ConsumerConfig(); - if (isNotEmpty(input.getValue().getSerdeClassName())) { - consumerConfig.setSerdeClassName(input.getValue().getSerdeClassName()); + if (isNotEmpty(input.getSerdeClassName())) { + consumerConfig.setSerdeClassName(input.getSerdeClassName()); } - if (isNotEmpty(input.getValue().getSchemaType())) { - consumerConfig.setSchemaType(input.getValue().getSchemaType()); + if (isNotEmpty(input.getSchemaType())) { + consumerConfig.setSchemaType(input.getSchemaType()); } - if (input.getValue().hasReceiverQueueSize()) { - consumerConfig.setReceiverQueueSize(input.getValue().getReceiverQueueSize().getValue()); + if (input.hasReceiverQueueSize()) { + consumerConfig.setReceiverQueueSize(input.getReceiverQueueSize().getValue()); } - if (input.getValue().hasCryptoSpec()) { - consumerConfig.setCryptoConfig(CryptoUtils.convertFromSpec(input.getValue().getCryptoSpec())); + if (input.hasCryptoSpec()) { + consumerConfig.setCryptoConfig(CryptoUtils.convertFromSpec(input.getCryptoSpec())); } - if (input.getValue().hasMessagePayloadProcessorSpec()) { + if (input.hasMessagePayloadProcessorSpec()) { consumerConfig.setMessagePayloadProcessorConfig(MessagePayloadProcessorUtils.convertFromSpec( - input.getValue().getMessagePayloadProcessorSpec())); + input.getMessagePayloadProcessorSpec())); } - consumerConfig.setRegexPattern(input.getValue().getIsRegexPattern()); - consumerConfig.setSchemaProperties(input.getValue().getSchemaPropertiesMap()); - consumerConfig.setPoolMessages(input.getValue().getPoolMessages()); - consumerConfigMap.put(input.getKey(), consumerConfig); - } + consumerConfig.setRegexPattern(input.isIsRegexPattern()); + Map schemaProps = new HashMap<>(); + input.forEachSchemaProperties(schemaProps::put); + consumerConfig.setSchemaProperties(schemaProps); + consumerConfig.setPoolMessages(input.isPoolMessages()); + consumerConfigMap.put(topicName, consumerConfig); + }); functionConfig.setInputSpecs(consumerConfigMap); if (!isEmpty(functionDetails.getSource().getSubscriptionName())) { functionConfig.setSubName(functionDetails.getSource().getSubscriptionName()); } - functionConfig.setRetainOrdering(functionDetails.getRetainOrdering()); - functionConfig.setRetainKeyOrdering(functionDetails.getRetainKeyOrdering()); + functionConfig.setRetainOrdering(functionDetails.isRetainOrdering()); + functionConfig.setRetainKeyOrdering(functionDetails.isRetainKeyOrdering()); - functionConfig.setCleanupSubscription(functionDetails.getSource().getCleanupSubscription()); - functionConfig.setAutoAck(functionDetails.getAutoAck()); + functionConfig.setCleanupSubscription(functionDetails.getSource().isCleanupSubscription()); + functionConfig.setAutoAck(functionDetails.isAutoAck()); // Set subscription position functionConfig.setSubscriptionPosition( @@ -452,15 +460,13 @@ public static FunctionConfig convertFromDetails(FunctionDetails functionDetails) if (!isEmpty(functionDetails.getSink().getSchemaType())) { functionConfig.setOutputSchemaType(functionDetails.getSink().getSchemaType()); } - if (functionDetails.getSink().getProducerSpec() != null) { - functionConfig.setProducerConfig( - convertProducerSpecToProducerConfig(functionDetails.getSink().getProducerSpec())); - } + functionConfig.setProducerConfig( + convertProducerSpecToProducerConfig(functionDetails.getSink().getProducerSpec())); if (!isEmpty(functionDetails.getLogTopic())) { functionConfig.setLogTopic(functionDetails.getLogTopic()); } - if (functionDetails.getSink().getForwardSourceMessageProperty()) { - functionConfig.setForwardSourceMessageProperty(functionDetails.getSink().getForwardSourceMessageProperty()); + if (functionDetails.getSink().isForwardSourceMessageProperty()) { + functionConfig.setForwardSourceMessageProperty(functionDetails.getSink().isForwardSourceMessageProperty()); } functionConfig.setRuntime(FunctionCommon.convertRuntime(functionDetails.getRuntime())); if (functionDetails.hasRetryDetails()) { @@ -519,35 +525,35 @@ public static FunctionConfig convertFromDetails(FunctionDetails functionDetails) return functionConfig; } - public static Function.ProducerSpec convertProducerConfigToProducerSpec(ProducerConfig producerConf) { - Function.ProducerSpec.Builder builder = Function.ProducerSpec.newBuilder(); + public static ProducerSpec convertProducerConfigToProducerSpec(ProducerConfig producerConf) { + ProducerSpec producerSpec = new ProducerSpec(); if (producerConf.getMaxPendingMessages() != null) { - builder.setMaxPendingMessages(producerConf.getMaxPendingMessages()); + producerSpec.setMaxPendingMessages(producerConf.getMaxPendingMessages()); } if (producerConf.getMaxPendingMessagesAcrossPartitions() != null) { - builder.setMaxPendingMessagesAcrossPartitions(producerConf.getMaxPendingMessagesAcrossPartitions()); + producerSpec.setMaxPendingMessagesAcrossPartitions(producerConf.getMaxPendingMessagesAcrossPartitions()); } if (producerConf.getUseThreadLocalProducers() != null) { - builder.setUseThreadLocalProducers(producerConf.getUseThreadLocalProducers()); + producerSpec.setUseThreadLocalProducers(producerConf.getUseThreadLocalProducers()); } if (producerConf.getCryptoConfig() != null) { - builder.setCryptoSpec(CryptoUtils.convert(producerConf.getCryptoConfig())); + producerSpec.setCryptoSpec().copyFrom(CryptoUtils.convert(producerConf.getCryptoConfig())); } if (producerConf.getBatchBuilder() != null) { - builder.setBatchBuilder(producerConf.getBatchBuilder()); + producerSpec.setBatchBuilder(producerConf.getBatchBuilder()); } if (producerConf.getBatchingConfig() != null) { - builder.setBatchingSpec(BatchingUtils.convert(producerConf.getBatchingConfig())); + producerSpec.setBatchingSpec().copyFrom(BatchingUtils.convert(producerConf.getBatchingConfig())); } if (producerConf.getCompressionType() != null) { - builder.setCompressionType(convertFromCompressionType(producerConf.getCompressionType())); + producerSpec.setCompressionType(convertFromCompressionType(producerConf.getCompressionType())); } else { - builder.setCompressionType(Function.CompressionType.LZ4); + producerSpec.setCompressionType(CompressionType.LZ4); } - return builder.build(); + return producerSpec; } - public static ProducerConfig convertProducerSpecToProducerConfig(Function.ProducerSpec spec) { + public static ProducerConfig convertProducerSpecToProducerConfig(ProducerSpec spec) { ProducerConfig producerConfig = new ProducerConfig(); if (spec.getMaxPendingMessages() != 0) { producerConfig.setMaxPendingMessages(spec.getMaxPendingMessages()); @@ -564,7 +570,7 @@ public static ProducerConfig convertProducerSpecToProducerConfig(Function.Produc if (spec.hasBatchingSpec()) { producerConfig.setBatchingConfig(BatchingUtils.convertFromSpec(spec.getBatchingSpec())); } - producerConfig.setUseThreadLocalProducers(spec.getUseThreadLocalProducers()); + producerConfig.setUseThreadLocalProducers(spec.isUseThreadLocalProducers()); producerConfig.setCompressionType(convertFromFunctionDetailsCompressionType(spec.getCompressionType())); return producerConfig; } diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtils.java index b1e13921ad172..6af7bebf36edc 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtils.java @@ -18,64 +18,67 @@ */ package org.apache.pulsar.functions.utils; -import org.apache.pulsar.functions.proto.Function; +import java.util.concurrent.atomic.AtomicBoolean; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionState; public class FunctionMetaDataUtils { - public static boolean canChangeState(Function.FunctionMetaData functionMetaData, int instanceId, - Function.FunctionState newState) { + public static boolean canChangeState(FunctionMetaData functionMetaData, int instanceId, + FunctionState newState) { if (instanceId >= functionMetaData.getFunctionDetails().getParallelism()) { return false; } - if (functionMetaData.getInstanceStatesMap() == null || functionMetaData.getInstanceStatesMap().isEmpty()) { + if (functionMetaData.getInstanceStatesCount() == 0) { // This means that all instances of the functions are running - return newState == Function.FunctionState.STOPPED; + return newState == FunctionState.STOPPED; } if (instanceId >= 0) { - if (functionMetaData.getInstanceStatesMap().containsKey(instanceId)) { - return functionMetaData.getInstanceStatesMap().get(instanceId) != newState; - } else { + try { + FunctionState currentState = functionMetaData.getInstanceStates(instanceId); + return currentState != newState; + } catch (IllegalArgumentException e) { return false; } } else { // want to change state for all instances - for (Function.FunctionState state : functionMetaData.getInstanceStatesMap().values()) { + AtomicBoolean canChange = new AtomicBoolean(false); + functionMetaData.forEachInstanceStates((id, state) -> { if (state != newState) { - return true; + canChange.set(true); } - } - return false; + }); + return canChange.get(); } } - public static Function.FunctionMetaData changeFunctionInstanceStatus(Function.FunctionMetaData functionMetaData, + public static FunctionMetaData changeFunctionInstanceStatus(FunctionMetaData functionMetaData, Integer instanceId, boolean start) { - Function.FunctionMetaData.Builder builder = functionMetaData.toBuilder() + FunctionMetaData result = new FunctionMetaData().copyFrom(functionMetaData) .setVersion(functionMetaData.getVersion() + 1); - if (builder.getInstanceStatesMap() == null || builder.getInstanceStatesMap().isEmpty()) { + if (result.getInstanceStatesCount() == 0) { for (int i = 0; i < functionMetaData.getFunctionDetails().getParallelism(); ++i) { - builder.putInstanceStates(i, Function.FunctionState.RUNNING); + result.putInstanceStates(i, FunctionState.RUNNING); } } - Function.FunctionState state = start ? Function.FunctionState.RUNNING : Function.FunctionState.STOPPED; + FunctionState state = start ? FunctionState.RUNNING : FunctionState.STOPPED; if (instanceId < 0) { for (int i = 0; i < functionMetaData.getFunctionDetails().getParallelism(); ++i) { - builder.putInstanceStates(i, state); + result.putInstanceStates(i, state); } - } else if (instanceId < builder.getFunctionDetails().getParallelism()) { - builder.putInstanceStates(instanceId, state); + } else if (instanceId < result.getFunctionDetails().getParallelism()) { + result.putInstanceStates(instanceId, state); } - return builder.build(); + return result; } - public static Function.FunctionMetaData incrMetadataVersion(Function.FunctionMetaData existingMetaData, - Function.FunctionMetaData updatedMetaData) { + public static FunctionMetaData incrMetadataVersion(FunctionMetaData existingMetaData, + FunctionMetaData updatedMetaData) { long version = 0; if (existingMetaData != null) { version = existingMetaData.getVersion() + 1; } - return updatedMetaData.toBuilder() - .setVersion(version) - .build(); + return new FunctionMetaData().copyFrom(updatedMetaData) + .setVersion(version); } } diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionRuntimeCommon.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionRuntimeCommon.java index ed17478dd00ed..7c94095c35c54 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionRuntimeCommon.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/FunctionRuntimeCommon.java @@ -24,7 +24,7 @@ import org.apache.pulsar.common.nar.NarClassLoader; import org.apache.pulsar.common.nar.NarClassLoaderBuilder; import org.apache.pulsar.common.util.ClassLoaderUtils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.utils.functions.FunctionUtils; import org.apache.pulsar.functions.utils.io.ConnectorUtils; @@ -45,7 +45,7 @@ public static NarClassLoader extractNarClassLoader(File packageFile, } public static ClassLoader getClassLoaderFromPackage( - Function.FunctionDetails.ComponentType componentType, + FunctionDetails.ComponentType componentType, String className, File packageFile, String narExtractionDirectory) { @@ -81,9 +81,9 @@ public static ClassLoader getClassLoaderFromPackage( narClassLoaderException); } try { - if (componentType == Function.FunctionDetails.ComponentType.FUNCTION) { + if (componentType == FunctionDetails.ComponentType.FUNCTION) { connectorClassName = FunctionUtils.getFunctionClass(narClassLoader); - } else if (componentType == Function.FunctionDetails.ComponentType.SOURCE) { + } else if (componentType == FunctionDetails.ComponentType.SOURCE) { connectorClassName = ConnectorUtils.getIOSourceClass(narClassLoader); } else { connectorClassName = ConnectorUtils.getIOSinkClass(narClassLoader); diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtils.java index 055c0c1f46c07..fcd2cf298e48a 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtils.java @@ -28,7 +28,7 @@ import org.apache.pulsar.client.api.MessagePayloadProcessor; import org.apache.pulsar.common.functions.MessagePayloadProcessorConfig; import org.apache.pulsar.common.util.ClassLoaderUtils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.MessagePayloadProcessorSpec; public class MessagePayloadProcessorUtils { public static MessagePayloadProcessor getMessagePayloadProcessorInstance(String className, @@ -61,7 +61,7 @@ public static MessagePayloadProcessor getMessagePayloadProcessorInstance(String } } - public static MessagePayloadProcessorConfig convertFromSpec(Function.MessagePayloadProcessorSpec spec) { + public static MessagePayloadProcessorConfig convertFromSpec(MessagePayloadProcessorSpec spec) { if (spec == null || isEmpty(spec.getClassName())) { return null; } @@ -78,17 +78,17 @@ public static MessagePayloadProcessorConfig convertFromSpec(Function.MessagePayl return bldr.build(); } - public static Function.MessagePayloadProcessorSpec convert(MessagePayloadProcessorConfig config) { - Function.MessagePayloadProcessorSpec.Builder bldr = Function.MessagePayloadProcessorSpec.newBuilder() + public static MessagePayloadProcessorSpec convert(MessagePayloadProcessorConfig config) { + MessagePayloadProcessorSpec spec = new MessagePayloadProcessorSpec() .setClassName(config.getClassName()); if (config.getConfig() != null) { Type type = new TypeToken>() { }.getType(); String readerConfigString = new Gson().toJson(config.getConfig(), type); - bldr.setConfigs(readerConfigString); + spec.setConfigs(readerConfigString); } - return bldr.build(); + return spec; } } diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SinkConfigUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SinkConfigUtils.java index 4a747e92bcb85..884873940b497 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SinkConfigUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SinkConfigUtils.java @@ -56,8 +56,14 @@ import org.apache.pulsar.config.validation.ConfigValidation; import org.apache.pulsar.functions.api.Record; import org.apache.pulsar.functions.api.utils.IdentityFunction; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.ConsumerSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.RetryDetails; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; +import org.apache.pulsar.functions.proto.SubscriptionPosition; +import org.apache.pulsar.functions.proto.SubscriptionType; @Slf4j public class SinkConfigUtils { @@ -73,83 +79,75 @@ public static class ExtractedSinkDetails { @SuppressWarnings("deprecation") public static FunctionDetails convert(SinkConfig sinkConfig, ExtractedSinkDetails sinkDetails) throws IOException { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); boolean isBuiltin = !org.apache.commons.lang3.StringUtils.isEmpty(sinkConfig.getArchive()) && sinkConfig.getArchive() .startsWith(org.apache.pulsar.common.functions.Utils.BUILTIN); if (sinkConfig.getTenant() != null) { - functionDetailsBuilder.setTenant(sinkConfig.getTenant()); + functionDetails.setTenant(sinkConfig.getTenant()); } if (sinkConfig.getNamespace() != null) { - functionDetailsBuilder.setNamespace(sinkConfig.getNamespace()); + functionDetails.setNamespace(sinkConfig.getNamespace()); } if (sinkConfig.getName() != null) { - functionDetailsBuilder.setName(sinkConfig.getName()); + functionDetails.setName(sinkConfig.getName()); } if (sinkConfig.getLogTopic() != null) { - functionDetailsBuilder.setLogTopic(sinkConfig.getLogTopic()); + functionDetails.setLogTopic(sinkConfig.getLogTopic()); } - functionDetailsBuilder.setRuntime(FunctionDetails.Runtime.JAVA); + functionDetails.setRuntime(FunctionDetails.Runtime.JAVA); if (sinkConfig.getParallelism() != null) { - functionDetailsBuilder.setParallelism(sinkConfig.getParallelism()); + functionDetails.setParallelism(sinkConfig.getParallelism()); } else { - functionDetailsBuilder.setParallelism(1); + functionDetails.setParallelism(1); } if (sinkDetails.getFunctionClassName() != null) { - functionDetailsBuilder.setClassName(sinkDetails.getFunctionClassName()); + functionDetails.setClassName(sinkDetails.getFunctionClassName()); } else { - functionDetailsBuilder.setClassName(IdentityFunction.class.getName()); + functionDetails.setClassName(IdentityFunction.class.getName()); } if (sinkConfig.getTransformFunctionConfig() != null) { - functionDetailsBuilder.setUserConfig(sinkConfig.getTransformFunctionConfig()); + functionDetails.setUserConfig(sinkConfig.getTransformFunctionConfig()); } if (sinkConfig.getProcessingGuarantees() != null) { - functionDetailsBuilder.setProcessingGuarantees( + functionDetails.setProcessingGuarantees( convertProcessingGuarantee(sinkConfig.getProcessingGuarantees())); } else { - functionDetailsBuilder.setProcessingGuarantees(Function.ProcessingGuarantees.ATLEAST_ONCE); + functionDetails.setProcessingGuarantees(ProcessingGuarantees.ATLEAST_ONCE); } // set source spec // source spec classname should be empty so that the default pulsar source will be used - Function.SourceSpec.Builder sourceSpecBuilder = Function.SourceSpec.newBuilder(); - sourceSpecBuilder.setSubscriptionType(Function.SubscriptionType.SHARED); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(SubscriptionType.SHARED); if (sinkConfig.getInputs() != null) { sinkConfig.getInputs().forEach(topicName -> - sourceSpecBuilder.putInputSpecs(topicName, - Function.ConsumerSpec.newBuilder() - .setIsRegexPattern(false) - .build())); + sourceSpec.putInputSpecs(topicName) + .setIsRegexPattern(false)); } if (!StringUtils.isEmpty(sinkConfig.getTopicsPattern())) { - sourceSpecBuilder.putInputSpecs(sinkConfig.getTopicsPattern(), - Function.ConsumerSpec.newBuilder() - .setIsRegexPattern(true) - .build()); + sourceSpec.putInputSpecs(sinkConfig.getTopicsPattern()) + .setIsRegexPattern(true); } if (sinkConfig.getTopicToSerdeClassName() != null) { sinkConfig.getTopicToSerdeClassName().forEach((topicName, serde) -> { - sourceSpecBuilder.putInputSpecs(topicName, - Function.ConsumerSpec.newBuilder() - .setSerdeClassName(serde == null ? "" : serde) - .setIsRegexPattern(false) - .build()); + sourceSpec.putInputSpecs(topicName) + .setSerdeClassName(serde == null ? "" : serde) + .setIsRegexPattern(false); }); } if (sinkConfig.getTopicToSchemaType() != null) { sinkConfig.getTopicToSchemaType().forEach((topicName, schemaType) -> { - sourceSpecBuilder.putInputSpecs(topicName, - Function.ConsumerSpec.newBuilder() - .setSchemaType(schemaType == null ? "" : schemaType) - .setIsRegexPattern(false) - .build()); + sourceSpec.putInputSpecs(topicName) + .setSchemaType(schemaType == null ? "" : schemaType) + .setIsRegexPattern(false); }); } if (sinkConfig.getInputSpecs() != null) { sinkConfig.getInputSpecs().forEach((topic, spec) -> { - Function.ConsumerSpec.Builder bldr = Function.ConsumerSpec.newBuilder() + ConsumerSpec bldr = sourceSpec.putInputSpecs(topic) .setIsRegexPattern(spec.isRegexPattern()); if (StringUtils.isNotBlank(spec.getSchemaType())) { bldr.setSchemaType(spec.getSchemaType()); @@ -157,131 +155,125 @@ public static FunctionDetails convert(SinkConfig sinkConfig, ExtractedSinkDetail bldr.setSerdeClassName(spec.getSerdeClassName()); } if (spec.getReceiverQueueSize() != null) { - bldr.setReceiverQueueSize(Function.ConsumerSpec.ReceiverQueueSize.newBuilder() - .setValue(spec.getReceiverQueueSize()).build()); + bldr.setReceiverQueueSize().setValue(spec.getReceiverQueueSize()); } if (spec.getCryptoConfig() != null) { - bldr.setCryptoSpec(CryptoUtils.convert(spec.getCryptoConfig())); + bldr.setCryptoSpec().copyFrom(CryptoUtils.convert(spec.getCryptoConfig())); } if (spec.getMessagePayloadProcessorConfig() != null) { - bldr.setMessagePayloadProcessorSpec( + bldr.setMessagePayloadProcessorSpec().copyFrom( MessagePayloadProcessorUtils.convert(spec.getMessagePayloadProcessorConfig())); } - bldr.putAllConsumerProperties(spec.getConsumerProperties()); + if (spec.getConsumerProperties() != null) { + spec.getConsumerProperties().forEach(bldr::putConsumerProperties); + } bldr.setPoolMessages(spec.isPoolMessages()); - sourceSpecBuilder.putInputSpecs(topic, bldr.build()); }); } if (sinkDetails.getTypeArg() != null) { - sourceSpecBuilder.setTypeClassName(sinkDetails.getTypeArg()); + sourceSpec.setTypeClassName(sinkDetails.getTypeArg()); } if (isNotBlank(sinkConfig.getSourceSubscriptionName())) { - sourceSpecBuilder.setSubscriptionName(sinkConfig.getSourceSubscriptionName()); + sourceSpec.setSubscriptionName(sinkConfig.getSourceSubscriptionName()); } // Set subscription type - Function.SubscriptionType subType; + SubscriptionType subType; if ((sinkConfig.getRetainOrdering() != null && sinkConfig.getRetainOrdering()) || FunctionConfig.ProcessingGuarantees.EFFECTIVELY_ONCE.equals(sinkConfig.getProcessingGuarantees())) { - subType = Function.SubscriptionType.FAILOVER; + subType = SubscriptionType.FAILOVER; } else if (sinkConfig.getRetainKeyOrdering() != null && sinkConfig.getRetainKeyOrdering()) { - subType = Function.SubscriptionType.KEY_SHARED; + subType = SubscriptionType.KEY_SHARED; } else { - subType = Function.SubscriptionType.SHARED; + subType = SubscriptionType.SHARED; } - sourceSpecBuilder.setSubscriptionType(subType); + sourceSpec.setSubscriptionType(subType); - Boolean autoAck = sinkConfig.getAutoAck(); - if (autoAck != null) { - functionDetailsBuilder.setAutoAck(autoAck); + if (sinkConfig.getAutoAck() != null) { + functionDetails.setAutoAck(sinkConfig.getAutoAck()); } else { - functionDetailsBuilder.setAutoAck(true); + functionDetails.setAutoAck(true); } if (sinkConfig.getTimeoutMs() != null) { - sourceSpecBuilder.setTimeoutMs(sinkConfig.getTimeoutMs()); + sourceSpec.setTimeoutMs(sinkConfig.getTimeoutMs()); } if (sinkConfig.getCleanupSubscription() != null) { - sourceSpecBuilder.setCleanupSubscription(sinkConfig.getCleanupSubscription()); + sourceSpec.setCleanupSubscription(sinkConfig.getCleanupSubscription()); } else { - sourceSpecBuilder.setCleanupSubscription(true); + sourceSpec.setCleanupSubscription(true); } if (sinkConfig.getNegativeAckRedeliveryDelayMs() != null && sinkConfig.getNegativeAckRedeliveryDelayMs() > 0) { - sourceSpecBuilder.setNegativeAckRedeliveryDelayMs(sinkConfig.getNegativeAckRedeliveryDelayMs()); + sourceSpec.setNegativeAckRedeliveryDelayMs(sinkConfig.getNegativeAckRedeliveryDelayMs()); } if (sinkConfig.getSourceSubscriptionPosition() == SubscriptionInitialPosition.Earliest) { - sourceSpecBuilder.setSubscriptionPosition(Function.SubscriptionPosition.EARLIEST); + sourceSpec.setSubscriptionPosition(SubscriptionPosition.EARLIEST); } else { - sourceSpecBuilder.setSubscriptionPosition(Function.SubscriptionPosition.LATEST); + sourceSpec.setSubscriptionPosition(SubscriptionPosition.LATEST); } - functionDetailsBuilder.setSource(sourceSpecBuilder); - if (sinkConfig.getRetainKeyOrdering() != null) { - functionDetailsBuilder.setRetainKeyOrdering(sinkConfig.getRetainKeyOrdering()); + functionDetails.setRetainKeyOrdering(sinkConfig.getRetainKeyOrdering()); } if (sinkConfig.getRetainOrdering() != null) { - functionDetailsBuilder.setRetainOrdering(sinkConfig.getRetainOrdering()); + functionDetails.setRetainOrdering(sinkConfig.getRetainOrdering()); } if (sinkConfig.getMaxMessageRetries() != null && sinkConfig.getMaxMessageRetries() > 0) { - Function.RetryDetails.Builder retryDetails = Function.RetryDetails.newBuilder(); + RetryDetails retryDetails = functionDetails.setRetryDetails(); retryDetails.setMaxMessageRetries(sinkConfig.getMaxMessageRetries()); if (StringUtils.isNotBlank(sinkConfig.getDeadLetterTopic())) { retryDetails.setDeadLetterTopic(sinkConfig.getDeadLetterTopic()); } - functionDetailsBuilder.setRetryDetails(retryDetails); } // set up sink spec - Function.SinkSpec.Builder sinkSpecBuilder = Function.SinkSpec.newBuilder(); + SinkSpec sinkSpec = functionDetails.setSink(); if (sinkDetails.getSinkClassName() != null) { - sinkSpecBuilder.setClassName(sinkDetails.getSinkClassName()); + sinkSpec.setClassName(sinkDetails.getSinkClassName()); } if (isBuiltin) { String builtin = sinkConfig.getArchive().replaceFirst("^builtin://", ""); - sinkSpecBuilder.setBuiltin(builtin); + sinkSpec.setBuiltin(builtin); } if (!isEmpty(sinkConfig.getTransformFunction()) && sinkConfig.getTransformFunction().startsWith(org.apache.pulsar.common.functions.Utils.BUILTIN)) { - functionDetailsBuilder.setBuiltin(sinkConfig.getTransformFunction().replaceFirst("^builtin://", "")); + functionDetails.setBuiltin(sinkConfig.getTransformFunction().replaceFirst("^builtin://", "")); } if (sinkConfig.getConfigs() != null) { - sinkSpecBuilder.setConfigs(new Gson().toJson(sinkConfig.getConfigs())); + sinkSpec.setConfigs(new Gson().toJson(sinkConfig.getConfigs())); } if (sinkConfig.getSecrets() != null && !sinkConfig.getSecrets().isEmpty()) { - functionDetailsBuilder.setSecretsMap(new Gson().toJson(sinkConfig.getSecrets())); + functionDetails.setSecretsMap(new Gson().toJson(sinkConfig.getSecrets())); } if (sinkDetails.getTypeArg() != null) { - sinkSpecBuilder.setTypeClassName(sinkDetails.getTypeArg()); + sinkSpec.setTypeClassName(sinkDetails.getTypeArg()); } - functionDetailsBuilder.setSink(sinkSpecBuilder); // use default resources if resources not set Resources resources = Resources.mergeWithDefault(sinkConfig.getResources()); - Function.Resources.Builder bldr = Function.Resources.newBuilder(); - bldr.setCpu(resources.getCpu()); - bldr.setRam(resources.getRam()); - bldr.setDisk(resources.getDisk()); - functionDetailsBuilder.setResources(bldr); + org.apache.pulsar.functions.proto.Resources res = functionDetails.setResources(); + res.setCpu(resources.getCpu()); + res.setRam(resources.getRam()); + res.setDisk(resources.getDisk()); if (isNotBlank(sinkConfig.getRuntimeFlags())) { - functionDetailsBuilder.setRuntimeFlags(sinkConfig.getRuntimeFlags()); + functionDetails.setRuntimeFlags(sinkConfig.getRuntimeFlags()); } - functionDetailsBuilder.setComponentType(FunctionDetails.ComponentType.SINK); + functionDetails.setComponentType(FunctionDetails.ComponentType.SINK); if (!StringUtils.isEmpty(sinkConfig.getCustomRuntimeOptions())) { - functionDetailsBuilder.setCustomRuntimeOptions(sinkConfig.getCustomRuntimeOptions()); + functionDetails.setCustomRuntimeOptions(sinkConfig.getCustomRuntimeOptions()); } - return FunctionConfigUtils.validateFunctionDetails(functionDetailsBuilder.build()); + return FunctionConfigUtils.validateFunctionDetails(functionDetails); } @SuppressWarnings("deprecation") @@ -295,40 +287,41 @@ public static SinkConfig convertFromDetails(FunctionDetails functionDetails) { FunctionCommon.convertProcessingGuarantee(functionDetails.getProcessingGuarantees())); Map consumerConfigMap = new HashMap<>(); List inputs = new ArrayList<>(); - for (Map.Entry input : functionDetails.getSource().getInputSpecsMap() - .entrySet()) { + functionDetails.getSource().forEachInputSpecs((topicName, input) -> { ConsumerConfig consumerConfig = new ConsumerConfig(); - if (!isEmpty(input.getValue().getSerdeClassName())) { - consumerConfig.setSerdeClassName(input.getValue().getSerdeClassName()); + if (!isEmpty(input.getSerdeClassName())) { + consumerConfig.setSerdeClassName(input.getSerdeClassName()); } - if (!isEmpty(input.getValue().getSchemaType())) { - consumerConfig.setSchemaType(input.getValue().getSchemaType()); + if (!isEmpty(input.getSchemaType())) { + consumerConfig.setSchemaType(input.getSchemaType()); } - if (input.getValue().hasReceiverQueueSize()) { - consumerConfig.setReceiverQueueSize(input.getValue().getReceiverQueueSize().getValue()); + if (input.hasReceiverQueueSize()) { + consumerConfig.setReceiverQueueSize(input.getReceiverQueueSize().getValue()); } - if (input.getValue().hasCryptoSpec()) { - consumerConfig.setCryptoConfig(CryptoUtils.convertFromSpec(input.getValue().getCryptoSpec())); + if (input.hasCryptoSpec()) { + consumerConfig.setCryptoConfig(CryptoUtils.convertFromSpec(input.getCryptoSpec())); } - if (input.getValue().hasMessagePayloadProcessorSpec()) { + if (input.hasMessagePayloadProcessorSpec()) { consumerConfig.setMessagePayloadProcessorConfig(MessagePayloadProcessorUtils.convertFromSpec( - input.getValue().getMessagePayloadProcessorSpec())); + input.getMessagePayloadProcessorSpec())); } - consumerConfig.setRegexPattern(input.getValue().getIsRegexPattern()); - consumerConfig.setConsumerProperties(input.getValue().getConsumerPropertiesMap()); - consumerConfig.setPoolMessages(input.getValue().getPoolMessages()); - consumerConfigMap.put(input.getKey(), consumerConfig); - inputs.add(input.getKey()); - } + consumerConfig.setRegexPattern(input.isIsRegexPattern()); + Map consumerProps = new HashMap<>(); + input.forEachConsumerProperties(consumerProps::put); + consumerConfig.setConsumerProperties(consumerProps); + consumerConfig.setPoolMessages(input.isPoolMessages()); + consumerConfigMap.put(topicName, consumerConfig); + inputs.add(topicName); + }); sinkConfig.setInputs(inputs); sinkConfig.setInputSpecs(consumerConfigMap); if (!isEmpty(functionDetails.getSource().getSubscriptionName())) { sinkConfig.setSourceSubscriptionName(functionDetails.getSource().getSubscriptionName()); } - if (functionDetails.getSource().getSubscriptionType() == Function.SubscriptionType.FAILOVER) { + if (functionDetails.getSource().getSubscriptionType() == SubscriptionType.FAILOVER) { sinkConfig.setRetainOrdering(true); sinkConfig.setRetainKeyOrdering(false); - } else if (functionDetails.getSource().getSubscriptionType() == Function.SubscriptionType.KEY_SHARED) { + } else if (functionDetails.getSource().getSubscriptionType() == SubscriptionType.KEY_SHARED) { sinkConfig.setRetainOrdering(false); sinkConfig.setRetainKeyOrdering(true); } else { @@ -341,8 +334,8 @@ public static SinkConfig convertFromDetails(FunctionDetails functionDetails) { sinkConfig.setProcessingGuarantees(convertProcessingGuarantee(functionDetails.getProcessingGuarantees())); - sinkConfig.setAutoAck(functionDetails.getAutoAck()); - sinkConfig.setCleanupSubscription(functionDetails.getSource().getCleanupSubscription()); + sinkConfig.setAutoAck(functionDetails.isAutoAck()); + sinkConfig.setCleanupSubscription(functionDetails.getSource().isCleanupSubscription()); // Set subscription position sinkConfig.setSourceSubscriptionPosition( diff --git a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SourceConfigUtils.java b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SourceConfigUtils.java index b48a355380a46..b2970af5ceb49 100644 --- a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SourceConfigUtils.java +++ b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/SourceConfigUtils.java @@ -48,8 +48,10 @@ import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.config.validation.ConfigValidation; import org.apache.pulsar.functions.api.utils.IdentityFunction; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProducerSpec; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.io.core.BatchSource; import org.apache.pulsar.io.core.Source; @@ -66,46 +68,45 @@ public static class ExtractedSourceDetails { public static FunctionDetails convert(SourceConfig sourceConfig, ExtractedSourceDetails sourceDetails) throws IllegalArgumentException { - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); boolean isBuiltin = !StringUtils.isEmpty(sourceConfig.getArchive()) && sourceConfig.getArchive() .startsWith(org.apache.pulsar.common.functions.Utils.BUILTIN); if (sourceConfig.getTenant() != null) { - functionDetailsBuilder.setTenant(sourceConfig.getTenant()); + functionDetails.setTenant(sourceConfig.getTenant()); } if (sourceConfig.getNamespace() != null) { - functionDetailsBuilder.setNamespace(sourceConfig.getNamespace()); + functionDetails.setNamespace(sourceConfig.getNamespace()); } if (sourceConfig.getName() != null) { - functionDetailsBuilder.setName(sourceConfig.getName()); + functionDetails.setName(sourceConfig.getName()); } if (sourceConfig.getLogTopic() != null) { - functionDetailsBuilder.setLogTopic(sourceConfig.getLogTopic()); + functionDetails.setLogTopic(sourceConfig.getLogTopic()); } - functionDetailsBuilder.setRuntime(FunctionDetails.Runtime.JAVA); + functionDetails.setRuntime(FunctionDetails.Runtime.JAVA); if (sourceConfig.getParallelism() != null) { - functionDetailsBuilder.setParallelism(sourceConfig.getParallelism()); + functionDetails.setParallelism(sourceConfig.getParallelism()); } else { - functionDetailsBuilder.setParallelism(1); + functionDetails.setParallelism(1); } - functionDetailsBuilder.setClassName(IdentityFunction.class.getName()); - @SuppressWarnings("deprecation") - Function.FunctionDetails.Builder autoAckBuilder = functionDetailsBuilder.setAutoAck(true); + functionDetails.setClassName(IdentityFunction.class.getName()); + functionDetails.setAutoAck(true); if (sourceConfig.getProcessingGuarantees() != null) { - functionDetailsBuilder.setProcessingGuarantees( + functionDetails.setProcessingGuarantees( convertProcessingGuarantee(sourceConfig.getProcessingGuarantees())); } // set source spec - Function.SourceSpec.Builder sourceSpecBuilder = Function.SourceSpec.newBuilder(); + SourceSpec sourceSpec = functionDetails.setSource(); if (sourceDetails.getSourceClassName() != null) { - sourceSpecBuilder.setClassName(sourceDetails.getSourceClassName()); + sourceSpec.setClassName(sourceDetails.getSourceClassName()); } if (isBuiltin) { String builtin = sourceConfig.getArchive().replaceFirst("^builtin://", ""); - sourceSpecBuilder.setBuiltin(builtin); + sourceSpec.setBuiltin(builtin); } Map configs = new HashMap<>(); @@ -117,75 +118,74 @@ public static FunctionDetails convert(SourceConfig sourceConfig, ExtractedSource if (sourceConfig.getBatchSourceConfig() != null) { configs.put(BatchSourceConfig.BATCHSOURCE_CONFIG_KEY, new Gson().toJson(sourceConfig.getBatchSourceConfig())); - configs.put(BatchSourceConfig.BATCHSOURCE_CLASSNAME_KEY, sourceSpecBuilder.getClassName()); - sourceSpecBuilder.setClassName("org.apache.pulsar.functions.source.batch.BatchSourceExecutor"); + configs.put(BatchSourceConfig.BATCHSOURCE_CLASSNAME_KEY, sourceSpec.getClassName()); + sourceSpec.setClassName("org.apache.pulsar.functions.source.batch.BatchSourceExecutor"); } - sourceSpecBuilder.setConfigs(new Gson().toJson(configs)); + sourceSpec.setConfigs(new Gson().toJson(configs)); if (sourceConfig.getSecrets() != null && !sourceConfig.getSecrets().isEmpty()) { - functionDetailsBuilder.setSecretsMap(new Gson().toJson(sourceConfig.getSecrets())); + functionDetails.setSecretsMap(new Gson().toJson(sourceConfig.getSecrets())); } if (sourceDetails.getTypeArg() != null) { - sourceSpecBuilder.setTypeClassName(sourceDetails.getTypeArg()); + sourceSpec.setTypeClassName(sourceDetails.getTypeArg()); } - functionDetailsBuilder.setSource(sourceSpecBuilder); // set up sink spec. // Sink spec classname should be empty so that the default pulsar sink will be used - Function.SinkSpec.Builder sinkSpecBuilder = Function.SinkSpec.newBuilder(); + SinkSpec sinkSpec = functionDetails.setSink(); if (!org.apache.commons.lang3.StringUtils.isEmpty(sourceConfig.getSchemaType())) { - sinkSpecBuilder.setSchemaType(sourceConfig.getSchemaType()); + sinkSpec.setSchemaType(sourceConfig.getSchemaType()); } if (!org.apache.commons.lang3.StringUtils.isEmpty(sourceConfig.getSerdeClassName())) { - sinkSpecBuilder.setSerDeClassName(sourceConfig.getSerdeClassName()); + sinkSpec.setSerDeClassName(sourceConfig.getSerdeClassName()); } if (!isEmpty(sourceConfig.getTopicName())) { - sinkSpecBuilder.setTopic(sourceConfig.getTopicName()); + sinkSpec.setTopic(sourceConfig.getTopicName()); } if (sourceDetails.getTypeArg() != null) { - sinkSpecBuilder.setTypeClassName(sourceDetails.getTypeArg()); + sinkSpec.setTypeClassName(sourceDetails.getTypeArg()); } if (sourceConfig.getProducerConfig() != null) { - sinkSpecBuilder.setProducerSpec(convertProducerConfigToProducerSpec(sourceConfig.getProducerConfig())); + sinkSpec.setProducerSpec().copyFrom(convertProducerConfigToProducerSpec(sourceConfig.getProducerConfig())); } if (sourceConfig.getBatchBuilder() != null) { - Function.ProducerSpec.Builder builder = sinkSpecBuilder.getProducerSpec() != null - ? sinkSpecBuilder.getProducerSpec().toBuilder() - : Function.ProducerSpec.newBuilder(); - sinkSpecBuilder.setProducerSpec(builder.setBatchBuilder(sourceConfig.getBatchBuilder()).build()); + ProducerSpec producerSpec; + if (sinkSpec.hasProducerSpec()) { + producerSpec = sinkSpec.getProducerSpec(); + } else { + producerSpec = sinkSpec.setProducerSpec(); + } + producerSpec.setBatchBuilder(sourceConfig.getBatchBuilder()); } - sinkSpecBuilder.setForwardSourceMessageProperty(true); - - functionDetailsBuilder.setSink(sinkSpecBuilder); + sinkSpec.setForwardSourceMessageProperty(true); // use default resources if resources not set Resources resources = Resources.mergeWithDefault(sourceConfig.getResources()); - Function.Resources.Builder bldr = Function.Resources.newBuilder(); - bldr.setCpu(resources.getCpu()); - bldr.setRam(resources.getRam()); - bldr.setDisk(resources.getDisk()); - functionDetailsBuilder.setResources(bldr); + org.apache.pulsar.functions.proto.Resources res = functionDetails.setResources(); + res.setCpu(resources.getCpu()); + res.setRam(resources.getRam()); + res.setDisk(resources.getDisk()); if (!org.apache.commons.lang3.StringUtils.isEmpty(sourceConfig.getRuntimeFlags())) { - functionDetailsBuilder.setRuntimeFlags(sourceConfig.getRuntimeFlags()); + functionDetails.setRuntimeFlags(sourceConfig.getRuntimeFlags()); } - functionDetailsBuilder.setComponentType(FunctionDetails.ComponentType.SOURCE); + functionDetails.setComponentType(FunctionDetails.ComponentType.SOURCE); if (!StringUtils.isEmpty(sourceConfig.getCustomRuntimeOptions())) { - functionDetailsBuilder.setCustomRuntimeOptions(sourceConfig.getCustomRuntimeOptions()); + functionDetails.setCustomRuntimeOptions(sourceConfig.getCustomRuntimeOptions()); } - return FunctionConfigUtils.validateFunctionDetails(functionDetailsBuilder.build()); + return FunctionConfigUtils.validateFunctionDetails(functionDetails); } public static SourceConfig convertFromDetails(FunctionDetails functionDetails) { @@ -196,7 +196,7 @@ public static SourceConfig convertFromDetails(FunctionDetails functionDetails) { sourceConfig.setParallelism(functionDetails.getParallelism()); sourceConfig.setProcessingGuarantees( FunctionCommon.convertProcessingGuarantee(functionDetails.getProcessingGuarantees())); - Function.SourceSpec sourceSpec = functionDetails.getSource(); + SourceSpec sourceSpec = functionDetails.getSource(); if (!StringUtils.isEmpty(sourceSpec.getClassName())) { sourceConfig.setClassName(sourceSpec.getClassName()); } @@ -228,7 +228,7 @@ public static SourceConfig convertFromDetails(FunctionDetails functionDetails) { Map secretsMap = new Gson().fromJson(functionDetails.getSecretsMap(), type); sourceConfig.setSecrets(secretsMap); } - Function.SinkSpec sinkSpec = functionDetails.getSink(); + SinkSpec sinkSpec = functionDetails.getSink(); sourceConfig.setTopicName(sinkSpec.getTopic()); if (!StringUtils.isEmpty(sinkSpec.getSchemaType())) { sourceConfig.setSchemaType(sinkSpec.getSchemaType()); @@ -236,9 +236,7 @@ public static SourceConfig convertFromDetails(FunctionDetails functionDetails) { if (!StringUtils.isEmpty(sinkSpec.getSerDeClassName())) { sourceConfig.setSerdeClassName(sinkSpec.getSerDeClassName()); } - if (sinkSpec.getProducerSpec() != null) { - sourceConfig.setProducerConfig(convertProducerSpecToProducerConfig(sinkSpec.getProducerSpec())); - } + sourceConfig.setProducerConfig(convertProducerSpecToProducerConfig(sinkSpec.getProducerSpec())); if (!isEmpty(functionDetails.getLogTopic())) { sourceConfig.setLogTopic(functionDetails.getLogTopic()); } @@ -451,7 +449,7 @@ public static void validateBatchSourceConfig(BatchSourceConfig batchSourceConfig } } - public static Map extractSourceConfig(Function.SourceSpec sourceSpec, String fqfn) { + public static Map extractSourceConfig(SourceSpec sourceSpec, String fqfn) { if (!StringUtils.isEmpty(sourceSpec.getConfigs())) { TypeReference> typeRef = new TypeReference>() { @@ -476,7 +474,7 @@ public static BatchSourceConfig extractBatchSourceConfig(Map con } } - public static Map computeBatchSourceIntermediateTopicSubscriptions(Function.FunctionDetails details, + public static Map computeBatchSourceIntermediateTopicSubscriptions(FunctionDetails details, String fqfn) { Map configMap = extractSourceConfig(details.getSource(), fqfn); if (configMap != null) { diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/BatchingUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/BatchingUtilsTest.java index 30f4d9746b0e9..fb9c6ff06fc36 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/BatchingUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/BatchingUtilsTest.java @@ -21,7 +21,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import org.apache.pulsar.common.functions.BatchingConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.BatchingSpec; import org.testng.annotations.Test; public class BatchingUtilsTest { @@ -35,8 +35,8 @@ public void testConvert() { .batchingMaxMessages(1000) .batchBuilder("DEFAULT") .build(); - Function.BatchingSpec spec = BatchingUtils.convert(config); - assertEquals(spec.getEnabled(), true); + BatchingSpec spec = BatchingUtils.convert(config); + assertEquals(spec.isEnabled(), true); assertEquals(spec.getBatchingMaxPublishDelayMs(), 30); assertEquals(spec.getRoundRobinRouterBatchingPartitionSwitchFrequency(), 10); assertEquals(spec.getBatchingMaxMessages(), 1000); @@ -46,13 +46,12 @@ public void testConvert() { @Test public void testConvertFromSpec() { - Function.BatchingSpec spec = Function.BatchingSpec.newBuilder() + BatchingSpec spec = new BatchingSpec() .setEnabled(true) .setBatchingMaxPublishDelayMs(30) .setRoundRobinRouterBatchingPartitionSwitchFrequency(10) .setBatchingMaxMessages(1000) - .setBatchBuilder("DEFAULT") - .build(); + .setBatchBuilder("DEFAULT"); BatchingConfig config = BatchingUtils.convertFromSpec(spec); assertEquals(config.isEnabled(), true); assertEquals(config.getBatchingMaxPublishDelayMs().intValue(), 30); @@ -68,4 +67,4 @@ public void testConvertFromSpecFromNull() { assertTrue(config.isEnabled()); assertEquals(config.getBatchingMaxPublishDelayMs().intValue(), 10); } -} \ No newline at end of file +} diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java index b8ec805ca7689..37b1f56fe9ba6 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionConfigUtilsTest.java @@ -26,13 +26,12 @@ import static org.testng.Assert.assertThrows; import static org.testng.Assert.assertTrue; import com.google.gson.Gson; -import com.google.protobuf.InvalidProtocolBufferException; -import com.google.protobuf.util.JsonFormat; import java.lang.reflect.Field; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; import lombok.extern.slf4j.Slf4j; import org.apache.pulsar.client.api.CompressionType; import org.apache.pulsar.client.api.ConsumerCryptoFailureAction; @@ -50,11 +49,14 @@ import org.apache.pulsar.functions.api.WindowContext; import org.apache.pulsar.functions.api.WindowFunction; import org.apache.pulsar.functions.api.utils.IdentityFunction; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.json.JSONException; -import org.skyscreamer.jsonassert.JSONAssert; -import org.skyscreamer.jsonassert.JSONCompareMode; +import org.apache.pulsar.functions.proto.CryptoSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.ProducerSpec; +import org.apache.pulsar.functions.proto.RetryDetails; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.testng.annotations.Test; /** @@ -88,7 +90,7 @@ public void testAutoAckConvertFailed() { @SuppressWarnings("deprecation") @Test - public void testConvertBackFidelity() throws JSONException { + public void testConvertBackFidelity() { FunctionConfig functionConfig = new FunctionConfig(); functionConfig.setTenant("test-tenant"); functionConfig.setNamespace("test-namespace"); @@ -119,17 +121,16 @@ public void testConvertBackFidelity() throws JSONException { producerConfig.setBatchBuilder("DEFAULT"); producerConfig.setCompressionType(CompressionType.ZLIB); functionConfig.setProducerConfig(producerConfig); - Function.FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); + FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); FunctionConfig convertedConfig = FunctionConfigUtils.convertFromDetails(functionDetails); // add default resources functionConfig.setResources(Resources.getDefaultResources()); // set default cleanupSubscription config functionConfig.setCleanupSubscription(true); - JSONAssert.assertEquals( + assertEquals( new Gson().toJson(functionConfig), - new Gson().toJson(convertedConfig), - JSONCompareMode.STRICT + new Gson().toJson(convertedConfig) ); } @@ -164,7 +165,7 @@ public void testConvertWindow() { producerConfig.setBatchBuilder("KEY_BASED"); producerConfig.setCompressionType(CompressionType.SNAPPY); functionConfig.setProducerConfig(producerConfig); - Function.FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); + FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); FunctionConfig convertedConfig = FunctionConfigUtils.convertFromDetails(functionDetails); // WindowsFunction guarantees convert to FunctionGuarantees. @@ -186,7 +187,7 @@ public void testConvertBatchBuilder() { FunctionConfig functionConfig = createFunctionConfig(); functionConfig.setBatchBuilder("KEY_BASED"); - Function.FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); + FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); assertEquals(functionDetails.getSink().getProducerSpec().getBatchBuilder(), "KEY_BASED"); FunctionConfig convertedConfig = FunctionConfigUtils.convertFromDetails(functionDetails); @@ -575,7 +576,7 @@ private FunctionConfig createUpdatedFunctionConfig(String fieldName, Object fiel } @Test - public void testDisableForwardSourceMessageProperty() throws InvalidProtocolBufferException { + public void testDisableForwardSourceMessageProperty() { FunctionConfig config = new FunctionConfig(); config.setTenant("test-tenant"); config.setNamespace("test-namespace"); @@ -591,10 +592,7 @@ public void testDisableForwardSourceMessageProperty() throws InvalidProtocolBuff FunctionConfigUtils.inferMissingArguments(config, false); assertNull(config.getForwardSourceMessageProperty()); FunctionDetails details = FunctionConfigUtils.convert(config); - assertFalse(details.getSink().getForwardSourceMessageProperty()); - String detailsJson = "'" + JsonFormat.printer().omittingInsignificantWhitespace().print(details) + "'"; - log.info("Function details : {}", detailsJson); - assertFalse(detailsJson.contains("forwardSourceMessageProperty")); + assertFalse(details.getSink().isForwardSourceMessageProperty()); } @SuppressWarnings("deprecation") @@ -607,29 +605,25 @@ public void testFunctionConfigConvertFromDetails() { int parallelism = 3; Map userConfig = new HashMap<>(); userConfig.put("key1", "val1"); - Function.ProcessingGuarantees processingGuarantees = Function.ProcessingGuarantees.EFFECTIVELY_ONCE; - Function.FunctionDetails.Runtime runtime = Function.FunctionDetails.Runtime.JAVA; - Function.SinkSpec sinkSpec = Function.SinkSpec.newBuilder().setTopic("sinkTopic1").build(); - Map consumerSpecMap = new HashMap<>(); - consumerSpecMap.put("sourceTopic1", Function.ConsumerSpec.newBuilder() - .setSchemaType(JSONSchema.class.getName()).build()); - Function.SourceSpec sourceSpec = Function.SourceSpec.newBuilder() - .putAllInputSpecs(consumerSpecMap) - .setSubscriptionType(Function.SubscriptionType.FAILOVER) - .setCleanupSubscription(true) - .build(); + ProcessingGuarantees processingGuarantees = ProcessingGuarantees.EFFECTIVELY_ONCE; + FunctionDetails.Runtime runtime = FunctionDetails.Runtime.JAVA; + SinkSpec sinkSpec = new SinkSpec().setTopic("sinkTopic1"); + SourceSpec sourceSpec = new SourceSpec() + .setSubscriptionType(SubscriptionType.FAILOVER) + .setCleanupSubscription(true); + sourceSpec.putInputSpecs("sourceTopic1") + .setSchemaType(JSONSchema.class.getName()); boolean autoAck = true; String logTopic = "log-topic1"; - Function.Resources resources = - Function.Resources.newBuilder().setCpu(1.5).setDisk(1024 * 20).setRam(1024 * 10).build(); + org.apache.pulsar.functions.proto.Resources resources = + new org.apache.pulsar.functions.proto.Resources().setCpu(1.5).setDisk(1024 * 20).setRam(1024 * 10); String packageUrl = "http://package.url"; Map secretsMap = new HashMap<>(); secretsMap.put("secretConfigKey1", "secretConfigVal1"); - Function.RetryDetails retryDetails = - Function.RetryDetails.newBuilder().setDeadLetterTopic("dead-letter-1").build(); + RetryDetails retryDetails = + new RetryDetails().setDeadLetterTopic("dead-letter-1"); - Function.FunctionDetails functionDetails = Function.FunctionDetails - .newBuilder() + FunctionDetails functionDetails = new FunctionDetails() .setNamespace(namespace) .setTenant(tenant) .setName(name) @@ -638,15 +632,14 @@ public void testFunctionConfigConvertFromDetails() { .setUserConfig(new Gson().toJson(userConfig)) .setProcessingGuarantees(processingGuarantees) .setRuntime(runtime) - .setSink(sinkSpec) - .setSource(sourceSpec) .setAutoAck(autoAck) .setLogTopic(logTopic) - .setResources(resources) .setPackageUrl(packageUrl) - .setSecretsMap(new Gson().toJson(secretsMap)) - .setRetryDetails(retryDetails) - .build(); + .setSecretsMap(new Gson().toJson(secretsMap)); + functionDetails.setSink().copyFrom(sinkSpec); + functionDetails.setSource().copyFrom(sourceSpec); + functionDetails.setResources().copyFrom(resources); + functionDetails.setRetryDetails().copyFrom(retryDetails); FunctionConfig functionConfig = FunctionConfigUtils.convertFromDetails(functionDetails); @@ -659,8 +652,11 @@ public void testFunctionConfigConvertFromDetails() { assertEquals(functionConfig.getResources().getDisk().longValue(), resources.getDisk()); assertEquals(functionConfig.getResources().getRam().longValue(), resources.getRam()); assertEquals(functionConfig.getOutput(), sinkSpec.getTopic()); - assertEquals(functionConfig.getInputSpecs().keySet(), sourceSpec.getInputSpecsMap().keySet()); - assertEquals(functionConfig.getCleanupSubscription().booleanValue(), sourceSpec.getCleanupSubscription()); + // Collect sourceSpec input keys for comparison + AtomicReference sourceSpecKey = new AtomicReference<>(); + sourceSpec.forEachInputSpecs((key, value) -> sourceSpecKey.set(key)); + assertTrue(functionConfig.getInputSpecs().containsKey(sourceSpecKey.get())); + assertEquals(functionConfig.getCleanupSubscription().booleanValue(), sourceSpec.isCleanupSubscription()); } @Test(expectedExceptions = IllegalArgumentException.class, @@ -683,8 +679,8 @@ public void testMergeDifferentOutputSchemaTypes() { @Test public void testPoolMessages() { FunctionConfig functionConfig = createFunctionConfig(); - Function.FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); - assertFalse(functionDetails.getSource().getInputSpecsMap().get("test-input").getPoolMessages()); + FunctionDetails functionDetails = FunctionConfigUtils.convert(functionConfig); + assertFalse(functionDetails.getSource().getInputSpecs("test-input").isPoolMessages()); FunctionConfig convertedConfig = FunctionConfigUtils.convertFromDetails(functionDetails); assertFalse(convertedConfig.getInputSpecs().get("test-input").isPoolMessages()); @@ -694,7 +690,7 @@ public void testPoolMessages() { functionConfig.setInputSpecs(inputSpecs); functionDetails = FunctionConfigUtils.convert(functionConfig); - assertTrue(functionDetails.getSource().getInputSpecsMap().get("test-input").getPoolMessages()); + assertTrue(functionDetails.getSource().getInputSpecs("test-input").isPoolMessages()); convertedConfig = FunctionConfigUtils.convertFromDetails(functionDetails); assertTrue(convertedConfig.getInputSpecs().get("test-input").isPoolMessages()); @@ -703,18 +699,16 @@ public void testPoolMessages() { @Test public void testConvertProducerSpecToProducerConfigAndBackToProducerSpec() { // given - Function.ProducerSpec producerSpec = Function.ProducerSpec.newBuilder() + ProducerSpec producerSpec = new ProducerSpec() .setBatchBuilder("KEY_BASED") - .setCompressionType(Function.CompressionType.ZSTD) - .setCryptoSpec(Function.CryptoSpec.newBuilder() - .addProducerEncryptionKeyName("key1") - .addProducerEncryptionKeyName("key2") - .setConsumerCryptoFailureAction(Function.CryptoSpec.FailureAction.DISCARD) - .setProducerCryptoFailureAction(Function.CryptoSpec.FailureAction.SEND) - .setCryptoKeyReaderClassName("ReaderClassName") - .setCryptoKeyReaderConfig("{\"key\":\"value\"}") - .build()) - .build(); + .setCompressionType(org.apache.pulsar.functions.proto.CompressionType.ZSTD); + CryptoSpec cryptoSpec = producerSpec.setCryptoSpec(); + cryptoSpec.addProducerEncryptionKeyName("key1"); + cryptoSpec.addProducerEncryptionKeyName("key2"); + cryptoSpec.setConsumerCryptoFailureAction(CryptoSpec.FailureAction.DISCARD); + cryptoSpec.setProducerCryptoFailureAction(CryptoSpec.FailureAction.SEND); + cryptoSpec.setCryptoKeyReaderClassName("ReaderClassName"); + cryptoSpec.setCryptoKeyReaderConfig("{\"key\":\"value\"}"); // when ProducerConfig producerConfig = FunctionConfigUtils.convertProducerSpecToProducerConfig(producerSpec); // then @@ -727,8 +721,23 @@ public void testConvertProducerSpecToProducerConfigAndBackToProducerSpec() { assertEquals(cryptoConfig.getCryptoKeyReaderClassName(), "ReaderClassName"); // and when // converted back to producer spec - Function.ProducerSpec producerSpec2 = FunctionConfigUtils.convertProducerConfigToProducerSpec(producerConfig); + ProducerSpec producerSpec2 = FunctionConfigUtils.convertProducerConfigToProducerSpec(producerConfig); // then - assertEquals(producerSpec2, producerSpec); + assertEquals(producerSpec2.getBatchBuilder(), producerSpec.getBatchBuilder()); + assertEquals(producerSpec2.getCompressionType(), producerSpec.getCompressionType()); + assertEquals(producerSpec2.getCryptoSpec().getCryptoKeyReaderClassName(), + producerSpec.getCryptoSpec().getCryptoKeyReaderClassName()); + assertEquals(producerSpec2.getCryptoSpec().getCryptoKeyReaderConfig(), + producerSpec.getCryptoSpec().getCryptoKeyReaderConfig()); + assertEquals(producerSpec2.getCryptoSpec().getProducerCryptoFailureAction(), + producerSpec.getCryptoSpec().getProducerCryptoFailureAction()); + assertEquals(producerSpec2.getCryptoSpec().getConsumerCryptoFailureAction(), + producerSpec.getCryptoSpec().getConsumerCryptoFailureAction()); + assertEquals(producerSpec2.getCryptoSpec().getProducerEncryptionKeyNamesCount(), + producerSpec.getCryptoSpec().getProducerEncryptionKeyNamesCount()); + for (int i = 0; i < producerSpec.getCryptoSpec().getProducerEncryptionKeyNamesCount(); i++) { + assertEquals(producerSpec2.getCryptoSpec().getProducerEncryptionKeyNameAt(i), + producerSpec.getCryptoSpec().getProducerEncryptionKeyNameAt(i)); + } } } diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtilsTest.java index 85f56c6cb9887..537d4c763f595 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/FunctionMetaDataUtilsTest.java @@ -18,7 +18,8 @@ */ package org.apache.pulsar.functions.utils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionState; import org.testng.Assert; import org.testng.annotations.Test; @@ -31,60 +32,64 @@ public class FunctionMetaDataUtilsTest { public void testCanChangeState() { long version = 5; - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-1").setParallelism(2)).setVersion(version).build(); + FunctionMetaData metaData = new FunctionMetaData() + .setVersion(version); + metaData.setFunctionDetails().setName("func-1").setParallelism(2); - Assert.assertTrue(FunctionMetaDataUtils.canChangeState(metaData, 0, Function.FunctionState.STOPPED)); - Assert.assertFalse(FunctionMetaDataUtils.canChangeState(metaData, 0, Function.FunctionState.RUNNING)); - Assert.assertFalse(FunctionMetaDataUtils.canChangeState(metaData, 2, Function.FunctionState.STOPPED)); - Assert.assertFalse(FunctionMetaDataUtils.canChangeState(metaData, 2, Function.FunctionState.RUNNING)); + Assert.assertTrue(FunctionMetaDataUtils.canChangeState(metaData, 0, FunctionState.STOPPED)); + Assert.assertFalse(FunctionMetaDataUtils.canChangeState(metaData, 0, FunctionState.RUNNING)); + Assert.assertFalse(FunctionMetaDataUtils.canChangeState(metaData, 2, FunctionState.STOPPED)); + Assert.assertFalse(FunctionMetaDataUtils.canChangeState(metaData, 2, FunctionState.RUNNING)); } @Test public void testChangeState() { long version = 5; - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-1").setParallelism(2)).setVersion(version).build(); - Function.FunctionMetaData newMetaData = FunctionMetaDataUtils.changeFunctionInstanceStatus(metaData, 0, false); - Assert.assertTrue(newMetaData.getInstanceStatesMap() != null); - Assert.assertEquals(newMetaData.getInstanceStatesMap().size(), 2); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(0), Function.FunctionState.STOPPED); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(1), Function.FunctionState.RUNNING); + FunctionMetaData metaData = new FunctionMetaData() + .setVersion(version); + metaData.setFunctionDetails().setName("func-1").setParallelism(2); + FunctionMetaData newMetaData = FunctionMetaDataUtils.changeFunctionInstanceStatus(metaData, 0, false); + Assert.assertTrue(newMetaData.getInstanceStatesCount() > 0); + Assert.assertEquals(newMetaData.getInstanceStatesCount(), 2); + Assert.assertEquals(newMetaData.getInstanceStates(0), FunctionState.STOPPED); + Assert.assertEquals(newMetaData.getInstanceStates(1), FunctionState.RUNNING); Assert.assertEquals(newMetaData.getVersion(), version + 1); // Nothing should happen newMetaData = FunctionMetaDataUtils.changeFunctionInstanceStatus(newMetaData, 3, false); - Assert.assertTrue(newMetaData.getInstanceStatesMap() != null); - Assert.assertEquals(newMetaData.getInstanceStatesMap().size(), 2); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(0), Function.FunctionState.STOPPED); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(1), Function.FunctionState.RUNNING); + Assert.assertTrue(newMetaData.getInstanceStatesCount() > 0); + Assert.assertEquals(newMetaData.getInstanceStatesCount(), 2); + Assert.assertEquals(newMetaData.getInstanceStates(0), FunctionState.STOPPED); + Assert.assertEquals(newMetaData.getInstanceStates(1), FunctionState.RUNNING); Assert.assertEquals(newMetaData.getVersion(), version + 2); // Change one more newMetaData = FunctionMetaDataUtils.changeFunctionInstanceStatus(newMetaData, 1, false); - Assert.assertTrue(newMetaData.getInstanceStatesMap() != null); - Assert.assertEquals(newMetaData.getInstanceStatesMap().size(), 2); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(0), Function.FunctionState.STOPPED); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(1), Function.FunctionState.STOPPED); + Assert.assertTrue(newMetaData.getInstanceStatesCount() > 0); + Assert.assertEquals(newMetaData.getInstanceStatesCount(), 2); + Assert.assertEquals(newMetaData.getInstanceStates(0), FunctionState.STOPPED); + Assert.assertEquals(newMetaData.getInstanceStates(1), FunctionState.STOPPED); Assert.assertEquals(newMetaData.getVersion(), version + 3); // Change all more newMetaData = FunctionMetaDataUtils.changeFunctionInstanceStatus(newMetaData, -1, true); - Assert.assertTrue(newMetaData.getInstanceStatesMap() != null); - Assert.assertEquals(newMetaData.getInstanceStatesMap().size(), 2); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(0), Function.FunctionState.RUNNING); - Assert.assertEquals(newMetaData.getInstanceStatesMap().get(1), Function.FunctionState.RUNNING); + Assert.assertTrue(newMetaData.getInstanceStatesCount() > 0); + Assert.assertEquals(newMetaData.getInstanceStatesCount(), 2); + Assert.assertEquals(newMetaData.getInstanceStates(0), FunctionState.RUNNING); + Assert.assertEquals(newMetaData.getInstanceStates(1), FunctionState.RUNNING); Assert.assertEquals(newMetaData.getVersion(), version + 4); } @Test public void testUpdate() { long version = 5; - Function.FunctionMetaData existingMetaData = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-1").setParallelism(2)).setVersion(version).build(); - Function.FunctionMetaData updatedMetaData = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-1").setParallelism(3)).setVersion(version).build(); - Function.FunctionMetaData newMetaData = + FunctionMetaData existingMetaData = new FunctionMetaData() + .setVersion(version); + existingMetaData.setFunctionDetails().setName("func-1").setParallelism(2); + FunctionMetaData updatedMetaData = new FunctionMetaData() + .setVersion(version); + updatedMetaData.setFunctionDetails().setName("func-1").setParallelism(3); + FunctionMetaData newMetaData = FunctionMetaDataUtils.incrMetadataVersion(existingMetaData, updatedMetaData); Assert.assertEquals(newMetaData.getVersion(), version + 1); Assert.assertEquals(newMetaData.getFunctionDetails().getParallelism(), 3); diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtilsTest.java index bb048317c4e64..dfe5e49fd040d 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/MessagePayloadProcessorUtilsTest.java @@ -31,7 +31,7 @@ import org.apache.pulsar.client.api.MessagePayloadProcessor; import org.apache.pulsar.client.api.Schema; import org.apache.pulsar.common.functions.MessagePayloadProcessorConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.MessagePayloadProcessorSpec; import org.testng.annotations.Test; public class MessagePayloadProcessorUtilsTest { @@ -113,9 +113,8 @@ public void testNoMapConstructor() { @Test public void testConvertFromSpecReturnsNullIfEmpty() { - Function.MessagePayloadProcessorSpec spec = Function.MessagePayloadProcessorSpec.newBuilder() - .setClassName("") - .build(); + MessagePayloadProcessorSpec spec = new MessagePayloadProcessorSpec() + .setClassName(""); assertNull(MessagePayloadProcessorUtils.convertFromSpec(spec)); } @@ -123,10 +122,9 @@ public void testConvertFromSpecReturnsNullIfEmpty() { @Test public void testConvertFromSpecValid() { String json = "{\"threshold\": 10}"; - Function.MessagePayloadProcessorSpec spec = Function.MessagePayloadProcessorSpec.newBuilder() + MessagePayloadProcessorSpec spec = new MessagePayloadProcessorSpec() .setClassName("com.example.MyProcessor") - .setConfigs(json) - .build(); + .setConfigs(json); MessagePayloadProcessorConfig config = MessagePayloadProcessorUtils.convertFromSpec(spec); assertNotNull(config); @@ -144,7 +142,7 @@ public void testConvertToSpecWithConfig() { .config(conf) .build(); - Function.MessagePayloadProcessorSpec spec = MessagePayloadProcessorUtils.convert(config); + MessagePayloadProcessorSpec spec = MessagePayloadProcessorUtils.convert(config); assertEquals(spec.getClassName(), "test.Foo"); assertTrue(spec.getConfigs().contains("foo")); } @@ -156,8 +154,8 @@ public void testConvertToSpecWithoutConfig() { .config(null) .build(); - Function.MessagePayloadProcessorSpec spec = MessagePayloadProcessorUtils.convert(config); + MessagePayloadProcessorSpec spec = MessagePayloadProcessorUtils.convert(config); assertEquals(spec.getClassName(), "test.Foo"); assertEquals(spec.getConfigs(), ""); } -} \ No newline at end of file +} diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java index 19e4890a5de01..cde0b11821431 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java @@ -46,7 +46,8 @@ import org.apache.pulsar.common.io.SinkConfig; import org.apache.pulsar.config.validation.ConfigValidationAnnotations; import org.apache.pulsar.functions.api.Record; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.apache.pulsar.io.core.Sink; import org.apache.pulsar.io.core.SinkContext; import org.json.JSONException; @@ -144,9 +145,9 @@ public void testConvertBackFidelity() throws IOException, JSONException { sinkConfig.setTransformFunctionConfig("{\"key\": \"value\"}"); sinkConfig.setLogTopic("log-topic"); - Function.FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, + FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertEquals(Function.SubscriptionType.SHARED, functionDetails.getSource().getSubscriptionType()); + assertEquals(SubscriptionType.SHARED, functionDetails.getSource().getSubscriptionType()); SinkConfig convertedConfig = SinkConfigUtils.convertFromDetails(functionDetails); JSONAssert.assertEquals( new Gson().toJson(convertedConfig), @@ -159,7 +160,7 @@ public void testConvertBackFidelity() throws IOException, JSONException { functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertEquals(Function.SubscriptionType.FAILOVER, functionDetails.getSource().getSubscriptionType()); + assertEquals(SubscriptionType.FAILOVER, functionDetails.getSource().getSubscriptionType()); convertedConfig = SinkConfigUtils.convertFromDetails(functionDetails); JSONAssert.assertEquals( new Gson().toJson(convertedConfig), @@ -172,7 +173,7 @@ public void testConvertBackFidelity() throws IOException, JSONException { functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertEquals(Function.SubscriptionType.KEY_SHARED, functionDetails.getSource().getSubscriptionType()); + assertEquals(SubscriptionType.KEY_SHARED, functionDetails.getSource().getSubscriptionType()); convertedConfig = SinkConfigUtils.convertFromDetails(functionDetails); JSONAssert.assertEquals( new Gson().toJson(convertedConfig), @@ -187,9 +188,9 @@ public void testParseRetainOrderingField() throws IOException { for (Boolean testcase : testcases) { SinkConfig sinkConfig = createSinkConfig(); sinkConfig.setRetainOrdering(testcase); - Function.FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, + FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertEquals(functionDetails.getRetainOrdering(), testcase != null ? testcase : Boolean.valueOf(false)); + assertEquals(functionDetails.isRetainOrdering(), testcase != null ? testcase : Boolean.valueOf(false)); SinkConfig result = SinkConfigUtils.convertFromDetails(functionDetails); assertEquals(result.getRetainOrdering(), testcase != null ? testcase : Boolean.valueOf(false)); } @@ -201,9 +202,9 @@ public void testParseKeyRetainOrderingField() throws IOException { for (Boolean testcase : testcases) { SinkConfig sinkConfig = createSinkConfig(); sinkConfig.setRetainKeyOrdering(testcase); - Function.FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, + FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertEquals(functionDetails.getRetainKeyOrdering(), testcase != null ? testcase : Boolean.valueOf(false)); + assertEquals(functionDetails.isRetainKeyOrdering(), testcase != null ? testcase : Boolean.valueOf(false)); SinkConfig result = SinkConfigUtils.convertFromDetails(functionDetails); assertEquals(result.getRetainKeyOrdering(), testcase != null ? testcase : Boolean.valueOf(false)); } @@ -221,7 +222,7 @@ public void testParseProcessingGuaranteesField() throws IOException { for (FunctionConfig.ProcessingGuarantees testcase : testcases) { SinkConfig sinkConfig = createSinkConfig(); sinkConfig.setProcessingGuarantees(testcase); - Function.FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, + FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); SinkConfig result = SinkConfigUtils.convertFromDetails(functionDetails); assertEquals(result.getProcessingGuarantees(), testcase == null ? ATLEAST_ONCE : testcase); @@ -235,7 +236,7 @@ public void testCleanSubscriptionField() throws IOException { for (Boolean testcase : testcases) { SinkConfig sinkConfig = createSinkConfig(); sinkConfig.setCleanupSubscription(testcase); - Function.FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, + FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); SinkConfig result = SinkConfigUtils.convertFromDetails(functionDetails); assertEquals(result.getCleanupSubscription(), testcase == null ? Boolean.valueOf(true) : testcase); @@ -642,9 +643,9 @@ private SinkConfig createUpdatedSinkConfig(String fieldName, Object fieldValue) @Test public void testPoolMessages() throws IOException { SinkConfig sinkConfig = createSinkConfig(); - Function.FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, + FunctionDetails functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertFalse(functionDetails.getSource().getInputSpecsMap().get("test-input").getPoolMessages()); + assertFalse(functionDetails.getSource().getInputSpecs("test-input").isPoolMessages()); SinkConfig convertedConfig = SinkConfigUtils.convertFromDetails(functionDetails); assertFalse(convertedConfig.getInputSpecs().get("test-input").isPoolMessages()); @@ -655,7 +656,7 @@ public void testPoolMessages() throws IOException { functionDetails = SinkConfigUtils.convert(sinkConfig, new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); - assertTrue(functionDetails.getSource().getInputSpecsMap().get("test-input").getPoolMessages()); + assertTrue(functionDetails.getSource().getInputSpecs("test-input").isPoolMessages()); convertedConfig = SinkConfigUtils.convertFromDetails(functionDetails); assertTrue(convertedConfig.getInputSpecs().get("test-input").isPoolMessages()); } diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SourceConfigUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SourceConfigUtilsTest.java index 27079af8ab002..4cc4133f69c2e 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SourceConfigUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SourceConfigUtilsTest.java @@ -37,7 +37,7 @@ import org.apache.pulsar.common.io.BatchSourceConfig; import org.apache.pulsar.common.io.SourceConfig; import org.apache.pulsar.config.validation.ConfigValidationAnnotations; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.io.core.BatchSourceTriggerer; import org.apache.pulsar.io.core.SourceContext; import org.json.JSONException; @@ -79,7 +79,7 @@ public void stop() { @Test public void testConvertBackFidelity() { SourceConfig sourceConfig = createSourceConfig(); - Function.FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, + FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, new SourceConfigUtils.ExtractedSourceDetails(null, null)); SourceConfig convertedConfig = SourceConfigUtils.convertFromDetails(functionDetails); @@ -94,7 +94,7 @@ public void testConvertBackFidelity() { @Test public void testConvertBackFidelityWithBatch() { SourceConfig sourceConfig = createSourceConfigWithBatch(); - Function.FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, + FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, new SourceConfigUtils.ExtractedSourceDetails(null, null)); SourceConfig convertedConfig = SourceConfigUtils.convertFromDetails(functionDetails); @@ -355,7 +355,7 @@ public void testSupportsBatchBuilderWhenProducerConfigIsNull() { SourceConfig sourceConfig = createSourceConfig(); sourceConfig.setProducerConfig(null); sourceConfig.setBatchBuilder("KEY_BASED"); - Function.FunctionDetails functionDetails = + FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, new SourceConfigUtils.ExtractedSourceDetails(null, null)); assertEquals(functionDetails.getSink().getProducerSpec().getBatchBuilder(), "KEY_BASED"); @@ -366,7 +366,7 @@ public void testSupportsBatchBuilderWhenProducerConfigExists() { SourceConfig sourceConfig = createSourceConfig(); sourceConfig.setBatchBuilder("KEY_BASED"); sourceConfig.getProducerConfig().setMaxPendingMessages(123456); - Function.FunctionDetails functionDetails = + FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, new SourceConfigUtils.ExtractedSourceDetails(null, null)); assertEquals(functionDetails.getSink().getProducerSpec().getBatchBuilder(), "KEY_BASED"); @@ -378,7 +378,7 @@ public void testSupportsBatchBuilderDefinedInProducerConfigWhenTopLevelBatchBuil SourceConfig sourceConfig = createSourceConfig(); sourceConfig.setBatchBuilder(null); sourceConfig.getProducerConfig().setBatchBuilder("KEY_BASED"); - Function.FunctionDetails functionDetails = + FunctionDetails functionDetails = SourceConfigUtils.convert(sourceConfig, new SourceConfigUtils.ExtractedSourceDetails(null, null)); assertEquals(functionDetails.getSink().getProducerSpec().getBatchBuilder(), "KEY_BASED"); diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionActioner.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionActioner.java index 891c15058ebbd..03702aa819b46 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionActioner.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionActioner.java @@ -43,7 +43,6 @@ import java.util.Map; import java.util.Optional; import java.util.UUID; -import java.util.function.Consumer; import java.util.function.Supplier; import java.util.stream.Collectors; import lombok.Data; @@ -60,11 +59,14 @@ import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; -import org.apache.pulsar.functions.proto.Function.SinkSpec; -import org.apache.pulsar.functions.proto.Function.SourceSpec; +import org.apache.pulsar.functions.proto.ConsumerSpec; +import org.apache.pulsar.functions.proto.FunctionAuthenticationSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.Instance; +import org.apache.pulsar.functions.proto.PackageLocationMetaData; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.RuntimeSpawner; import org.apache.pulsar.functions.utils.Actions; @@ -113,8 +115,8 @@ public void startFunction(FunctionRuntimeInfo functionRuntimeInfo) { String packageFile; String transformFunctionPackageFile = null; - Function.PackageLocationMetaData pkgLocation = functionMetaData.getPackageLocation(); - Function.PackageLocationMetaData transformFunctionPkgLocation = + PackageLocationMetaData pkgLocation = functionMetaData.getPackageLocation(); + PackageLocationMetaData transformFunctionPkgLocation = functionMetaData.getTransformFunctionPackageLocation(); if (runtimeFactory.externallyManaged()) { @@ -148,7 +150,7 @@ public void startFunction(FunctionRuntimeInfo functionRuntimeInfo) { } private String getPackageFile(FunctionMetaData functionMetaData, FunctionDetails functionDetails, int instanceId, - Function.PackageLocationMetaData pkgLocation, + PackageLocationMetaData pkgLocation, FunctionDetails.ComponentType componentType) throws URISyntaxException, IOException, ClassNotFoundException, PulsarAdminException { String packagePath = pkgLocation.getPackagePath(); @@ -162,9 +164,9 @@ private String getPackageFile(FunctionMetaData functionMetaData, FunctionDetails File pkgFile = new File(url.toURI()); packageFile = pkgFile.getAbsolutePath(); } else if (FunctionCommon.isFunctionCodeBuiltin(functionDetails, componentType)) { - File pkgFile = getBuiltinArchive( - componentType, - FunctionDetails.newBuilder(functionMetaData.getFunctionDetails())); + FunctionDetails functionDetailsCopy = new FunctionDetails(); + functionDetailsCopy.copyFrom(functionMetaData.getFunctionDetails()); + File pkgFile = getBuiltinArchive(componentType, functionDetailsCopy); packageFile = pkgFile.getAbsolutePath(); } else { File pkgDir = new File(workerConfig.getDownloadDirectory(), @@ -180,23 +182,23 @@ private String getPackageFile(FunctionMetaData functionMetaData, FunctionDetails return packageFile; } - RuntimeSpawner getRuntimeSpawner(Function.Instance instance, String packageFile, + RuntimeSpawner getRuntimeSpawner(Instance instance, String packageFile, String transformFunctionPackageFile) { FunctionMetaData functionMetaData = instance.getFunctionMetaData(); int instanceId = instance.getInstanceId(); - FunctionDetails.Builder functionDetailsBuilder = FunctionDetails - .newBuilder(functionMetaData.getFunctionDetails()); + FunctionDetails functionDetailsCopy = new FunctionDetails(); + functionDetailsCopy.copyFrom(functionMetaData.getFunctionDetails()); // check to make sure functionAuthenticationSpec has any data and authentication is enabled. // If not set to null, since for protobuf, // even if the field is not set its not going to be null. Have to use the "has" method to check - Function.FunctionAuthenticationSpec functionAuthenticationSpec = null; + FunctionAuthenticationSpec functionAuthenticationSpec = null; if (workerConfig.isAuthenticationEnabled() && instance.getFunctionMetaData().hasFunctionAuthSpec()) { functionAuthenticationSpec = instance.getFunctionMetaData().getFunctionAuthSpec(); } - InstanceConfig instanceConfig = createInstanceConfig(functionDetailsBuilder.build(), + InstanceConfig instanceConfig = createInstanceConfig(functionDetailsCopy, functionAuthenticationSpec, instanceId, workerConfig.getPulsarFunctionsCluster()); @@ -209,7 +211,7 @@ RuntimeSpawner getRuntimeSpawner(Function.Instance instance, String packageFile, return runtimeSpawner; } - InstanceConfig createInstanceConfig(FunctionDetails functionDetails, Function.FunctionAuthenticationSpec + InstanceConfig createInstanceConfig(FunctionDetails functionDetails, FunctionAuthenticationSpec functionAuthSpec, int instanceId, String clusterName) { InstanceConfig instanceConfig = new InstanceConfig(); instanceConfig.setFunctionDetails(functionDetails); @@ -233,7 +235,7 @@ InstanceConfig createInstanceConfig(FunctionDetails functionDetails, Function.Fu } private void downloadFile(File pkgFile, boolean isPkgUrlProvided, FunctionMetaData functionMetaData, - int instanceId, Function.PackageLocationMetaData pkgLocation, + int instanceId, PackageLocationMetaData pkgLocation, FunctionDetails.ComponentType componentType) throws IOException, PulsarAdminException { @@ -292,14 +294,14 @@ private void downloadFile(File pkgFile, boolean isPkgUrlProvided, FunctionMetaDa tempPkgFile.delete(); } - if (details.getRuntime() == Function.FunctionDetails.Runtime.GO && !pkgFile.canExecute()) { + if (details.getRuntime() == FunctionDetails.Runtime.GO && !pkgFile.canExecute()) { pkgFile.setExecutable(true); log.info("Golang function package file {} is set to executable", pkgFile); } } private void cleanupFunctionFiles(FunctionRuntimeInfo functionRuntimeInfo) { - Function.Instance instance = functionRuntimeInfo.getFunctionInstance(); + Instance instance = functionRuntimeInfo.getFunctionInstance(); FunctionMetaData functionMetaData = instance.getFunctionMetaData(); // clean up function package File pkgDir = new File( @@ -318,7 +320,7 @@ private void cleanupFunctionFiles(FunctionRuntimeInfo functionRuntimeInfo) { } public void stopFunction(FunctionRuntimeInfo functionRuntimeInfo) { - Function.Instance instance = functionRuntimeInfo.getFunctionInstance(); + Instance instance = functionRuntimeInfo.getFunctionInstance(); FunctionMetaData functionMetaData = instance.getFunctionMetaData(); FunctionDetails details = functionMetaData.getFunctionDetails(); log.info("{}/{}/{}-{} Stopping function...", details.getTenant(), details.getNamespace(), details.getName(), @@ -365,25 +367,17 @@ public void terminateFunction(FunctionRuntimeInfo functionRuntimeInfo) { cleanupFunctionFiles(functionRuntimeInfo); //cleanup subscriptions - if (details.getSource().getCleanupSubscription()) { - Map consumerSpecMap = details.getSource().getInputSpecsMap(); - consumerSpecMap.entrySet().forEach(new Consumer>() { - @Override - public void accept(Map.Entry stringConsumerSpecEntry) { - - Function.ConsumerSpec consumerSpec = stringConsumerSpecEntry.getValue(); - String topic = stringConsumerSpecEntry.getKey(); - - String subscriptionName = isBlank(functionRuntimeInfo.getFunctionInstance() - .getFunctionMetaData().getFunctionDetails().getSource().getSubscriptionName()) - ? InstanceUtils.getDefaultSubscriptionName(functionRuntimeInfo - .getFunctionInstance().getFunctionMetaData().getFunctionDetails()) - : functionRuntimeInfo.getFunctionInstance().getFunctionMetaData() - .getFunctionDetails().getSource().getSubscriptionName(); - - deleteSubscription(topic, consumerSpec, subscriptionName, - String.format("Cleaning up subscriptions for function %s", fqfn)); - } + if (details.getSource().isCleanupSubscription()) { + details.getSource().forEachInputSpecs((topic, consumerSpec) -> { + String subscriptionName = isBlank(functionRuntimeInfo.getFunctionInstance() + .getFunctionMetaData().getFunctionDetails().getSource().getSubscriptionName()) + ? InstanceUtils.getDefaultSubscriptionName(functionRuntimeInfo + .getFunctionInstance().getFunctionMetaData().getFunctionDetails()) + : functionRuntimeInfo.getFunctionInstance().getFunctionMetaData() + .getFunctionDetails().getSource().getSubscriptionName(); + + deleteSubscription(topic, consumerSpec, subscriptionName, + String.format("Cleaning up subscriptions for function %s", fqfn)); }); } @@ -391,7 +385,7 @@ public void accept(Map.Entry stringConsumerSpecEn cleanupBatchSource(details); } - private void deleteSubscription(String topic, Function.ConsumerSpec consumerSpec, + private void deleteSubscription(String topic, ConsumerSpec consumerSpec, String subscriptionName, String msg) { try { Actions.newBuilder() @@ -402,7 +396,7 @@ private void deleteSubscription(String topic, Function.ConsumerSpec consumerSpec .sleepBetweenInvocationsMs(1000) .supplier( getDeleteSubscriptionSupplier(topic, - consumerSpec.getIsRegexPattern(), + consumerSpec.isIsRegexPattern(), subscriptionName) ) .build()) @@ -524,7 +518,7 @@ private String getDownloadPackagePath(FunctionMetaData functionMetaData, int ins File.separatorChar); } - private File getBuiltinArchive(FunctionDetails.ComponentType componentType, FunctionDetails.Builder functionDetails) + private File getBuiltinArchive(FunctionDetails.ComponentType componentType, FunctionDetails functionDetails) throws IOException, ClassNotFoundException { if (componentType == FunctionDetails.ComponentType.SOURCE && functionDetails.hasSource()) { SourceSpec sourceSpec = functionDetails.getSource(); @@ -532,9 +526,7 @@ private File getBuiltinArchive(FunctionDetails.ComponentType componentType, Func Connector connector = connectorsManager.getConnector(sourceSpec.getBuiltin()); File archive = connector.getArchivePath().toFile(); String sourceClass = connector.getConnectorDefinition().getSourceClass(); - SourceSpec.Builder builder = SourceSpec.newBuilder(functionDetails.getSource()); - builder.setClassName(sourceClass); - functionDetails.setSource(builder); + functionDetails.getSource().setClassName(sourceClass); fillSourceTypeClass(functionDetails, connector.getConnectorFunctionPackage(), sourceClass); return archive; @@ -548,9 +540,7 @@ private File getBuiltinArchive(FunctionDetails.ComponentType componentType, Func File archive = connector.getArchivePath().toFile(); String sinkClass = connector.getConnectorDefinition().getSinkClass(); - SinkSpec.Builder builder = SinkSpec.newBuilder(functionDetails.getSink()); - builder.setClassName(sinkClass); - functionDetails.setSink(builder); + functionDetails.getSink().setClassName(sinkClass); fillSinkTypeClass(functionDetails, connector.getConnectorFunctionPackage(), sinkClass); return archive; @@ -565,40 +555,30 @@ private File getBuiltinArchive(FunctionDetails.ComponentType componentType, Func throw new IOException("Could not find built in archive definition"); } - private void fillSourceTypeClass(FunctionDetails.Builder functionDetails, + private void fillSourceTypeClass(FunctionDetails functionDetails, ValidatableFunctionPackage functionPackage, String className) { String typeArg = getSourceType(className, functionPackage.getTypePool()).asErasure().getName(); - SourceSpec.Builder sourceBuilder = SourceSpec.newBuilder(functionDetails.getSource()); - sourceBuilder.setTypeClassName(typeArg); - functionDetails.setSource(sourceBuilder); + functionDetails.getSource().setTypeClassName(typeArg); - SinkSpec sinkSpec = functionDetails.getSink(); - if (null == sinkSpec || StringUtils.isEmpty(sinkSpec.getTypeClassName())) { - SinkSpec.Builder sinkBuilder = SinkSpec.newBuilder(sinkSpec); - sinkBuilder.setTypeClassName(typeArg); - functionDetails.setSink(sinkBuilder); + if (!functionDetails.hasSink() || StringUtils.isEmpty(functionDetails.getSink().getTypeClassName())) { + functionDetails.setSink().setTypeClassName(typeArg); } } - private void fillSinkTypeClass(FunctionDetails.Builder functionDetails, + private void fillSinkTypeClass(FunctionDetails functionDetails, ValidatableFunctionPackage functionPackage, String className) { String typeArg = getSinkType(className, functionPackage.getTypePool()).asErasure().getName(); - SinkSpec.Builder sinkBuilder = SinkSpec.newBuilder(functionDetails.getSink()); - sinkBuilder.setTypeClassName(typeArg); - functionDetails.setSink(sinkBuilder); + functionDetails.getSink().setTypeClassName(typeArg); - SourceSpec sourceSpec = functionDetails.getSource(); - if (null == sourceSpec || StringUtils.isEmpty(sourceSpec.getTypeClassName())) { - SourceSpec.Builder sourceBuilder = SourceSpec.newBuilder(sourceSpec); - sourceBuilder.setTypeClassName(typeArg); - functionDetails.setSource(sourceBuilder); + if (!functionDetails.hasSource() || StringUtils.isEmpty(functionDetails.getSource().getTypeClassName())) { + functionDetails.getSource().setTypeClassName(typeArg); } } private static String getDownloadFileName(FunctionDetails functionDetails, - Function.PackageLocationMetaData packageLocation) { + PackageLocationMetaData packageLocation) { if (!org.apache.commons.lang3.StringUtils.isEmpty(packageLocation.getOriginalFileName())) { return packageLocation.getOriginalFileName(); } @@ -623,7 +603,7 @@ private static String getDownloadFileName(FunctionDetails functionDetails, } } - private void setupBatchSource(Function.FunctionDetails functionDetails) { + private void setupBatchSource(FunctionDetails functionDetails) { if (isBatchSource(functionDetails)) { String intermediateTopicName = SourceConfigUtils.computeBatchSourceIntermediateTopicName( @@ -670,7 +650,7 @@ private void setupBatchSource(Function.FunctionDetails functionDetails) { } } - private void cleanupBatchSource(Function.FunctionDetails functionDetails) { + private void cleanupBatchSource(FunctionDetails functionDetails) { if (isBatchSource(functionDetails)) { // clean up intermediate topic String intermediateTopicName = SourceConfigUtils @@ -710,7 +690,7 @@ private void cleanupBatchSource(Function.FunctionDetails functionDetails) { } } - private static boolean isBatchSource(Function.FunctionDetails functionDetails) { + private static boolean isBatchSource(FunctionDetails functionDetails) { if (InstanceUtils.calculateSubjectType(functionDetails) == FunctionDetails.ComponentType.SOURCE) { String fqfn = FunctionCommon.getFullyQualifiedName(functionDetails); Map configMap = SourceConfigUtils.extractSourceConfig(functionDetails.getSource(), fqfn); 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 5d10a1c376c70..2d3a4286fe2be 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 @@ -36,9 +36,9 @@ 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.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.ServiceRequest; import org.apache.pulsar.functions.utils.FunctionCommon; /** @@ -220,13 +220,12 @@ public synchronized void updateFunctionOnLeader(FunctionMetaData functionMetaDat toWrite = functionMetaData.toByteArray(); } } else { - Request.ServiceRequest serviceRequest = Request.ServiceRequest.newBuilder() - .setServiceRequestType(delete ? Request.ServiceRequest.ServiceRequestType.DELETE - : Request.ServiceRequest.ServiceRequestType.UPDATE) - .setFunctionMetaData(functionMetaData) - .setWorkerId(workerConfig.getWorkerId()) - .setRequestId(UUID.randomUUID().toString()) - .build(); + ServiceRequest serviceRequest = new ServiceRequest(); + serviceRequest.setServiceRequestType(delete ? ServiceRequest.ServiceRequestType.DELETE + : ServiceRequest.ServiceRequestType.UPDATE); + serviceRequest.setFunctionMetaData().copyFrom(functionMetaData); + serviceRequest.setWorkerId(workerConfig.getWorkerId()); + serviceRequest.setRequestId(UUID.randomUUID().toString()); toWrite = serviceRequest.toByteArray(); } try { @@ -253,7 +252,7 @@ public synchronized void updateFunctionOnLeader(FunctionMetaData functionMetaDat } private void checkRequestOutDated(FunctionMetaData functionMetaData, boolean delete) { - Function.FunctionDetails details = functionMetaData.getFunctionDetails(); + FunctionDetails details = functionMetaData.getFunctionDetails(); if (isRequestOutdated(details.getTenant(), details.getNamespace(), details.getName(), functionMetaData.getVersion())) { if (log.isDebugEnabled()) { @@ -348,7 +347,9 @@ public void processMetaDataTopicMessage(Message message) throws IOExcept } private void processUncompactedMetaDataTopicMessage(Message message) throws IOException { - Request.ServiceRequest serviceRequest = Request.ServiceRequest.parseFrom(message.getData()); + ServiceRequest serviceRequest = new ServiceRequest(); + serviceRequest.parseFrom(io.netty.buffer.Unpooled.wrappedBuffer(message.getData()), + message.getData().length); if (log.isDebugEnabled()) { log.debug("Received Service Request: {}", serviceRequest); } @@ -373,7 +374,9 @@ private void processCompactedMetaDataTopicMessage(Message message) throw // this is a delete message this.processDeregister(tenant, namespace, functionName, version); } else { - FunctionMetaData functionMetaData = FunctionMetaData.parseFrom(message.getData()); + FunctionMetaData functionMetaData = new FunctionMetaData(); + functionMetaData.parseFrom(io.netty.buffer.Unpooled.wrappedBuffer(message.getData()), + message.getData().length); this.processUpdate(functionMetaData); } } @@ -386,7 +389,7 @@ private boolean containsFunctionMetaData(FunctionMetaData functionMetaData) { return containsFunctionMetaData(functionMetaData.getFunctionDetails()); } - private boolean containsFunctionMetaData(Function.FunctionDetails functionDetails) { + private boolean containsFunctionMetaData(FunctionDetails functionDetails) { return containsFunctionMetaData( functionDetails.getTenant(), functionDetails.getNamespace(), functionDetails.getName()); } @@ -465,7 +468,7 @@ synchronized boolean processUpdate(FunctionMetaData updateRequestFs) throws Ille } private boolean isRequestOutdated(FunctionMetaData requestFunctionMetaData) { - Function.FunctionDetails functionDetails = requestFunctionMetaData.getFunctionDetails(); + FunctionDetails functionDetails = requestFunctionMetaData.getFunctionDetails(); return isRequestOutdated(functionDetails.getTenant(), functionDetails.getNamespace(), functionDetails.getName(), requestFunctionMetaData.getVersion()); } @@ -481,7 +484,7 @@ private boolean isRequestOutdated(String tenant, String namespace, String functi } void setFunctionMetaData(FunctionMetaData functionMetaData) { - Function.FunctionDetails functionDetails = functionMetaData.getFunctionDetails(); + FunctionDetails functionDetails = functionMetaData.getFunctionDetails(); if (!this.functionMetaDataMap.containsKey(functionDetails.getTenant())) { this.functionMetaDataMap.put(functionDetails.getTenant(), new ConcurrentHashMap<>()); } diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeInfo.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeInfo.java index fbd36c23add90..466fc74f0933d 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeInfo.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/FunctionRuntimeInfo.java @@ -20,7 +20,7 @@ import lombok.Data; import lombok.experimental.Accessors; -import org.apache.pulsar.functions.proto.Function.Instance; +import org.apache.pulsar.functions.proto.Instance; import org.apache.pulsar.functions.runtime.RuntimeSpawner; @Data 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 329e879857097..fae35677bc4ff 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,8 +19,8 @@ package org.apache.pulsar.functions.worker; import com.google.common.annotations.VisibleForTesting; -import java.io.IOException; import java.net.URI; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -57,9 +57,11 @@ import org.apache.pulsar.common.util.Reflections; import org.apache.pulsar.functions.auth.FunctionAuthProvider; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.Assignment; -import org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionDetails.ComponentType; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionState; import org.apache.pulsar.functions.runtime.RuntimeCustomizer; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.RuntimeSpawner; @@ -688,13 +690,8 @@ public synchronized void processAssignmentMessage(Message msg) { log.info("Received assignment delete: {}", msg.getKey()); deleteAssignment(msg.getKey()); } else { - Assignment assignment; - try { - assignment = Assignment.parseFrom(msg.getData()); - } catch (IOException e) { - log.error("[{}] Received bad assignment update at message {}", msg.getMessageId(), e); - throw new RuntimeException(e); - } + Assignment assignment = new Assignment(); + assignment.parseFrom(msg.getData()); log.info("Received assignment update: {}", assignment); processAssignment(assignment); } @@ -725,7 +722,7 @@ private void updateAssignment(Assignment assignment) { Assignment existingAssignment = this.findAssignment(assignment); // potential updates need to happen - if (!existingAssignment.equals(assignment)) { + if (!Arrays.equals(existingAssignment.toByteArray(), assignment.toByteArray())) { FunctionRuntimeInfo functionRuntimeInfo = get_FunctionRuntimeInfo(fullyQualifiedInstanceId); // for externally managed functions we don't really care about which worker @@ -738,7 +735,8 @@ private void updateAssignment(Assignment assignment) { if (runtimeFactory.externallyManaged()) { // change in metadata thus need to potentially restart - if (!assignment.getInstance().equals(existingAssignment.getInstance())) { + if (!Arrays.equals(assignment.getInstance().toByteArray(), + existingAssignment.getInstance().toByteArray())) { //stop function if (functionRuntimeInfo != null) { this.conditionallyStopFunction(functionRuntimeInfo); @@ -811,7 +809,7 @@ private void updateAssignment(Assignment assignment) { public synchronized void deleteAssignment(String fullyQualifiedInstanceId) { FunctionRuntimeInfo functionRuntimeInfo = get_FunctionRuntimeInfo(fullyQualifiedInstanceId); if (functionRuntimeInfo != null) { - Function.FunctionDetails functionDetails = functionRuntimeInfo + FunctionDetails functionDetails = functionRuntimeInfo .getFunctionInstance().getFunctionMetaData().getFunctionDetails(); // check if this is part of a function delete operation or update operation @@ -965,22 +963,28 @@ private FunctionRuntimeInfo get_FunctionRuntimeInfo(String fullyQualifiedInstanc private boolean needsStart(Assignment assignment) { boolean toStart = false; - Function.FunctionMetaData functionMetaData = assignment.getInstance().getFunctionMetaData(); - if (functionMetaData.getInstanceStatesMap() == null || functionMetaData.getInstanceStatesMap().isEmpty()) { + FunctionMetaData functionMetaData = assignment.getInstance().getFunctionMetaData(); + if (functionMetaData.getInstanceStatesCount() == 0) { toStart = true; } else { if (assignment.getInstance().getInstanceId() < 0) { // for externally managed functions, insert the start only if there is atleast one // instance that needs to be started - for (Function.FunctionState state : functionMetaData.getInstanceStatesMap().values()) { - if (state == Function.FunctionState.RUNNING) { - toStart = true; - break; + final boolean[] found = {false}; + functionMetaData.forEachInstanceStates((key, state) -> { + if (state == FunctionState.RUNNING) { + found[0] = true; } - } + }); + toStart = found[0]; } else { - if (functionMetaData.getInstanceStatesOrDefault(assignment.getInstance().getInstanceId(), - Function.FunctionState.RUNNING) == Function.FunctionState.RUNNING) { + FunctionState state; + try { + state = functionMetaData.getInstanceStates(assignment.getInstance().getInstanceId()); + } catch (IllegalArgumentException e) { + state = FunctionState.RUNNING; + } + if (state == FunctionState.RUNNING) { toStart = true; } } diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/MembershipManager.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/MembershipManager.java index d4839bd17467a..efe4fd451152b 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/MembershipManager.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/MembershipManager.java @@ -22,7 +22,6 @@ import com.google.common.annotations.VisibleForTesting; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -36,7 +35,9 @@ import org.apache.pulsar.common.functions.WorkerInfo; import org.apache.pulsar.common.policies.data.ConsumerStats; import org.apache.pulsar.common.policies.data.TopicStats; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.Instance; import org.apache.pulsar.functions.utils.FunctionCommon; /** @@ -53,9 +54,10 @@ public class MembershipManager implements AutoCloseable { private static final String WORKER_IDENTIFIER = "id"; // How long functions have remained assigned or scheduled on a failed node - // FullyQualifiedFunctionName -> time in millis + // FullyQualifiedInstanceId (String) -> time in millis + // Uses String key instead of Instance to avoid relying on LightProto's identity-based hashCode/equals @VisibleForTesting - Map unsignedFunctionDurations = new HashMap<>(); + Map unsignedFunctionDurations = new HashMap<>(); MembershipManager(WorkerService workerService, PulsarClient pulsarClient, PulsarAdmin pulsarAdmin) { this.workerConfig = workerService.getWorkerConfig(); @@ -118,32 +120,33 @@ public void checkFailures(FunctionMetaDataManager functionMetaDataManager, Set currentMembership = this.getCurrentMembership().stream() .map(entry -> entry.getWorkerId()).collect(Collectors.toSet()); - List functionMetaDataList = functionMetaDataManager.getAllFunctionMetaData(); - Map functionMetaDataMap = new HashMap<>(); - for (Function.FunctionMetaData entry : functionMetaDataList) { + List functionMetaDataList = functionMetaDataManager.getAllFunctionMetaData(); + Map functionMetaDataMap = new HashMap<>(); + for (FunctionMetaData entry : functionMetaDataList) { functionMetaDataMap.put(FunctionCommon.getFullyQualifiedName(entry.getFunctionDetails()), entry); } - Map> currentAssignments = + Map> currentAssignments = functionRuntimeManager.getCurrentAssignments(); - Map assignmentMap = new HashMap<>(); - for (Map entry : currentAssignments.values()) { + Map assignmentMap = new HashMap<>(); + for (Map entry : currentAssignments.values()) { assignmentMap.putAll(entry); } long currentTimeMs = System.currentTimeMillis(); // remove functions - Iterator> it = unsignedFunctionDurations.entrySet().iterator(); + Iterator> it = unsignedFunctionDurations.entrySet().iterator(); while (it.hasNext()) { - Map.Entry entry = it.next(); - String fullyQualifiedFunctionName = FunctionCommon.getFullyQualifiedName( - entry.getKey().getFunctionMetaData().getFunctionDetails()); - String fullyQualifiedInstanceId = FunctionCommon.getFullyQualifiedInstanceId(entry.getKey()); + Map.Entry entry = it.next(); + String fullyQualifiedInstanceId = entry.getKey(); + // derive function name from instance id (strip the ":instanceId" suffix) + String fullyQualifiedFunctionName = + fullyQualifiedInstanceId.substring(0, fullyQualifiedInstanceId.lastIndexOf(':')); //remove functions that don't exist anymore if (!functionMetaDataMap.containsKey(fullyQualifiedFunctionName)) { it.remove(); } else { //remove functions that have been scheduled - Function.Assignment assignment = assignmentMap.get(fullyQualifiedInstanceId); + Assignment assignment = assignmentMap.get(fullyQualifiedInstanceId); if (assignment != null) { String assignedWorkerId = assignment.getWorkerId(); // check if assigned to worker that has failed @@ -155,42 +158,44 @@ public void checkFailures(FunctionMetaDataManager functionMetaDataManager, } // check for function instances that haven't been assigned - for (Function.FunctionMetaData functionMetaData : functionMetaDataList) { - Collection assignments = + for (FunctionMetaData functionMetaData : functionMetaDataList) { + Collection assignments = FunctionRuntimeManager.findFunctionAssignments(functionMetaData.getFunctionDetails().getTenant(), functionMetaData.getFunctionDetails().getNamespace(), functionMetaData.getFunctionDetails().getName(), currentAssignments); - Set assignedInstances = assignments.stream() - .map(assignment -> assignment.getInstance()) + Set assignedInstanceIds = assignments.stream() + .map(assignment -> FunctionCommon.getFullyQualifiedInstanceId(assignment.getInstance())) .collect(Collectors.toSet()); - Set instances = new HashSet<>(SchedulerManager.computeInstances(functionMetaData, - functionRuntimeManager.getRuntimeFactory().externallyManaged())); + List instances = SchedulerManager.computeInstances(functionMetaData, + functionRuntimeManager.getRuntimeFactory().externallyManaged()); - for (Function.Instance instance : instances) { - if (!assignedInstances.contains(instance)) { - if (!this.unsignedFunctionDurations.containsKey(instance)) { - this.unsignedFunctionDurations.put(instance, currentTimeMs); + for (Instance instance : instances) { + String instanceId = FunctionCommon.getFullyQualifiedInstanceId(instance); + if (!assignedInstanceIds.contains(instanceId)) { + if (!this.unsignedFunctionDurations.containsKey(instanceId)) { + this.unsignedFunctionDurations.put(instanceId, currentTimeMs); } } } } // check failed nodes - for (Map.Entry> entry : currentAssignments.entrySet()) { + for (Map.Entry> entry : currentAssignments.entrySet()) { String workerId = entry.getKey(); - Map assignmentEntries = entry.getValue(); + Map assignmentEntries = entry.getValue(); if (!currentMembership.contains(workerId)) { - for (Function.Assignment assignmentEntry : assignmentEntries.values()) { - Function.Instance instance = assignmentEntry.getInstance(); + for (Assignment assignmentEntry : assignmentEntries.values()) { + Instance instance = assignmentEntry.getInstance(); // avoid scheduling-trigger for heartbeat-function if owner-worker is not up if (checkHeartBeatFunction(instance) != null) { continue; } - if (!this.unsignedFunctionDurations.containsKey(instance)) { - this.unsignedFunctionDurations.put(instance, currentTimeMs); + String instanceId = FunctionCommon.getFullyQualifiedInstanceId(instance); + if (!this.unsignedFunctionDurations.containsKey(instanceId)) { + this.unsignedFunctionDurations.put(instanceId, currentTimeMs); } } } @@ -198,17 +203,16 @@ public void checkFailures(FunctionMetaDataManager functionMetaDataManager, boolean triggerScheduler = false; // check unassigned - Collection needSchedule = new LinkedList<>(); - Collection needRemove = new LinkedList<>(); + Collection needSchedule = new LinkedList<>(); + Collection needRemove = new LinkedList<>(); Map numRemoved = new HashMap<>(); - for (Map.Entry entry : this.unsignedFunctionDurations.entrySet()) { - Function.Instance instance = entry.getKey(); + for (Map.Entry entry : this.unsignedFunctionDurations.entrySet()) { + String instanceId = entry.getKey(); long unassignedDurationMs = entry.getValue(); if (currentTimeMs - unassignedDurationMs > this.workerConfig.getRescheduleTimeoutMs()) { - needSchedule.add(instance); + needSchedule.add(instanceId); // remove assignment from failed node - Function.Assignment assignment = - assignmentMap.get(FunctionCommon.getFullyQualifiedInstanceId(instance)); + Assignment assignment = assignmentMap.get(instanceId); if (assignment != null) { needRemove.add(assignment); diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/PackageUrlValidator.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/PackageUrlValidator.java index 2a8fe8dddb153..6d0982ddae5b3 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/PackageUrlValidator.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/PackageUrlValidator.java @@ -24,7 +24,7 @@ import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; /** * Validates package URLs for functions and connectors. @@ -82,7 +82,7 @@ private boolean doesMatch(URI functionPkgUrl, Path directory, List patt return false; } - public boolean isValidPackageUrl(Function.FunctionDetails.ComponentType componentType, String functionPkgUrl) { + public boolean isValidPackageUrl(FunctionDetails.ComponentType componentType, String functionPkgUrl) { URI uri = URI.create(functionPkgUrl); if (componentType == null) { // if component type is not specified, we need to check both functions and connections 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 a1107b62827d6..ac1a8476a00fc 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 @@ -25,6 +25,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.netty.util.concurrent.DefaultThreadFactory; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -52,7 +53,6 @@ import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; -import lombok.val; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.pulsar.client.admin.LongRunningProcessStatus; @@ -65,11 +65,10 @@ import org.apache.pulsar.common.functions.WorkerInfo; import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.common.util.Reflections; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.Assignment; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; -import org.apache.pulsar.functions.proto.Function.Instance; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.Instance; import org.apache.pulsar.functions.utils.FunctionCommon; import org.apache.pulsar.functions.worker.scheduler.IScheduler; @@ -243,7 +242,7 @@ private Future rebalance() { public Future rebalanceIfNotInprogress() { if (rebalanceInProgress.compareAndSet(false, true)) { - val numWorkers = getCurrentAvailableNumWorkers(); + int numWorkers = getCurrentAvailableNumWorkers(); if (numWorkers <= 1) { rebalanceInProgress.set(false); throw new TooFewWorkersException(); @@ -265,7 +264,7 @@ private Future drain(String workerId) { public Future drainIfNotInProgress(String workerId) { if (drainInProgressFlag.compareAndSet(false, true)) { try { - val availableWorkers = getCurrentAvailableWorkers(); + Set availableWorkers = getCurrentAvailableWorkers(); if (availableWorkers.size() <= 1) { throw new TooFewWorkersException(); } @@ -359,7 +358,7 @@ void invokeScheduler() { Set availableWorkers = getCurrentAvailableWorkers(); List allFunctions = functionMetaDataManager.getAllFunctionMetaData(); - Map allInstances = + Map allInstances = computeAllInstances(allFunctions, functionRuntimeManager.getRuntimeFactory().externallyManaged()); Map> workerIdToAssignments = functionRuntimeManager .getCurrentAssignments(); @@ -379,7 +378,9 @@ void invokeScheduler() { boolean deleted = !allInstances.containsKey(fullyQualifiedInstanceId); if (deleted) { Assignment assignment = entry.getValue(); - MessageId messageId = publishNewAssignment(assignment.toBuilder().build(), true); + Assignment deleteCopy = new Assignment(); + deleteCopy.copyFrom(assignment); + MessageId messageId = publishNewAssignment(deleteCopy, true); // Directly update in memory assignment cache since I am leader log.info("Deleting assignment: {}", assignment); @@ -396,11 +397,15 @@ void invokeScheduler() { for (Map.Entry entry : functionMap.entrySet()) { String fullyQualifiedInstanceId = entry.getKey(); Assignment assignment = entry.getValue(); - Function.Instance instance = allInstances.get(fullyQualifiedInstanceId); - - if (!assignment.getInstance().equals(instance)) { - functionMap.put(fullyQualifiedInstanceId, assignment.toBuilder().setInstance(instance).build()); - Assignment newAssignment = assignment.toBuilder().setInstance(instance).build().toBuilder().build(); + Instance instance = allInstances.get(fullyQualifiedInstanceId); + + if (!Arrays.equals(assignment.getInstance().toByteArray(), instance.toByteArray())) { + Assignment updatedAssignment = new Assignment(); + updatedAssignment.copyFrom(assignment); + updatedAssignment.setInstance().copyFrom(instance); + functionMap.put(fullyQualifiedInstanceId, updatedAssignment); + Assignment newAssignment = new Assignment(); + newAssignment.copyFrom(updatedAssignment); MessageId messageId = publishNewAssignment(newAssignment, false); // Directly update in memory assignment cache since I am leader @@ -429,7 +434,7 @@ void invokeScheduler() { .flatMap(stringMapEntry -> stringMapEntry.getValue().values().stream()) .collect(Collectors.toList()); - Pair, List> unassignedInstances = + Pair, List> unassignedInstances = getUnassignedFunctionInstances(workerIdToAssignments, allInstances); workerStatsManager.scheduleStrategyExecTimeStartStart(); @@ -558,11 +563,11 @@ List invokeDrain(String workerId) { availableWorkers.remove(workerId); List allFunctions = functionMetaDataManager.getAllFunctionMetaData(); - Map allInstances = + Map allInstances = computeAllInstances(allFunctions, functionRuntimeManager.getRuntimeFactory().externallyManaged()); // The assignments that were not on the worker being drained don't need to change. - val activeWorkersAssignmentsMap = new HashMap>(); + Map> activeWorkersAssignmentsMap = new HashMap<>(); List assignmentsOnActiveWorkers = workerIdToAssignments .entrySet() .stream() @@ -578,7 +583,7 @@ List invokeDrain(String workerId) { .flatMap(stringMapEntry -> stringMapEntry.getValue().values().stream()) .collect(Collectors.toList()); - Pair, List> instancesToAssign = + Pair, List> instancesToAssign = getUnassignedFunctionInstances(activeWorkersAssignmentsMap, allInstances); workerStatsManager.drainTotalExecTimeStart(); @@ -630,9 +635,9 @@ protected synchronized int updateWorkerDrainMap() { int numRemovedWorkerIds = 0; if (drainOpStatusMap.size() > 0) { - val currentMembership = membershipManager.getCurrentMembership() + Set currentMembership = membershipManager.getCurrentMembership() .stream().map(WorkerInfo::getWorkerId).collect(Collectors.toSet()); - val removeWorkerIds = new ArrayList(); + List removeWorkerIds = new ArrayList<>(); for (String workerId : drainOpStatusMap.keySet()) { if (!currentMembership.contains(workerId)) { @@ -678,41 +683,41 @@ private MessageId publishNewAssignment(Assignment assignment, boolean deleted) { } } - private static Map computeAllInstances(List allFunctions, + private static Map computeAllInstances(List allFunctions, boolean externallyManagedRuntime) { - Map functionInstances = new HashMap<>(); + Map functionInstances = new HashMap<>(); for (FunctionMetaData functionMetaData : allFunctions) { - for (Function.Instance instance : computeInstances(functionMetaData, externallyManagedRuntime)) { + for (Instance instance : computeInstances(functionMetaData, externallyManagedRuntime)) { functionInstances.put(FunctionCommon.getFullyQualifiedInstanceId(instance), instance); } } return functionInstances; } - static List computeInstances(FunctionMetaData functionMetaData, + static List computeInstances(FunctionMetaData functionMetaData, boolean externallyManagedRuntime) { - List functionInstances = new LinkedList<>(); + List functionInstances = new LinkedList<>(); if (!externallyManagedRuntime) { int instances = functionMetaData.getFunctionDetails().getParallelism(); for (int i = 0; i < instances; i++) { - functionInstances.add(Function.Instance.newBuilder() - .setFunctionMetaData(functionMetaData) - .setInstanceId(i) - .build()); + Instance inst = new Instance(); + inst.setFunctionMetaData().copyFrom(functionMetaData); + inst.setInstanceId(i); + functionInstances.add(inst); } } else { - functionInstances.add(Function.Instance.newBuilder() - .setFunctionMetaData(functionMetaData) - .setInstanceId(-1) - .build()); + Instance inst = new Instance(); + inst.setFunctionMetaData().copyFrom(functionMetaData); + inst.setInstanceId(-1); + functionInstances.add(inst); } return functionInstances; } - private Pair, List> getUnassignedFunctionInstances( - Map> currentAssignments, Map functionInstances) { + private Pair, List> getUnassignedFunctionInstances( + Map> currentAssignments, Map functionInstances) { - List unassignedFunctionInstances = new LinkedList<>(); + List unassignedFunctionInstances = new LinkedList<>(); List heartBeatAssignments = new ArrayList<>(); Map assignmentMap = new HashMap<>(); if (currentAssignments != null) { @@ -721,13 +726,15 @@ private Pair, List> getUnassignedFunctionIns } } - for (Map.Entry instanceEntry : functionInstances.entrySet()) { + for (Map.Entry instanceEntry : functionInstances.entrySet()) { String fullyQualifiedInstanceId = instanceEntry.getKey(); - Function.Instance instance = instanceEntry.getValue(); + Instance instance = instanceEntry.getValue(); String heartBeatWorkerId = checkHeartBeatFunction(instance); if (heartBeatWorkerId != null) { - heartBeatAssignments - .add(Assignment.newBuilder().setInstance(instance).setWorkerId(heartBeatWorkerId).build()); + Assignment heartBeatAssignment = new Assignment(); + heartBeatAssignment.setInstance().copyFrom(instance); + heartBeatAssignment.setWorkerId(heartBeatWorkerId); + heartBeatAssignments.add(heartBeatAssignment); continue; } if (!assignmentMap.containsKey(fullyQualifiedInstanceId)) { diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerStatsManager.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerStatsManager.java index d746f867d8ece..82b96ae45208c 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerStatsManager.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerStatsManager.java @@ -30,7 +30,7 @@ import lombok.Setter; import org.apache.pulsar.common.util.DirectMemoryUtils; import org.apache.pulsar.functions.instance.stats.PrometheusTextFormat; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionMetaData; public class WorkerStatsManager { @@ -307,14 +307,14 @@ public String getStatsAsString() throws IOException { private void generateLeaderMetrics(StringWriter stream) { if (isLeader.get()) { - List metadata = functionMetaDataManager.getAllFunctionMetaData(); + List metadata = functionMetaDataManager.getAllFunctionMetaData(); // get total number functions long totalFunctions = metadata.size(); writeMetric(TOTAL_FUNCTIONS_COUNT, totalFunctions, stream); // get total expected number of instances long totalInstances = 0; - for (Function.FunctionMetaData entry : metadata) { + for (FunctionMetaData entry : metadata) { totalInstances += entry.getFunctionDetails().getParallelism(); } writeMetric(TOTAL_EXPECTED_INSTANCE_COUNT, totalInstances, stream); diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerUtils.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerUtils.java index 039244b810e7e..16bd6f0fe4468 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerUtils.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/WorkerUtils.java @@ -33,7 +33,6 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.distributedlog.AppendOnlyStreamWriter; @@ -60,7 +59,7 @@ import org.apache.pulsar.common.functions.WorkerInfo; import org.apache.pulsar.common.policies.data.FunctionInstanceStatsDataImpl; import org.apache.pulsar.common.policies.data.FunctionInstanceStatsImpl; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.MetricsData; import org.apache.pulsar.functions.runtime.Runtime; import org.apache.pulsar.functions.runtime.RuntimeSpawner; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -328,7 +327,7 @@ public static FunctionInstanceStatsImpl getFunctionInstanceStats(String fullyQua if (functionRuntime != null) { try { - InstanceCommunication.MetricsData metricsData = functionRuntime.getMetrics(instanceId).get(); + MetricsData metricsData = functionRuntime.getMetrics(instanceId).get(); functionInstanceStats.setInstanceId(instanceId); FunctionInstanceStatsDataImpl functionInstanceStatsData = new FunctionInstanceStatsDataImpl(); @@ -343,20 +342,23 @@ public static FunctionInstanceStatsImpl getFunctionInstanceStats(String fullyQua functionInstanceStatsData.setLastInvocation( metricsData.getLastInvocation() == 0 ? null : metricsData.getLastInvocation()); - functionInstanceStatsData.oneMin.setReceivedTotal(metricsData.getReceivedTotal1Min()); + functionInstanceStatsData.oneMin.setReceivedTotal(metricsData.getReceivedtotal1min()); functionInstanceStatsData.oneMin - .setProcessedSuccessfullyTotal(metricsData.getProcessedSuccessfullyTotal1Min()); + .setProcessedSuccessfullyTotal(metricsData.getProcessedsuccessfullytotal1min()); functionInstanceStatsData.oneMin - .setSystemExceptionsTotal(metricsData.getSystemExceptionsTotal1Min()); - functionInstanceStatsData.oneMin.setUserExceptionsTotal(metricsData.getUserExceptionsTotal1Min()); + .setSystemExceptionsTotal(metricsData.getSystemexceptionstotal1min()); + functionInstanceStatsData.oneMin.setUserExceptionsTotal(metricsData.getUserexceptionstotal1min()); functionInstanceStatsData.oneMin.setAvgProcessLatency( - metricsData.getAvgProcessLatency1Min() == 0.0 ? null : - metricsData.getAvgProcessLatency1Min()); + metricsData.getAvgprocesslatency1min() == 0.0 ? null : + metricsData.getAvgprocesslatency1min()); // Filter out values that are NaN - Map statsDataMap = metricsData.getUserMetricsMap().entrySet().stream() - .filter(stringDoubleEntry -> !stringDoubleEntry.getValue().isNaN()) - .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue())); + Map statsDataMap = new java.util.HashMap<>(); + metricsData.forEachUserMetrics((key, value) -> { + if (!value.isNaN()) { + statsDataMap.put(key, value); + } + }); functionInstanceStatsData.setUserMetrics(statsDataMap); diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java index 990419c219034..f79262a4d8c85 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java @@ -77,13 +77,13 @@ import org.apache.pulsar.functions.api.state.StateValue; import org.apache.pulsar.functions.instance.InstanceUtils; import org.apache.pulsar.functions.instance.state.DefaultStateStore; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; -import org.apache.pulsar.functions.proto.Function.PackageLocationMetaData; -import org.apache.pulsar.functions.proto.Function.SinkSpec; -import org.apache.pulsar.functions.proto.Function.SourceSpec; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.PackageLocationMetaData; +import org.apache.pulsar.functions.proto.SinkSpec; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.runtime.RuntimeSpawner; import org.apache.pulsar.functions.utils.ComponentTypeUtils; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -107,10 +107,10 @@ public abstract class ComponentImpl implements Component { protected final Supplier workerServiceSupplier; - protected final Function.FunctionDetails.ComponentType componentType; + protected final FunctionDetails.ComponentType componentType; public ComponentImpl(Supplier workerServiceSupplier, - Function.FunctionDetails.ComponentType componentType) { + FunctionDetails.ComponentType componentType) { this.workerServiceSupplier = workerServiceSupplier; this.componentType = componentType; } @@ -119,7 +119,7 @@ protected abstract class GetStatus { public abstract T notScheduledInstance(); - public abstract T fromFunctionStatusProto(InstanceCommunication.FunctionStatus status, + public abstract T fromFunctionStatusProto(FunctionStatus status, String assignedWorkerId); public abstract T notRunning(String assignedWorkerId, String error); @@ -130,7 +130,7 @@ public T getComponentInstanceStatus(final String tenant, final int instanceId, final URI uri) { - Function.Assignment assignment; + Assignment assignment; if (worker().getFunctionRuntimeManager().getRuntimeFactory().externallyManaged()) { assignment = worker().getFunctionRuntimeManager().findFunctionAssignment(tenant, namespace, name, -1); } else { @@ -196,7 +196,7 @@ public T getComponentInstanceStatus(final String tenant, public abstract X getStatus(String tenant, String namespace, String name, - Collection assignments, + Collection assignments, URI uri) throws PulsarAdminException; public abstract X getStatusExternal(String tenant, @@ -211,15 +211,15 @@ public X getComponentStatus(final String tenant, final String name, final URI uri) { - Function.FunctionMetaData functionMetaData = + FunctionMetaData functionMetaData = worker().getFunctionMetaDataManager().getFunctionMetaData(tenant, namespace, name); - Collection assignments = + Collection assignments = worker().getFunctionRuntimeManager().findFunctionAssignments(tenant, namespace, name); // TODO refactor the code for externally managed. if (worker().getFunctionRuntimeManager().getRuntimeFactory().externallyManaged()) { - Function.Assignment assignment = assignments.iterator().next(); + Assignment assignment = assignments.iterator().next(); boolean isOwner = worker().getWorkerConfig().getWorkerId().equals(assignment.getWorkerId()); if (isOwner) { return getStatusExternal(tenant, namespace, name, @@ -277,7 +277,7 @@ boolean isWorkerServiceAvailable() { return workerService.isInitialized(); } - PackageLocationMetaData.Builder getFunctionPackageLocation(final FunctionMetaData functionMetaData, + PackageLocationMetaData getFunctionPackageLocation(final FunctionMetaData functionMetaData, final String functionPkgUrl, final FormDataContentDisposition fileDetail, final File uploadedInputStreamAsFile) @@ -287,7 +287,7 @@ PackageLocationMetaData.Builder getFunctionPackageLocation(final FunctionMetaDat getFunctionCodeBuiltin(functionMetaData.getFunctionDetails(), componentType)); } - PackageLocationMetaData.Builder getFunctionPackageLocation(final FunctionMetaData functionMetaData, + PackageLocationMetaData getFunctionPackageLocation(final FunctionMetaData functionMetaData, final String functionPkgUrl, final FormDataContentDisposition fileDetail, final File uploadedInputStreamAsFile, @@ -298,7 +298,7 @@ PackageLocationMetaData.Builder getFunctionPackageLocation(final FunctionMetaDat FunctionDetails functionDetails = functionMetaData.getFunctionDetails(); String tenant = functionDetails.getTenant(); String namespace = functionDetails.getNamespace(); - PackageLocationMetaData.Builder packageLocationMetaDataBuilder = PackageLocationMetaData.newBuilder(); + PackageLocationMetaData packageLocationMetaDataBuilder = new PackageLocationMetaData(); boolean isPkgUrlProvided = isNotBlank(functionPkgUrl); boolean isPackageManagementEnabled = worker().getWorkerConfig().isFunctionsWorkerEnablePackageManagement(); PackageName packageName = PackageName.get( @@ -621,7 +621,8 @@ public void changeFunctionInstanceStatus(final String tenant, } if (!FunctionMetaDataUtils.canChangeState(functionMetaData, Integer.parseInt(instanceId), - start ? Function.FunctionState.RUNNING : Function.FunctionState.STOPPED)) { + start ? org.apache.pulsar.functions.proto.FunctionState.RUNNING + : org.apache.pulsar.functions.proto.FunctionState.STOPPED)) { log.error("Operation not permitted on {}/{}/{}", tenant, namespace, componentName); throw new RestException(Status.BAD_REQUEST, "Operation not permitted"); } @@ -753,7 +754,8 @@ public void changeFunctionStatusAllInstances(final String tenant, } if (!FunctionMetaDataUtils.canChangeState(functionMetaData, -1, - start ? Function.FunctionState.RUNNING : Function.FunctionState.STOPPED)) { + start ? org.apache.pulsar.functions.proto.FunctionState.RUNNING + : org.apache.pulsar.functions.proto.FunctionState.STOPPED)) { log.error("Operation not permitted on {}/{}/{}", tenant, namespace, componentName); throw new RestException(Status.BAD_REQUEST, "Operation not permitted"); } @@ -1038,16 +1040,23 @@ public String triggerFunction(final String tenant, if (topic != null) { inputTopicToWrite = topic; } else if (functionMetaData.getFunctionDetails().getSource().getInputSpecsCount() == 1) { - inputTopicToWrite = functionMetaData.getFunctionDetails().getSource().getInputSpecsMap() - .keySet().iterator().next(); + String[] firstKey = new String[1]; + functionMetaData.getFunctionDetails().getSource().forEachInputSpecs((k, v) -> firstKey[0] = k); + inputTopicToWrite = firstKey[0]; } else { log.error("Function in trigger function has more than 1 input topics @ /{}/{}/{}", tenant, namespace, functionName); throw new RestException(Status.BAD_REQUEST, "Function in trigger function has more than 1 input topics"); } + boolean topicFound; + try { + functionMetaData.getFunctionDetails().getSource().getInputSpecs(inputTopicToWrite); + topicFound = true; + } catch (IllegalArgumentException e) { + topicFound = false; + } if (functionMetaData.getFunctionDetails().getSource().getInputSpecsCount() == 0 - || !functionMetaData.getFunctionDetails().getSource().getInputSpecsMap() - .containsKey(inputTopicToWrite)) { + || !topicFound) { log.error("Function in trigger function has unidentified topic @ /{}/{}/{} {}", tenant, namespace, functionName, inputTopicToWrite); throw new RestException(Status.BAD_REQUEST, "Function in trigger function has unidentified topic"); diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java index 4cbd7c8cbcb12..d2a2708d8f50c 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImpl.java @@ -23,7 +23,6 @@ import static org.apache.pulsar.functions.auth.FunctionAuthUtils.getFunctionAuthData; import static org.apache.pulsar.functions.utils.FunctionCommon.isFunctionCodeBuiltin; import static org.apache.pulsar.functions.worker.rest.RestUtils.throwUnavailableException; -import com.google.protobuf.ByteString; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -50,8 +49,10 @@ import org.apache.pulsar.common.util.RestException; import org.apache.pulsar.functions.auth.FunctionAuthData; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.PackageLocationMetaData; import org.apache.pulsar.functions.utils.ComponentTypeUtils; import org.apache.pulsar.functions.utils.FunctionConfigUtils; import org.apache.pulsar.functions.utils.FunctionFilePackage; @@ -70,7 +71,7 @@ public class FunctionsImpl extends ComponentImpl implements Functions { public FunctionsImpl(Supplier workerServiceSupplier) { - super(workerServiceSupplier, Function.FunctionDetails.ComponentType.FUNCTION); + super(workerServiceSupplier, FunctionDetails.ComponentType.FUNCTION); } @Override @@ -137,7 +138,7 @@ public void registerFunction(final String tenant, ComponentTypeUtils.toString(componentType), functionName)); } - Function.FunctionDetails functionDetails; + FunctionDetails functionDetails; File componentPackageFile = null; try { @@ -175,14 +176,14 @@ public void registerFunction(final String tenant, } // function state - Function.FunctionMetaData.Builder functionMetaDataBuilder = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(functionDetails) - .setCreateTime(System.currentTimeMillis()) - .setVersion(0); + FunctionMetaData functionMetaDataObj = new FunctionMetaData(); + functionMetaDataObj.setFunctionDetails().copyFrom(functionDetails); + functionMetaDataObj.setCreateTime(System.currentTimeMillis()); + functionMetaDataObj.setVersion(0); // cache auth if need if (worker().getWorkerConfig().isAuthenticationEnabled()) { - Function.FunctionDetails finalFunctionDetails = functionDetails; + FunctionDetails finalFunctionDetails = functionDetails; worker().getFunctionRuntimeManager() .getRuntimeFactory() .getAuthProvider().ifPresent(functionAuthProvider -> { @@ -193,10 +194,9 @@ public void registerFunction(final String tenant, .cacheAuthData(finalFunctionDetails, authParams.getClientAuthenticationDataSource()); - functionAuthData.ifPresent(authData -> functionMetaDataBuilder.setFunctionAuthSpec( - Function.FunctionAuthenticationSpec.newBuilder() - .setData(ByteString.copyFrom(authData.getData())) - .build())); + functionAuthData.ifPresent(authData -> + functionMetaDataObj.setFunctionAuthSpec() + .setData(authData.getData())); } catch (Exception e) { log.error("Error caching authentication data for {} {}/{}/{}", ComponentTypeUtils.toString(componentType), tenant, namespace, functionName, e); @@ -210,18 +210,18 @@ public void registerFunction(final String tenant, }); } - Function.PackageLocationMetaData.Builder packageLocationMetaDataBuilder; + PackageLocationMetaData packageLocationMetaData; try { - packageLocationMetaDataBuilder = getFunctionPackageLocation(functionMetaDataBuilder.build(), + packageLocationMetaData = getFunctionPackageLocation(functionMetaDataObj, functionPkgUrl, fileDetail, componentPackageFile); } catch (Exception e) { - log.error("Failed process {} {}/{}/{} package: ", ComponentTypeUtils.toString(componentType), + log.error("Failed process {} {}/{/{} package: ", ComponentTypeUtils.toString(componentType), tenant, namespace, functionName, e); throw new RestException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } - functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder); - updateRequest(null, functionMetaDataBuilder.build()); + functionMetaDataObj.setPackageLocation().copyFrom(packageLocationMetaData); + updateRequest(null, functionMetaDataObj); } finally { if (componentPackageFile != null && componentPackageFile.exists()) { if (functionPkgUrl == null || !functionPkgUrl.startsWith(Utils.FILE)) { @@ -269,7 +269,7 @@ public void updateFunction(final String tenant, ComponentTypeUtils.toString(componentType), functionName)); } - Function.FunctionMetaData existingComponent = functionMetaDataManager + FunctionMetaData existingComponent = functionMetaDataManager .getFunctionMetaData(tenant, namespace, functionName); if (!InstanceUtils.calculateSubjectType(existingComponent.getFunctionDetails()).equals(componentType)) { @@ -298,7 +298,7 @@ public void updateFunction(final String tenant, throw new RestException(Response.Status.BAD_REQUEST, "Update contains no change"); } - Function.FunctionDetails functionDetails; + FunctionDetails functionDetails; File componentPackageFile = null; try { @@ -333,13 +333,13 @@ public void updateFunction(final String tenant, } // merge from existing metadata - Function.FunctionMetaData.Builder functionMetaDataBuilder = - Function.FunctionMetaData.newBuilder().mergeFrom(existingComponent) - .setFunctionDetails(functionDetails); + FunctionMetaData functionMetaDataObj = new FunctionMetaData(); + functionMetaDataObj.copyFrom(existingComponent); + functionMetaDataObj.setFunctionDetails().copyFrom(functionDetails); // update auth data if need if (worker().getWorkerConfig().isAuthenticationEnabled()) { - Function.FunctionDetails finalFunctionDetails = functionDetails; + FunctionDetails finalFunctionDetails = functionDetails; worker().getFunctionRuntimeManager() .getRuntimeFactory() .getAuthProvider().ifPresent(functionAuthProvider -> { @@ -347,9 +347,9 @@ public void updateFunction(final String tenant, != null && updateOptions.isUpdateAuthData()) { // get existing auth data if it exists Optional existingFunctionAuthData = Optional.empty(); - if (functionMetaDataBuilder.hasFunctionAuthSpec()) { + if (functionMetaDataObj.hasFunctionAuthSpec()) { existingFunctionAuthData = Optional.ofNullable(getFunctionAuthData(Optional - .ofNullable(functionMetaDataBuilder.getFunctionAuthSpec()))); + .ofNullable(functionMetaDataObj.getFunctionAuthSpec()))); } try { @@ -358,12 +358,10 @@ public void updateFunction(final String tenant, authParams.getClientAuthenticationDataSource()); if (newFunctionAuthData.isPresent()) { - functionMetaDataBuilder.setFunctionAuthSpec( - Function.FunctionAuthenticationSpec.newBuilder() - .setData(ByteString.copyFrom( - newFunctionAuthData.get().getData())).build()); + functionMetaDataObj.setFunctionAuthSpec() + .setData(newFunctionAuthData.get().getData()); } else { - functionMetaDataBuilder.clearFunctionAuthSpec(); + functionMetaDataObj.clearFunctionAuthSpec(); } } catch (Exception e) { log.error("Error updating authentication data for {} {}/{}/{}", ComponentTypeUtils @@ -377,12 +375,12 @@ public void updateFunction(final String tenant, }); } - Function.PackageLocationMetaData.Builder packageLocationMetaDataBuilder; + PackageLocationMetaData packageLocationMetaData; if (isNotBlank(functionPkgUrl) || uploadedInputStream != null) { - Function.FunctionMetaData metaData = functionMetaDataBuilder.build(); - metaData = FunctionMetaDataUtils.incrMetadataVersion(metaData, metaData); + FunctionMetaData metaData = FunctionMetaDataUtils.incrMetadataVersion(functionMetaDataObj, + functionMetaDataObj); try { - packageLocationMetaDataBuilder = getFunctionPackageLocation(metaData, + packageLocationMetaData = getFunctionPackageLocation(metaData, functionPkgUrl, fileDetail, componentPackageFile); } catch (Exception e) { log.error("Failed process {} {}/{}/{} package: ", ComponentTypeUtils.toString(componentType), @@ -390,13 +388,13 @@ public void updateFunction(final String tenant, throw new RestException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } } else { - packageLocationMetaDataBuilder = Function.PackageLocationMetaData.newBuilder() - .mergeFrom(existingComponent.getPackageLocation()); + packageLocationMetaData = new PackageLocationMetaData(); + packageLocationMetaData.copyFrom(existingComponent.getPackageLocation()); } - functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder); + functionMetaDataObj.setPackageLocation().copyFrom(packageLocationMetaData); - updateRequest(existingComponent, functionMetaDataBuilder.build()); + updateRequest(existingComponent, functionMetaDataObj); } finally { if (componentPackageFile != null && componentPackageFile.exists()) { if ((functionPkgUrl != null && !functionPkgUrl.startsWith(Utils.FILE)) || uploadedInputStream != null) { @@ -420,11 +418,11 @@ public FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData notSched @Override public FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData fromFunctionStatusProto( - InstanceCommunication.FunctionStatus status, + org.apache.pulsar.functions.proto.FunctionStatus status, String assignedWorkerId) { FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData functionInstanceStatusData = new FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData(); - functionInstanceStatusData.setRunning(status.getRunning()); + functionInstanceStatusData.setRunning(status.isRunning()); functionInstanceStatusData.setError(status.getFailureException()); functionInstanceStatusData.setNumRestarts(status.getNumRestarts()); functionInstanceStatusData.setNumReceived(status.getNumReceived()); @@ -432,9 +430,9 @@ public FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData fromFunc functionInstanceStatusData.setNumUserExceptions(status.getNumUserExceptions()); List userExceptionInformationList = new LinkedList<>(); - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : status - .getLatestUserExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestUserExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestUserExceptionAt(i)); userExceptionInformationList.add(exceptionInformation); } functionInstanceStatusData.setLatestUserExceptions(userExceptionInformationList); @@ -443,19 +441,19 @@ public FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData fromFunc functionInstanceStatusData.setNumSystemExceptions(status.getNumSystemExceptions() + status.getNumSourceExceptions() + status.getNumSinkExceptions()); List systemExceptionInformationList = new LinkedList<>(); - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : status - .getLatestSystemExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestSystemExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestSystemExceptionAt(i)); systemExceptionInformationList.add(exceptionInformation); } - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : status - .getLatestSourceExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestSourceExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestSourceExceptionAt(i)); systemExceptionInformationList.add(exceptionInformation); } - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : status - .getLatestSinkExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestSinkExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestSinkExceptionAt(i)); systemExceptionInformationList.add(exceptionInformation); } functionInstanceStatusData.setLatestSystemExceptions(systemExceptionInformationList); @@ -482,10 +480,10 @@ public FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData notRunni } @Override - public FunctionStatus getStatus(String tenant, String namespace, String name, Collection + public FunctionStatus getStatus(String tenant, String namespace, String name, Collection assignments, URI uri) throws PulsarAdminException { FunctionStatus functionStatus = new FunctionStatus(); - for (Function.Assignment assignment : assignments) { + for (Assignment assignment : assignments) { boolean isOwner = worker().getWorkerConfig().getWorkerId().equals(assignment.getWorkerId()); FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData functionInstanceStatusData; if (isOwner) { @@ -562,7 +560,7 @@ public FunctionStatus emptyStatus(final int parallelism) { } private ExceptionInformation getExceptionInformation( - InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry) { + org.apache.pulsar.functions.proto.FunctionStatus.ExceptionInformation exceptionEntry) { ExceptionInformation exceptionInformation = new ExceptionInformation(); exceptionInformation.setTimestampMs(exceptionEntry.getMsSinceEpoch()); @@ -669,9 +667,11 @@ public void updateFunctionOnWorkerLeader(final String tenant, if (functionName == null) { throw new RestException(Response.Status.BAD_REQUEST, "Function name is not provided"); } - Function.FunctionMetaData functionMetaData; + FunctionMetaData functionMetaData; try { - functionMetaData = Function.FunctionMetaData.parseFrom(uploadedInputStream); + byte[] data = uploadedInputStream.readAllBytes(); + functionMetaData = new FunctionMetaData(); + functionMetaData.parseFrom(data); } catch (IOException e) { throw new RestException(Response.Status.BAD_REQUEST, "Corrupt Function MetaData"); } @@ -725,7 +725,7 @@ public List getBuiltinFunctions(AuthenticationParameters aut return this.worker().getFunctionsManager().getFunctionDefinitions(); } - private Function.FunctionDetails validateUpdateRequestParams(final String tenant, + private FunctionDetails validateUpdateRequestParams(final String tenant, final String namespace, final String componentName, final FunctionConfig functionConfig, diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplV2.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplV2.java index 059db75542d59..9a16508e4025c 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplV2.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplV2.java @@ -19,13 +19,11 @@ package org.apache.pulsar.functions.worker.rest.api; import com.google.gson.Gson; -import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.Collection; import java.util.List; import java.util.function.Supplier; -import java.util.stream.Collectors; import javax.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import org.apache.pulsar.broker.authentication.AuthenticationParameters; @@ -34,9 +32,9 @@ import org.apache.pulsar.common.io.ConnectorDefinition; import org.apache.pulsar.common.policies.data.FunctionStatus; import org.apache.pulsar.common.util.RestException; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; -import org.apache.pulsar.functions.utils.FunctionCommon; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionStatusList; import org.apache.pulsar.functions.utils.FunctionConfigUtils; import org.apache.pulsar.functions.worker.FunctionMetaDataManager; import org.apache.pulsar.functions.worker.PulsarWorkerService; @@ -60,45 +58,44 @@ public FunctionsImplV2(FunctionsImpl delegate) { @Override public Response getFunctionInfo(final String tenant, final String namespace, - final String functionName, AuthenticationParameters authParams) - throws IOException { + final String functionName, AuthenticationParameters authParams) { // run just for parameter checks delegate.getFunctionInfo(tenant, namespace, functionName, authParams); FunctionMetaDataManager functionMetaDataManager = delegate.worker().getFunctionMetaDataManager(); - Function.FunctionMetaData functionMetaData = functionMetaDataManager.getFunctionMetaData(tenant, namespace, + FunctionMetaData functionMetaData = functionMetaDataManager.getFunctionMetaData(tenant, namespace, functionName); - String functionDetailsJson = FunctionCommon.printJson(functionMetaData.getFunctionDetails()); + String functionDetailsJson = functionMetaData.getFunctionDetails().toJson(); return Response.status(Response.Status.OK).entity(functionDetailsJson).build(); } @Override public Response getFunctionInstanceStatus(final String tenant, final String namespace, final String functionName, final String instanceId, URI uri, - AuthenticationParameters authParams) throws IOException { + AuthenticationParameters authParams) { org.apache.pulsar.common.policies.data.FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData functionInstanceStatus = delegate.getFunctionInstanceStatus(tenant, namespace, functionName, instanceId, uri, authParams); - String jsonResponse = FunctionCommon.printJson(toProto(functionInstanceStatus, instanceId)); + String jsonResponse = toProto(functionInstanceStatus, instanceId).toJson(); return Response.status(Response.Status.OK).entity(jsonResponse).build(); } @Override public Response getFunctionStatusV2(String tenant, String namespace, String functionName, - URI requestUri, AuthenticationParameters authParams) throws - IOException { + URI requestUri, AuthenticationParameters authParams) { FunctionStatus functionStatus = delegate.getFunctionStatus(tenant, namespace, functionName, requestUri, authParams); - InstanceCommunication.FunctionStatusList.Builder functionStatusList = - InstanceCommunication.FunctionStatusList.newBuilder(); - functionStatus.instances.forEach(functionInstanceStatus -> functionStatusList.addFunctionStatusList( - toProto(functionInstanceStatus.getStatus(), - String.valueOf(functionInstanceStatus.getInstanceId())))); - String jsonResponse = FunctionCommon.printJson(functionStatusList); + FunctionStatusList functionStatusList = new FunctionStatusList(); + for (FunctionStatus.FunctionInstanceStatus instanceStatus : functionStatus.instances) { + toProto(functionStatusList.addFunctionStatus(), + instanceStatus.getStatus(), + String.valueOf(instanceStatus.getInstanceId())); + } + String jsonResponse = functionStatusList.toJson(); return Response.status(Response.Status.OK).entity(jsonResponse).build(); } @@ -107,13 +104,13 @@ public Response registerFunction(String tenant, String namespace, String functio uploadedInputStream, FormDataContentDisposition fileDetail, String functionPkgUrl, String functionDetailsJson, AuthenticationParameters authParams) { - Function.FunctionDetails.Builder functionDetailsBuilder = Function.FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); try { - FunctionCommon.mergeJson(functionDetailsJson, functionDetailsBuilder); - } catch (IOException e) { + functionDetails.parseFromJson(functionDetailsJson); + } catch (Exception e) { throw new RestException(Response.Status.BAD_REQUEST, e.getMessage()); } - FunctionConfig functionConfig = FunctionConfigUtils.convertFromDetails(functionDetailsBuilder.build()); + FunctionConfig functionConfig = FunctionConfigUtils.convertFromDetails(functionDetails); delegate.registerFunction(tenant, namespace, functionName, uploadedInputStream, fileDetail, functionPkgUrl, functionConfig, authParams); @@ -126,13 +123,13 @@ public Response updateFunction(String tenant, String namespace, String functionN String functionPkgUrl, String functionDetailsJson, AuthenticationParameters authParams) { - Function.FunctionDetails.Builder functionDetailsBuilder = Function.FunctionDetails.newBuilder(); + FunctionDetails functionDetails = new FunctionDetails(); try { - FunctionCommon.mergeJson(functionDetailsJson, functionDetailsBuilder); - } catch (IOException e) { + functionDetails.parseFromJson(functionDetailsJson); + } catch (Exception e) { throw new RestException(Response.Status.BAD_REQUEST, e.getMessage()); } - FunctionConfig functionConfig = FunctionConfigUtils.convertFromDetails(functionDetailsBuilder.build()); + FunctionConfig functionConfig = FunctionConfigUtils.convertFromDetails(functionDetails); delegate.updateFunction(tenant, namespace, functionName, uploadedInputStream, fileDetail, functionPkgUrl, functionConfig, authParams, null); @@ -221,43 +218,42 @@ public List getListOfConnectors() { return delegate.getListOfConnectors(); } - private InstanceCommunication.FunctionStatus toProto( + private org.apache.pulsar.functions.proto.FunctionStatus toProto( org.apache.pulsar.common.policies.data.FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData functionInstanceStatus, String instanceId) { - List latestSysExceptions = - functionInstanceStatus.getLatestSystemExceptions() - .stream() - .map(exceptionInformation -> InstanceCommunication.FunctionStatus.ExceptionInformation.newBuilder() - .setExceptionString(exceptionInformation.getExceptionString()) - .setMsSinceEpoch(exceptionInformation.getTimestampMs()) - .build()) - .collect(Collectors.toList()); - - List latestUserExceptions = - functionInstanceStatus.getLatestUserExceptions() - .stream() - .map(exceptionInformation -> InstanceCommunication.FunctionStatus.ExceptionInformation.newBuilder() - .setExceptionString(exceptionInformation.getExceptionString()) - .setMsSinceEpoch(exceptionInformation.getTimestampMs()) - .build()) - .collect(Collectors.toList()); - - - InstanceCommunication.FunctionStatus functionStatus = InstanceCommunication.FunctionStatus.newBuilder() - .setRunning(functionInstanceStatus.isRunning()) - .setFailureException(functionInstanceStatus.getError()) - .setNumRestarts(functionInstanceStatus.getNumRestarts()) - .setNumSuccessfullyProcessed(functionInstanceStatus.getNumSuccessfullyProcessed()) - .setNumUserExceptions(functionInstanceStatus.getNumUserExceptions()) - .addAllLatestUserExceptions(latestUserExceptions) - .setNumSystemExceptions(functionInstanceStatus.getNumSystemExceptions()) - .addAllLatestSystemExceptions(latestSysExceptions) - .setAverageLatency(functionInstanceStatus.getAverageLatency()) - .setLastInvocationTime(functionInstanceStatus.getLastInvocationTime()) - .setInstanceId(instanceId) - .setWorkerId(delegate.worker().getWorkerConfig().getWorkerId()) - .build(); + org.apache.pulsar.functions.proto.FunctionStatus status = + new org.apache.pulsar.functions.proto.FunctionStatus(); + toProto(status, functionInstanceStatus, instanceId); + return status; + } - return functionStatus; + private void toProto( + org.apache.pulsar.functions.proto.FunctionStatus status, + org.apache.pulsar.common.policies.data.FunctionStatus.FunctionInstanceStatus.FunctionInstanceStatusData + functionInstanceStatus, String instanceId) { + status.setRunning(functionInstanceStatus.isRunning()) + .setFailureException(functionInstanceStatus.getError()) + .setNumRestarts(functionInstanceStatus.getNumRestarts()) + .setNumSuccessfullyProcessed(functionInstanceStatus.getNumSuccessfullyProcessed()) + .setNumUserExceptions(functionInstanceStatus.getNumUserExceptions()) + .setNumSystemExceptions(functionInstanceStatus.getNumSystemExceptions()) + .setAverageLatency(functionInstanceStatus.getAverageLatency()) + .setLastInvocationTime(functionInstanceStatus.getLastInvocationTime()) + .setInstanceId(instanceId) + .setWorkerId(delegate.worker().getWorkerConfig().getWorkerId()); + + for (org.apache.pulsar.common.policies.data.ExceptionInformation ex : + functionInstanceStatus.getLatestUserExceptions()) { + status.addLatestUserException() + .setExceptionString(ex.getExceptionString()) + .setMsSinceEpoch(ex.getTimestampMs()); + } + for (org.apache.pulsar.common.policies.data.ExceptionInformation ex : + functionInstanceStatus.getLatestSystemExceptions()) { + status.addLatestSystemException() + .setExceptionString(ex.getExceptionString()) + .setMsSinceEpoch(ex.getTimestampMs()); + } } + } diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java index 16c8d5d4110e4..daad2a1a89783 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SinksImpl.java @@ -23,7 +23,6 @@ import static org.apache.pulsar.functions.auth.FunctionAuthUtils.getFunctionAuthData; import static org.apache.pulsar.functions.utils.FunctionCommon.isFunctionCodeBuiltin; import static org.apache.pulsar.functions.worker.rest.RestUtils.throwUnavailableException; -import com.google.protobuf.ByteString; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -50,8 +49,10 @@ import org.apache.pulsar.common.util.RestException; import org.apache.pulsar.functions.auth.FunctionAuthData; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.PackageLocationMetaData; import org.apache.pulsar.functions.utils.ComponentTypeUtils; import org.apache.pulsar.functions.utils.FunctionFilePackage; import org.apache.pulsar.functions.utils.FunctionMetaDataUtils; @@ -69,7 +70,7 @@ public class SinksImpl extends ComponentImpl implements Sinks { public SinksImpl(Supplier workerServiceSupplier) { - super(workerServiceSupplier, Function.FunctionDetails.ComponentType.SINK); + super(workerServiceSupplier, FunctionDetails.ComponentType.SINK); } @Override @@ -136,7 +137,7 @@ public void registerSink(final String tenant, String.format("%s %s already exists", ComponentTypeUtils.toString(componentType), sinkName)); } - Function.FunctionDetails functionDetails; + FunctionDetails functionDetails; File componentPackageFile = null; try { @@ -175,14 +176,14 @@ public void registerSink(final String tenant, } // function state - Function.FunctionMetaData.Builder functionMetaDataBuilder = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(functionDetails) - .setCreateTime(System.currentTimeMillis()) - .setVersion(0); + FunctionMetaData functionMetaDataObj = new FunctionMetaData(); + functionMetaDataObj.setFunctionDetails().copyFrom(functionDetails); + functionMetaDataObj.setCreateTime(System.currentTimeMillis()); + functionMetaDataObj.setVersion(0); // cache auth if need if (worker().getWorkerConfig().isAuthenticationEnabled()) { - Function.FunctionDetails finalFunctionDetails = functionDetails; + FunctionDetails finalFunctionDetails = functionDetails; worker().getFunctionRuntimeManager() .getRuntimeFactory() .getAuthProvider().ifPresent(functionAuthProvider -> { @@ -193,10 +194,9 @@ public void registerSink(final String tenant, .cacheAuthData(finalFunctionDetails, authParams.getClientAuthenticationDataSource()); - functionAuthData.ifPresent(authData -> functionMetaDataBuilder.setFunctionAuthSpec( - Function.FunctionAuthenticationSpec.newBuilder() - .setData(ByteString.copyFrom(authData.getData())) - .build())); + functionAuthData.ifPresent(authData -> + functionMetaDataObj.setFunctionAuthSpec() + .setData(authData.getData())); } catch (Exception e) { log.error("Error caching authentication data for {} {}/{}/{}", ComponentTypeUtils.toString(componentType), tenant, namespace, sinkName, e); @@ -210,9 +210,9 @@ public void registerSink(final String tenant, }); } - Function.PackageLocationMetaData.Builder packageLocationMetaDataBuilder; + PackageLocationMetaData packageLocationMetaData; try { - packageLocationMetaDataBuilder = getFunctionPackageLocation(functionMetaDataBuilder.build(), + packageLocationMetaData = getFunctionPackageLocation(functionMetaDataObj, sinkPkgUrl, fileDetail, componentPackageFile); } catch (Exception e) { log.error("Failed process {} {}/{}/{} package: ", ComponentTypeUtils.toString(componentType), tenant, @@ -220,14 +220,14 @@ public void registerSink(final String tenant, throw new RestException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } - functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder); + functionMetaDataObj.setPackageLocation().copyFrom(packageLocationMetaData); String transformFunction = sinkConfig.getTransformFunction(); if (isNotBlank(transformFunction)) { - setTransformFunctionPackageLocation(functionMetaDataBuilder, functionDetails, transformFunction); + setTransformFunctionPackageLocation(functionMetaDataObj, functionDetails, transformFunction); } - updateRequest(null, functionMetaDataBuilder.build()); + updateRequest(null, functionMetaDataObj); } finally { if (componentPackageFile != null && componentPackageFile.exists()) { if (sinkPkgUrl == null || !sinkPkgUrl.startsWith(Utils.FILE)) { @@ -274,7 +274,7 @@ public void updateSink(final String tenant, String.format("%s %s doesn't exist", ComponentTypeUtils.toString(componentType), sinkName)); } - Function.FunctionMetaData existingComponent = + FunctionMetaData existingComponent = functionMetaDataManager.getFunctionMetaData(tenant, namespace, sinkName); if (!InstanceUtils.calculateSubjectType(existingComponent.getFunctionDetails()).equals(componentType)) { @@ -303,7 +303,7 @@ public void updateSink(final String tenant, throw new RestException(Response.Status.BAD_REQUEST, "Update contains no change"); } - Function.FunctionDetails functionDetails; + FunctionDetails functionDetails; File componentPackageFile = null; try { @@ -338,13 +338,13 @@ public void updateSink(final String tenant, } // merge from existing metadata - Function.FunctionMetaData.Builder functionMetaDataBuilder = - Function.FunctionMetaData.newBuilder().mergeFrom(existingComponent) - .setFunctionDetails(functionDetails); + FunctionMetaData functionMetaDataObj = new FunctionMetaData(); + functionMetaDataObj.copyFrom(existingComponent); + functionMetaDataObj.setFunctionDetails().copyFrom(functionDetails); // update auth data if need if (worker().getWorkerConfig().isAuthenticationEnabled()) { - Function.FunctionDetails finalFunctionDetails = functionDetails; + FunctionDetails finalFunctionDetails = functionDetails; worker().getFunctionRuntimeManager() .getRuntimeFactory() .getAuthProvider().ifPresent(functionAuthProvider -> { @@ -352,9 +352,9 @@ public void updateSink(final String tenant, && updateOptions.isUpdateAuthData()) { // get existing auth data if it exists Optional existingFunctionAuthData = Optional.empty(); - if (functionMetaDataBuilder.hasFunctionAuthSpec()) { + if (functionMetaDataObj.hasFunctionAuthSpec()) { existingFunctionAuthData = Optional.ofNullable(getFunctionAuthData( - Optional.ofNullable(functionMetaDataBuilder.getFunctionAuthSpec()))); + Optional.ofNullable(functionMetaDataObj.getFunctionAuthSpec()))); } try { @@ -363,12 +363,10 @@ public void updateSink(final String tenant, authParams.getClientAuthenticationDataSource()); if (newFunctionAuthData.isPresent()) { - functionMetaDataBuilder.setFunctionAuthSpec( - Function.FunctionAuthenticationSpec.newBuilder() - .setData(ByteString.copyFrom(newFunctionAuthData.get().getData())) - .build()); + functionMetaDataObj.setFunctionAuthSpec() + .setData(newFunctionAuthData.get().getData()); } else { - functionMetaDataBuilder.clearFunctionAuthSpec(); + functionMetaDataObj.clearFunctionAuthSpec(); } } catch (Exception e) { log.error("Error updating authentication data for {} {}/{}/{}", @@ -381,12 +379,12 @@ public void updateSink(final String tenant, }); } - Function.PackageLocationMetaData.Builder packageLocationMetaDataBuilder; + PackageLocationMetaData packageLocationMetaData; if (isNotBlank(sinkPkgUrl) || uploadedInputStream != null) { - Function.FunctionMetaData metaData = functionMetaDataBuilder.build(); - metaData = FunctionMetaDataUtils.incrMetadataVersion(metaData, metaData); + FunctionMetaData metaData = FunctionMetaDataUtils.incrMetadataVersion(functionMetaDataObj, + functionMetaDataObj); try { - packageLocationMetaDataBuilder = getFunctionPackageLocation(metaData, + packageLocationMetaData = getFunctionPackageLocation(metaData, sinkPkgUrl, fileDetail, componentPackageFile); } catch (Exception e) { log.error("Failed process {} {}/{}/{} package: ", ComponentTypeUtils.toString(componentType), @@ -394,19 +392,19 @@ public void updateSink(final String tenant, throw new RestException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } } else { - packageLocationMetaDataBuilder = - Function.PackageLocationMetaData.newBuilder().mergeFrom(existingComponent.getPackageLocation()); + packageLocationMetaData = new PackageLocationMetaData(); + packageLocationMetaData.copyFrom(existingComponent.getPackageLocation()); } - functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder); + functionMetaDataObj.setPackageLocation().copyFrom(packageLocationMetaData); String transformFunction = mergedConfig.getTransformFunction(); if (isNotBlank(transformFunction) && !transformFunction.equals(existingSinkConfig.getTransformFunction())) { - setTransformFunctionPackageLocation(functionMetaDataBuilder, functionDetails, transformFunction); + setTransformFunctionPackageLocation(functionMetaDataObj, functionDetails, transformFunction); } - updateRequest(existingComponent, functionMetaDataBuilder.build()); + updateRequest(existingComponent, functionMetaDataObj); } finally { if (componentPackageFile != null && componentPackageFile.exists()) { if ((sinkPkgUrl != null && !sinkPkgUrl.startsWith(Utils.FILE)) || uploadedInputStream != null) { @@ -416,21 +414,21 @@ public void updateSink(final String tenant, } } - private void setTransformFunctionPackageLocation(Function.FunctionMetaData.Builder functionMetaDataBuilder, - Function.FunctionDetails functionDetails, String transformFunction) { + private void setTransformFunctionPackageLocation(FunctionMetaData functionMetaDataObj, + FunctionDetails functionDetails, String transformFunction) { File functionPackageFile = null; try { String builtin = functionDetails.getBuiltin(); if (isBlank(builtin)) { functionPackageFile = - getPackageFile(Function.FunctionDetails.ComponentType.FUNCTION, transformFunction); + getPackageFile(FunctionDetails.ComponentType.FUNCTION, transformFunction); } - Function.PackageLocationMetaData.Builder functionPackageLocation = - getFunctionPackageLocation(functionMetaDataBuilder.build(), + PackageLocationMetaData functionPackageLocation = + getFunctionPackageLocation(functionMetaDataObj, transformFunction, null, functionPackageFile, functionDetails.getName() + "__sink-function", - Function.FunctionDetails.ComponentType.FUNCTION, builtin); - functionMetaDataBuilder.setTransformFunctionPackageLocation(functionPackageLocation); + FunctionDetails.ComponentType.FUNCTION, builtin); + functionMetaDataObj.setTransformFunctionPackageLocation().copyFrom(functionPackageLocation); } catch (Exception e) { log.error("Failed process {} {}/{}/{} extra function package: ", ComponentTypeUtils.toString(componentType), functionDetails.getTenant(), @@ -458,11 +456,11 @@ public SinkStatus.SinkInstanceStatus.SinkInstanceStatusData notScheduledInstance @Override public SinkStatus.SinkInstanceStatus.SinkInstanceStatusData fromFunctionStatusProto( - InstanceCommunication.FunctionStatus status, + org.apache.pulsar.functions.proto.FunctionStatus status, String assignedWorkerId) { SinkStatus.SinkInstanceStatus.SinkInstanceStatusData sinkInstanceStatusData = new SinkStatus.SinkInstanceStatus.SinkInstanceStatusData(); - sinkInstanceStatusData.setRunning(status.getRunning()); + sinkInstanceStatusData.setRunning(status.isRunning()); sinkInstanceStatusData.setError(status.getFailureException()); sinkInstanceStatusData.setNumRestarts(status.getNumRestarts()); sinkInstanceStatusData.setNumReadFromPulsar(status.getNumReceived()); @@ -471,30 +469,30 @@ public SinkStatus.SinkInstanceStatus.SinkInstanceStatusData fromFunctionStatusPr sinkInstanceStatusData.setNumSystemExceptions(status.getNumSystemExceptions() + status.getNumUserExceptions() + status.getNumSourceExceptions()); List systemExceptionInformationList = new LinkedList<>(); - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestUserExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestUserExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestUserExceptionAt(i)); systemExceptionInformationList.add(exceptionInformation); } - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestSystemExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestSystemExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestSystemExceptionAt(i)); systemExceptionInformationList.add(exceptionInformation); } - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestSourceExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestSourceExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestSourceExceptionAt(i)); systemExceptionInformationList.add(exceptionInformation); } sinkInstanceStatusData.setLatestSystemExceptions(systemExceptionInformationList); sinkInstanceStatusData.setNumSinkExceptions(status.getNumSinkExceptions()); List sinkExceptionInformationList = new LinkedList<>(); - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestSinkExceptionsList()) { - ExceptionInformation exceptionInformation = getExceptionInformation(exceptionEntry); + for (int i = 0; i < status.getLatestSinkExceptionsCount(); i++) { + ExceptionInformation exceptionInformation = + getExceptionInformation(status.getLatestSinkExceptionAt(i)); sinkExceptionInformationList.add(exceptionInformation); } sinkInstanceStatusData.setLatestSinkExceptions(sinkExceptionInformationList); @@ -523,10 +521,10 @@ public SinkStatus.SinkInstanceStatus.SinkInstanceStatusData notRunning(String as public SinkStatus getStatus(final String tenant, final String namespace, final String name, - final Collection assignments, + final Collection assignments, final URI uri) throws PulsarAdminException { SinkStatus sinkStatus = new SinkStatus(); - for (Function.Assignment assignment : assignments) { + for (Assignment assignment : assignments) { boolean isOwner = worker().getWorkerConfig().getWorkerId().equals(assignment.getWorkerId()); SinkStatus.SinkInstanceStatus.SinkInstanceStatusData sinkInstanceStatusData; if (isOwner) { @@ -601,8 +599,8 @@ public SinkStatus emptyStatus(final int parallelism) { } } - private ExceptionInformation getExceptionInformation(InstanceCommunication.FunctionStatus.ExceptionInformation - exceptionEntry) { + private ExceptionInformation getExceptionInformation( + org.apache.pulsar.functions.proto.FunctionStatus.ExceptionInformation exceptionEntry) { ExceptionInformation exceptionInformation = new ExceptionInformation(); exceptionInformation.setTimestampMs(exceptionEntry.getMsSinceEpoch()); @@ -666,7 +664,7 @@ public SinkConfig getSinkInfo(final String tenant, final String componentName, final AuthenticationParameters authParams) { componentStatusRequestValidate(tenant, namespace, componentName, authParams); - Function.FunctionMetaData functionMetaData = + FunctionMetaData functionMetaData = worker().getFunctionMetaDataManager().getFunctionMetaData(tenant, namespace, componentName); return SinkConfigUtils.convertFromDetails(functionMetaData.getFunctionDetails()); } @@ -695,7 +693,7 @@ public List getSinkConfigDefinition(String name) { return retval; } - private Function.FunctionDetails validateUpdateRequestParams(final String tenant, + private FunctionDetails validateUpdateRequestParams(final String tenant, final String namespace, final String sinkName, final SinkConfig sinkConfig, @@ -746,7 +744,7 @@ private Function.FunctionDetails validateUpdateRequestParams(final String tenant transformFunctionPackage = getBuiltinFunctionPackage(sinkConfig.getTransformFunction()); if (transformFunctionPackage == null) { - File functionPackageFile = getPackageFile(Function.FunctionDetails.ComponentType.FUNCTION, + File functionPackageFile = getPackageFile(FunctionDetails.ComponentType.FUNCTION, sinkConfig.getTransformFunction()); transformFunctionPackage = new FunctionFilePackage(functionPackageFile, workerConfig.getNarExtractionDirectory(), diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java index 1c47acc3f465a..c9c07b51c2aad 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/SourcesImpl.java @@ -23,7 +23,6 @@ import static org.apache.pulsar.functions.auth.FunctionAuthUtils.getFunctionAuthData; import static org.apache.pulsar.functions.utils.FunctionCommon.isFunctionCodeBuiltin; import static org.apache.pulsar.functions.worker.rest.RestUtils.throwUnavailableException; -import com.google.protobuf.ByteString; import java.io.File; import java.io.InputStream; import java.net.URI; @@ -49,8 +48,10 @@ import org.apache.pulsar.common.util.RestException; import org.apache.pulsar.functions.auth.FunctionAuthData; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.PackageLocationMetaData; import org.apache.pulsar.functions.utils.ComponentTypeUtils; import org.apache.pulsar.functions.utils.FunctionFilePackage; import org.apache.pulsar.functions.utils.FunctionMetaDataUtils; @@ -68,7 +69,7 @@ public class SourcesImpl extends ComponentImpl implements Sources { public SourcesImpl(Supplier workerServiceSupplier) { - super(workerServiceSupplier, Function.FunctionDetails.ComponentType.SOURCE); + super(workerServiceSupplier, FunctionDetails.ComponentType.SOURCE); } @Override @@ -135,7 +136,7 @@ public void registerSource(final String tenant, String.format("%s %s already exists", ComponentTypeUtils.toString(componentType), sourceName)); } - Function.FunctionDetails functionDetails = null; + FunctionDetails functionDetails = null; boolean isPkgUrlProvided = isNotBlank(sourcePkgUrl); File componentPackageFile = null; try { @@ -175,14 +176,14 @@ public void registerSource(final String tenant, } // function state - Function.FunctionMetaData.Builder functionMetaDataBuilder = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(functionDetails) - .setCreateTime(System.currentTimeMillis()) - .setVersion(0); + FunctionMetaData functionMetaDataObj = new FunctionMetaData(); + functionMetaDataObj.setFunctionDetails().copyFrom(functionDetails); + functionMetaDataObj.setCreateTime(System.currentTimeMillis()); + functionMetaDataObj.setVersion(0); // cache auth if need if (worker().getWorkerConfig().isAuthenticationEnabled()) { - Function.FunctionDetails finalFunctionDetails = functionDetails; + FunctionDetails finalFunctionDetails = functionDetails; worker().getFunctionRuntimeManager() .getRuntimeFactory() .getAuthProvider().ifPresent(functionAuthProvider -> { @@ -193,10 +194,9 @@ public void registerSource(final String tenant, .cacheAuthData(finalFunctionDetails, authParams.getClientAuthenticationDataSource()); - functionAuthData.ifPresent(authData -> functionMetaDataBuilder.setFunctionAuthSpec( - Function.FunctionAuthenticationSpec.newBuilder() - .setData(ByteString.copyFrom(authData.getData())) - .build())); + functionAuthData.ifPresent(authData -> + functionMetaDataObj.setFunctionAuthSpec() + .setData(authData.getData())); } catch (Exception e) { log.error("Error caching authentication data for {} {}/{}/{}", ComponentTypeUtils.toString(componentType), tenant, namespace, sourceName, e); @@ -210,9 +210,9 @@ public void registerSource(final String tenant, }); } - Function.PackageLocationMetaData.Builder packageLocationMetaDataBuilder; + PackageLocationMetaData packageLocationMetaData; try { - packageLocationMetaDataBuilder = getFunctionPackageLocation(functionMetaDataBuilder.build(), + packageLocationMetaData = getFunctionPackageLocation(functionMetaDataObj, sourcePkgUrl, fileDetail, componentPackageFile); } catch (Exception e) { log.error("Failed process {} {}/{}/{} package: ", ComponentTypeUtils.toString(componentType), tenant, @@ -220,8 +220,8 @@ public void registerSource(final String tenant, throw new RestException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } - functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder); - updateRequest(null, functionMetaDataBuilder.build()); + functionMetaDataObj.setPackageLocation().copyFrom(packageLocationMetaData); + updateRequest(null, functionMetaDataObj); } finally { if (componentPackageFile != null && componentPackageFile.exists()) { if (sourcePkgUrl == null || !sourcePkgUrl.startsWith(Utils.FILE)) { @@ -268,7 +268,7 @@ public void updateSource(final String tenant, String.format("%s %s doesn't exist", ComponentTypeUtils.toString(componentType), sourceName)); } - Function.FunctionMetaData existingComponent = + FunctionMetaData existingComponent = functionMetaDataManager.getFunctionMetaData(tenant, namespace, sourceName); if (!InstanceUtils.calculateSubjectType(existingComponent.getFunctionDetails()).equals(componentType)) { @@ -297,7 +297,7 @@ public void updateSource(final String tenant, throw new RestException(Response.Status.BAD_REQUEST, "Update contains no change"); } - Function.FunctionDetails functionDetails; + FunctionDetails functionDetails; File componentPackageFile = null; try { @@ -332,13 +332,13 @@ public void updateSource(final String tenant, } // merge from existing metadata - Function.FunctionMetaData.Builder functionMetaDataBuilder = - Function.FunctionMetaData.newBuilder().mergeFrom(existingComponent) - .setFunctionDetails(functionDetails); + FunctionMetaData functionMetaDataObj = new FunctionMetaData(); + functionMetaDataObj.copyFrom(existingComponent); + functionMetaDataObj.setFunctionDetails().copyFrom(functionDetails); // update auth data if need if (worker().getWorkerConfig().isAuthenticationEnabled()) { - Function.FunctionDetails finalFunctionDetails = functionDetails; + FunctionDetails finalFunctionDetails = functionDetails; worker().getFunctionRuntimeManager() .getRuntimeFactory() .getAuthProvider().ifPresent(functionAuthProvider -> { @@ -346,9 +346,9 @@ public void updateSource(final String tenant, && updateOptions.isUpdateAuthData()) { // get existing auth data if it exists Optional existingFunctionAuthData = Optional.empty(); - if (functionMetaDataBuilder.hasFunctionAuthSpec()) { + if (functionMetaDataObj.hasFunctionAuthSpec()) { existingFunctionAuthData = Optional.ofNullable(getFunctionAuthData( - Optional.ofNullable(functionMetaDataBuilder.getFunctionAuthSpec()))); + Optional.ofNullable(functionMetaDataObj.getFunctionAuthSpec()))); } try { @@ -357,12 +357,10 @@ public void updateSource(final String tenant, authParams.getClientAuthenticationDataSource()); if (newFunctionAuthData.isPresent()) { - functionMetaDataBuilder.setFunctionAuthSpec( - Function.FunctionAuthenticationSpec.newBuilder() - .setData(ByteString.copyFrom(newFunctionAuthData.get().getData())) - .build()); + functionMetaDataObj.setFunctionAuthSpec() + .setData(newFunctionAuthData.get().getData()); } else { - functionMetaDataBuilder.clearFunctionAuthSpec(); + functionMetaDataObj.clearFunctionAuthSpec(); } } catch (Exception e) { log.error("Error updating authentication data for {} {}/{}/{}", @@ -375,12 +373,12 @@ public void updateSource(final String tenant, }); } - Function.PackageLocationMetaData.Builder packageLocationMetaDataBuilder; + PackageLocationMetaData packageLocationMetaData; if (isNotBlank(sourcePkgUrl) || uploadedInputStream != null) { - Function.FunctionMetaData metaData = functionMetaDataBuilder.build(); - metaData = FunctionMetaDataUtils.incrMetadataVersion(metaData, metaData); + FunctionMetaData metaData = FunctionMetaDataUtils.incrMetadataVersion(functionMetaDataObj, + functionMetaDataObj); try { - packageLocationMetaDataBuilder = getFunctionPackageLocation(metaData, + packageLocationMetaData = getFunctionPackageLocation(metaData, sourcePkgUrl, fileDetail, componentPackageFile); } catch (Exception e) { log.error("Failed process {} {}/{}/{} package: ", ComponentTypeUtils.toString(componentType), @@ -388,13 +386,13 @@ public void updateSource(final String tenant, throw new RestException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } } else { - packageLocationMetaDataBuilder = - Function.PackageLocationMetaData.newBuilder().mergeFrom(existingComponent.getPackageLocation()); + packageLocationMetaData = new PackageLocationMetaData(); + packageLocationMetaData.copyFrom(existingComponent.getPackageLocation()); } - functionMetaDataBuilder.setPackageLocation(packageLocationMetaDataBuilder); + functionMetaDataObj.setPackageLocation().copyFrom(packageLocationMetaData); - updateRequest(existingComponent, functionMetaDataBuilder.build()); + updateRequest(existingComponent, functionMetaDataObj); } finally { if (componentPackageFile != null && componentPackageFile.exists()) { if ((sourcePkgUrl != null && !sourcePkgUrl.startsWith(Utils.FILE)) || uploadedInputStream != null) { @@ -418,21 +416,21 @@ public SourceStatus.SourceInstanceStatus.SourceInstanceStatusData notScheduledIn @Override public SourceStatus.SourceInstanceStatus.SourceInstanceStatusData fromFunctionStatusProto( - InstanceCommunication.FunctionStatus status, + org.apache.pulsar.functions.proto.FunctionStatus status, String assignedWorkerId) { SourceStatus.SourceInstanceStatus.SourceInstanceStatusData sourceInstanceStatusData = new SourceStatus.SourceInstanceStatus.SourceInstanceStatusData(); - sourceInstanceStatusData.setRunning(status.getRunning()); + sourceInstanceStatusData.setRunning(status.isRunning()); sourceInstanceStatusData.setError(status.getFailureException()); sourceInstanceStatusData.setNumRestarts(status.getNumRestarts()); sourceInstanceStatusData.setNumReceivedFromSource(status.getNumReceived()); sourceInstanceStatusData.setNumSourceExceptions(status.getNumSourceExceptions()); List sourceExceptionInformationList = new LinkedList<>(); - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestSourceExceptionsList()) { - ExceptionInformation exceptionInformation = - new ExceptionInformation(); + for (int i = 0; i < status.getLatestSourceExceptionsCount(); i++) { + org.apache.pulsar.functions.proto.FunctionStatus.ExceptionInformation exceptionEntry = + status.getLatestSourceExceptionAt(i); + ExceptionInformation exceptionInformation = new ExceptionInformation(); exceptionInformation.setTimestampMs(exceptionEntry.getMsSinceEpoch()); exceptionInformation.setExceptionString(exceptionEntry.getExceptionString()); sourceExceptionInformationList.add(exceptionInformation); @@ -443,28 +441,28 @@ public SourceStatus.SourceInstanceStatus.SourceInstanceStatusData fromFunctionSt sourceInstanceStatusData.setNumSystemExceptions(status.getNumSystemExceptions() + status.getNumUserExceptions() + status.getNumSinkExceptions()); List systemExceptionInformationList = new LinkedList<>(); - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestUserExceptionsList()) { - ExceptionInformation exceptionInformation = - new ExceptionInformation(); + for (int i = 0; i < status.getLatestUserExceptionsCount(); i++) { + org.apache.pulsar.functions.proto.FunctionStatus.ExceptionInformation exceptionEntry = + status.getLatestUserExceptionAt(i); + ExceptionInformation exceptionInformation = new ExceptionInformation(); exceptionInformation.setTimestampMs(exceptionEntry.getMsSinceEpoch()); exceptionInformation.setExceptionString(exceptionEntry.getExceptionString()); systemExceptionInformationList.add(exceptionInformation); } - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestSystemExceptionsList()) { - ExceptionInformation exceptionInformation = - new ExceptionInformation(); + for (int i = 0; i < status.getLatestSystemExceptionsCount(); i++) { + org.apache.pulsar.functions.proto.FunctionStatus.ExceptionInformation exceptionEntry = + status.getLatestSystemExceptionAt(i); + ExceptionInformation exceptionInformation = new ExceptionInformation(); exceptionInformation.setTimestampMs(exceptionEntry.getMsSinceEpoch()); exceptionInformation.setExceptionString(exceptionEntry.getExceptionString()); systemExceptionInformationList.add(exceptionInformation); } - for (InstanceCommunication.FunctionStatus.ExceptionInformation exceptionEntry : - status.getLatestSinkExceptionsList()) { - ExceptionInformation exceptionInformation = - new ExceptionInformation(); + for (int i = 0; i < status.getLatestSinkExceptionsCount(); i++) { + org.apache.pulsar.functions.proto.FunctionStatus.ExceptionInformation exceptionEntry = + status.getLatestSinkExceptionAt(i); + ExceptionInformation exceptionInformation = new ExceptionInformation(); exceptionInformation.setTimestampMs(exceptionEntry.getMsSinceEpoch()); exceptionInformation.setExceptionString(exceptionEntry.getExceptionString()); systemExceptionInformationList.add(exceptionInformation); @@ -496,10 +494,10 @@ public SourceStatus.SourceInstanceStatus.SourceInstanceStatusData fromFunctionSt public SourceStatus getStatus(final String tenant, final String namespace, final String name, - final Collection assignments, + final Collection assignments, final URI uri) throws PulsarAdminException { SourceStatus sourceStatus = new SourceStatus(); - for (Function.Assignment assignment : assignments) { + for (Assignment assignment : assignments) { boolean isOwner = worker().getWorkerConfig().getWorkerId().equals(assignment.getWorkerId()); SourceStatus.SourceInstanceStatus.SourceInstanceStatusData sourceInstanceStatusData; if (isOwner) { @@ -626,7 +624,7 @@ public SourceConfig getSourceInfo(final String tenant, final String componentName, final AuthenticationParameters authParams) { componentStatusRequestValidate(tenant, namespace, componentName, authParams); - Function.FunctionMetaData functionMetaData = + FunctionMetaData functionMetaData = worker().getFunctionMetaDataManager().getFunctionMetaData(tenant, namespace, componentName); return SourceConfigUtils.convertFromDetails(functionMetaData.getFunctionDetails()); } @@ -655,7 +653,7 @@ public List getSourceConfigDefinition(String name) { return retval; } - private Function.FunctionDetails validateUpdateRequestParams(final String tenant, + private FunctionDetails validateUpdateRequestParams(final String tenant, final String namespace, final String sourceName, final SourceConfig sourceConfig, diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/WorkerImpl.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/WorkerImpl.java index 0b77be4ab0212..1e3b87db91ab7 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/WorkerImpl.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/WorkerImpl.java @@ -43,7 +43,8 @@ import org.apache.pulsar.common.policies.data.FunctionInstanceStatsImpl; import org.apache.pulsar.common.policies.data.WorkerFunctionInstanceStats; import org.apache.pulsar.common.util.RestException; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; import org.apache.pulsar.functions.utils.FunctionCommon; import org.apache.pulsar.functions.worker.FunctionRuntimeInfo; import org.apache.pulsar.functions.worker.FunctionRuntimeManager; @@ -119,9 +120,9 @@ public Map> getAssignments(AuthenticationParameters a throwIfNotSuperUser(authParams, "get cluster assignments"); FunctionRuntimeManager functionRuntimeManager = worker().getFunctionRuntimeManager(); - Map> assignments = functionRuntimeManager.getCurrentAssignments(); + Map> assignments = functionRuntimeManager.getCurrentAssignments(); Map> ret = new HashMap<>(); - for (Map.Entry> entry : assignments.entrySet()) { + for (Map.Entry> entry : assignments.entrySet()) { ret.put(entry.getKey(), entry.getValue().keySet()); } return ret; @@ -173,7 +174,7 @@ public List getFunctionsMetrics(AuthenticationParam FunctionRuntimeInfo functionRuntimeInfo = entry.getValue(); if (worker().getFunctionRuntimeManager().getRuntimeFactory().externallyManaged()) { - Function.FunctionDetails functionDetails = + FunctionDetails functionDetails = functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().getFunctionDetails(); int parallelism = functionDetails.getParallelism(); for (int i = 0; i < parallelism; ++i) { diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionsApiV2Resource.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionsApiV2Resource.java index e8a6910e07030..80928f47acb40 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionsApiV2Resource.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionsApiV2Resource.java @@ -37,8 +37,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.pulsar.client.api.Message; import org.apache.pulsar.common.io.ConnectorDefinition; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionStatus; import org.apache.pulsar.functions.worker.WorkerService; import org.apache.pulsar.functions.worker.rest.FunctionApiResource; import org.apache.pulsar.functions.worker.service.api.FunctionsV2; @@ -116,7 +116,7 @@ public Response deregisterFunction(final @PathParam("tenant") String tenant, @GET @ApiOperation( value = "Fetches information about a Pulsar Function currently running in cluster mode", - response = Function.FunctionMetaData.class + response = FunctionMetaData.class ) @ApiResponses(value = { @ApiResponse(code = 403, message = "The requester doesn't have admin permissions"), @@ -135,7 +135,7 @@ public Response getFunctionInfo(final @PathParam("tenant") String tenant, @GET @ApiOperation( value = "Displays the status of a Pulsar Function instance", - response = InstanceCommunication.FunctionStatus.class + response = FunctionStatus.class ) @ApiResponses(value = { @ApiResponse(code = 307, message = "Current broker doesn't serve the namespace of this function"), @@ -156,7 +156,7 @@ public Response getFunctionInstanceStatus(final @PathParam("tenant") String tena @GET @ApiOperation( value = "Displays the status of a Pulsar Function running in cluster mode", - response = InstanceCommunication.FunctionStatus.class + response = FunctionStatus.class ) @ApiResponses(value = { @ApiResponse(code = 307, message = "Current broker doesn't serve the namespace of this function"), diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/IScheduler.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/IScheduler.java index 5454bdf48d505..b18bda0c45eb7 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/IScheduler.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/IScheduler.java @@ -21,9 +21,8 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.Assignment; -import org.apache.pulsar.functions.proto.Function.Instance; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.Instance; public interface IScheduler { @@ -51,7 +50,7 @@ List schedule(List unassignedFunctionInstances, List rebalance(List currentAssignments, Set workers) { + default List rebalance(List currentAssignments, Set workers) { return Collections.emptyList(); } } diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinScheduler.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinScheduler.java index 09eb3f5c19571..1d77e1da0528f 100644 --- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinScheduler.java +++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinScheduler.java @@ -26,8 +26,8 @@ import java.util.Map; import java.util.Set; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.functions.proto.Function.Assignment; -import org.apache.pulsar.functions.proto.Function.Instance; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.Instance; @Slf4j public class RoundRobinScheduler implements IScheduler { @@ -51,8 +51,9 @@ public List schedule(List unassignedFunctionInstances, for (Instance unassignedFunctionInstance : unassignedFunctionInstances) { String workerId = findNextWorker(workerIdToAssignment); - Assignment newAssignment = Assignment.newBuilder().setInstance(unassignedFunctionInstance) - .setWorkerId(workerId).build(); + Assignment newAssignment = new Assignment(); + newAssignment.setInstance().copyFrom(unassignedFunctionInstance); + newAssignment.setWorkerId(workerId); workerIdToAssignment.get(workerId).add(newAssignment.getInstance()); newAssignments.add(newAssignment); } @@ -109,10 +110,9 @@ public List rebalance(List currentAssignments, Set dest = workerToAssignmentMap.get(leastAssignmentsWorkerId); Instance instance = src.poll(); - Assignment newAssignment = Assignment.newBuilder() - .setInstance(instance) - .setWorkerId(leastAssignmentsWorkerId) - .build(); + Assignment newAssignment = new Assignment(); + newAssignment.setInstance().copyFrom(instance); + newAssignment.setWorkerId(leastAssignmentsWorkerId); newAssignments.add(newAssignment); dest.add(instance); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java index ac5ca617ea43b..5c56a82e2dbfc 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java @@ -38,8 +38,8 @@ import org.apache.pulsar.client.admin.PulsarAdmin; import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.functions.auth.FunctionAuthProvider; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.PackageLocationMetaData; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.Instance; import org.apache.pulsar.functions.runtime.Runtime; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.RuntimeSpawner; @@ -80,12 +80,12 @@ public void testStartFunctionWithDLNamespace() throws Exception { FunctionActioner actioner = new FunctionActioner(workerConfig, factory, dlogNamespace, new ConnectorsManager(workerConfig), new FunctionsManager(workerConfig), mock(PulsarAdmin.class), mock(PackageUrlValidator.class)); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setTenant("test-tenant") - .setNamespace("test-namespace").setName("func-1")) - .build(); - Function.Instance instance = Function.Instance.newBuilder().setFunctionMetaData(function1).setInstanceId(0) - .build(); + FunctionMetaData function1 = new FunctionMetaData(); + function1.setFunctionDetails().setTenant("test-tenant") + .setNamespace("test-namespace").setName("func-1"); + Instance instance = new Instance(); + instance.setFunctionMetaData().copyFrom(function1); + instance.setInstanceId(0); FunctionRuntimeInfo functionRuntimeInfo = mock(FunctionRuntimeInfo.class); doReturn(instance).when(functionRuntimeInfo).getFunctionInstance(); doThrow(new IllegalStateException("StartupException")).when(functionRuntimeInfo).setStartupException(any()); @@ -154,20 +154,14 @@ public void testStartFunctionWithPkgUrl() throws Exception { } private void startFunction(FunctionActioner actioner, String pkgPathLocation, String extraPkgPathLocation) { - PackageLocationMetaData packageLocation = PackageLocationMetaData.newBuilder() - .setPackagePath(pkgPathLocation) - .build(); - PackageLocationMetaData extraPackageLocation = PackageLocationMetaData.newBuilder() - .setPackagePath(extraPkgPathLocation) - .build(); - Function.FunctionMetaData function = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setTenant("test-tenant") - .setNamespace("test-namespace").setName("func-1")) - .setPackageLocation(packageLocation) - .setTransformFunctionPackageLocation(extraPackageLocation) - .build(); - Function.Instance instance = Function.Instance.newBuilder().setFunctionMetaData(function).setInstanceId(0) - .build(); + FunctionMetaData function = new FunctionMetaData(); + function.setFunctionDetails().setTenant("test-tenant") + .setNamespace("test-namespace").setName("func-1"); + function.setPackageLocation().setPackagePath(pkgPathLocation); + function.setTransformFunctionPackageLocation().setPackagePath(extraPkgPathLocation); + Instance instance = new Instance(); + instance.setFunctionMetaData().copyFrom(function); + instance.setInstanceId(0); FunctionRuntimeInfo functionRuntimeInfo = mock(FunctionRuntimeInfo.class); doReturn(instance).when(functionRuntimeInfo).getFunctionInstance(); doThrow(new IllegalStateException("StartupException")).when(functionRuntimeInfo).setStartupException(any()); @@ -204,14 +198,13 @@ public void testFunctionAuthDisabled() throws Exception { String pkgPathLocation = "http://invalid/my-file.jar"; - Function.FunctionMetaData functionMeta = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setTenant("test-tenant") - .setNamespace("test-namespace").setName("func-1")) - .setPackageLocation(PackageLocationMetaData.newBuilder().setPackagePath(pkgPathLocation).build()) - .build(); - - Function.Instance instance = Function.Instance.newBuilder() - .setFunctionMetaData(functionMeta).build(); + FunctionMetaData functionMeta = new FunctionMetaData(); + functionMeta.setFunctionDetails().setTenant("test-tenant") + .setNamespace("test-namespace").setName("func-1"); + functionMeta.setPackageLocation().setPackagePath(pkgPathLocation); + + Instance instance = new Instance(); + instance.setFunctionMetaData().copyFrom(functionMeta); RuntimeSpawner runtimeSpawner = spy(actioner.getRuntimeSpawner(instance, "foo", "bar")); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java index 14bd0cde268fd..85295ecfbb546 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java @@ -50,7 +50,8 @@ import org.apache.pulsar.client.impl.MessageImpl; import org.apache.pulsar.common.api.proto.MessageMetadata; import org.apache.pulsar.common.util.ObjectMapperFactory; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionMetaData; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactory; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactoryConfig; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -64,6 +65,20 @@ public class FunctionAssignmentTailerTest { private static final String CLUSTER_NAME = "test-cluster"; + private static FunctionMetaData createFunctionMetaData(String tenant, String namespace, String name) { + FunctionMetaData fmd = new FunctionMetaData(); + fmd.setFunctionDetails().setTenant(tenant).setNamespace(namespace).setName(name); + return fmd; + } + + private static Assignment createAssignment(String workerId, FunctionMetaData function, int instanceId) { + Assignment assignment = new Assignment(); + assignment.setWorkerId(workerId); + assignment.setInstance().setFunctionMetaData().copyFrom(function); + assignment.getInstance().setInstanceId(instanceId); + return assignment; + } + @Test(timeOut = 10000) public void testErrorNotifier() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); @@ -77,24 +92,11 @@ public void testErrorNotifier() throws Exception { workerConfig.setFunctionAssignmentTopicName("assignments"); workerConfig.setPulsarFunctionsCluster(CLUSTER_NAME); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); + + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-1", function2, 0); ArrayBlockingQueue> messageList = new ArrayBlockingQueue<>(2); MessageMetadata metadata = new MessageMetadata(); @@ -206,24 +208,11 @@ public void testProcessingAssignments() throws Exception { workerConfig.setFunctionAssignmentTopicName("assignments"); workerConfig.setPulsarFunctionsCluster(CLUSTER_NAME); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); + + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-1", function2, 0); ArrayBlockingQueue> messageList = new ArrayBlockingQueue<>(2); @@ -331,24 +320,11 @@ public void testTriggerReadToTheEndAndExit() throws Exception { workerConfig.setFunctionAssignmentTopicName("assignments"); workerConfig.setPulsarFunctionsCluster(CLUSTER_NAME); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); + + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-1", function2, 0); ArrayBlockingQueue> messageList = new ArrayBlockingQueue<>(2); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java index 548462bf61a59..6192707117d68 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java @@ -45,8 +45,8 @@ import org.apache.pulsar.client.api.PulsarClient; import org.apache.pulsar.client.api.PulsarClientException; import org.apache.pulsar.client.api.TypedMessageBuilder; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Request; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.ServiceRequest; import org.testng.Assert; import org.testng.annotations.Test; @@ -93,16 +93,16 @@ public void testListFunctions() throws PulsarClientException { mock(SchedulerManager.class), mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - Map functionMetaDataMap1 = new HashMap<>(); - Function.FunctionMetaData f1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-1")).build(); + Map functionMetaDataMap1 = new HashMap<>(); + FunctionMetaData f1 = new FunctionMetaData(); + f1.setFunctionDetails().setName("func-1"); functionMetaDataMap1.put("func-1", f1); - Function.FunctionMetaData f2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-2")).build(); + FunctionMetaData f2 = new FunctionMetaData(); + f2.setFunctionDetails().setName("func-2"); functionMetaDataMap1.put("func-2", f2); - Function.FunctionMetaData f3 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setName("func-3")).build(); - Map functionMetaDataInfoMap2 = new HashMap<>(); + FunctionMetaData f3 = new FunctionMetaData(); + f3.setFunctionDetails().setName("func-3"); + Map functionMetaDataInfoMap2 = new HashMap<>(); functionMetaDataInfoMap2.put("func-3", f3); @@ -142,9 +142,9 @@ private void testSendMsgFail(boolean compact) throws Exception { new FunctionMetaDataManager(workerConfig, mock(SchedulerManager.class), mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - Function.FunctionMetaData m1 = Function.FunctionMetaData.newBuilder() - .setVersion(1) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1")).build(); + FunctionMetaData m1 = new FunctionMetaData(); + m1.setVersion(1); + m1.setFunctionDetails().setName("func-1"); // become leader Producer exclusiveProducer = functionMetaDataManager.acquireExclusiveWrite(() -> true); @@ -187,9 +187,9 @@ private void testUpdateIfLeaderFunction(boolean compact) throws Exception { new FunctionMetaDataManager(workerConfig, mock(SchedulerManager.class), mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - Function.FunctionMetaData m1 = Function.FunctionMetaData.newBuilder() - .setVersion(1) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1")).build(); + FunctionMetaData m1 = new FunctionMetaData(); + m1.setVersion(1); + m1.setFunctionDetails().setName("func-1"); // update when you are not the leader try { @@ -218,7 +218,7 @@ private void testUpdateIfLeaderFunction(boolean compact) throws Exception { Assert.assertEquals(e.getMessage(), "Update request ignored because it is out of date. Please try again."); } // udpate with new version - Function.FunctionMetaData m2 = m1.toBuilder().setVersion(2).build(); + FunctionMetaData m2 = new FunctionMetaData().copyFrom(m1).setVersion(2); functionMetaDataManager.updateFunctionOnLeader(m2, false); if (compact) { Assert.assertTrue(Arrays.equals(m2.toByteArray(), producerByteArray)); @@ -246,10 +246,9 @@ private void deregisterFunction(boolean compact) throws Exception { new FunctionMetaDataManager(workerConfig, mockedScheduler, mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - Function.FunctionMetaData m1 = Function.FunctionMetaData.newBuilder() - .setVersion(1) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1")).build(); + FunctionMetaData m1 = new FunctionMetaData(); + m1.setVersion(1); + m1.setFunctionDetails().setName("func-1").setNamespace("namespace-1").setTenant("tenant-1"); // Try deleting when you are not the leader try { @@ -282,7 +281,7 @@ private void deregisterFunction(boolean compact) throws Exception { verify(mockedScheduler, times(1)).schedule(); // udpate with new version - m1 = m1.toBuilder().setVersion(2).build(); + m1 = new FunctionMetaData().copyFrom(m1).setVersion(2); functionMetaDataManager.updateFunctionOnLeader(m1, true); verify(mockedScheduler, times(2)).schedule(); if (compact) { @@ -300,34 +299,31 @@ public void testProcessRequest() throws PulsarClientException, IOException { mock(SchedulerManager.class), mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - doReturn(true).when(functionMetaDataManager).processUpdate(any(Function.FunctionMetaData.class)); - doReturn(true).when(functionMetaDataManager).processDeregister(any(Function.FunctionMetaData.class)); + doReturn(true).when(functionMetaDataManager).processUpdate(any(FunctionMetaData.class)); + doReturn(true).when(functionMetaDataManager).processDeregister(any(FunctionMetaData.class)); - Request.ServiceRequest serviceRequest = - Request.ServiceRequest.newBuilder().setServiceRequestType( - Request.ServiceRequest.ServiceRequestType.UPDATE).build(); + ServiceRequest serviceRequest = new ServiceRequest() + .setServiceRequestType(ServiceRequest.ServiceRequestType.UPDATE); @SuppressWarnings("rawtypes") Message msg = mock(Message.class); doReturn(serviceRequest.toByteArray()).when(msg).getData(); functionMetaDataManager.processMetaDataTopicMessage(msg); verify(functionMetaDataManager, times(1)).processUpdate - (any(Function.FunctionMetaData.class)); - verify(functionMetaDataManager).processUpdate(serviceRequest.getFunctionMetaData()); + (any(FunctionMetaData.class)); - serviceRequest = Request.ServiceRequest.newBuilder().setServiceRequestType( - Request.ServiceRequest.ServiceRequestType.INITIALIZE).build(); + serviceRequest = new ServiceRequest() + .setServiceRequestType(ServiceRequest.ServiceRequestType.INITIALIZE); doReturn(serviceRequest.toByteArray()).when(msg).getData(); functionMetaDataManager.processMetaDataTopicMessage(msg); - serviceRequest = Request.ServiceRequest.newBuilder().setServiceRequestType( - Request.ServiceRequest.ServiceRequestType.DELETE).build(); + serviceRequest = new ServiceRequest() + .setServiceRequestType(ServiceRequest.ServiceRequestType.DELETE); doReturn(serviceRequest.toByteArray()).when(msg).getData(); functionMetaDataManager.processMetaDataTopicMessage(msg); verify(functionMetaDataManager, times(1)).processDeregister( - any(Function.FunctionMetaData.class)); - verify(functionMetaDataManager).processDeregister(serviceRequest.getFunctionMetaData()); + any(FunctionMetaData.class)); } @Test @@ -339,14 +335,13 @@ public void processUpdateTest() throws PulsarClientException { new FunctionMetaDataManager(workerConfig, schedulerManager, mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - Function.FunctionMetaData m1 = Function.FunctionMetaData.newBuilder() - .setVersion(1) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1")).build(); + FunctionMetaData m1 = new FunctionMetaData(); + m1.setVersion(1); + m1.setFunctionDetails().setName("func-1").setNamespace("namespace-1").setTenant("tenant-1"); Assert.assertTrue(functionMetaDataManager.processUpdate(m1)); verify(functionMetaDataManager, times(1)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(m1, functionMetaDataManager.functionMetaDataMap.get( "tenant-1").get("namespace-1").get("func-1")); @@ -361,7 +356,7 @@ public void processUpdateTest() throws PulsarClientException { Assert.assertEquals(e.getMessage(), "Update request ignored because it is out of date. Please try again."); } verify(functionMetaDataManager, times(1)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(m1, functionMetaDataManager.functionMetaDataMap.get( "tenant-1").get("namespace-1").get("func-1")); @@ -369,10 +364,10 @@ public void processUpdateTest() throws PulsarClientException { "tenant-1").get("namespace-1").size()); // udpate with new version - m1 = m1.toBuilder().setVersion(2).build(); + m1 = new FunctionMetaData().copyFrom(m1).setVersion(2); Assert.assertTrue(functionMetaDataManager.processUpdate(m1)); verify(functionMetaDataManager, times(2)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(m1, functionMetaDataManager.functionMetaDataMap.get( "tenant-1").get("namespace-1").get("func-1")); @@ -389,21 +384,20 @@ public void processDeregister() throws PulsarClientException { new FunctionMetaDataManager(workerConfig, schedulerManager, mockPulsarClient(), ErrorNotifier.getDefaultImpl())); - Function.FunctionMetaData m1 = Function.FunctionMetaData.newBuilder() - .setVersion(1) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1")).build(); + FunctionMetaData m1 = new FunctionMetaData(); + m1.setVersion(1); + m1.setFunctionDetails().setName("func-1").setNamespace("namespace-1").setTenant("tenant-1"); Assert.assertFalse(functionMetaDataManager.processDeregister(m1)); verify(functionMetaDataManager, times(0)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(0, functionMetaDataManager.functionMetaDataMap.size()); // insert something Assert.assertTrue(functionMetaDataManager.processUpdate(m1)); verify(functionMetaDataManager, times(1)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(m1, functionMetaDataManager.functionMetaDataMap.get( "tenant-1").get("namespace-1").get("func-1")); @@ -418,7 +412,7 @@ public void processDeregister() throws PulsarClientException { Assert.assertEquals(e.getMessage(), "Delete request ignored because it is out of date. Please try again."); } verify(functionMetaDataManager, times(1)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(m1, functionMetaDataManager.functionMetaDataMap.get( "tenant-1").get("namespace-1").get("func-1")); @@ -426,10 +420,10 @@ public void processDeregister() throws PulsarClientException { "tenant-1").get("namespace-1").size()); // delete now - m1 = m1.toBuilder().setVersion(2).build(); + m1 = new FunctionMetaData().copyFrom(m1).setVersion(2); Assert.assertTrue(functionMetaDataManager.processDeregister(m1)); verify(functionMetaDataManager, times(1)) - .setFunctionMetaData(any(Function.FunctionMetaData.class)); + .setFunctionMetaData(any(FunctionMetaData.class)); verify(schedulerManager, times(0)).schedule(); Assert.assertEquals(0, functionMetaDataManager.functionMetaDataMap.get( "tenant-1").get("namespace-1").size()); 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 626cede140dea..56ea38cf39ae6 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 @@ -32,7 +32,7 @@ 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.Function.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionMetaData; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.testng.annotations.AfterMethod; @@ -73,7 +73,7 @@ public void tearDown() throws Exception { @Test public void testUpdate() throws Exception { - FunctionMetaData request = FunctionMetaData.newBuilder().build(); + FunctionMetaData request = new FunctionMetaData(); Message msg = mock(Message.class); when(msg.getData()).thenReturn(request.toByteArray()); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java index ac6d714c99ae1..21675bc2f6533 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java @@ -39,6 +39,7 @@ import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import io.netty.buffer.Unpooled; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -63,7 +64,11 @@ import org.apache.pulsar.common.functions.WorkerInfo; import org.apache.pulsar.common.util.ObjectMapperFactory; import org.apache.pulsar.functions.instance.AuthenticationConfig; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionState; +import org.apache.pulsar.functions.proto.Instance; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.kubernetes.KubernetesRuntime; import org.apache.pulsar.functions.runtime.kubernetes.KubernetesRuntimeFactory; @@ -85,6 +90,27 @@ public class FunctionRuntimeManagerTest { private static final String PULSAR_SERVICE_URL = "pulsar://localhost:6650"; + private static FunctionMetaData createFunctionMetaData(String tenant, String namespace, String name) { + FunctionMetaData fmd = new FunctionMetaData(); + fmd.setFunctionDetails().setTenant(tenant).setNamespace(namespace).setName(name); + return fmd; + } + + private static Assignment createAssignment(String workerId, FunctionMetaData function, int instanceId) { + Assignment assignment = new Assignment(); + assignment.setWorkerId(workerId); + assignment.setInstance().setFunctionMetaData().copyFrom(function); + assignment.getInstance().setInstanceId(instanceId); + return assignment; + } + + private static Instance createInstance(FunctionMetaData function, int instanceId) { + Instance instance = new Instance(); + instance.setFunctionMetaData().copyFrom(function); + instance.setInstanceId(instanceId); + return instance; + } + @Test public void testProcessAssignmentUpdateAddFunctions() throws Exception { @@ -131,34 +157,21 @@ public void testProcessAssignmentUpdateAddFunctions() throws Exception { doNothing().when(functionActioner).terminateFunction(any(FunctionRuntimeInfo.class)); functionRuntimeManager.setFunctionActioner(functionActioner); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - - List assignments = new LinkedList<>(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); + + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-2", function2, 0); + + List assignments = new LinkedList<>(); assignments.add(assignment1); assignments.add(assignment2); functionRuntimeManager.processAssignment(assignment1); functionRuntimeManager.processAssignment(assignment2); - verify(functionRuntimeManager, times(2)).setAssignment(any(Function.Assignment.class)); - verify(functionRuntimeManager, times(0)).deleteAssignment(any(Function.Assignment.class)); + verify(functionRuntimeManager, times(2)).setAssignment(any(Assignment.class)); + verify(functionRuntimeManager, times(0)).deleteAssignment(any(Assignment.class)); assertEquals(functionRuntimeManager.workerIdToAssignments.size(), 2); assertEquals(functionRuntimeManager.workerIdToAssignments .get("worker-1").get("test-tenant/test-namespace/func-1:0"), assignment1); @@ -166,15 +179,16 @@ public void testProcessAssignmentUpdateAddFunctions() throws Exception { .get("test-tenant/test-namespace/func-2:0"), assignment2); verify(functionActioner, times(1)).startFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner).startFunction(argThat( - functionRuntimeInfo -> functionRuntimeInfo.getFunctionInstance().getFunctionMetaData() - .equals(function1))); + functionRuntimeInfo -> Arrays.equals( + functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().toByteArray(), + function1.toByteArray()))); verify(functionActioner, times(0)).stopFunction(any(FunctionRuntimeInfo.class)); assertEquals(functionRuntimeManager.functionRuntimeInfos.size(), 1); - assertEquals(functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0"), - new FunctionRuntimeInfo().setFunctionInstance( - Function.Instance.newBuilder().setFunctionMetaData(function1).setInstanceId(0) - .build())); + assertEquals( + functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") + .getFunctionInstance().toByteArray(), + createInstance(function1, 0).toByteArray()); } } @@ -224,25 +238,12 @@ public void testProcessAssignmentUpdateDeleteFunctions() throws Exception { doNothing().when(functionActioner).terminateFunction(any(FunctionRuntimeInfo.class)); functionRuntimeManager.setFunctionActioner(functionActioner); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); // Delete this assignment - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-2", function2, 0); // add existing assignments functionRuntimeManager.setAssignment(assignment1); @@ -250,16 +251,15 @@ public void testProcessAssignmentUpdateDeleteFunctions() throws Exception { reset(functionRuntimeManager); functionRuntimeManager.functionRuntimeInfos.put( - "test-tenant/test-namespace/func-1:0", new FunctionRuntimeInfo().setFunctionInstance( - Function.Instance.newBuilder().setFunctionMetaData(function1).setInstanceId(0) - .build())); + "test-tenant/test-namespace/func-1:0", + new FunctionRuntimeInfo().setFunctionInstance(createInstance(function1, 0))); functionRuntimeManager.processAssignment(assignment1); functionRuntimeManager.processAssignment(assignment2); functionRuntimeManager .deleteAssignment(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance())); - verify(functionRuntimeManager, times(0)).setAssignment(any(Function.Assignment.class)); + verify(functionRuntimeManager, times(0)).setAssignment(any(Assignment.class)); verify(functionRuntimeManager, times(1)).deleteAssignment(any(String.class)); assertEquals(functionRuntimeManager.workerIdToAssignments.size(), 1); @@ -269,8 +269,9 @@ public void testProcessAssignmentUpdateDeleteFunctions() throws Exception { verify(functionActioner, times(0)).startFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner, times(1)).terminateFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner).terminateFunction(argThat( - functionRuntimeInfo -> functionRuntimeInfo.getFunctionInstance().getFunctionMetaData() - .equals(function1))); + functionRuntimeInfo -> Arrays.equals( + functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().toByteArray(), + function1.toByteArray()))); assertEquals(functionRuntimeManager.functionRuntimeInfos.size(), 0); } @@ -325,44 +326,25 @@ public void testProcessAssignmentUpdateModifyFunctions() throws Exception { doNothing().when(functionActioner).terminateFunction(any(FunctionRuntimeInfo.class)); functionRuntimeManager.setFunctionActioner(functionActioner); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); + + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-2", function2, 0); // add existing assignments functionRuntimeManager.setAssignment(assignment1); functionRuntimeManager.setAssignment(assignment2); reset(functionActioner); - Function.Assignment assignment3 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + Assignment assignment3 = createAssignment("worker-1", function2, 0); functionRuntimeManager.functionRuntimeInfos.put( - "test-tenant/test-namespace/func-1:0", new FunctionRuntimeInfo().setFunctionInstance( - Function.Instance.newBuilder().setFunctionMetaData(function1).setInstanceId(0) - .build())); + "test-tenant/test-namespace/func-1:0", + new FunctionRuntimeInfo().setFunctionInstance(createInstance(function1, 0))); functionRuntimeManager.functionRuntimeInfos.put( - "test-tenant/test-namespace/func-2:0", new FunctionRuntimeInfo().setFunctionInstance( - Function.Instance.newBuilder().setFunctionMetaData(function2).setInstanceId(0) - .build())); + "test-tenant/test-namespace/func-2:0", + new FunctionRuntimeInfo().setFunctionInstance(createInstance(function2, 0))); functionRuntimeManager.processAssignment(assignment1); functionRuntimeManager.processAssignment(assignment3); @@ -372,13 +354,15 @@ public void testProcessAssignmentUpdateModifyFunctions() throws Exception { verify(functionActioner, times(0)).terminateFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner).stopFunction(argThat( - functionRuntimeInfo -> functionRuntimeInfo.getFunctionInstance().getFunctionMetaData() - .equals(function2))); + functionRuntimeInfo -> Arrays.equals( + functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().toByteArray(), + function2.toByteArray()))); verify(functionActioner, times(1)).startFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner).startFunction(argThat( - functionRuntimeInfo -> functionRuntimeInfo.getFunctionInstance().getFunctionMetaData() - .equals(function2))); + functionRuntimeInfo -> Arrays.equals( + functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().toByteArray(), + function2.toByteArray()))); assertEquals(functionRuntimeManager.functionRuntimeInfos.size(), 2); assertEquals(functionRuntimeManager.workerIdToAssignments.size(), 1); @@ -390,15 +374,10 @@ public void testProcessAssignmentUpdateModifyFunctions() throws Exception { reset(functionActioner); // add a stop - Function.FunctionMetaData.Builder function2StoppedBldr = function2.toBuilder(); - function2StoppedBldr.putInstanceStates(0, Function.FunctionState.STOPPED); - Function.FunctionMetaData function2Stopped = function2StoppedBldr.build(); + FunctionMetaData function2Stopped = new FunctionMetaData().copyFrom(function2); + function2Stopped.putInstanceStates(0, FunctionState.STOPPED); - Function.Assignment assignment4 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Stopped).setInstanceId(0).build()) - .build(); + Assignment assignment4 = createAssignment("worker-1", function2Stopped, 0); functionRuntimeManager.processAssignment(assignment4); @@ -407,7 +386,8 @@ public void testProcessAssignmentUpdateModifyFunctions() throws Exception { verify(functionActioner, times(0)).terminateFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner).stopFunction(argThat(functionRuntimeInfo -> - functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().equals(function2))); + Arrays.equals(functionRuntimeInfo.getFunctionInstance().getFunctionMetaData().toByteArray(), + function2.toByteArray()))); verify(functionActioner, times(0)).startFunction(any(FunctionRuntimeInfo.class)); @@ -465,16 +445,9 @@ public void testReassignment() throws Exception { doNothing().when(functionActioner).terminateFunction(any(FunctionRuntimeInfo.class)); functionRuntimeManager.setFunctionActioner(functionActioner); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); /** Test transfer from me to other worker **/ @@ -482,15 +455,10 @@ public void testReassignment() throws Exception { functionRuntimeManager.setAssignment(assignment1); // new assignment with different worker - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - FunctionRuntimeInfo functionRuntimeInfo = new FunctionRuntimeInfo().setFunctionInstance( - Function.Instance.newBuilder().setFunctionMetaData(function1).setInstanceId(0) - .build()); + Assignment assignment2 = createAssignment("worker-2", function1, 0); + + FunctionRuntimeInfo functionRuntimeInfo = new FunctionRuntimeInfo() + .setFunctionInstance(createInstance(function1, 0)); functionRuntimeManager.functionRuntimeInfos.put( "test-tenant/test-namespace/func-1:0", functionRuntimeInfo); @@ -512,11 +480,7 @@ public void testReassignment() throws Exception { doNothing().when(functionActioner).terminateFunction(any(FunctionRuntimeInfo.class)); functionRuntimeManager.setFunctionActioner(functionActioner); - Function.Assignment assignment3 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment3 = createAssignment("worker-1", function1, 0); functionRuntimeManager.processAssignment(assignment3); @@ -530,8 +494,10 @@ public void testReassignment() throws Exception { .get("worker-2")); assertEquals(functionRuntimeManager.functionRuntimeInfos.size(), 1); - assertEquals(functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0"), - functionRuntimeInfo); + assertEquals( + functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") + .getFunctionInstance().toByteArray(), + functionRuntimeInfo.getFunctionInstance().toByteArray()); } } @@ -547,30 +513,12 @@ public void testRuntimeManagerInitialize() throws Exception { workerConfig.setStateStorageServiceUrl("foo"); workerConfig.setFunctionAssignmentTopicName("assignments"); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - - Function.Assignment assignment3 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); + + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-1", function2, 0); + Assignment assignment3 = createAssignment("worker-1", function2, 0); List> messageList = new LinkedList<>(); MessageMetadata metadata = new MessageMetadata(); @@ -671,14 +619,15 @@ public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { verify(functionActioner, times(0)).terminateFunction(any(FunctionRuntimeInfo.class)); verify(functionActioner).startFunction( - argThat(functionRuntimeInfo -> functionRuntimeInfo.getFunctionInstance() - .equals(assignment1.getInstance()))); + argThat(functionRuntimeInfo -> Arrays.equals( + functionRuntimeInfo.getFunctionInstance().toByteArray(), + assignment1.getInstance().toByteArray()))); assertEquals(functionRuntimeManager.functionRuntimeInfos.size(), 1); - assertEquals(functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0"), - new FunctionRuntimeInfo().setFunctionInstance( - Function.Instance.newBuilder().setFunctionMetaData(function1).setInstanceId(0) - .build())); + assertEquals( + functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") + .getFunctionInstance().toByteArray(), + createInstance(function1, 0).toByteArray()); // verify no errors occurred verify(errorNotifier, times(0)).triggerError(any()); @@ -750,20 +699,14 @@ public void testExternallyManagedRuntimeUpdate() throws Exception { mock(ErrorNotifier.class)); functionRuntimeManager.setFunctionActioner(functionActioner); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("path")) - .setTransformFunctionPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath("function-path")) - .setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); + FunctionMetaData function1 = new FunctionMetaData(); + function1.setPackageLocation().setPackagePath("path"); + function1.setTransformFunctionPackageLocation().setPackagePath("function-path"); + function1.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1"); - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); /** Test transfer from me to other worker **/ @@ -771,14 +714,9 @@ public void testExternallyManagedRuntimeUpdate() throws Exception { functionRuntimeManager.setAssignment(assignment1); // new assignment with different worker - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Function.Instance instance = Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build(); + Assignment assignment2 = createAssignment("worker-2", function1, 0); + + Instance instance = createInstance(function1, 0); FunctionRuntimeInfo functionRuntimeInfo = new FunctionRuntimeInfo() .setFunctionInstance(instance) .setRuntimeSpawner(functionActioner @@ -800,11 +738,7 @@ public void testExternallyManagedRuntimeUpdate() throws Exception { /** Test transfer from other worker to me **/ - Function.Assignment assignment3 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment3 = createAssignment("worker-1", function1, 0); functionRuntimeManager.processAssignment(assignment3); @@ -820,16 +754,16 @@ public void testExternallyManagedRuntimeUpdate() throws Exception { assertEquals( functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") - .getFunctionInstance(), - functionRuntimeInfo.getFunctionInstance()); + .getFunctionInstance().toByteArray(), + functionRuntimeInfo.getFunctionInstance().toByteArray()); assertNotNull( functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") .getRuntimeSpawner()); assertEquals( functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") - .getRuntimeSpawner().getInstanceConfig().getFunctionDetails(), - function1.getFunctionDetails()); + .getRuntimeSpawner().getInstanceConfig().getFunctionDetails().toByteArray(), + function1.getFunctionDetails().toByteArray()); assertEquals( functionRuntimeManager.functionRuntimeInfos.get("test-tenant/test-namespace/func-1:0") .getRuntimeSpawner().getInstanceConfig().getInstanceId(), @@ -1113,18 +1047,18 @@ public void testThreadFunctionInstancesRestart() throws Exception { doReturn(workerInfos).when(membershipManager).getCurrentMembership(); // build three types of FunctionMetaData - Function.FunctionMetaData function = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("function") - .setComponentType(Function.FunctionDetails.ComponentType.FUNCTION)).build(); - Function.FunctionMetaData source = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("source") - .setComponentType(Function.FunctionDetails.ComponentType.SOURCE)).build(); - Function.FunctionMetaData sink = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("sink") - .setComponentType(Function.FunctionDetails.ComponentType.SINK)).build(); + FunctionMetaData function = new FunctionMetaData(); + function.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("function") + .setComponentType(FunctionDetails.ComponentType.FUNCTION); + FunctionMetaData source = new FunctionMetaData(); + source.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("source") + .setComponentType(FunctionDetails.ComponentType.SOURCE); + FunctionMetaData sink = new FunctionMetaData(); + sink.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("sink") + .setComponentType(FunctionDetails.ComponentType.SINK); @Cleanup FunctionRuntimeManager functionRuntimeManager = spy(new FunctionRuntimeManager( @@ -1205,18 +1139,18 @@ public void testKubernetesFunctionInstancesRestart() throws Exception { doReturn(workerInfos).when(membershipManager).getCurrentMembership(); // build three types of FunctionMetaData - Function.FunctionMetaData function = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("function") - .setComponentType(Function.FunctionDetails.ComponentType.FUNCTION)).build(); - Function.FunctionMetaData source = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("source") - .setComponentType(Function.FunctionDetails.ComponentType.SOURCE)).build(); - Function.FunctionMetaData sink = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("sink") - .setComponentType(Function.FunctionDetails.ComponentType.SINK)).build(); + FunctionMetaData function = new FunctionMetaData(); + function.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("function") + .setComponentType(FunctionDetails.ComponentType.FUNCTION); + FunctionMetaData source = new FunctionMetaData(); + source.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("source") + .setComponentType(FunctionDetails.ComponentType.SOURCE); + FunctionMetaData sink = new FunctionMetaData(); + sink.setFunctionDetails() + .setTenant("test-tenant").setNamespace("test-namespace").setName("sink") + .setComponentType(FunctionDetails.ComponentType.SINK); @Cleanup FunctionRuntimeManager functionRuntimeManager = spy(new FunctionRuntimeManager( @@ -1241,13 +1175,9 @@ public void testKubernetesFunctionInstancesRestart() throws Exception { } } - private static void verifyRestart(FunctionRuntimeManager functionRuntimeManager, Function.FunctionMetaData function, + private static void verifyRestart(FunctionRuntimeManager functionRuntimeManager, FunctionMetaData function, String workerId, boolean externallyManaged, boolean expectRestartByPulsarAdmin) throws Exception { - Function.Assignment assignment = Function.Assignment.newBuilder() - .setWorkerId(workerId) - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function).setInstanceId(0).build()) - .build(); + Assignment assignment = createAssignment(workerId, function, 0); doReturn(List.of(assignment)).when(functionRuntimeManager) .findFunctionAssignments("test-tenant", "test-namespace", "function"); functionRuntimeManager.restartFunctionInstances("test-tenant", "test-namespace", "function"); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java index 66b831f878840..b572cd8196bbf 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java @@ -47,9 +47,12 @@ import org.apache.pulsar.client.impl.PulsarClientImpl; import org.apache.pulsar.common.functions.WorkerInfo; import org.apache.pulsar.common.util.ObjectMapperFactory; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.Instance; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactory; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactoryConfig; +import org.apache.pulsar.functions.utils.FunctionCommon; import org.mockito.Mockito; import org.testng.annotations.Test; @@ -90,6 +93,34 @@ private static PulsarClient mockPulsarClient() throws PulsarClientException { return mockClient; } + private static FunctionMetaData createFunctionMetaData(String tenant, String namespace, String name) { + FunctionMetaData fmd = new FunctionMetaData(); + fmd.setFunctionDetails().setTenant(tenant).setNamespace(namespace).setName(name); + return fmd; + } + + private static FunctionMetaData createFunctionMetaData(String tenant, String namespace, String name, + int parallelism) { + FunctionMetaData fmd = new FunctionMetaData(); + fmd.setFunctionDetails().setTenant(tenant).setNamespace(namespace).setName(name).setParallelism(parallelism); + return fmd; + } + + private static Assignment createAssignment(String workerId, FunctionMetaData function, int instanceId) { + Assignment assignment = new Assignment(); + assignment.setWorkerId(workerId); + assignment.setInstance().setFunctionMetaData().copyFrom(function); + assignment.getInstance().setInstanceId(instanceId); + return assignment; + } + + private static Instance createInstance(FunctionMetaData function, int instanceId) { + Instance instance = new Instance(); + instance.setFunctionMetaData().copyFrom(function); + instance.setInstanceId(instanceId); + return instance; + } + @Test public void testCheckFailuresNoFailures() throws Exception { SchedulerManager schedulerManager = mock(SchedulerManager.class); @@ -126,33 +157,16 @@ public void testCheckFailuresNoFailures() throws Exception { Mockito.doReturn(workerInfoList).when(membershipManager).getCurrentMembership(); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); - List metaDataList = new LinkedList<>(); + List metaDataList = new LinkedList<>(); metaDataList.add(function1); metaDataList.add(function2); Mockito.doReturn(metaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1) - .setInstanceId(0) - .build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2) - .setInstanceId(0) - .build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-2", function2, 0); // add existing assignments functionRuntimeManager.setAssignment(assignment1); @@ -203,28 +217,16 @@ public void testCheckFailuresSomeFailures() throws Exception { Mockito.doReturn(workerInfoList).when(membershipManager).getCurrentMembership(); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1"); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2"); - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); - - List metaDataList = new LinkedList<>(); + List metaDataList = new LinkedList<>(); metaDataList.add(function1); metaDataList.add(function2); Mockito.doReturn(metaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1").setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-2", function2, 0); // add existing assignments functionRuntimeManager.setAssignment(assignment1); @@ -235,12 +237,12 @@ public void testCheckFailuresSomeFailures() throws Exception { verify(schedulerManager, times(0)).schedule(); verify(functionRuntimeManager, times(0)).removeAssignments(any()); assertEquals(membershipManager.unsignedFunctionDurations.size(), 1); - Function.Instance instance = - Function.Instance.newBuilder().setFunctionMetaData(function2).setInstanceId(0).build(); - assertNotNull(membershipManager.unsignedFunctionDurations.get(instance)); + Instance instance = createInstance(function2, 0); + String instanceId = FunctionCommon.getFullyQualifiedInstanceId(instance); + assertNotNull(membershipManager.unsignedFunctionDurations.get(instanceId)); - membershipManager.unsignedFunctionDurations.put(instance, - membershipManager.unsignedFunctionDurations.get(instance) - 30001); + membershipManager.unsignedFunctionDurations.put(instanceId, + membershipManager.unsignedFunctionDurations.get(instanceId) - 30001); membershipManager.checkFailures(functionMetaDataManager, functionRuntimeManager, schedulerManager); @@ -296,23 +298,15 @@ public void testCheckFailuresSomeUnassigned() throws Exception { Mockito.doReturn(workerInfoList).when(membershipManager).getCurrentMembership(); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setParallelism(1) - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setParallelism(1) - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-2")).build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1", 1); + FunctionMetaData function2 = createFunctionMetaData("test-tenant", "test-namespace", "func-2", 1); - List metaDataList = new LinkedList<>(); + List metaDataList = new LinkedList<>(); metaDataList.add(function1); metaDataList.add(function2); Mockito.doReturn(metaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1").setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); // add existing assignments functionRuntimeManager.setAssignment(assignment1); @@ -322,12 +316,12 @@ public void testCheckFailuresSomeUnassigned() throws Exception { verify(schedulerManager, times(0)).schedule(); verify(functionRuntimeManager, times(0)).removeAssignments(any()); assertEquals(membershipManager.unsignedFunctionDurations.size(), 1); - Function.Instance instance = - Function.Instance.newBuilder().setFunctionMetaData(function2).setInstanceId(0).build(); - assertNotNull(membershipManager.unsignedFunctionDurations.get(instance)); + Instance instance = createInstance(function2, 0); + String instanceId = FunctionCommon.getFullyQualifiedInstanceId(instance); + assertNotNull(membershipManager.unsignedFunctionDurations.get(instanceId)); - membershipManager.unsignedFunctionDurations.put(instance, - membershipManager.unsignedFunctionDurations.get(instance) - 30001); + membershipManager.unsignedFunctionDurations.put(instanceId, + membershipManager.unsignedFunctionDurations.get(instanceId) - 30001); membershipManager.checkFailures(functionMetaDataManager, functionRuntimeManager, schedulerManager); @@ -382,29 +376,20 @@ public void testHeartBeatFunctionWorkerDown() throws Exception { Mockito.doReturn(workerInfoList).when(membershipManager).getCurrentMembership(); - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder().setFunctionDetails( - Function.FunctionDetails.newBuilder().setParallelism(1) - .setTenant("test-tenant").setNamespace("test-namespace").setName("func-1")).build(); + FunctionMetaData function1 = createFunctionMetaData("test-tenant", "test-namespace", "func-1", 1); - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setParallelism(1) - .setTenant(SchedulerManager.HEARTBEAT_TENANT) - .setNamespace(SchedulerManager.HEARTBEAT_NAMESPACE).setName("worker-2")) - .build(); + FunctionMetaData function2 = new FunctionMetaData(); + function2.setFunctionDetails().setParallelism(1) + .setTenant(SchedulerManager.HEARTBEAT_TENANT) + .setNamespace(SchedulerManager.HEARTBEAT_NAMESPACE).setName("worker-2"); - List metaDataList = new LinkedList<>(); + List metaDataList = new LinkedList<>(); metaDataList.add(function1); metaDataList.add(function2); Mockito.doReturn(metaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1").setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2").setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + Assignment assignment2 = createAssignment("worker-2", function2, 0); // add existing assignments functionRuntimeManager.setAssignment(assignment1); 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 adc555e16dd02..1c0c2a69ae73c 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 @@ -18,6 +18,7 @@ */ package org.apache.pulsar.functions.worker; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyBoolean; @@ -31,15 +32,14 @@ import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; -import com.google.protobuf.InvalidProtocolBufferException; import io.netty.util.concurrent.DefaultThreadFactory; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; 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; @@ -58,8 +58,8 @@ import org.apache.pulsar.client.api.TypedMessageBuilder; import org.apache.pulsar.common.functions.WorkerInfo; import org.apache.pulsar.common.util.ObjectMapperFactory; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.Assignment; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionMetaData; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactory; import org.apache.pulsar.functions.runtime.thread.ThreadRuntimeFactoryConfig; import org.apache.pulsar.functions.utils.FunctionCommon; @@ -94,6 +94,28 @@ enum DrainOps { ClearDrainMap // clear the entire thing }; + private static FunctionMetaData createFunctionMetaData(String tenant, String namespace, String name, + int parallelism, long version) { + FunctionMetaData fmd = new FunctionMetaData(); + fmd.setFunctionDetails().setName(name).setNamespace(namespace).setTenant(tenant).setParallelism(parallelism); + fmd.setVersion(version); + return fmd; + } + + private static Assignment createAssignment(String workerId, FunctionMetaData function, int instanceId) { + Assignment assignment = new Assignment(); + assignment.setWorkerId(workerId); + assignment.setInstance().setFunctionMetaData().copyFrom(function); + assignment.getInstance().setInstanceId(instanceId); + return assignment; + } + + private static Assignment parseAssignment(byte[] data) { + Assignment assignment = new Assignment(); + assignment.parseFrom(data); + return assignment; + } + @BeforeMethod public void setup() { WorkerConfig workerConfig = new WorkerConfig(); @@ -156,12 +178,9 @@ public void stop() { @Test public void testSchedule() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); functionMetaDataList.add(function1); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -169,14 +188,10 @@ public void testSchedule() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); doReturn(currentAssignments).when(functionRuntimeManager).getCurrentAssignments(); @@ -203,12 +218,9 @@ public void testSchedule() throws Exception { @Test public void testNothingNewToSchedule() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); functionMetaDataList.add(function1); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -216,14 +228,10 @@ public void testNothingNewToSchedule() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); doReturn(currentAssignments).when(functionRuntimeManager).getCurrentAssignments(); @@ -245,17 +253,10 @@ public void testNothingNewToSchedule() throws Exception { @Test public void testAddingFunctions() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); + FunctionMetaData function2 = createFunctionMetaData("tenant-1", "namespace-1", "func-2", 1, version); functionMetaDataList.add(function1); functionMetaDataList.add(function2); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -264,14 +265,10 @@ public void testAddingFunctions() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); doReturn(currentAssignments).when(functionRuntimeManager).getCurrentAssignments(); @@ -291,34 +288,27 @@ public void testAddingFunctions() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); byte[] send = (byte[]) invocations.get(0).getRawArguments()[0]; - Assignment assignments = Assignment.parseFrom(send); + Assignment assignments = parseAssignment(send); log.info("assignments: {}", assignments); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - Assert.assertEquals(assignment2, assignments); + Assignment assignment2 = createAssignment("worker-1", function2, 0); + Assert.assertEquals(assignment2.toByteArray(), assignments.toByteArray()); // make sure we also directly added the assignment to in memory assignment cache in function runtime manager - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment2)); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment2.toByteArray()))); } @Test public void testDeletingFunctions() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); // simulate function2 got removed - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)) - .build(); + FunctionMetaData function2 = new FunctionMetaData(); + function2.setFunctionDetails().setName("func-2") + .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1); functionMetaDataList.add(function1); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -326,21 +316,13 @@ public void testDeletingFunctions() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); // Delete this assignment - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment2 = createAssignment("worker-1", function2, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); //TODO: delete this assignment assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment2.getInstance()), assignment2); @@ -375,17 +357,10 @@ public void testDeletingFunctions() throws Exception { @Test public void testScalingUp() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); + FunctionMetaData function2 = createFunctionMetaData("tenant-1", "namespace-1", "func-2", 1, version); functionMetaDataList.add(function1); functionMetaDataList.add(function2); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -394,14 +369,10 @@ public void testScalingUp() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); @@ -422,16 +393,12 @@ public void testScalingUp() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); byte[] send = (byte[]) invocations.get(0).getRawArguments()[0]; - Assignment assignments = Assignment.parseFrom(send); + Assignment assignments = parseAssignment(send); log.info("assignments: {}", assignments); - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - Assert.assertEquals(assignments, assignment2); + Assignment assignment2 = createAssignment("worker-1", function2, 0); + Assert.assertEquals(assignments.toByteArray(), assignment2.toByteArray()); // updating assignments currentAssignments.get("worker-1") @@ -439,30 +406,15 @@ public void testScalingUp() throws Exception { // scale up - Function.FunctionMetaData function2Scaled = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(3)).setVersion(version) - .build(); + FunctionMetaData function2Scaled = createFunctionMetaData("tenant-1", "namespace-1", "func-2", 3, version); functionMetaDataList = new LinkedList<>(); functionMetaDataList.add(function1); functionMetaDataList.add(function2Scaled); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment2Scaled1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Scaled).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2Scaled2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Scaled).setInstanceId(1).build()) - .build(); - Function.Assignment assignment2Scaled3 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Scaled).setInstanceId(2).build()) - .build(); + Assignment assignment2Scaled1 = createAssignment("worker-1", function2Scaled, 0); + Assignment assignment2Scaled2 = createAssignment("worker-1", function2Scaled, 1); + Assignment assignment2Scaled3 = createAssignment("worker-1", function2Scaled, 2); callSchedule(); @@ -471,33 +423,22 @@ public void testScalingUp() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); - Set allAssignments = new HashSet<>(); + List allAssignmentBytesScaled = new ArrayList<>(); invocations.forEach(invocation -> { - try { - allAssignments.add(Assignment.parseFrom((byte[]) invocation.getRawArguments()[0])); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } + allAssignmentBytesScaled.add(parseAssignment((byte[]) invocation.getRawArguments()[0]).toByteArray()); }); - assertTrue(allAssignments.contains(assignment2Scaled1)); - assertTrue(allAssignments.contains(assignment2Scaled2)); - assertTrue(allAssignments.contains(assignment2Scaled3)); + assertTrue(allAssignmentBytesScaled.stream().anyMatch(b -> Arrays.equals(b, assignment2Scaled1.toByteArray()))); + assertTrue(allAssignmentBytesScaled.stream().anyMatch(b -> Arrays.equals(b, assignment2Scaled2.toByteArray()))); + assertTrue(allAssignmentBytesScaled.stream().anyMatch(b -> Arrays.equals(b, assignment2Scaled3.toByteArray()))); } @Test public void testScalingDown() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(3)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); + FunctionMetaData function2 = createFunctionMetaData("tenant-1", "namespace-1", "func-2", 3, version); functionMetaDataList.add(function1); functionMetaDataList.add(function2); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -506,14 +447,10 @@ public void testScalingDown() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); @@ -534,52 +471,27 @@ public void testScalingDown() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); - for (int i = 0; i < invocations.size(); i++) { - Invocation invocation = invocations.get(i); - byte[] send = (byte[]) invocation.getRawArguments()[0]; - Assignment assignment = Assignment.parseFrom(send); - Assignment expectedAssignment = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(i).build()) - .build(); - Assert.assertEquals(assignment, expectedAssignment); - } - - Set allAssignments = new HashSet<>(); + List allAssignmentBytes = new ArrayList<>(); invocations.forEach(invocation -> { - try { - allAssignments.add(Assignment.parseFrom((byte[]) invocation.getRawArguments()[0])); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } + allAssignmentBytes.add(parseAssignment((byte[]) invocation.getRawArguments()[0]).toByteArray()); }); - Function.Assignment assignment21 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - Function.Assignment assignment22 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(1).build()) - .build(); - Function.Assignment assignment23 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(2).build()) - .build(); - - assertTrue(allAssignments.contains(assignment21)); - assertTrue(allAssignments.contains(assignment22)); - assertTrue(allAssignments.contains(assignment23)); + Assignment assignment21 = createAssignment("worker-1", function2, 0); + Assignment assignment22 = createAssignment("worker-1", function2, 1); + Assignment assignment23 = createAssignment("worker-1", function2, 2); + + assertTrue(allAssignmentBytes.stream().anyMatch(b -> Arrays.equals(b, assignment21.toByteArray()))); + assertTrue(allAssignmentBytes.stream().anyMatch(b -> Arrays.equals(b, assignment22.toByteArray()))); + assertTrue(allAssignmentBytes.stream().anyMatch(b -> Arrays.equals(b, assignment23.toByteArray()))); // make sure we also directly add the assignment to the in memory assignment cache in function runtime manager verify(functionRuntimeManager, times(3)).processAssignment(any()); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment21)); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment22)); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment23)); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment21.toByteArray()))); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment22.toByteArray()))); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment23.toByteArray()))); // updating assignments currentAssignments.get("worker-1") @@ -591,20 +503,13 @@ public void testScalingDown() throws Exception { // scale down - Function.FunctionMetaData function2Scaled = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function2Scaled = createFunctionMetaData("tenant-1", "namespace-1", "func-2", 1, version); functionMetaDataList = new LinkedList<>(); functionMetaDataList.add(function1); functionMetaDataList.add(function2Scaled); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment2Scaled = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Scaled).setInstanceId(0).build()) - .build(); + Assignment assignment2Scaled = createAssignment("worker-1", function2Scaled, 0); callSchedule(); @@ -613,16 +518,12 @@ public void testScalingDown() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); - Set allAssignments2 = new HashSet<>(); + List allAssignmentBytes2 = new ArrayList<>(); invocations.forEach(invocation -> { - try { - allAssignments2.add(Assignment.parseFrom((byte[]) invocation.getRawArguments()[0])); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } + allAssignmentBytes2.add(parseAssignment((byte[]) invocation.getRawArguments()[0]).toByteArray()); }); - assertTrue(allAssignments2.contains(assignment2Scaled)); + assertTrue(allAssignmentBytes2.stream().anyMatch(b -> Arrays.equals(b, assignment2Scaled.toByteArray()))); // make sure we also directly removed the assignment from the in memory assignment cache in // function runtime manager @@ -633,26 +534,27 @@ public void testScalingDown() throws Exception { .deleteAssignment(eq(FunctionCommon.getFullyQualifiedInstanceId(assignment22.getInstance()))); verify(functionRuntimeManager, times(4)).processAssignment(any()); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment2Scaled)); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment2Scaled.toByteArray()))); } @Test public void testHeartbeatFunction() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); final long version = 5; final String workerId1 = "host-workerId-1"; final String workerId2 = "host-workerId-2"; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName(workerId1) - .setNamespace(SchedulerManager.HEARTBEAT_NAMESPACE) - .setTenant(SchedulerManager.HEARTBEAT_TENANT).setParallelism(1)) - .setVersion(version).build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName(workerId2) - .setNamespace(SchedulerManager.HEARTBEAT_NAMESPACE) - .setTenant(SchedulerManager.HEARTBEAT_TENANT).setParallelism(1)) - .setVersion(version).build(); + FunctionMetaData function1 = new FunctionMetaData(); + function1.setFunctionDetails().setName(workerId1) + .setNamespace(SchedulerManager.HEARTBEAT_NAMESPACE) + .setTenant(SchedulerManager.HEARTBEAT_TENANT).setParallelism(1); + function1.setVersion(version); + + FunctionMetaData function2 = new FunctionMetaData(); + function2.setFunctionDetails().setName(workerId2) + .setNamespace(SchedulerManager.HEARTBEAT_NAMESPACE) + .setTenant(SchedulerManager.HEARTBEAT_TENANT).setParallelism(1); + function2.setVersion(version); functionMetaDataList.add(function1); functionMetaDataList.add(function2); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -660,8 +562,8 @@ public void testHeartbeatFunction() throws Exception { ThreadRuntimeFactory factory = mock(ThreadRuntimeFactory.class); doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); currentAssignments.put("worker-1", assignmentEntry1); doReturn(currentAssignments).when(functionRuntimeManager).getCurrentAssignments(); @@ -681,32 +583,28 @@ public void testHeartbeatFunction() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); invocations.forEach(invocation -> { - try { - Assignment assignment = Assignment.parseFrom((byte[]) invocation.getRawArguments()[0]); - String functionName = assignment.getInstance().getFunctionMetaData().getFunctionDetails().getName(); - String assignedWorkerId = assignment.getWorkerId(); - Assert.assertEquals(functionName, assignedWorkerId); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } + Assignment assignment = parseAssignment((byte[]) invocation.getRawArguments()[0]); + String functionName = assignment.getInstance().getFunctionMetaData().getFunctionDetails().getName(); + String assignedWorkerId = assignment.getWorkerId(); + Assert.assertEquals(functionName, assignedWorkerId); }); } @Test public void testUpdate() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("/foo/bar1")) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("/foo/bar1")) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(3)).setVersion(version) - .build(); + FunctionMetaData function1 = new FunctionMetaData(); + function1.setPackageLocation().setPackagePath("/foo/bar1"); + function1.setFunctionDetails().setName("func-1") + .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1); + function1.setVersion(version); + + FunctionMetaData function2 = new FunctionMetaData(); + function2.setPackageLocation().setPackagePath("/foo/bar1"); + function2.setFunctionDetails().setName("func-2") + .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(3); + function2.setVersion(version); functionMetaDataList.add(function1); functionMetaDataList.add(function2); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -715,14 +613,10 @@ public void testUpdate() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); @@ -738,46 +632,33 @@ public void testUpdate() throws Exception { callSchedule(); - Function.Assignment assignment21 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - Function.Assignment assignment22 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(1).build()) - .build(); - Function.Assignment assignment23 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(2).build()) - .build(); + Assignment assignment21 = createAssignment("worker-1", function2, 0); + Assignment assignment22 = createAssignment("worker-1", function2, 1); + Assignment assignment23 = createAssignment("worker-1", function2, 2); List invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("send")); Assert.assertEquals(invocations.size(), 3); invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); - Set allAssignments = new HashSet<>(); + List allAssignmentBytes = new ArrayList<>(); invocations.forEach(invocation -> { - try { - allAssignments.add(Assignment.parseFrom((byte[]) invocation.getRawArguments()[0])); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } + allAssignmentBytes.add(parseAssignment((byte[]) invocation.getRawArguments()[0]).toByteArray()); }); - assertEquals(allAssignments.size(), 3); - assertTrue(allAssignments.contains(assignment21)); - assertTrue(allAssignments.contains(assignment22)); - assertTrue(allAssignments.contains(assignment23)); + assertEquals(allAssignmentBytes.size(), 3); + assertTrue(allAssignmentBytes.stream().anyMatch(b -> Arrays.equals(b, assignment21.toByteArray()))); + assertTrue(allAssignmentBytes.stream().anyMatch(b -> Arrays.equals(b, assignment22.toByteArray()))); + assertTrue(allAssignmentBytes.stream().anyMatch(b -> Arrays.equals(b, assignment23.toByteArray()))); // make sure we also directly add the assignment to the in memory assignment cache in function runtime manager verify(functionRuntimeManager, times(3)).processAssignment(any()); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment21)); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment22)); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment23)); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment21.toByteArray()))); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment22.toByteArray()))); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment23.toByteArray()))); // updating assignments currentAssignments.get("worker-1") @@ -789,31 +670,19 @@ public void testUpdate() throws Exception { // update field - Function.FunctionMetaData function2Updated = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("/foo/bar2")) - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(3)).setVersion(version) - .build(); + FunctionMetaData function2Updated = new FunctionMetaData(); + function2Updated.setPackageLocation().setPackagePath("/foo/bar2"); + function2Updated.setFunctionDetails().setName("func-2") + .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(3); + function2Updated.setVersion(version); functionMetaDataList = new LinkedList<>(); functionMetaDataList.add(function1); functionMetaDataList.add(function2Updated); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); - Function.Assignment assignment2Updated1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Updated).setInstanceId(0).build()) - .build(); - Function.Assignment assignment2Updated2 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Updated).setInstanceId(1).build()) - .build(); - Function.Assignment assignment2Updated3 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2Updated).setInstanceId(2).build()) - .build(); + Assignment assignment2Updated1 = createAssignment("worker-1", function2Updated, 0); + Assignment assignment2Updated2 = createAssignment("worker-1", function2Updated, 1); + Assignment assignment2Updated3 = createAssignment("worker-1", function2Updated, 2); callSchedule(); @@ -822,40 +691,32 @@ public void testUpdate() throws Exception { invocations = getMethodInvocationDetails(message, TypedMessageBuilder.class.getMethod("value", Object.class)); - Set allAssignments2 = new HashSet<>(); + List allAssignmentBytes3 = new ArrayList<>(); invocations.forEach(invocation -> { - try { - allAssignments2.add(Assignment.parseFrom((byte[]) invocation.getRawArguments()[0])); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } + allAssignmentBytes3.add(parseAssignment((byte[]) invocation.getRawArguments()[0]).toByteArray()); }); - assertTrue(allAssignments2.contains(assignment2Updated1)); - assertTrue(allAssignments2.contains(assignment2Updated2)); - assertTrue(allAssignments2.contains(assignment2Updated3)); + assertTrue(allAssignmentBytes3.stream().anyMatch(b -> Arrays.equals(b, assignment2Updated1.toByteArray()))); + assertTrue(allAssignmentBytes3.stream().anyMatch(b -> Arrays.equals(b, assignment2Updated2.toByteArray()))); + assertTrue(allAssignmentBytes3.stream().anyMatch(b -> Arrays.equals(b, assignment2Updated3.toByteArray()))); // make sure we also directly updated the assignment to the in memory assignment cache in // function runtime manager verify(functionRuntimeManager, times(6)).processAssignment(any()); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment2Updated1)); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment2Updated2)); - verify(functionRuntimeManager, times(1)).processAssignment(eq(assignment2Updated3)); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment2Updated1.toByteArray()))); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment2Updated2.toByteArray()))); + verify(functionRuntimeManager, times(1)).processAssignment( + argThat(a -> Arrays.equals(a.toByteArray(), assignment2Updated3.toByteArray()))); } @Test public void testAssignmentWorkerDoesNotExist() throws Exception { - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); - - Function.FunctionMetaData function2 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-2") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData function1 = createFunctionMetaData("tenant-1", "namespace-1", "func-1", 1, version); + FunctionMetaData function2 = createFunctionMetaData("tenant-1", "namespace-1", "func-2", 1, version); functionMetaDataList.add(function1); functionMetaDataList.add(function2); doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -864,25 +725,17 @@ public void testAssignmentWorkerDoesNotExist() throws Exception { doReturn(factory).when(functionRuntimeManager).getRuntimeFactory(); // set assignments - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(0).build()) - .build(); + Assignment assignment1 = createAssignment("worker-1", function1, 0); // set assignment to worker that doesn't exist / died - Function.Assignment assignment2 = Function.Assignment.newBuilder() - .setWorkerId("worker-2") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function2).setInstanceId(0).build()) - .build(); - - Map> currentAssignments = new HashMap<>(); - Map assignmentEntry1 = new HashMap<>(); + Assignment assignment2 = createAssignment("worker-2", function2, 0); + + Map> currentAssignments = new HashMap<>(); + Map assignmentEntry1 = new HashMap<>(); assignmentEntry1.put(FunctionCommon.getFullyQualifiedInstanceId(assignment1.getInstance()), assignment1); currentAssignments.put("worker-1", assignmentEntry1); - Map assignmentEntry2 = new HashMap<>(); + Map assignmentEntry2 = new HashMap<>(); assignmentEntry2.put(FunctionCommon.getFullyQualifiedInstanceId(assignment2.getInstance()), assignment2); currentAssignments.put("worker-2", assignmentEntry2); @@ -917,14 +770,11 @@ public void testDrain() throws Exception { // Set up multiple functions and assignments, so that there are more functions than workers. final int numFunctions = numWorkers * 5; - List functionMetaDataList = new LinkedList<>(); + List functionMetaDataList = new LinkedList<>(); long version = 5; for (int ix = 0; ix < numFunctions; ix++) { String funcName = "func-" + ix; - Function.FunctionMetaData func = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName(funcName) - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(version) - .build(); + FunctionMetaData func = createFunctionMetaData("tenant-1", "namespace-1", funcName, 1, version); functionMetaDataList.add(func); } doReturn(functionMetaDataList).when(functionMetaDataManager).getAllFunctionMetaData(); @@ -934,21 +784,15 @@ public void testDrain() throws Exception { // set assignments, round-robining the functions among the workers int workerIndex = 0; - List assignmentList = new LinkedList<>(); + List assignmentList = new LinkedList<>(); for (val func : functionMetaDataList) { String workerId = "worker-" + workerIndex; - Function.Assignment ass = Function.Assignment.newBuilder() - .setWorkerId(workerId) - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(func) - .setInstanceId(0) - .build()) - .build(); + Assignment ass = createAssignment(workerId, func, 0); assignmentList.add(ass); workerIndex = (workerIndex + 1) % numWorkers; } - Map> currentAssignments = new HashMap<>(); + Map> currentAssignments = new HashMap<>(); final String workerIdToDrain = "worker-0"; int numAssignmentsOnDrainedWorker = 0; @@ -956,7 +800,7 @@ public void testDrain() throws Exception { workerIndex = 0; for (val ass : assignmentList) { String workerId = "worker-" + workerIndex; - Map assignmentEntry = currentAssignments.get(workerId); + Map assignmentEntry = currentAssignments.get(workerId); if (assignmentEntry == null) { assignmentEntry = new HashMap<>(); } diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java index 5789658d978ac..3e5dc0e681d55 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/FunctionsImplTest.java @@ -63,8 +63,12 @@ import org.apache.pulsar.functions.api.Context; import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.instance.JavaInstanceRunnable; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.InstanceCommunication; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionStatus; +import org.apache.pulsar.functions.proto.MetricsData; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.apache.pulsar.functions.runtime.Runtime; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.runtime.RuntimeSpawner; @@ -97,7 +101,7 @@ public String process(String input, Context context) { private static final String outputTopic = "test-output-topic"; private static final String outputSerdeClassName = TopicSchema.DEFAULT_SERDE; private static final String className = TestFunction.class.getName(); - private Function.SubscriptionType subscriptionType = Function.SubscriptionType.FAILOVER; + private SubscriptionType subscriptionType = SubscriptionType.FAILOVER; private static final Map topicsToSerDeClassName = new HashMap<>(); static { topicsToSerDeClassName.put("test_src", TopicSchema.DEFAULT_SERDE); @@ -120,7 +124,7 @@ public String process(String input, Context context) { private FunctionsImpl resource; private InputStream mockedInputStream; private FormDataContentDisposition mockedFormData; - private Function.FunctionMetaData mockedFunctionMetadata; + private FunctionMetaData mockedFunctionMetadata; private PulsarFunctionTestTemporaryDirectory tempDirectory; @BeforeMethod @@ -136,8 +140,8 @@ public void setup() throws Exception { this.mockedPulsarAdmin = mock(PulsarAdmin.class); this.mockedTenants = mock(Tenants.class); this.mockedNamespaces = mock(Namespaces.class); - this.mockedFunctionMetadata = - Function.FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + this.mockedFunctionMetadata = new FunctionMetaData(); + this.mockedFunctionMetadata.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); namespaceList.add(tenant + "/" + namespace); this.mockedWorkerService = mock(PulsarWorkerService.class); @@ -154,26 +158,25 @@ public void setup() throws Exception { when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetadata); when(mockedManager.containsFunction(tenant, namespace, function)).thenReturn(true); when(mockedFunctionRunTimeManager.findFunctionAssignment(eq(tenant), eq(namespace), eq(function), anyInt())) - .thenReturn(Function.Assignment.newBuilder() - .setWorkerId(workerId) - .build()); + .thenReturn(new Assignment() + .setWorkerId(workerId)); - Function.FunctionDetails.Builder functionDetailsBuilder = createDefaultFunctionDetails().toBuilder(); + FunctionDetails functionDetails = new FunctionDetails().copyFrom(createDefaultFunctionDetails()); InstanceConfig instanceConfig = new InstanceConfig(); - instanceConfig.setFunctionDetails(functionDetailsBuilder.build()); + instanceConfig.setFunctionDetails(functionDetails); instanceConfig.setMaxBufferedTuples(1024); JavaInstanceRunnable javaInstanceRunnable = new JavaInstanceRunnable( instanceConfig, null, null, null, null, null, null, null, null, null); - CompletableFuture metricsDataCompletableFuture = - new CompletableFuture(); + CompletableFuture metricsDataCompletableFuture = + new CompletableFuture(); metricsDataCompletableFuture.complete(javaInstanceRunnable.getMetrics()); Runtime runtime = mock(Runtime.class); doReturn(metricsDataCompletableFuture).when(runtime).getMetrics(anyInt()); - CompletableFuture functionStatusCompletableFuture = + CompletableFuture functionStatusCompletableFuture = new CompletableFuture<>(); - functionStatusCompletableFuture.complete(javaInstanceRunnable.getFunctionStatus().build()); + functionStatusCompletableFuture.complete(javaInstanceRunnable.getFunctionStatus()); RuntimeSpawner runtimeSpawner = mock(RuntimeSpawner.class); when(runtimeSpawner.getFunctionStatus(anyInt())).thenReturn(functionStatusCompletableFuture); @@ -213,15 +216,15 @@ public void testStatusEmpty() { @Test public void testMetricsEmpty() throws PulsarClientException { - Function.FunctionDetails.Builder functionDetailsBuilder = createDefaultFunctionDetails().toBuilder(); + FunctionDetails functionDetails = new FunctionDetails().copyFrom(createDefaultFunctionDetails()); InstanceConfig instanceConfig = new InstanceConfig(); - instanceConfig.setFunctionDetails(functionDetailsBuilder.build()); + instanceConfig.setFunctionDetails(functionDetails); instanceConfig.setMaxBufferedTuples(1024); JavaInstanceRunnable javaInstanceRunnable = new JavaInstanceRunnable( instanceConfig, null, null, null, null, null, null, null, null, null); - CompletableFuture completableFuture = - new CompletableFuture(); + CompletableFuture completableFuture = + new CompletableFuture(); completableFuture.complete(javaInstanceRunnable.getMetrics()); Runtime runtime = mock(Runtime.class); doReturn(completableFuture).when(runtime).getMetrics(anyInt()); @@ -384,7 +387,7 @@ public static FunctionConfig createDefaultFunctionConfig() { return functionConfig; } - public static Function.FunctionDetails createDefaultFunctionDetails() { + public static FunctionDetails createDefaultFunctionDetails() { FunctionConfig functionConfig = createDefaultFunctionConfig(); return FunctionConfigUtils.convert(functionConfig); } diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java index b851d4a6aa452..4d5a8ab889334 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java @@ -18,26 +18,28 @@ */ package org.apache.pulsar.functions.worker.rest.api.v2; -import static org.apache.pulsar.functions.utils.FunctionCommon.mergeJson; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import com.google.gson.Gson; -import com.google.protobuf.util.JsonFormat; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; +import java.util.Map; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; import org.apache.pulsar.broker.authentication.AuthenticationParameters; import org.apache.pulsar.common.functions.FunctionConfig; import org.apache.pulsar.common.functions.UpdateOptionsImpl; import org.apache.pulsar.common.util.RestException; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.utils.FunctionConfigUtils; import org.apache.pulsar.functions.worker.rest.api.FunctionsImplV2; import org.apache.pulsar.functions.worker.rest.api.v3.AbstractFunctionApiResourceTest; @@ -62,7 +64,7 @@ protected void registerFunction(String tenant, String namespace, String function inputStream, details, functionPkgUrl, - JsonFormat.printer().print(FunctionConfigUtils.convert(functionConfig)), + FunctionConfigUtils.convert(functionConfig).toJson(), null); } protected void updateFunction(String tenant, @@ -75,7 +77,7 @@ protected void updateFunction(String tenant, AuthenticationParameters authParams, UpdateOptionsImpl updateOptions) throws IOException { resource.updateFunction(tenant, namespace, functionName, uploadedInputStream, fileDetail, functionPkgUrl, - JsonFormat.printer().print(FunctionConfigUtils.convert(functionConfig)), authParams); + FunctionConfigUtils.convert(functionConfig).toJson(), authParams); } protected File downloadFunction(final String path, final AuthenticationParameters authParams) @@ -143,16 +145,16 @@ protected List listDefaultFunctions() { ), String.class), List.class); } - private Function.FunctionDetails getDefaultFunctionInfo() throws IOException { + private FunctionDetails getDefaultFunctionInfo() throws IOException { String json = (String) resource.getFunctionInfo( TENANT, NAMESPACE, FUNCTION, AuthenticationParameters.builder().build() ).getEntity(); - Function.FunctionDetails.Builder functionDetailsBuilder = Function.FunctionDetails.newBuilder(); - mergeJson(json, functionDetailsBuilder); - return functionDetailsBuilder.build(); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.parseFromJson(json); + return functionDetails; } @Test(expectedExceptions = RestException.class, expectedExceptionsMessageRegExp = @@ -173,31 +175,31 @@ public void testGetFunctionSuccess() throws IOException { mockInstanceUtils(); when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(true); - Function.SinkSpec sinkSpec = Function.SinkSpec.newBuilder() - .setTopic(OUTPUT_TOPIC) - .setSerDeClassName(OUTPUT_SERDE_CLASS_NAME).build(); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder() - .setClassName(CLASS_NAME) - .setSink(sinkSpec) - .setName(FUNCTION) - .setNamespace(NAMESPACE) - .setProcessingGuarantees(Function.ProcessingGuarantees.ATMOST_ONCE) - .setAutoAck(true) - .setTenant(TENANT) - .setParallelism(PARALLELISM) - .setSource(Function.SourceSpec.newBuilder().setSubscriptionType(subscriptionType) - .putAllTopicsToSerDeClassName(TOPICS_TO_SER_DE_CLASS_NAME)).build(); - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder() - .setCreateTime(System.currentTimeMillis()) - .setFunctionDetails(functionDetails) - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("/path/to/package")) - .setVersion(1234) - .build(); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setClassName(CLASS_NAME); + functionDetails.setSink().setTopic(OUTPUT_TOPIC).setSerDeClassName(OUTPUT_SERDE_CLASS_NAME); + functionDetails.setName(FUNCTION); + functionDetails.setNamespace(NAMESPACE); + functionDetails.setProcessingGuarantees(ProcessingGuarantees.ATMOST_ONCE); + functionDetails.setAutoAck(true); + functionDetails.setTenant(TENANT); + functionDetails.setParallelism(PARALLELISM); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(subscriptionType); + for (Map.Entry entry : TOPICS_TO_SER_DE_CLASS_NAME.entrySet()) { + sourceSpec.putTopicsToSerDeClassName(entry.getKey(), entry.getValue()); + } + + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setCreateTime(System.currentTimeMillis()); + metaData.setFunctionDetails().copyFrom(functionDetails); + metaData.setPackageLocation().setPackagePath("/path/to/package"); + metaData.setVersion(1234); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(metaData); - Function.FunctionDetails actual = getDefaultFunctionInfo(); + FunctionDetails actual = getDefaultFunctionInfo(); assertEquals( - functionDetails, - actual); + functionDetails.toByteArray(), + actual.toByteArray()); } } diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionApiResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionApiResourceTest.java index 82ae352b7831f..f5b11c4567adc 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionApiResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionApiResourceTest.java @@ -47,9 +47,9 @@ import org.apache.pulsar.common.util.RestException; import org.apache.pulsar.functions.api.Context; import org.apache.pulsar.functions.api.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; -import org.apache.pulsar.functions.proto.Function.SubscriptionType; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.apache.pulsar.functions.source.TopicSchema; import org.apache.pulsar.functions.utils.FunctionConfigUtils; import org.apache.pulsar.functions.worker.WorkerConfig; @@ -72,12 +72,10 @@ public void testListFunctionsSuccess() { mockInstanceUtils(); final List functions = Lists.newArrayList("test-1", "test-2"); final List metaDataList = new LinkedList<>(); - FunctionMetaData functionMetaData1 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-1").build() - ).build(); - FunctionMetaData functionMetaData2 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-2").build() - ).build(); + FunctionMetaData functionMetaData1 = new FunctionMetaData(); + functionMetaData1.setFunctionDetails().setName("test-1"); + FunctionMetaData functionMetaData2 = new FunctionMetaData(); + functionMetaData2.setFunctionDetails().setName("test-2"); metaDataList.add(functionMetaData1); metaDataList.add(functionMetaData2); when(mockedManager.listFunctions(eq(TENANT), eq(NAMESPACE))).thenReturn(metaDataList); @@ -90,23 +88,17 @@ public void testListFunctionsSuccess() { public void testOnlyGetSources() { List functions = Lists.newArrayList("test-2"); List functionMetaDataList = new LinkedList<>(); - FunctionMetaData f1 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder() - .setName("test-1") - .setComponentType(FunctionDetails.ComponentType.SOURCE) - .build()).build(); + FunctionMetaData f1 = new FunctionMetaData(); + f1.setFunctionDetails().setName("test-1") + .setComponentType(FunctionDetails.ComponentType.SOURCE); functionMetaDataList.add(f1); - FunctionMetaData f2 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder() - .setName("test-2") - .setComponentType(FunctionDetails.ComponentType.FUNCTION) - .build()).build(); + FunctionMetaData f2 = new FunctionMetaData(); + f2.setFunctionDetails().setName("test-2") + .setComponentType(FunctionDetails.ComponentType.FUNCTION); functionMetaDataList.add(f2); - FunctionMetaData f3 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder() - .setName("test-3") - .setComponentType(FunctionDetails.ComponentType.SINK) - .build()).build(); + FunctionMetaData f3 = new FunctionMetaData(); + f3.setFunctionDetails().setName("test-3") + .setComponentType(FunctionDetails.ComponentType.SINK); functionMetaDataList.add(f3); when(mockedManager.listFunctions(eq(TENANT), eq(NAMESPACE))).thenReturn(functionMetaDataList); @@ -139,8 +131,8 @@ public void accept(String s) { @Override protected void doSetup() { - this.mockedFunctionMetadata = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + this.mockedFunctionMetadata = new FunctionMetaData(); + this.mockedFunctionMetadata.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetadata); } diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java index 04b4e1298b98b..7a894b579b141 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/AbstractFunctionsResourceTest.java @@ -50,7 +50,8 @@ import org.apache.pulsar.common.nar.NarClassLoader; import org.apache.pulsar.common.policies.data.TenantInfoImpl; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; import org.apache.pulsar.functions.runtime.RuntimeFactory; import org.apache.pulsar.functions.source.TopicSchema; import org.apache.pulsar.functions.utils.LoadedFunctionPackage; @@ -112,7 +113,7 @@ public abstract class AbstractFunctionsResourceTest { protected Namespace mockedNamespace; protected InputStream mockedInputStream; protected FormDataContentDisposition mockedFormData; - protected Function.FunctionMetaData mockedFunctionMetaData; + protected FunctionMetaData mockedFunctionMetaData; protected LeaderService mockedLeaderService; protected Packages mockedPackages; protected PulsarFunctionTestTemporaryDirectory tempDirectory; @@ -270,7 +271,7 @@ protected void mockInstanceUtils() { }); } - protected abstract Function.FunctionDetails.ComponentType getComponentType(); + protected abstract FunctionDetails.ComponentType getComponentType(); public static class LoadedConnector extends Connector { public LoadedConnector(ConnectorDefinition connectorDefinition) { diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java index a2593bb415a1c..265e1c4a6fd1c 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/FunctionApiV3ResourceTest.java @@ -33,6 +33,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.List; +import java.util.Map; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; import org.apache.distributedlog.api.namespace.Namespace; @@ -42,7 +43,10 @@ import org.apache.pulsar.common.functions.FunctionConfig; import org.apache.pulsar.common.functions.UpdateOptionsImpl; import org.apache.pulsar.common.util.RestException; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; +import org.apache.pulsar.functions.proto.SourceSpec; import org.apache.pulsar.functions.utils.FunctionConfigUtils; import org.apache.pulsar.functions.worker.WorkerConfig; import org.apache.pulsar.functions.worker.WorkerUtils; @@ -167,13 +171,10 @@ public void testDownloadFunctionBuiltinConnectorByName() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(true); - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath("builtin://data-generator")) - .setTransformFunctionPackageLocation( - Function.PackageLocationMetaData.newBuilder().setPackagePath("http://invalid")) - .setFunctionDetails(Function.FunctionDetails.newBuilder() - .setComponentType(Function.FunctionDetails.ComponentType.SINK)).build(); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath("builtin://data-generator"); + metaData.setTransformFunctionPackageLocation().setPackagePath("http://invalid"); + metaData.setFunctionDetails().setComponentType(FunctionDetails.ComponentType.SINK); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(metaData); registerBuiltinConnector("data-generator", file); @@ -197,15 +198,10 @@ public void testDownloadFunctionBuiltinFunctionByName() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(true); - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath("builtin://exclamation")) - .setTransformFunctionPackageLocation( - Function.PackageLocationMetaData.newBuilder().setPackagePath("http://invalid")) - .setFunctionDetails( - Function.FunctionDetails.newBuilder() - .setComponentType(Function.FunctionDetails.ComponentType.FUNCTION)) - .build(); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath("builtin://exclamation"); + metaData.setTransformFunctionPackageLocation().setPackagePath("http://invalid"); + metaData.setFunctionDetails().setComponentType(FunctionDetails.ComponentType.FUNCTION); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(metaData); registerBuiltinFunction("exclamation", file); @@ -230,11 +226,9 @@ public void testDownloadTransformFunctionByName() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(true); - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("http://invalid")) - .setTransformFunctionPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath("builtin://exclamation")) - .build(); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath("http://invalid"); + metaData.setTransformFunctionPackageLocation().setPackagePath("builtin://exclamation"); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(metaData); registerBuiltinFunction("exclamation", file); @@ -267,26 +261,25 @@ public void testGetFunctionSuccess() throws IOException { mockInstanceUtils(); when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(true); - Function.SinkSpec sinkSpec = Function.SinkSpec.newBuilder() - .setTopic(OUTPUT_TOPIC) - .setSerDeClassName(OUTPUT_SERDE_CLASS_NAME).build(); - Function.FunctionDetails functionDetails = Function.FunctionDetails.newBuilder() - .setClassName(CLASS_NAME) - .setSink(sinkSpec) - .setAutoAck(true) - .setName(FUNCTION) - .setNamespace(NAMESPACE) - .setProcessingGuarantees(Function.ProcessingGuarantees.ATMOST_ONCE) - .setTenant(TENANT) - .setParallelism(PARALLELISM) - .setSource(Function.SourceSpec.newBuilder().setSubscriptionType(subscriptionType) - .putAllTopicsToSerDeClassName(TOPICS_TO_SER_DE_CLASS_NAME)).build(); - Function.FunctionMetaData metaData = Function.FunctionMetaData.newBuilder() - .setCreateTime(System.currentTimeMillis()) - .setFunctionDetails(functionDetails) - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("/path/to/package")) - .setVersion(1234) - .build(); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setClassName(CLASS_NAME); + functionDetails.setSink().setTopic(OUTPUT_TOPIC).setSerDeClassName(OUTPUT_SERDE_CLASS_NAME); + functionDetails.setAutoAck(true); + functionDetails.setName(FUNCTION); + functionDetails.setNamespace(NAMESPACE); + functionDetails.setProcessingGuarantees(ProcessingGuarantees.ATMOST_ONCE); + functionDetails.setTenant(TENANT); + functionDetails.setParallelism(PARALLELISM); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(subscriptionType); + for (Map.Entry entry : TOPICS_TO_SER_DE_CLASS_NAME.entrySet()) { + sourceSpec.putTopicsToSerDeClassName(entry.getKey(), entry.getValue()); + } + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setCreateTime(System.currentTimeMillis()); + metaData.setFunctionDetails().copyFrom(functionDetails); + metaData.setPackageLocation().setPackagePath("/path/to/package"); + metaData.setVersion(1234); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(FUNCTION))).thenReturn(metaData); FunctionConfig functionConfig = getDefaultFunctionInfo(); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java index 4e0a624332dde..7a8cd5ae5b6d6 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SinkApiV3ResourceTest.java @@ -18,7 +18,7 @@ */ package org.apache.pulsar.functions.worker.rest.api.v3; -import static org.apache.pulsar.functions.proto.Function.ProcessingGuarantees.ATLEAST_ONCE; +import static org.apache.pulsar.functions.proto.ProcessingGuarantees.ATLEAST_ONCE; import static org.apache.pulsar.functions.source.TopicSchema.DEFAULT_SERDE; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyString; @@ -55,9 +55,10 @@ import org.apache.pulsar.functions.api.examples.RecordFunction; import org.apache.pulsar.functions.api.utils.IdentityFunction; import org.apache.pulsar.functions.instance.InstanceUtils; -import org.apache.pulsar.functions.proto.Function; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.SourceSpec; +import org.apache.pulsar.functions.proto.SubscriptionType; import org.apache.pulsar.functions.utils.SinkConfigUtils; import org.apache.pulsar.functions.worker.WorkerConfig; import org.apache.pulsar.functions.worker.WorkerUtils; @@ -89,8 +90,8 @@ protected void customizeWorkerConfig(WorkerConfig workerConfig, Method method) { } } @Override - protected Function.FunctionDetails.ComponentType getComponentType() { - return Function.FunctionDetails.ComponentType.SINK; + protected FunctionDetails.ComponentType getComponentType() { + return FunctionDetails.ComponentType.SINK; } @Override @@ -815,7 +816,7 @@ private void updateDefaultSinkWithPackageUrl(String packageUrl) throws Exception SinkConfig sinkConfig = createDefaultSinkConfig(); this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + createFunctionMetaDataFromDetails(); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetaData); try (FileInputStream inputStream = new FileInputStream(getPulsarIODataGenNar())) { @@ -882,7 +883,7 @@ public void testUpdateSinkWithUrl() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(true); this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + createFunctionMetaDataFromDetails(); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetaData); resource.updateSink( @@ -962,7 +963,7 @@ public void testUpdateSinkDifferentTransformFunction() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(true); this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + createFunctionMetaDataFromDetails(); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(mockedFunctionMetaData); when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(true); @@ -1069,7 +1070,7 @@ public void testDeregisterSinkFailure() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(true); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))) - .thenReturn(FunctionMetaData.newBuilder().build()); + .thenReturn(new FunctionMetaData()); doThrow(new IllegalArgumentException("sink failed to deregister")) .when(mockedManager).updateFunctionOnLeader(any(FunctionMetaData.class), Mockito.anyBoolean()); @@ -1089,7 +1090,7 @@ public void testDeregisterSinkInterrupted() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(true); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))) - .thenReturn(FunctionMetaData.newBuilder().build()); + .thenReturn(new FunctionMetaData()); doThrow(new IllegalStateException("Function deregistration interrupted")) .when(mockedManager).updateFunctionOnLeader(any(FunctionMetaData.class), Mockito.anyBoolean()); @@ -1112,11 +1113,9 @@ public void testDeregisterSinkBKPackageCleanup() { "public/default/test/591541f0-c7c5-40c0-983b-610c722f90b0-pulsar-io-batch-data-generator-2.7.0.nar"; String transformFunctionPackagePath = "public/default/test/591541f0-c7c5-40c0-983b-610c722f90b0-test-function.nar"; - FunctionMetaData functionMetaData = FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath(packagePath)) - .setTransformFunctionPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath(transformFunctionPackagePath)) - .build(); + FunctionMetaData functionMetaData = new FunctionMetaData(); + functionMetaData.setPackageLocation().setPackagePath(packagePath); + functionMetaData.setTransformFunctionPackageLocation().setPackagePath(transformFunctionPackagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))) .thenReturn(functionMetaData); @@ -1136,11 +1135,9 @@ public void testDeregisterBuiltinSinkBKPackageCleanup() { String packagePath = String.format("%s://data-generator", Utils.BUILTIN); String transformFunctionPackagePath = String.format("%s://exclamation", Utils.BUILTIN); - FunctionMetaData functionMetaData = FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath(packagePath)) - .setTransformFunctionPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath(transformFunctionPackagePath)) - .build(); + FunctionMetaData functionMetaData = new FunctionMetaData(); + functionMetaData.setPackageLocation().setPackagePath(packagePath); + functionMetaData.setTransformFunctionPackageLocation().setPackagePath(transformFunctionPackagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))) .thenReturn(functionMetaData); @@ -1161,11 +1158,9 @@ public void testDeregisterHTTPSinkBKPackageCleanup() { String packagePath = "http://foo.com/connector.jar"; String transformFunctionPackagePath = "http://foo.com/function.jar"; - FunctionMetaData functionMetaData = FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath(packagePath)) - .setTransformFunctionPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath(transformFunctionPackagePath)) - .build(); + FunctionMetaData functionMetaData = new FunctionMetaData(); + functionMetaData.setPackageLocation().setPackagePath(packagePath); + functionMetaData.setTransformFunctionPackageLocation().setPackagePath(transformFunctionPackagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))) .thenReturn(functionMetaData); @@ -1187,11 +1182,9 @@ public void testDeregisterFileSinkBKPackageCleanup() { String packagePath = "file://foo/connector.jar"; String transformFunctionPackagePath = "file://foo/function.jar"; - FunctionMetaData functionMetaData = FunctionMetaData.newBuilder() - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath(packagePath)) - .setTransformFunctionPackageLocation(Function.PackageLocationMetaData.newBuilder() - .setPackagePath(transformFunctionPackagePath)) - .build(); + FunctionMetaData functionMetaData = new FunctionMetaData(); + functionMetaData.setPackageLocation().setPackagePath(packagePath); + functionMetaData.setTransformFunctionPackageLocation().setPackagePath(transformFunctionPackagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))) .thenReturn(functionMetaData); @@ -1288,32 +1281,26 @@ public void testGetNotExistedSink() { public void testGetSinkSuccess() { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(true); - Function.SourceSpec sourceSpec = Function.SourceSpec.newBuilder() - .setSubscriptionType(Function.SubscriptionType.SHARED) - .setSubscriptionName(SUBSCRIPTION_NAME) - .putInputSpecs("input", Function.ConsumerSpec.newBuilder() - .setSerdeClassName(DEFAULT_SERDE) - .setIsRegexPattern(false) - .build()).build(); - Function.SinkSpec sinkSpec = Function.SinkSpec.newBuilder() - .setBuiltin("jdbc") - .build(); - FunctionDetails functionDetails = FunctionDetails.newBuilder() - .setClassName(IdentityFunction.class.getName()) - .setSink(sinkSpec) - .setName(sink) - .setNamespace(NAMESPACE) - .setProcessingGuarantees(ATLEAST_ONCE) - .setTenant(TENANT) - .setParallelism(PARALLELISM) - .setRuntime(FunctionDetails.Runtime.JAVA) - .setSource(sourceSpec).build(); - FunctionMetaData metaData = FunctionMetaData.newBuilder() - .setCreateTime(System.currentTimeMillis()) - .setFunctionDetails(functionDetails) - .setPackageLocation(Function.PackageLocationMetaData.newBuilder().setPackagePath("/path/to/package")) - .setVersion(1234) - .build(); + FunctionDetails functionDetails = new FunctionDetails(); + functionDetails.setClassName(IdentityFunction.class.getName()); + functionDetails.setSink().setBuiltin("jdbc"); + functionDetails.setName(sink); + functionDetails.setNamespace(NAMESPACE); + functionDetails.setProcessingGuarantees(ATLEAST_ONCE); + functionDetails.setTenant(TENANT); + functionDetails.setParallelism(PARALLELISM); + functionDetails.setRuntime(FunctionDetails.Runtime.JAVA); + SourceSpec sourceSpec = functionDetails.setSource(); + sourceSpec.setSubscriptionType(SubscriptionType.SHARED); + sourceSpec.setSubscriptionName(SUBSCRIPTION_NAME); + sourceSpec.putInputSpecs("input") + .setSerdeClassName(DEFAULT_SERDE) + .setIsRegexPattern(false); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setCreateTime(System.currentTimeMillis()); + metaData.setFunctionDetails().copyFrom(functionDetails); + metaData.setPackageLocation().setPackagePath("/path/to/package"); + metaData.setVersion(1234); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(sink))).thenReturn(metaData); getDefaultSinkInfo(); @@ -1381,12 +1368,12 @@ public void testListSinksSuccess() { mockInstanceUtils(); final List functions = Lists.newArrayList("test-1", "test-2"); final List functionMetaDataList = new LinkedList<>(); - functionMetaDataList.add(FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-1").build() - ).build()); - functionMetaDataList.add(FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-2").build() - ).build()); + FunctionMetaData fmd1 = new FunctionMetaData(); + fmd1.setFunctionDetails().setName("test-1"); + functionMetaDataList.add(fmd1); + FunctionMetaData fmd2 = new FunctionMetaData(); + fmd2.setFunctionDetails().setName("test-2"); + functionMetaDataList.add(fmd2); when(mockedManager.listFunctions(eq(TENANT), eq(NAMESPACE))).thenReturn(functionMetaDataList); List sinkList = listDefaultSinks(); @@ -1397,14 +1384,14 @@ public void testListSinksSuccess() { public void testOnlyGetSinks() { final List functions = Lists.newArrayList("test-3"); final List functionMetaDataList = new LinkedList<>(); - FunctionMetaData f1 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-1").build()).build(); + FunctionMetaData f1 = new FunctionMetaData(); + f1.setFunctionDetails().setName("test-1"); functionMetaDataList.add(f1); - FunctionMetaData f2 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-2").build()).build(); + FunctionMetaData f2 = new FunctionMetaData(); + f2.setFunctionDetails().setName("test-2"); functionMetaDataList.add(f2); - FunctionMetaData f3 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-3").build()).build(); + FunctionMetaData f3 = new FunctionMetaData(); + f3.setFunctionDetails().setName("test-3"); functionMetaDataList.add(f3); when(mockedManager.listFunctions(eq(TENANT), eq(NAMESPACE))).thenReturn(functionMetaDataList); @@ -1457,7 +1444,7 @@ private SinkConfig createDefaultSinkConfig() { private void mockFunctionCommon(String tenant, String namespace, String sink) throws IOException { this.mockedFunctionMetaData = - Function.FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + createFunctionMetaDataFromDetails(); when(mockedManager.getFunctionMetaData(eq(tenant), eq(namespace), eq(sink))).thenReturn(mockedFunctionMetaData); when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(sink))).thenReturn(true); @@ -1468,6 +1455,12 @@ private FunctionDetails createDefaultFunctionDetails() throws IOException { new SinkConfigUtils.ExtractedSinkDetails(null, null, null)); } + private FunctionMetaData createFunctionMetaDataFromDetails() throws IOException { + FunctionMetaData fmd = new FunctionMetaData(); + fmd.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); + return fmd; + } + /* Externally managed runtime, uploadBuiltinSinksSources == false diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java index a3e8bca64ce7b..d22b70200d276 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v3/SourceApiV3ResourceTest.java @@ -49,12 +49,9 @@ import org.apache.pulsar.common.util.ClassLoaderUtils; import org.apache.pulsar.common.util.RestException; import org.apache.pulsar.functions.api.utils.IdentityFunction; -import org.apache.pulsar.functions.proto.Function.FunctionDetails; -import org.apache.pulsar.functions.proto.Function.FunctionMetaData; -import org.apache.pulsar.functions.proto.Function.PackageLocationMetaData; -import org.apache.pulsar.functions.proto.Function.ProcessingGuarantees; -import org.apache.pulsar.functions.proto.Function.SinkSpec; -import org.apache.pulsar.functions.proto.Function.SourceSpec; +import org.apache.pulsar.functions.proto.FunctionDetails; +import org.apache.pulsar.functions.proto.FunctionMetaData; +import org.apache.pulsar.functions.proto.ProcessingGuarantees; import org.apache.pulsar.functions.source.TopicSchema; import org.apache.pulsar.functions.utils.SourceConfigUtils; import org.apache.pulsar.functions.utils.io.ConnectorUtils; @@ -853,8 +850,8 @@ private void mockFunctionCommon(String tenant, String namespace, String function mockStatic(ClassLoaderUtils.class, c -> { }); - this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + this.mockedFunctionMetaData = new FunctionMetaData(); + this.mockedFunctionMetaData.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetaData); when(mockedManager.containsFunction(eq(tenant), eq(namespace), eq(function))).thenReturn(true); @@ -867,8 +864,8 @@ private void updateDefaultSource() throws Exception { private void updateDefaultSourceWithPackageUrl(String packageUrl) throws Exception { SourceConfig sourceConfig = createDefaultSourceConfig(); - this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + this.mockedFunctionMetaData = new FunctionMetaData(); + this.mockedFunctionMetaData.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetaData); resource.updateSource( @@ -906,8 +903,8 @@ public void testUpdateSourceUploadFailure() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); SourceConfig sourceConfig = createDefaultSourceConfig(); - this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + this.mockedFunctionMetaData = new FunctionMetaData(); + this.mockedFunctionMetaData.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetaData); try (InputStream inputStream = new FileInputStream(getPulsarIODataGenNar())) { @@ -950,8 +947,8 @@ public void testUpdateSourceWithUrl() throws Exception { mockStatic(ClassLoaderUtils.class, c -> { }); - this.mockedFunctionMetaData = - FunctionMetaData.newBuilder().setFunctionDetails(createDefaultFunctionDetails()).build(); + this.mockedFunctionMetaData = new FunctionMetaData(); + this.mockedFunctionMetaData.setFunctionDetails().copyFrom(createDefaultFunctionDetails()); when(mockedManager.getFunctionMetaData(any(), any(), any())).thenReturn(mockedFunctionMetaData); resource.updateSource( @@ -1104,7 +1101,7 @@ public void testDeregisterSourceSuccess() { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().build()); + .thenReturn(new FunctionMetaData()); deregisterDefaultSource(); } @@ -1115,7 +1112,7 @@ public void testDeregisterSourceFailure() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().build()); + .thenReturn(new FunctionMetaData()); doThrow(new IllegalArgumentException("source failed to deregister")) .when(mockedManager).updateFunctionOnLeader(any(FunctionMetaData.class), Mockito.anyBoolean()); @@ -1134,7 +1131,7 @@ public void testDeregisterSourceInterrupted() throws Exception { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().build()); + .thenReturn(new FunctionMetaData()); doThrow(new IllegalStateException("Function deregistration interrupted")) .when(mockedManager).updateFunctionOnLeader(any(FunctionMetaData.class), Mockito.anyBoolean()); @@ -1154,9 +1151,10 @@ public void testDeregisterSourceBKPackageCleanup() throws IOException { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath(packagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().setPackageLocation( - PackageLocationMetaData.newBuilder().setPackagePath(packagePath).build()).build()); + .thenReturn(metaData); deregisterDefaultSource(); ctx.verify(() -> { @@ -1173,9 +1171,10 @@ public void testDeregisterBuiltinSourceBKPackageCleanup() throws IOException { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath(packagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().setPackageLocation( - PackageLocationMetaData.newBuilder().setPackagePath(packagePath).build()).build()); + .thenReturn(metaData); deregisterDefaultSource(); // if the source is a builtin source we shouldn't try to clean it up @@ -1192,9 +1191,10 @@ public void testDeregisterHTTPSourceBKPackageCleanup() throws IOException { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath(packagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().setPackageLocation( - PackageLocationMetaData.newBuilder().setPackagePath(packagePath).build()).build()); + .thenReturn(metaData); deregisterDefaultSource(); // if the source is a is download from a http url, we shouldn't try to clean it up @@ -1212,9 +1212,10 @@ public void testDeregisterFileSourceBKPackageCleanup() throws IOException { try (final MockedStatic ctx = Mockito.mockStatic(WorkerUtils.class)) { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); + FunctionMetaData metaData = new FunctionMetaData(); + metaData.setPackageLocation().setPackagePath(packagePath); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))) - .thenReturn(FunctionMetaData.newBuilder().setPackageLocation( - PackageLocationMetaData.newBuilder().setPackagePath(packagePath).build()).build()); + .thenReturn(metaData); deregisterDefaultSource(); // if the source has a file url, we shouldn't try to clean it up @@ -1309,27 +1310,24 @@ public void testGetNotExistedSource() { public void testGetSourceSuccess() { when(mockedManager.containsFunction(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(true); - SourceSpec sourceSpec = SourceSpec.newBuilder().setBuiltin("jdbc").build(); - SinkSpec sinkSpec = SinkSpec.newBuilder() - .setTopic(outputTopic) - .setSerDeClassName(outputSerdeClassName).build(); - FunctionDetails functionDetails = FunctionDetails.newBuilder() + FunctionDetails functionDetails = new FunctionDetails() .setClassName(IdentityFunction.class.getName()) - .setSink(sinkSpec) .setName(source) .setNamespace(NAMESPACE) .setProcessingGuarantees(ProcessingGuarantees.ATLEAST_ONCE) .setRuntime(FunctionDetails.Runtime.JAVA) .setAutoAck(true) .setTenant(TENANT) - .setParallelism(PARALLELISM) - .setSource(sourceSpec).build(); - FunctionMetaData metaData = FunctionMetaData.newBuilder() + .setParallelism(PARALLELISM); + functionDetails.setSource().setBuiltin("jdbc"); + functionDetails.setSink() + .setTopic(outputTopic) + .setSerDeClassName(outputSerdeClassName); + FunctionMetaData metaData = new FunctionMetaData() .setCreateTime(System.currentTimeMillis()) - .setFunctionDetails(functionDetails) - .setPackageLocation(PackageLocationMetaData.newBuilder().setPackagePath("/path/to/package")) - .setVersion(1234) - .build(); + .setVersion(1234); + metaData.setFunctionDetails().copyFrom(functionDetails); + metaData.setPackageLocation().setPackagePath("/path/to/package"); when(mockedManager.getFunctionMetaData(eq(TENANT), eq(NAMESPACE), eq(source))).thenReturn(metaData); SourceConfig config = getDefaultSourceInfo(); @@ -1389,12 +1387,12 @@ private List listDefaultSources() { public void testListSourcesSuccess() { final List functions = Lists.newArrayList("test-1", "test-2"); final List functionMetaDataList = new LinkedList<>(); - functionMetaDataList.add(FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-1").build() - ).build()); - functionMetaDataList.add(FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder().setName("test-2").build() - ).build()); + FunctionMetaData md1 = new FunctionMetaData(); + md1.setFunctionDetails().setName("test-1"); + functionMetaDataList.add(md1); + FunctionMetaData md2 = new FunctionMetaData(); + md2.setFunctionDetails().setName("test-2"); + functionMetaDataList.add(md2); when(mockedManager.listFunctions(eq(TENANT), eq(NAMESPACE))).thenReturn(functionMetaDataList); List sourceList = listDefaultSources(); @@ -1405,23 +1403,20 @@ public void testListSourcesSuccess() { public void testOnlyGetSources() { final List functions = Lists.newArrayList("test-1"); final List functionMetaDataList = new LinkedList<>(); - FunctionMetaData f1 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder() - .setName("test-1") - .setComponentType(FunctionDetails.ComponentType.SOURCE) - .build()).build(); + FunctionMetaData f1 = new FunctionMetaData(); + f1.setFunctionDetails() + .setName("test-1") + .setComponentType(FunctionDetails.ComponentType.SOURCE); functionMetaDataList.add(f1); - FunctionMetaData f2 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder() - .setName("test-2") - .setComponentType(FunctionDetails.ComponentType.FUNCTION) - .build()).build(); + FunctionMetaData f2 = new FunctionMetaData(); + f2.setFunctionDetails() + .setName("test-2") + .setComponentType(FunctionDetails.ComponentType.FUNCTION); functionMetaDataList.add(f2); - FunctionMetaData f3 = FunctionMetaData.newBuilder().setFunctionDetails( - FunctionDetails.newBuilder() - .setName("test-3") - .setComponentType(FunctionDetails.ComponentType.SINK) - .build()).build(); + FunctionMetaData f3 = new FunctionMetaData(); + f3.setFunctionDetails() + .setName("test-3") + .setComponentType(FunctionDetails.ComponentType.SINK); functionMetaDataList.add(f3); when(mockedManager.listFunctions(eq(TENANT), eq(NAMESPACE))).thenReturn(functionMetaDataList); List sourceList = listDefaultSources(); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinSchedulerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinSchedulerTest.java index e3cf0ed5413cd..ef06672ca7149 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinSchedulerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/scheduler/RoundRobinSchedulerTest.java @@ -25,7 +25,8 @@ import java.util.Map; import java.util.Set; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.functions.proto.Function; +import org.apache.pulsar.functions.proto.Assignment; +import org.apache.pulsar.functions.proto.FunctionMetaData; import org.testng.Assert; import org.testng.annotations.Test; @@ -34,20 +35,18 @@ public class RoundRobinSchedulerTest { @Test public void testRebalance() { - Function.FunctionMetaData function1 = Function.FunctionMetaData.newBuilder() - .setFunctionDetails(Function.FunctionDetails.newBuilder().setName("func-1") - .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1)).setVersion(0) - .build(); + FunctionMetaData function1 = new FunctionMetaData(); + function1.setFunctionDetails().setName("func-1") + .setNamespace("namespace-1").setTenant("tenant-1").setParallelism(1); + function1.setVersion(0); - List assignments = new LinkedList<>(); + List assignments = new LinkedList<>(); for (int i = 0; i < 10; i++) { - Function.Assignment assignment1 = Function.Assignment.newBuilder() - .setWorkerId("worker-1") - .setInstance(Function.Instance.newBuilder() - .setFunctionMetaData(function1).setInstanceId(i).build()) - .build(); - - assignments.add(assignment1); + Assignment assignment = new Assignment(); + assignment.setWorkerId("worker-1"); + assignment.setInstance().setFunctionMetaData().copyFrom(function1); + assignment.getInstance().setInstanceId(i); + assignments.add(assignment); } Set workers = new HashSet<>(); @@ -57,10 +56,10 @@ public void testRebalance() { RoundRobinScheduler roundRobinScheduler = new RoundRobinScheduler(); - List newAssignments = roundRobinScheduler.rebalance(assignments, workers); + List newAssignments = roundRobinScheduler.rebalance(assignments, workers); Map workerAssignments = new HashMap<>(); - for (Function.Assignment assignment : newAssignments) { + for (Assignment assignment : newAssignments) { Integer count = workerAssignments.get((assignment.getWorkerId())); if (count == null) { count = 0; From 0c285f4cd8ed4f43fc20f5be3a5f64196aea2efd Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 18:06:51 -0700 Subject: [PATCH 12/22] [fix][test] Fix flaky testLoadBalancerServiceUnitTableViewSyncer (#25427) --- build.gradle.kts | 1 + .../ExtensibleLoadManagerImplBaseTest.java | 14 ++- .../ExtensibleLoadManagerImplTest.java | 91 ++++++++++++++----- 3 files changed, 84 insertions(+), 22 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b2949af6591be..e14c968cc4979 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -92,6 +92,7 @@ idea { } } } + } } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java index 71ebaf3944823..d292e2ebc5b74 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplBaseTest.java @@ -87,6 +87,7 @@ protected ServiceConfiguration getDefaultConf() { } protected ArrayList clients = new ArrayList<>(); + private final java.util.Map originalLookupServices = new java.util.HashMap<>(); @DataProvider(name = "serviceUnitStateTableViewClassName") public static Object[][] serviceUnitStateTableViewClassName() { @@ -152,7 +153,10 @@ protected void setup() throws Exception { lookupService = (LookupService) FieldUtils.readDeclaredField(pulsarClient, "lookup", true); for (int i = 0; i < 4; i++) { - clients.add(pulsarClient(lookupUrl.toString(), 100)); + PulsarClient client = pulsarClient(lookupUrl.toString(), 100); + clients.add(client); + originalLookupServices.put(client, + (LookupService) FieldUtils.readDeclaredField(client, "lookup", true)); } } @@ -196,6 +200,14 @@ protected void initializeState() throws PulsarAdminException, IllegalAccessExcep admin.namespaces().unload(defaultTestNamespace); reset(primaryLoadManager, secondaryLoadManager); FieldUtils.writeDeclaredField(pulsarClient, "lookup", lookupService, true); + // Restore original lookup services for all shared clients to prevent state leakage + // between tests when a previous test fails before resetting spied lookup services. + for (PulsarClient client : clients) { + LookupService original = originalLookupServices.get(client); + if (original != null) { + FieldUtils.writeDeclaredField(client, "lookup", original, true); + } + } pulsar1.getConfig().setLoadBalancerMultiPhaseBundleUnload(true); pulsar2.getConfig().setLoadBalancerMultiPhaseBundleUnload(true); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java index 368bcba4a6017..af071f35b01bb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java @@ -88,6 +88,7 @@ import org.apache.pulsar.broker.loadbalance.LeaderBroker; import org.apache.pulsar.broker.loadbalance.LeaderElectionService; import org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitState; +import org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitStateChannel; import org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitStateChannelImpl; import org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitStateMetadataStoreTableViewImpl; import org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitStateTableViewImpl; @@ -774,7 +775,9 @@ public static void testUnloadClientReconnectionWithLookup(List cli for (var consumer : consumers) { consumer.close(); } - resetLookupService(pulsarClient, lookup.getLeft()); + if (lookup != null) { + resetLookupService(pulsarClient, lookup.getLeft()); + } } } @@ -1243,31 +1246,54 @@ public void testDeployAndRollbackLoadManager() throws Exception { pulsar.getBrokerId(), pulsar.getBrokerServiceUrl()); } } - // Check if the broker is available + // Simulate broker going offline: clean ownerships first (as disableBroker() does), + // then unregister from the broker registry. var wrapper = (ExtensibleLoadManagerWrapper) pulsar4.getLoadManager().get(); var loadManager4 = spy((ExtensibleLoadManagerImpl) FieldUtils.readField(wrapper, "loadManager", true)); - loadManager4.getBrokerRegistry().unregister(); + ServiceUnitStateChannel channel4 = (ServiceUnitStateChannel) + FieldUtils.readField(loadManager4, "serviceUnitStateChannel", true); + channel4.cleanOwnerships(); + // Simulate broker going offline by removing it from the broker registry. + // Set state to Closed BEFORE deleting the ZK node to prevent the notification + // handler's session-expiry recovery from auto-re-registering broker4. + // In production, the PulsarService shuts down after unregister(), so the handler + // never fires. In tests, the service stays running, creating a race. + var registry4 = (BrokerRegistryImpl) loadManager4.getBrokerRegistry(); + registry4.state.set(BrokerRegistryImpl.State.Closed); + String brokerZkPath = "/loadbalance/brokers/" + pulsar4.getBrokerId(); + pulsar4.getLocalMetadataStore().delete(brokerZkPath, Optional.empty()).get(); NamespaceName slaMonitorNamespace = getSLAMonitorNamespace(pulsar4.getBrokerId(), pulsar.getConfiguration()); String slaMonitorTopic = slaMonitorNamespace.getPersistentTopicName("test"); + // Wait for ownership to be reassigned after broker unregistration + String pulsar4BrokerUrl = pulsar4.getBrokerServiceUrl(); + Awaitility.await().atMost(30, TimeUnit.SECONDS).ignoreExceptions().untilAsserted(() -> { + String lookupResult = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); + assertNotNull(lookupResult); + assertNotEquals(lookupResult, pulsar4BrokerUrl); + }); String result = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); - assertNotNull(result); log.info("{} Namespace is re-owned by {}", slaMonitorTopic, result); - assertNotEquals(result, pulsar4.getBrokerServiceUrl()); Producer producer = pulsar.getClient().newProducer(Schema.STRING) .topic(slaMonitorTopic).create(); producer.send("t1"); // Test re-register broker and check the lookup result - loadManager4.getBrokerRegistry().registerAsync().get(); - + // Reset state to Started to allow re-registration. + registry4.state.set(BrokerRegistryImpl.State.Started); + registry4.registerAsync().get(); + + // Wait for ownership to be reassigned back to pulsar4 after re-registration + Awaitility.await().atMost(30, TimeUnit.SECONDS).ignoreExceptions().untilAsserted(() -> { + String reRegResult = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); + assertNotNull(reRegResult); + assertEquals(reRegResult, pulsar4.getBrokerServiceUrl()); + }); result = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); - assertNotNull(result); log.info("{} Namespace is re-owned by {}", slaMonitorTopic, result); - assertEquals(result, pulsar4.getBrokerServiceUrl()); producer.send("t2"); Producer producer1 = pulsar.getClient().newProducer(Schema.STRING) @@ -1331,10 +1357,10 @@ public void testLoadBalancerServiceUnitTableViewSyncer() throws Exception { assertTrue(pulsar2.getConfiguration().isLoadBalancerServiceUnitTableViewSyncerEnabled())); makeSecondaryAsLeader(); makePrimaryAsLeader(); - Awaitility.await() + Awaitility.await().atMost(30, TimeUnit.SECONDS) .untilAsserted(() -> assertTrue(primaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); - Awaitility.await() + Awaitility.await().atMost(30, TimeUnit.SECONDS) .untilAsserted(() -> assertFalse(secondaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); ServiceConfiguration defaultConf = getDefaultConf(); @@ -1466,31 +1492,54 @@ public void testLoadBalancerServiceUnitTableViewSyncer() throws Exception { pulsar.getBrokerId(), pulsar.getBrokerServiceUrl()); } } - // Check if the broker is available + // Simulate broker going offline: clean ownerships first (as disableBroker() does), + // then unregister from the broker registry. var wrapper = (ExtensibleLoadManagerWrapper) pulsar4.getLoadManager().get(); var loadManager4 = spy((ExtensibleLoadManagerImpl) FieldUtils.readField(wrapper, "loadManager", true)); - loadManager4.getBrokerRegistry().unregister(); + ServiceUnitStateChannel channel4 = (ServiceUnitStateChannel) + FieldUtils.readField(loadManager4, "serviceUnitStateChannel", true); + channel4.cleanOwnerships(); + // Simulate broker going offline by removing it from the broker registry. + // Set state to Closed BEFORE deleting the ZK node to prevent the notification + // handler's session-expiry recovery from auto-re-registering broker4. + // In production, the PulsarService shuts down after unregister(), so the handler + // never fires. In tests, the service stays running, creating a race. + var registry4 = (BrokerRegistryImpl) loadManager4.getBrokerRegistry(); + registry4.state.set(BrokerRegistryImpl.State.Closed); + String brokerZkPath = "/loadbalance/brokers/" + pulsar4.getBrokerId(); + pulsar4.getLocalMetadataStore().delete(brokerZkPath, Optional.empty()).get(); NamespaceName slaMonitorNamespace = getSLAMonitorNamespace(pulsar4.getBrokerId(), pulsar.getConfiguration()); String slaMonitorTopic = slaMonitorNamespace.getPersistentTopicName("test"); + // Wait for ownership to be reassigned after broker unregistration + String pulsar4BrokerUrl = pulsar4.getBrokerServiceUrl(); + Awaitility.await().atMost(30, TimeUnit.SECONDS).ignoreExceptions().untilAsserted(() -> { + String lookupResult = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); + assertNotNull(lookupResult); + assertNotEquals(lookupResult, pulsar4BrokerUrl); + }); String result = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); - assertNotNull(result); log.info("{} Namespace is re-owned by {}", slaMonitorTopic, result); - assertNotEquals(result, pulsar4.getBrokerServiceUrl()); Producer producer = pulsar.getClient().newProducer(Schema.STRING) .topic(slaMonitorTopic).create(); producer.send("t1"); // Test re-register broker and check the lookup result - loadManager4.getBrokerRegistry().registerAsync().get(); - + // Reset state to Started to allow re-registration. + registry4.state.set(BrokerRegistryImpl.State.Started); + registry4.registerAsync().get(); + + // Wait for ownership to be reassigned back to pulsar4 after re-registration + Awaitility.await().atMost(30, TimeUnit.SECONDS).ignoreExceptions().untilAsserted(() -> { + String reRegResult = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); + assertNotNull(reRegResult); + assertEquals(reRegResult, pulsar4.getBrokerServiceUrl()); + }); result = pulsar.getAdminClient().lookups().lookupTopic(slaMonitorTopic); - assertNotNull(result); log.info("{} Namespace is re-owned by {}", slaMonitorTopic, result); - assertEquals(result, pulsar4.getBrokerServiceUrl()); producer.send("t2"); Producer producer1 = pulsar.getClient().newProducer(Schema.STRING) @@ -1520,10 +1569,10 @@ public void testLoadBalancerServiceUnitTableViewSyncer() throws Exception { Awaitility.await().untilAsserted(() -> assertFalse(pulsar2.getConfiguration().isLoadBalancerServiceUnitTableViewSyncerEnabled())); makeSecondaryAsLeader(); - Awaitility.await() + Awaitility.await().atMost(30, TimeUnit.SECONDS) .untilAsserted(() -> assertFalse(primaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); - Awaitility.await() + Awaitility.await().atMost(30, TimeUnit.SECONDS) .untilAsserted(() -> assertFalse(secondaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); } From a7204e0e77b81167362c88bceb58dc3de7970708 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 21:07:58 -0700 Subject: [PATCH 13/22] [improve][test] Fix try-with-resources compile warnings in test code (#25429) --- .../apache/bookkeeper/mledger/impl/ManagedCursorTest.java | 2 ++ .../apache/bookkeeper/mledger/impl/ManagedLedgerTest.java | 1 + .../bookkeeper/mledger/impl/OffloadPrefixReadTest.java | 2 ++ .../java/org/apache/pulsar/broker/auth/PortForwarder.java | 2 ++ .../apache/pulsar/broker/testcontext/PulsarTestContext.java | 2 ++ .../coordinator/TransactionMetaStoreAssignmentTest.java | 2 +- .../org/apache/pulsar/admin/cli/PulsarAdminToolTest.java | 1 + .../client/impl/tracing/OpenTelemetryTracingTest.java | 3 ++- .../common/allocator/PulsarByteBufAllocatorDefaultTest.java | 1 + .../PulsarByteBufAllocatorOomThrowExceptionTest.java | 1 + .../pulsar/common/util/FileModifiedTimeUpdaterTest.java | 1 + .../org/apache/pulsar/common/util/netty/SslContextTest.java | 4 ++++ .../functions/source/batch/BatchSourceExecutorTest.java | 3 +++ .../apache/pulsar/functions/utils/SinkConfigUtilsTest.java | 1 + .../pulsar/functions/worker/FunctionRuntimeManagerTest.java | 4 ++-- .../java/org/apache/pulsar/io/core/BatchPushSourceTest.java | 1 + .../test/java/org/apache/pulsar/io/core/PushSourceTest.java | 1 + .../src/test/java/org/apache/pulsar/io/core/SinkTest.java | 1 + .../src/test/java/org/apache/pulsar/io/core/SourceTest.java | 1 + .../replication/AuditorPeriodicBookieCheckTest.java | 3 ++- .../bookkeeper/replication/AuditorReplicasCheckTest.java | 1 + .../bookkeeper/replication/TestReplicationWorker.java | 6 +++--- .../test/java/org/apache/pulsar/metadata/TestZKServer.java | 1 + .../pulsar/metadata/impl/MetadataStoreFactoryImplTest.java | 1 + .../org/apache/pulsar/proxy/server/ProxyParserTest.java | 1 + .../test/java/org/apache/pulsar/proxy/server/ProxyTest.java | 2 ++ .../jcloud/impl/BlobStoreManagedLedgerOffloaderTest.java | 1 + .../jcloud/impl/BlockAwareSegmentInputStreamTest.java | 1 + 28 files changed, 43 insertions(+), 8 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java index 63519d10ba664..dcdd8eaaa8873 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java @@ -6026,9 +6026,11 @@ public void deleteFailed(ManagedLedgerException exception, Object ctx) { assertEquals(properties.get(propertyKey), lastIndex - 1); } + @SuppressWarnings("try") class TestPulsarMockBookKeeper extends PulsarMockBookKeeper { Map ledgerErrors = new HashMap<>(); + @SuppressWarnings("try") public TestPulsarMockBookKeeper(OrderedExecutor orderedExecutor) throws Exception { super(orderedExecutor); } diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java index b1066c297c433..b1db138041b8c 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java @@ -3365,6 +3365,7 @@ public void addFailed(ManagedLedgerException exception, Object ctx) { * @throws Exception */ @Test(timeOut = 20000) + @SuppressWarnings("try") public void testManagedLedgerWithAddEntryTimeOut() throws Exception { ManagedLedgerConfig config = initManagedLedgerConfig(new ManagedLedgerConfig()).setAddEntryTimeoutSeconds(1); ManagedLedgerImpl ledger = (ManagedLedgerImpl) factory.open("timeout_ledger_test", config); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java index 2c6bfba305b47..e3bd102c29951 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixReadTest.java @@ -365,6 +365,7 @@ public void close() { private final AtomicInteger openedReadHandles = new AtomicInteger(0); + @SuppressWarnings("try") class VerifyClosingReadHandle extends MockOffloadReadHandle { VerifyClosingReadHandle(ReadHandle toCopy) throws Exception { super(toCopy); @@ -379,6 +380,7 @@ public CompletableFuture closeAsync() { } } + @SuppressWarnings("try") static class MockOffloadReadHandle implements ReadHandle, OffloadedLedgerHandle { final long id; final List entries = new ArrayList<>(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/PortForwarder.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/PortForwarder.java index 40b8f92c436d4..970410bcc0d5f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/PortForwarder.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/PortForwarder.java @@ -41,6 +41,7 @@ /** * A TCP server that performs port forwarding for test purposes. */ +@SuppressWarnings("try") public class PortForwarder implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(PortForwarder.class); @@ -56,6 +57,7 @@ public class PortForwarder implements AutoCloseable { * @param listenAddress the local address to listen on. * @param targetAddress the remote address to forward traffic to. */ + @SuppressWarnings("try") public PortForwarder(SocketAddress listenAddress, SocketAddress targetAddress) { this.targetAddress = targetAddress; this.bossGroup = new NioEventLoopGroup(1); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java index fce889882fefa..17e64bd9fa0c2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/PulsarTestContext.java @@ -136,6 +136,7 @@ @ToString @Getter @Builder(builderClassName = "Builder") +@SuppressWarnings("try") public class PulsarTestContext implements AutoCloseable { private final ServiceConfiguration config; private final MetadataStoreExtended localMetadataStore; @@ -710,6 +711,7 @@ private static void initializeZookeeper(ZooKeeper zk) throws KeeperException, In CreateMode.PERSISTENT); } + @SuppressWarnings("try") private TestZKServer createTestZookeeper(int sessionTimeout) throws Exception { TestZKServer testZKServer = new TestZKServer(); try (ZooKeeper zkc = new ZooKeeper(testZKServer.getConnectionString(), sessionTimeout, event -> { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java index ba3e9e89d6000..684cf68af9870 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/coordinator/TransactionMetaStoreAssignmentTest.java @@ -108,7 +108,7 @@ private void checkTransactionCoordinatorNum(int number) { }); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"try", "deprecation"}) private PulsarClient buildClient() throws Exception { return PulsarClient.builder() .serviceUrlProvider(new ServiceUrlProvider() { 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 2602adcd0a053..f39b4f3e21ef1 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 @@ -2710,6 +2710,7 @@ public void testHelpFlag() throws Exception { } } + @SuppressWarnings("try") private static String runCustomCommand(String[] args) throws Exception { File narFile = new File(PulsarAdminTool.class.getClassLoader() .getResource("cliextensions/customCommands-nar.nar").getFile()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/tracing/OpenTelemetryTracingTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/tracing/OpenTelemetryTracingTest.java index bbf92b9ffb1a8..23183ac51315d 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/tracing/OpenTelemetryTracingTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/tracing/OpenTelemetryTracingTest.java @@ -156,12 +156,13 @@ public void testSpanWithException() { } @Test + @SuppressWarnings("try") public void testContextPropagation() { spanExporter.reset(); // Create a parent span Span parentSpan = tracer.spanBuilder("parent").startSpan(); - try (Scope scope = parentSpan.makeCurrent()) { + try (Scope ignored = parentSpan.makeCurrent()) { // Create a producer span as child String topic = "test-topic"; Span producerSpan = TracingContext.createProducerSpan(tracer, topic, Context.current()); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorDefaultTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorDefaultTest.java index f19f4a38ac25d..0134ca258b7e6 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorDefaultTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorDefaultTest.java @@ -37,6 +37,7 @@ public class PulsarByteBufAllocatorDefaultTest { @Test + @SuppressWarnings("try") public void testDefaultConfig() { // Force initialize PulsarByteBufAllocator.DEFAULT before mock the ctor so that it is not polluted. assertNotNull(PulsarByteBufAllocator.DEFAULT); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorOomThrowExceptionTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorOomThrowExceptionTest.java index 9bb9ea1eafef5..f73d9348835e6 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorOomThrowExceptionTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/allocator/PulsarByteBufAllocatorOomThrowExceptionTest.java @@ -35,6 +35,7 @@ public class PulsarByteBufAllocatorOomThrowExceptionTest { @Test + @SuppressWarnings("try") public void testDefaultConfig() { // Force initialize PulsarByteBufAllocator.DEFAULT before mock the ctor so that it is not polluted. assertNotNull(PulsarByteBufAllocator.DEFAULT); diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FileModifiedTimeUpdaterTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FileModifiedTimeUpdaterTest.java index c70110c775a89..ad1f0d8bd7ce2 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FileModifiedTimeUpdaterTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FileModifiedTimeUpdaterTest.java @@ -104,6 +104,7 @@ public void testFileNotModified(String fileName) throws IOException { } @Test + @SuppressWarnings("try") public void testNettyClientSslContextRefresher() throws Exception { BasicAuthenticationData provider = new BasicAuthenticationData(null); String certFile = "/tmp/cert.txt"; diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/netty/SslContextTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/netty/SslContextTest.java index 700be0985c2ac..8dc9b1de95aea 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/netty/SslContextTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/netty/SslContextTest.java @@ -81,6 +81,7 @@ public static Object[] getCipher() { } @Test(dataProvider = "cipherDataProvider") + @SuppressWarnings("try") public void testServerKeyStoreSSLContext(Set cipher) throws Exception { PulsarSslConfiguration pulsarSslConfiguration = PulsarSslConfiguration.builder() .tlsEnabledWithKeystore(true) @@ -108,6 +109,7 @@ public KeyStoreParams getTlsKeyStoreParams() { } @Test(dataProvider = "cipherDataProvider") + @SuppressWarnings("try") public void testClientKeyStoreSSLContext(Set cipher) throws Exception { PulsarSslConfiguration pulsarSslConfiguration = PulsarSslConfiguration.builder() .allowInsecureConnection(false) @@ -125,6 +127,7 @@ public void testClientKeyStoreSSLContext(Set cipher) throws Exception { } @Test(dataProvider = "caCertSslContextDataProvider") + @SuppressWarnings("try") public void testServerCaCertSslContextWithSslProvider(SslProvider sslProvider, Set ciphers) throws Exception { try (PulsarSslFactory pulsarSslFactory = new DefaultPulsarSslFactory()) { @@ -151,6 +154,7 @@ public void testServerCaCertSslContextWithSslProvider(SslProvider sslProvider, S } @Test(dataProvider = "caCertSslContextDataProvider") + @SuppressWarnings("try") public void testClientCaCertSslContextWithSslProvider(SslProvider sslProvider, Set ciphers) throws Exception { try (PulsarSslFactory pulsarSslFactory = new DefaultPulsarSslFactory()) { diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java index 04106863a7a16..9f6da05678414 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java @@ -50,6 +50,7 @@ */ public class BatchSourceExecutorTest { + @SuppressWarnings("try") public static class TestBatchSource implements BatchSource { @Getter public static int prepareCount; @@ -96,6 +97,7 @@ public void close() throws Exception { } } + @SuppressWarnings("try") public static class TestBatchSourceFailDiscovery extends TestBatchSource { @Override public void discover(Consumer taskEater) throws Exception { @@ -103,6 +105,7 @@ public void discover(Consumer taskEater) throws Exception { } } + @SuppressWarnings("try") public static class TestBatchPushSource extends BatchPushSource { @Getter public static int prepareCount; diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java index cde0b11821431..a7eaaabb5a850 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/SinkConfigUtilsTest.java @@ -69,6 +69,7 @@ public static class TestSinkConfig { } + @SuppressWarnings("try") public static class NopSink implements Sink { @Override diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java index 21675bc2f6533..a34d4e0691448 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java @@ -896,7 +896,7 @@ public void testFunctionRuntimeSetCorrectly() { } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "try"}) @Test public void testFunctionRuntimeFactoryConfigsBackwardsCompatibility() throws Exception { @@ -1082,7 +1082,7 @@ public void testThreadFunctionInstancesRestart() throws Exception { } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "try"}) @Test public void testKubernetesFunctionInstancesRestart() throws Exception { diff --git a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/BatchPushSourceTest.java b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/BatchPushSourceTest.java index a34da04b6fb9a..3770aafd545a2 100644 --- a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/BatchPushSourceTest.java +++ b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/BatchPushSourceTest.java @@ -22,6 +22,7 @@ import java.util.function.Consumer; import org.testng.annotations.Test; +@SuppressWarnings("try") public class BatchPushSourceTest { BatchPushSource testBatchSource = new BatchPushSource() { diff --git a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/PushSourceTest.java b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/PushSourceTest.java index 3c23e6401f0dc..7af65e20cca00 100644 --- a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/PushSourceTest.java +++ b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/PushSourceTest.java @@ -21,6 +21,7 @@ import java.util.Map; import org.testng.annotations.Test; +@SuppressWarnings("try") public class PushSourceTest { PushSource testBatchSource = new PushSource() { diff --git a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java index 87e4a53fa6c66..51596f124cafd 100644 --- a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java +++ b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java @@ -29,6 +29,7 @@ public class SinkTest { + @SuppressWarnings("try") public static class TestSink implements Sink { @Override diff --git a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java index e00369aa58a5e..5ce9be4aa9335 100644 --- a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java +++ b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java @@ -28,6 +28,7 @@ import org.testng.annotations.Test; public class SourceTest { + @SuppressWarnings("try") public static class TestSource implements Source { @Override diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicBookieCheckTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicBookieCheckTest.java index ae7de3a47e913..d2a62f93914e7 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicBookieCheckTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorPeriodicBookieCheckTest.java @@ -83,11 +83,12 @@ public void tearDown() throws Exception { * Test that the periodic bookie checker works. */ @Test + @SuppressWarnings("try") public void testPeriodicBookieCheckInterval() throws Exception { confByIndex(0).setMetadataServiceUri( zkUtil.getMetadataServiceUri().replaceAll("zk://", "metadata-store:").replaceAll("/ledgers", "")); runFunctionWithLedgerManagerFactory(confByIndex(0), mFactory -> { - try (LedgerManager ledgerManager = mFactory.newLedgerManager()) { + try (LedgerManager ignored = mFactory.newLedgerManager()) { @Cleanup final LedgerUnderreplicationManager underReplicationManager = mFactory.newLedgerUnderreplicationManager(); long ledgerId = 12345L; diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java index 1869b1966bcb5..c8e102bc7bba5 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/AuditorReplicasCheckTest.java @@ -112,6 +112,7 @@ public void tearDown() throws Exception { super.tearDown(); } + @SuppressWarnings("try") private class TestBookKeeperAdmin extends BookKeeperAdmin { private final MultiKeyMap returnAvailabilityOfEntriesOfLedger; diff --git a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java index 832f5bcbea976..c0e7fc91f2c98 100644 --- a/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java +++ b/pulsar-metadata/src/test/java/org/apache/bookkeeper/replication/TestReplicationWorker.java @@ -855,8 +855,9 @@ public void testRWShouldReplicateTheLedgersAfterTimeoutIfLastFragmentIsNotUR() * Test that the replication worker will not shutdown on a simple ZK disconnection. */ @Test + @SuppressWarnings("try") public void testRWZKConnectionLost() throws Exception { - try (ZooKeeperClient zk = ZooKeeperClient.newBuilder() + try (ZooKeeperClient ignored = ZooKeeperClient.newBuilder() .connectString(zkUtil.getZooKeeperConnectString()) .sessionTimeoutMs(10000) .build()) { @@ -1034,8 +1035,7 @@ public void testReplicationStats() throws Exception { testRepairedNotAdheringPlacementPolicyLedgerFragments( RackawareEnsemblePlacementPolicy.class, checkReplicationStats); } - @SuppressWarnings("deprecation") - + @SuppressWarnings({"deprecation", "try"}) private void testRepairedNotAdheringPlacementPolicyLedgerFragments( Class placementPolicyClass, BiConsumer checkReplicationStats) throws Exception { diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java index 8cc7b8c626dda..f564a5921d303 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java @@ -39,6 +39,7 @@ import org.assertj.core.util.Files; @Slf4j +@SuppressWarnings("try") public class TestZKServer implements AutoCloseable { public static final int TICK_TIME = 1000; diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java index 2828b0de89252..22c3553bf1ceb 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/MetadataStoreFactoryImplTest.java @@ -93,6 +93,7 @@ public MetadataStore create(String metadataURL, MetadataStoreConfig metadataStor } } + @SuppressWarnings("try") public static class MyMetadataStore extends AbstractMetadataStore { protected MyMetadataStore() { super("custom", OpenTelemetry.noop(), null, 1); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java index e7b6d1b350e87..7cb00f5684f16 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyParserTest.java @@ -176,6 +176,7 @@ public void testPartitions() throws Exception { } @Test + @SuppressWarnings("try") public void testRegexSubscription() throws Exception { @Cleanup PulsarClient client = PulsarClient.builder().serviceUrl(proxyService.getServiceUrl()) diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java index 7fe07361ade5e..d67b3d21f5f50 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyTest.java @@ -287,6 +287,7 @@ public void testAutoCreateTopic() throws Exception{ } @Test + @SuppressWarnings("try") public void testRegexSubscription() throws Exception { @Cleanup PulsarClient client = PulsarClient.builder().serviceUrl(proxyService.getServiceUrl()) @@ -398,6 +399,7 @@ public void testRegexSubscriptionWithTopicDiscovery(TopicType topicType) throws } @Test + @SuppressWarnings("try") public void testGetSchema() throws Exception { @Cleanup PulsarClient client = PulsarClient.builder().serviceUrl(proxyService.getServiceUrl()) diff --git a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreManagedLedgerOffloaderTest.java b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreManagedLedgerOffloaderTest.java index cd97954b97739..9ac28d490a295 100644 --- a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreManagedLedgerOffloaderTest.java +++ b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreManagedLedgerOffloaderTest.java @@ -514,6 +514,7 @@ public void testOffloadEmpty() throws Exception { } @Test + @SuppressWarnings("try") public void testReadUnknownDataVersion() throws Exception { @Cleanup ReadHandle toWrite = buildReadHandle(DEFAULT_BLOCK_SIZE, 1); diff --git a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java index 1d1fc91fd0c1d..6f2aba5863c79 100644 --- a/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java +++ b/tiered-storage/jcloud/src/test/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlockAwareSegmentInputStreamTest.java @@ -129,6 +129,7 @@ public Iterator iterator() { } } + @SuppressWarnings("try") class MockReadHandle implements ReadHandle { int ledgerId; int entrySize; From f048a843d010a4d75355cfc28369486bede942d3 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Mon, 30 Mar 2026 21:25:18 -0700 Subject: [PATCH 14/22] [improve][test] Fix unchecked compile warnings in test code (#25431) --- .../mledger/impl/EntryCountEstimatorTest.java | 8 ++- .../InflightReadsLimiterIntegrationTest.java | 1 + .../impl/ManagedCursorConcurrencyTest.java | 8 +-- .../mledger/impl/ManagedCursorTest.java | 11 +-- .../ManagedLedgerFactoryShutdownTest.java | 2 +- .../mledger/impl/ManagedLedgerTest.java | 5 +- .../mledger/impl/NonDurableCursorTest.java | 2 +- .../mledger/impl/OffloadPrefixTest.java | 1 + .../mledger/impl/RangeSetWrapperTest.java | 6 +- ...ticationProviderOpenIDIntegrationTest.java | 2 +- .../AuthenticationProviderOpenIDTest.java | 2 +- .../authentication/SaslAuthenticateTest.java | 2 + .../BookieRackAffinityMappingTest.java | 3 + ...atedBookieEnsemblePlacementPolicyTest.java | 6 +- .../broker/resources/TopicResourcesTest.java | 4 +- .../servlet/AdditionalServletUtilsTest.java | 16 ++--- ...ntryCacheKeySharedSubscriptionV30Test.java | 6 +- .../PersistentMessageExpiryMonitorTest.java | 3 +- .../apache/pulsar/broker/BrokerTestUtil.java | 4 ++ .../pulsar/broker/BrokerTestUtilTest.java | 1 + .../LedgerLostAndSkipNonRecoverableTest.java | 2 + .../broker/admin/AdminApiHealthCheckTest.java | 2 +- .../AdminApiSchemaValidationEnforcedTest.java | 3 + .../apache/pulsar/broker/admin/AdminTest.java | 6 +- .../pulsar/broker/admin/NamespacesTest.java | 3 + .../pulsar/broker/admin/NamespacesV2Test.java | 1 + .../broker/admin/PersistentTopicsTest.java | 6 ++ .../broker/admin/TopicPoliciesTest.java | 2 + .../pulsar/broker/admin/TopicsTest.java | 10 +++ .../admin/v3/AdminApiTransactionTest.java | 1 + .../BrokerEntryCacheRollingRestartTest.java | 1 + .../broker/cache/BrokerEntryCacheTest.java | 5 +- .../MinimumBacklogCacheStrategyTest.java | 1 + .../intercept/BrokerInterceptorUtilsTest.java | 3 + .../ExceptionsBrokerInterceptorTest.java | 1 + .../ManagedLedgerInterceptorImplTest.java | 8 +-- .../AntiAffinityNamespaceGroupTest.java | 3 + .../broker/loadbalance/LoadBalancerTest.java | 1 + .../ModularLoadManagerStrategyTest.java | 3 + ...tiAffinityNamespaceGroupExtensionTest.java | 2 + .../extensions/BrokerRegistryTest.java | 1 + .../extensions/manager/SplitManagerTest.java | 1 + .../extensions/manager/UnloadManagerTest.java | 1 + .../extensions/models/TopKBundlesTest.java | 1 + .../reporter/BrokerLoadDataReporterTest.java | 7 +- .../TopBundleLoadDataReporterTest.java | 6 ++ .../scheduler/SplitSchedulerTest.java | 2 + .../extensions/store/LoadDataStoreTest.java | 1 + ...faultNamespaceBundleSplitStrategyTest.java | 1 + .../impl/ThresholdShedderTest.java | 1 + .../namespace/NamespaceServiceTest.java | 2 + .../protocol/ProtocolHandlerUtilsTest.java | 3 + .../broker/protocol/ProtocolHandlersTest.java | 2 + .../service/AbstractReplicatorTest.java | 2 +- .../service/BacklogQuotaManagerTest.java | 1 + .../BatchMessageWithBatchIndexLevelTest.java | 1 + .../service/BrokerBookieIsolationTest.java | 1 + .../broker/service/BrokerServiceTest.java | 2 + .../OneWayReplicatorDeduplicationTest.java | 4 ++ .../broker/service/OneWayReplicatorTest.java | 4 ++ ...sistentDispatcherFailoverConsumerTest.java | 2 + .../service/PersistentTopicE2ETest.java | 1 + .../PersistentTopicInitializeDelayTest.java | 1 + .../broker/service/PersistentTopicTest.java | 6 ++ .../pulsar/broker/service/RackAwareTest.java | 3 + .../broker/service/ReplicationTxnTest.java | 2 + .../pulsar/broker/service/ReplicatorTest.java | 3 +- .../broker/service/SubscriptionSeekTest.java | 1 + ...temTopicBasedTopicPoliciesServiceTest.java | 1 + ...ckyKeyDispatcherMultipleConsumersTest.java | 2 + .../persistent/MessageDuplicationTest.java | 1 + .../PersistentSubscriptionTest.java | 2 + .../persistent/PersistentTopicTest.java | 1 + ...ReplicatedSubscriptionsControllerTest.java | 1 + .../persistent/TopicDuplicationTest.java | 1 + ...NamespaceEventsSystemTopicServiceTest.java | 1 + .../testcontext/NonClosingProxyHandler.java | 1 + .../SegmentAbortedTxnProcessorTest.java | 5 ++ .../TopicTransactionBufferRecoverTest.java | 4 ++ .../transaction/TransactionProduceTest.java | 1 + .../broker/transaction/TransactionTest.java | 6 +- .../transaction/TransactionTestBase.java | 1 + .../buffer/TransactionBufferClientTest.java | 1 + .../buffer/TransactionLowWaterMarkTest.java | 6 +- .../impl/TransactionPersistentTopicTest.java | 1 + .../PendingAckInMemoryDeleteTest.java | 5 +- .../pendingack/PendingAckMetadataTest.java | 1 + .../pendingack/PendingAckPersistentTest.java | 11 ++- .../TransactionRecoverTrackerTest.java | 2 + ...dditionalServletWithPulsarServiceTest.java | 1 + .../AuthorizationProducerConsumerTest.java | 1 + .../client/api/BrokerServiceLookupTest.java | 1 + .../pulsar/client/api/ClientErrorsTest.java | 1 + ...LetterTopicDefaultMultiPartitionsTest.java | 1 + .../client/api/DeadLetterTopicTest.java | 1 + .../pulsar/client/api/InterceptorsTest.java | 14 ++++ .../client/api/KeySharedSubscriptionTest.java | 2 + .../client/api/MultiTopicsConsumerTest.java | 2 +- .../api/PartitionedProducerConsumerTest.java | 3 +- ...cherBackPressureMultipleConsumersTest.java | 1 + .../client/api/ProducerConsumerBase.java | 2 + .../api/SimpleProducerConsumerTest.java | 2 + .../pulsar/client/api/SimpleSchemaTest.java | 5 ++ ...SubscriptionPauseOnAckStatPersistTest.java | 7 ++ .../AutoCloseUselessClientConSupports.java | 4 ++ .../impl/BrokerClientIntegrationTest.java | 3 + .../client/impl/CompactionReaderImplTest.java | 1 + .../client/impl/ConnectionPoolTest.java | 2 + .../pulsar/client/impl/ConsumerAckTest.java | 1 + .../pulsar/client/impl/LookupRetryTest.java | 1 + .../impl/PatternTopicsConsumerImplTest.java | 1 + .../client/impl/ProducerMemoryLeakTest.java | 8 +++ .../RawBatchMessageContainerImplTest.java | 2 + .../pulsar/client/impl/TableViewTest.java | 4 +- .../impl/TransactionClientConnectTest.java | 1 + .../pulsar/compaction/CompactionTest.java | 1 + .../pulsar/compaction/CompactorToolTest.java | 1 + .../GetLastMessageIdCompactedTest.java | 1 + .../ServiceUnitStateCompactionTest.java | 2 +- .../StrategicCompactionRetentionTest.java | 1 + .../compaction/StrategicCompactionTest.java | 4 +- .../compaction/StrategicCompactorTest.java | 1 + .../TopicCompactionStrategyTest.java | 1 + .../worker/PulsarFunctionE2ESecurityTest.java | 1 + .../worker/PulsarFunctionLocalRunTest.java | 3 +- .../worker/PulsarFunctionPublishTest.java | 2 +- .../worker/PulsarFunctionTlsTest.java | 2 +- .../worker/PulsarWorkerAssignmentTest.java | 1 + .../pulsar/io/AbstractPulsarE2ETest.java | 2 +- .../pulsar/io/PulsarFunctionAdminTest.java | 2 +- .../pulsar/io/PulsarFunctionTlsTest.java | 2 +- .../org/apache/pulsar/schema/SchemaTest.java | 4 ++ .../SchemaCompatibilityCheckTest.java | 1 + .../cli/PulsarClientToolForceBatchNum.java | 2 +- .../cli/TestCmdNamespaceIsolationPolicy.java | 1 + .../apache/pulsar/shell/PulsarShellTest.java | 3 + .../api/SchemaDefinitionBuilderTest.java | 5 ++ .../pulsar/client/impl/ClientCnxTest.java | 2 + .../client/impl/ConsumerBuilderImplTest.java | 25 +++++-- .../pulsar/client/impl/ConsumerImplTest.java | 7 +- .../impl/DefaultCryptoKeyReaderTest.java | 1 + .../pulsar/client/impl/MessageImplTest.java | 9 +++ .../impl/MultiTopicsConsumerImplTest.java | 2 +- .../impl/PartitionedProducerImplTest.java | 12 +++- .../client/impl/ProducerBuilderImplTest.java | 69 ++++++++++--------- .../pulsar/client/impl/ProducerImplTest.java | 5 +- .../client/impl/PulsarClientImplTest.java | 10 +-- .../client/impl/TableViewBuilderImplTest.java | 3 + .../pulsar/client/impl/TableViewImplTest.java | 2 + .../client/impl/TopicListWatcherTest.java | 1 + .../impl/TypedMessageBuilderImplTest.java | 9 +++ .../impl/UnAckedMessageTrackerTest.java | 2 + .../impl/conf/ConfigurationDataUtilsTest.java | 1 + .../schema/AutoProduceBytesSchemaTest.java | 1 + .../impl/schema/KeyValueSchemaTest.java | 7 ++ .../impl/schema/PrimitiveSchemaTest.java | 3 +- .../impl/schema/ProtobufNativeSchemaTest.java | 1 + .../impl/schema/ProtobufSchemaTest.java | 1 + .../client/impl/schema/SchemaBuilderTest.java | 3 + .../SupportVersioningKeyValueSchemaTest.java | 4 ++ .../generic/AbstractGenericSchemaTest.java | 1 + .../schema/generic/GenericAvroReaderTest.java | 3 + .../schema/generic/GenericJsonRecordTest.java | 1 + .../GenericProtobufNativeSchemaTest.java | 1 + .../schema/generic/GenericSchemaImplTest.java | 2 + .../schema/generic/GenericSchemaTest.java | 2 + .../pulsar/common/schema/KeyValueTest.java | 2 + .../AsyncDualMemoryLimiterUtilTest.java | 4 ++ .../functions/instance/ContextImplTest.java | 1 + .../instance/ProducerBuilderFactoryTest.java | 1 + .../functions/instance/ProducerCacheTest.java | 4 ++ .../functions/instance/SinkRecordTest.java | 2 +- .../instance/state/BKStateStoreImplTest.java | 3 + .../pulsar/functions/sink/PulsarSinkTest.java | 16 ++++- .../source/PulsarFunctionRecordTest.java | 2 +- .../functions/source/PulsarSourceTest.java | 3 + .../source/batch/BatchSourceExecutorTest.java | 3 + .../windowing/WindowFunctionExecutorTest.java | 4 +- .../windowing/WindowManagerTest.java | 3 +- .../functions/runtime/RuntimeUtilsTest.java | 2 +- ...BasicKubernetesManifestCustomizerTest.java | 1 + .../KubernetesRuntimeFactoryTest.java | 3 + .../kubernetes/KubernetesRuntimeTest.java | 6 ++ .../runtime/process/ProcessRuntimeTest.java | 1 + .../thread/ThreadRuntimeFactoryTest.java | 1 + .../pulsar/functions/utils/ActionsTest.java | 4 ++ .../worker/FunctionActionerTest.java | 4 ++ .../worker/FunctionAssignmentTailerTest.java | 6 ++ .../worker/FunctionMetaDataManagerTest.java | 2 + .../FunctionMetaDataTopicTailerTest.java | 3 +- .../worker/FunctionRuntimeManagerTest.java | 8 +++ .../functions/worker/LeaderServiceTest.java | 2 + .../worker/MembershipManagerTest.java | 6 ++ .../worker/SchedulerManagerTest.java | 3 + .../functions/worker/WorkerUtilsTest.java | 1 + .../api/v2/FunctionApiV2ResourceTest.java | 1 + .../org/apache/pulsar/io/core/SinkTest.java | 1 + .../org/apache/pulsar/io/core/SourceTest.java | 1 + .../pulsar/metadata/MetadataCacheTest.java | 1 + .../pulsar/metadata/MetadataStoreTest.java | 1 + .../apache/pulsar/metadata/TestZKServer.java | 2 +- .../extensions/ProxyExtensionUtilsTest.java | 3 + .../proxy/extensions/ProxyExtensionsTest.java | 2 + .../server/BrokerProxyValidatorTest.java | 1 + .../ProxyWithExtensibleLoadManagerTest.java | 1 + .../MLTransactionMetadataStoreTest.java | 1 + .../impl/TxnLogBufferedWriterTest.java | 7 +- .../pulsar/websocket/ProducerHandlerTest.java | 1 + 208 files changed, 576 insertions(+), 128 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCountEstimatorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCountEstimatorTest.java index e0a08b0f3a439..ba3c5e3b5e8db 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCountEstimatorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/EntryCountEstimatorTest.java @@ -307,7 +307,9 @@ public void testNoLedgers() { public void testNoLedgersRaceFirstKey() { readPosition = PositionFactory.EARLIEST; // remove all ledgers from ledgersInfo - ledgersInfo = mock(NavigableMap.class); + @SuppressWarnings("unchecked") + NavigableMap mockedMap = mock(NavigableMap.class); + ledgersInfo = mockedMap; when(ledgersInfo.isEmpty()).thenReturn(false); when(ledgersInfo.firstKey()).thenThrow(NoSuchElementException.class); when(ledgersInfo.lastKey()).thenReturn(1L); @@ -320,7 +322,9 @@ public void testNoLedgersRaceFirstKey() { public void testNoLedgersRaceLastKey() { readPosition = PositionFactory.EARLIEST; // remove all ledgers from ledgersInfo - ledgersInfo = mock(NavigableMap.class); + @SuppressWarnings("unchecked") + NavigableMap mockedMap = mock(NavigableMap.class); + ledgersInfo = mockedMap; lastLedgerId = null; when(ledgersInfo.isEmpty()).thenReturn(false); when(ledgersInfo.firstKey()).thenReturn(1L); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java index c62bd8231bb13..6de545a669457 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/InflightReadsLimiterIntegrationTest.java @@ -116,6 +116,7 @@ public void testPreciseLimitation(String missingCase) throws Exception { threadFactory.newThread(() -> { try { readCompleteSignal2.await(); + @SuppressWarnings("unchecked") CompletableFuture future = (CompletableFuture) invocation.callRealMethod(); future.thenAccept(v -> { diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorConcurrencyTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorConcurrencyTest.java index 285cd251a9f86..6853b47b2f4bd 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorConcurrencyTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorConcurrencyTest.java @@ -75,7 +75,7 @@ public void testMarkDeleteAndRead(boolean useOpenRangeSet) throws Exception { final ManagedCursor cursor = ledger.openCursor("c1"); - final List addedEntries = new ArrayList(); + final List addedEntries = new ArrayList<>(); for (int i = 0; i < 1000; i++) { Position pos = ledger.addEntry("entry".getBytes()); @@ -135,7 +135,7 @@ public void testCloseAndRead() throws Exception { final CompletableFuture closeFuture = new CompletableFuture<>(); final String closed = "closed"; - final List addedEntries = new ArrayList(); + final List addedEntries = new ArrayList<>(); for (int i = 0; i < 1000; i++) { Position pos = ledger.addEntry("entry".getBytes()); @@ -214,7 +214,7 @@ public void testAckAndClose() throws Exception { final ManagedCursor cursor = ledger.openCursor("c1"); - final List addedEntries = new ArrayList(); + final List addedEntries = new ArrayList<>(); for (int i = 0; i < 1000; i++) { Position pos = ledger.addEntry("entry".getBytes()); @@ -313,7 +313,7 @@ public void testConcurrentIndividualDeletes() throws Exception { public void testConcurrentReadOfSameEntry() throws Exception { ManagedLedger ledger = factory.open("testConcurrentReadOfSameEntry", new ManagedLedgerConfig()); final int numCursors = 20; - final List cursors = new ArrayList(); + final List cursors = new ArrayList<>(); for (int i = 0; i < numCursors; i++) { final ManagedCursor cursor = ledger.openCursor("c" + i); cursors.add(cursor); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java index dcdd8eaaa8873..80f6bea9e36a4 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedCursorTest.java @@ -3901,12 +3901,13 @@ public Object answer(InvocationOnMock invocation) { .setMarkDeleteLedgerId(markDeleteLedgerId).setMarkDeleteEntryId(markDeleteEntryId) .setLastActive(0L); Stat stat = mock(Stat.class); + @SuppressWarnings("unchecked") MetaStoreCallback callback = (MetaStoreCallback) invocation .getArguments()[2]; callback.operationComplete(info, stat); return null; } - }).when(mockMetaStore).asyncGetCursorInfo(eq(mlName), eq(cursorName), any(MetaStoreCallback.class)); + }).when(mockMetaStore).asyncGetCursorInfo(eq(mlName), eq(cursorName), any()); ManagedLedgerImpl ml = mock(ManagedLedgerImpl.class); when(ml.getName()).thenReturn(mlName); @@ -4666,8 +4667,10 @@ public void testCursorGetBacklog() throws Exception { Field field = ManagedLedgerImpl.class.getDeclaredField("ledgers"); field.setAccessible(true); - ((ConcurrentSkipListMap) field.get(ledger)) - .remove(position.getLedgerId()); + @SuppressWarnings("unchecked") + ConcurrentSkipListMap ledgers = + (ConcurrentSkipListMap) field.get(ledger); + ledgers.remove(position.getLedgerId()); field = ManagedCursorImpl.class.getDeclaredField("markDeletePosition"); field.setAccessible(true); field.set(managedCursor, PositionFactory.create(position1.getLedgerId(), -1)); @@ -5805,7 +5808,7 @@ public org.apache.bookkeeper.client.api.LedgerEntry getEntry(long entryId) { @Override public Iterator iterator() { - return EmptyIterator.INSTANCE; + return EmptyIterator.emptyIterator(); } @Override diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerFactoryShutdownTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerFactoryShutdownTest.java index df1cf82d9d42d..79fc096c040bb 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerFactoryShutdownTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerFactoryShutdownTest.java @@ -117,7 +117,7 @@ private void setup() { } }); given(metadataStore.put(anyString(), any(), any())).willAnswer(inv -> { - @SuppressWarnings("unchecked cast") + @SuppressWarnings("unchecked") Optional expectedVersion = inv.getArgument(2, Optional.class); return CompletableFuture.supplyAsync(() -> new Stat(inv.getArgument(0, String.class), expectedVersion.orElse(0L) + 1, createTimeMillis, diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java index b1db138041b8c..7c92d1b4c5976 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java @@ -3806,6 +3806,7 @@ public void testNeverThrowExceptionInMaybeUpdateCursorBeforeTrimmingConsumedLedg Deque> futures = new ConcurrentLinkedDeque<>(); doAnswer(invocation -> { + @SuppressWarnings("unchecked") CompletableFuture result = (CompletableFuture) invocation.callRealMethod(); futures.offer(result); return result; @@ -4275,8 +4276,8 @@ public void testOffloadTaskCancelled() throws Exception { CompletableFuture offloadFuture = new CompletableFuture<>(); offloadFuture.complete(null); - Mockito.when(ledgerOffloader.offload(any(ReadHandle.class), any(UUID.class), - any(Map.class))).thenReturn(offloadFuture); + doReturn(offloadFuture).when(ledgerOffloader).offload(any(ReadHandle.class), any(UUID.class), + any()); final ManagedLedgerImpl ledgerInit = (ManagedLedgerImpl) factory.open("test-offload-task-close", config); final ManagedLedgerImpl ledger = spy(ledgerInit); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/NonDurableCursorTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/NonDurableCursorTest.java index d53036df26b2c..e0dcfcb7b6fa3 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/NonDurableCursorTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/NonDurableCursorTest.java @@ -767,7 +767,7 @@ public void testBacklogStatsWhenDroppingData() throws Exception { assertEquals(nonDurableCursor.getNumberOfEntries(), 0); assertEquals(nonDurableCursor.getNumberOfEntriesInBacklog(true), 0); - List positions = new ArrayList(); + List positions = new ArrayList<>(); for (int i = 0; i < 10; i++) { positions.add(ledger.addEntry(("entry-" + i).getBytes(UTF_8))); } diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixTest.java index 38d7c17b9d49c..1e3749ef50d5a 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/OffloadPrefixTest.java @@ -825,6 +825,7 @@ public void testDontOffloadEmpty() throws Exception { // make an ledger empty Field ledgersField = ledger.getClass().getDeclaredField("ledgers"); ledgersField.setAccessible(true); + @SuppressWarnings("unchecked") Map ledgers = (Map) ledgersField.get(ledger); ledgers.put(secondLedgerId, new LedgerInfo().copyFrom(ledgers.get(secondLedgerId)).setEntries(0).setSize(0)); diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/RangeSetWrapperTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/RangeSetWrapperTest.java index 9012945ddf7c1..ddf34667ff190 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/RangeSetWrapperTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/RangeSetWrapperTest.java @@ -98,7 +98,7 @@ public void testAddForSameKey() { } private void doTestAddForSameKey() { - set = new RangeSetWrapper(CONSUMER, REVERSE_CONVERT, managedCursor); + set = new RangeSetWrapper<>(CONSUMER, REVERSE_CONVERT, managedCursor); // add 0 to 5 set.addOpenClosed(0, 0, 0, 5); // add 8,9,10 @@ -198,7 +198,7 @@ public void testDeleteCompareWithGuava() throws Exception { // add 10K values for key 0 int totalInsert = 10_000; // add single values - List> removedRanges = new ArrayList(); + List> removedRanges = new ArrayList<>(); for (int i = 0; i < totalInsert; i++) { if (i % 3 == 0 || i % 7 == 0 || i % 11 == 0) { continue; @@ -482,7 +482,7 @@ public void testRangeContaining() { private List> getConnectedRange(Set> gRanges) { - List> gRangeConnected = new ArrayList(); + List> gRangeConnected = new ArrayList<>(); Range lastRange = null; for (Range range : gRanges) { if (lastRange == null) { diff --git a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java index 5f96660f2f15f..4ce912425510f 100644 --- a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java +++ b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDIntegrationTest.java @@ -639,7 +639,7 @@ void ensureRoleClaimForNonSubClaimReturnsRole() throws Exception { provider.initialize(AuthenticationProvider.Context.builder().config(config).build()); // Build a JWT with a custom claim - HashMap claims = new HashMap(); + HashMap claims = new HashMap<>(); claims.put("test", "my-role"); String token = generateToken(validJwk, issuer, "not-my-role", "allowed-audience", 0L, 0L, 10000L, claims); diff --git a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java index 0a6f137acef18..aebbe89bc7dfc 100644 --- a/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java +++ b/pulsar-broker-auth-oidc/src/test/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenIDTest.java @@ -386,7 +386,7 @@ public void ensureInsecureIssuerFailsInitialization() throws IOException { // Build an empty JWT DefaultJwtBuilder defaultJwtBuilder = new DefaultJwtBuilder(); - HashMap> claims = new HashMap(); + HashMap> claims = new HashMap<>(); claims.put("roles", Collections.singletonList("my-role")); defaultJwtBuilder.setClaims(claims); defaultJwtBuilder.setAudience(basicProviderAudience); diff --git a/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java b/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java index f46a946ebe2ed..fb11c61fbc206 100644 --- a/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java +++ b/pulsar-broker-auth-sasl/src/test/java/org/apache/pulsar/broker/authentication/SaslAuthenticateTest.java @@ -309,6 +309,7 @@ public void testSaslServerAndClientAuth() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testSaslOnlyAuthFirstStage() throws Exception { @Cleanup AuthenticationProviderSasl saslServer = new AuthenticationProviderSasl(); @@ -355,6 +356,7 @@ public void testSaslOnlyAuthFirstStage() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testMaxInflightContext() throws Exception { @Cleanup AuthenticationProviderSasl saslServer = new AuthenticationProviderSasl(); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/BookieRackAffinityMappingTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/BookieRackAffinityMappingTest.java index a8f39917869d2..a1933c859dc80 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/BookieRackAffinityMappingTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/BookieRackAffinityMappingTest.java @@ -273,6 +273,7 @@ public void testWithPulsarRegistrationClient() throws Exception { Class clazz1 = Class.forName("org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy"); Field field1 = clazz1.getDeclaredField("knownBookies"); field1.setAccessible(true); + @SuppressWarnings("unchecked") Map knownBookies = (Map) field1.get(repp); repp.initialize(bkClientConf, Optional.of(mapping), timer, DISABLE_ALL, NullStatsLogger.INSTANCE, defaultBookieAddressResolver); @@ -464,6 +465,7 @@ public void testZKEventListenersOrdering() throws Exception { racks.updateBookie("group1", bookie1.toString(), bi); // Create a mock cache for racks /bookies + @SuppressWarnings("unchecked") MetadataCache mockCache = mock(MetadataCache.class); Field f = BookieRackAffinityMapping.class.getDeclaredField("bookieMappingCache"); f.setAccessible(true); @@ -509,6 +511,7 @@ public void testZKEventListenersOrdering() throws Exception { Class clazz1 = Class.forName("org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy"); Field field1 = clazz1.getDeclaredField("knownBookies"); field1.setAccessible(true); + @SuppressWarnings("unchecked") Map knownBookies = (Map) field1.get(repp); BookieNode bn = knownBookies.get(bookie1.toBookieId()); // Rack info update is delayed but because of new callback the rack info on ensemble policy should be updated. diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java index 936b04386ff7b..713d286660e14 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java @@ -18,6 +18,7 @@ */ package org.apache.pulsar.bookie.rackawareness; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; @@ -128,6 +129,7 @@ public void testNonRegionBookie() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testMetadataStoreCases() throws Exception { Map mainBookieGroup = new HashMap<>(); mainBookieGroup.put(BOOKIE1, BookieInfo.builder().rack("rack0").build()); @@ -138,8 +140,8 @@ public void testMetadataStoreCases() throws Exception { Map secondaryBookieGroup = new HashMap<>(); store = mock(MetadataStoreExtended.class); - MetadataCacheImpl cache = mock(MetadataCacheImpl.class); - when(store.getMetadataCache(BookiesRackConfiguration.class)).thenReturn(cache); + MetadataCacheImpl cache = mock(MetadataCacheImpl.class); + doReturn(cache).when(store).getMetadataCache(BookiesRackConfiguration.class); CompletableFuture> initialFuture = new CompletableFuture<>(); //The initialFuture only has group1. BookiesRackConfiguration rackConfiguration1 = new BookiesRackConfiguration(); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java index 08e674ce5b878..76f4b3481a4c2 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/resources/TopicResourcesTest.java @@ -151,10 +151,10 @@ public void testNamespaceContainsDotsShouldntMatchAny() { verify(listener).onTopicEvent("persistent://tenant/name.pace/topic", NotificationType.Created); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testBiConsumerListenerNotInvokedAfterDeregistered() { - BiConsumer listener = mock(BiConsumer.class); + BiConsumer listener = mock(BiConsumer.class); topicResources.registerPersistentTopicListener(NamespaceName.get("tenant/namespace"), listener); topicResources.handleNotification(new Notification(NotificationType.Created, "/managed-ledgers/tenant/namespace/persistent/topic")); diff --git a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtilsTest.java b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtilsTest.java index 1d3dd9a7ba4ed..db1554a128594 100644 --- a/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtilsTest.java +++ b/pulsar-broker-common/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtilsTest.java @@ -20,6 +20,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.RETURNS_SELF; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.AssertJUnit.assertSame; @@ -50,9 +51,8 @@ public void testLoadEventListener() throws Exception { NarClassLoader mockLoader = mock(NarClassLoader.class); when(mockLoader.getServiceDefinition(eq(AdditionalServletUtils.ADDITIONAL_SERVLET_FILE))) .thenReturn(ObjectMapperFactory.getYamlMapper().writer().writeValueAsString(def)); - Class listenerClass = MockAdditionalServlet.class; - when(mockLoader.loadClass(eq(MockAdditionalServlet.class.getName()))) - .thenReturn(listenerClass); + Class listenerClass = MockAdditionalServlet.class; + doReturn(listenerClass).when(mockLoader).loadClass(eq(MockAdditionalServlet.class.getName())); final NarClassLoaderBuilder mockedBuilder = mock(NarClassLoaderBuilder.class, RETURNS_SELF); when(mockedBuilder.build()).thenReturn(mockLoader); @@ -80,9 +80,8 @@ public void testLoadEventListenerWithBlankListenerClass() throws Exception { NarClassLoader mockLoader = mock(NarClassLoader.class); when(mockLoader.getServiceDefinition(eq(AdditionalServletUtils.ADDITIONAL_SERVLET_FILE))) .thenReturn(ObjectMapperFactory.getYamlMapper().writer().writeValueAsString(def)); - Class listenerClass = MockAdditionalServlet.class; - when(mockLoader.loadClass(eq(MockAdditionalServlet.class.getName()))) - .thenReturn(listenerClass); + Class listenerClass = MockAdditionalServlet.class; + doReturn(listenerClass).when(mockLoader).loadClass(eq(MockAdditionalServlet.class.getName())); final NarClassLoaderBuilder mockedBuilder = mock(NarClassLoaderBuilder.class, RETURNS_SELF); when(mockedBuilder.build()).thenReturn(mockLoader); @@ -108,9 +107,8 @@ public void testLoadEventListenerWithWrongListenerClass() throws Exception { NarClassLoader mockLoader = mock(NarClassLoader.class); when(mockLoader.getServiceDefinition(eq(AdditionalServletUtils.ADDITIONAL_SERVLET_FILE))) .thenReturn(ObjectMapperFactory.getYamlMapper().writer().writeValueAsString(def)); - Class listenerClass = Runnable.class; - when(mockLoader.loadClass(eq(Runnable.class.getName()))) - .thenReturn(listenerClass); + Class listenerClass = Runnable.class; + doReturn(listenerClass).when(mockLoader).loadClass(eq(Runnable.class.getName())); final NarClassLoaderBuilder mockedBuilder = mock(NarClassLoaderBuilder.class, RETURNS_SELF); when(mockedBuilder.build()).thenReturn(mockLoader); diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java index 8953ea7ff3c21..dab87e70d139a 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/NonEntryCacheKeySharedSubscriptionV30Test.java @@ -79,6 +79,7 @@ protected void doInitConf() throws Exception { } + @SuppressWarnings("unchecked") @Test(timeOut = 180 * 1000, invocationCount = 1) public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { int msgCount = 300; @@ -157,6 +158,7 @@ public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { threadFactory.newThread(() -> { try { replyReadSignal.await(); + @SuppressWarnings("unchecked") CompletableFuture future = (CompletableFuture) invocation.callRealMethod(); future.thenAccept(v -> { @@ -246,8 +248,8 @@ public void testRecentJoinQueueIsInOrderAfterRewind() throws Exception { consumerList.get(consumerList.size() - 1).join(); synchronized (dispatcher) { - @SuppressWarnings("rawtypes") - LinkedHashMap recentJoinedConsumers = dispatcher.getRecentlyJoinedConsumers(); + LinkedHashMap recentJoinedConsumers = + dispatcher.getRecentlyJoinedConsumers(); assertTrue(verifyMapItemsAreInOrder(recentJoinedConsumers)); } diff --git a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorTest.java b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorTest.java index de7d87e4293c1..c2163a1c1309e 100644 --- a/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorTest.java +++ b/pulsar-broker/src/test/java/org/apache/bookkeeper/mledger/impl/PersistentMessageExpiryMonitorTest.java @@ -24,7 +24,6 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.spy; import static org.testng.AssertJUnit.assertEquals; -import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -100,7 +99,7 @@ void testConcurrentlyExpireMessages() throws Exception { } }); return true; - }).when(spyCursor).asyncMarkDelete(any(Position.class), any(Map.class), + }).when(spyCursor).asyncMarkDelete(any(Position.class), any(), any(AsyncCallbacks.MarkDeleteCallback.class), any()); doAnswer(invocationOnMock -> { calledFindPositionCount.incrementAndGet(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtil.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtil.java index 92c93dd011212..7ceeb15448635 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtil.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtil.java @@ -105,6 +105,7 @@ public static T spyWithClassAndConstructorArgsRecordingInvocations(Class * @return a spy of the real object * @param type of object */ + @SuppressWarnings("unchecked") public static T spyWithoutRecordingInvocations(T object) { return Mockito.mock((Class) object.getClass(), Mockito.withSettings() .spiedInstance(object) @@ -226,6 +227,7 @@ public static String getJsonResourceAsString(String uri) { * @param consumers the consumers to receive messages from * @param the message value type */ + @SafeVarargs public static void receiveMessages(BiFunction, Message, Boolean> messageHandler, Duration quietTimeout, Consumer... consumers) { @@ -300,6 +302,7 @@ private static CompletableFuture receiveMessagesAsync(Consumer cons * @param consumers the consumers to receive messages from * @param the message value type */ + @SafeVarargs public static void receiveMessagesN(BiConsumer, Message> messageHandler, Duration quietTimeout, int maxMessages, @@ -321,6 +324,7 @@ public static void receiveMessagesN(BiConsumer, Message> mess * @param consumers the consumers to receive messages from * @param the message value type */ + @SafeVarargs public static void receiveMessagesInThreads(BiFunction, Message, Boolean> messageHandler, final Duration quietTimeout, Consumer... consumers) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtilTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtilTest.java index 90b917a319c71..e775342d0a46a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtilTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/BrokerTestUtilTest.java @@ -39,6 +39,7 @@ @Slf4j public class BrokerTestUtilTest { @Test + @SuppressWarnings("unchecked") public void testReceiveMessagesQuietTime() throws Exception { // Mock consumers Consumer consumer1 = mock(Consumer.class); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java index ba27ccf262bf6..23293e51b2d45 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/LedgerLostAndSkipNonRecoverableTest.java @@ -151,6 +151,7 @@ private void waitPersistentCursorLedger(String topicName, String subName, final }); } + @SuppressWarnings("unchecked") private List[] sendManyMessages(String topicName, int ledgerCount, int messageCountPerLedger, int messageCountPerEntry) throws Exception { @SuppressWarnings({"unchecked", "rawtypes"}) List[] messageIds = new List[ledgerCount]; @@ -243,6 +244,7 @@ private static class ConsumerAndReceivedMessages { private List[] messageIds; } + @SuppressWarnings("unchecked") private List[] sortMessageId(List messageIds, boolean enabledBatch){ Map> map = messageIds.stream().collect(Collectors.groupingBy(v -> v.getLedgerId())); TreeMap> sortedMap = new TreeMap<>(map); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java index 961f2fd903e72..c4c91bb90c7d5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiHealthCheckTest.java @@ -190,7 +190,7 @@ public void testDeadlockDetectionOverhead() { class DummyProducerBuilder extends ProducerBuilderImpl { // This is a dummy producer builder to test the health check timeout // the producer constructed by this builder will not send any message - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) public DummyProducerBuilder(PulsarClientImpl client, Schema schema) { super(client, schema); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java index 2d5eb9bed2f40..0d1c4d39f861a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiSchemaValidationEnforcedTest.java @@ -70,6 +70,7 @@ public void testGetSchemaValidationEnforcedApplied() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testDisableSchemaValidationEnforcedNoSchema() throws Exception { admin.namespaces().createNamespace("schema-validation-enforced/default-no-schema"); String namespace = "schema-validation-enforced/default-no-schema"; @@ -88,6 +89,7 @@ public void testDisableSchemaValidationEnforcedNoSchema() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testDisableSchemaValidationEnforcedHasSchema() throws Exception { admin.namespaces().createNamespace("schema-validation-enforced/default-has-schema"); String namespace = "schema-validation-enforced/default-has-schema"; @@ -126,6 +128,7 @@ private static void assertSchemaInfoEquals(SchemaInfo actual, SchemaInfo expecte @Test + @SuppressWarnings("unchecked") public void testEnableSchemaValidationEnforcedNoSchema() throws Exception { admin.namespaces().createNamespace("schema-validation-enforced/enable-no-schema"); String namespace = "schema-validation-enforced/enable-no-schema"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java index 1534932522fbe..f62002595bb11 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminTest.java @@ -230,7 +230,7 @@ private static class OldInternalConfigurationData { * (before https://github.com/apache/pulsar/pull/14384) while the Worker already uses the new one. * @throws Exception */ - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void internalConfigurationRetroCompatibility() throws Exception { OldInternalConfigurationData oldDataModel = new OldInternalConfigurationData( @@ -819,7 +819,7 @@ public void brokerStats() throws Exception { } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void persistentTopics() throws Exception { @@ -943,7 +943,7 @@ public void testUpdatePartitionedTopicCoontainedInOldTopic() throws Exception { false, 10); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void test500Error() throws Exception { final String tenant = "prop-xyz"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java index 27136f401ad41..1a95d9cb7841d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesTest.java @@ -315,6 +315,7 @@ public void testCreateNamespaces() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGetNamespaces() throws Exception { List expectedList = Arrays.asList( this.testLocalNamespaces.get(0).toString(), @@ -536,6 +537,7 @@ public void testGrantAndRevokePermissions() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGlobalNamespaceReplicationConfiguration() throws Exception { Set repCluster = (Set) asyncRequests(rsp -> namespaces.getNamespaceReplicationClusters(rsp, @@ -2518,6 +2520,7 @@ public void testSetAndDeleteNamespaceAntiAffinityGroup() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGetClusterAntiAffinityNamespaces() throws Exception { // create 5 namespaces, 3 namespaces are set to the same namespace anti affinity group, // 2 namespaces are not set to any anti affinity group diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesV2Test.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesV2Test.java index 70f8ad90d44e2..82ffc775dd397 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesV2Test.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/NamespacesV2Test.java @@ -455,6 +455,7 @@ public void testSetAndDeleteNamespaceAntiAffinityGroup() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGetClusterAntiAffinityNamespaces() throws Exception { // create 5 namespaces, 3 namespaces are set to the same namespace anti affinity group, // 2 namespaces are not set to any anti affinity group 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 c8b5f55843c4f..700ec102734ad 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 @@ -799,6 +799,7 @@ public void testUnloadTopicShallThrowNotFoundWhenTopicNotExist() { } @Test + @SuppressWarnings("unchecked") public void testGetPartitionedTopicsList() throws KeeperException, InterruptedException, PulsarAdminException { AsyncResponse response = mock(AsyncResponse.class); ArgumentCaptor responseCaptor = ArgumentCaptor.forClass(Response.class); @@ -845,6 +846,7 @@ public void testGetPartitionedTopicsList() throws KeeperException, InterruptedEx } @Test + @SuppressWarnings("unchecked") public void testGetList() throws Exception { AsyncResponse response = mock(AsyncResponse.class); ArgumentCaptor responseCaptor = ArgumentCaptor.forClass(Response.class); @@ -900,6 +902,7 @@ public void testGetList() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGrantNonPartitionedTopic() { final String topicName = "non-partitioned-topic"; AsyncResponse response = mock(AsyncResponse.class); @@ -942,6 +945,7 @@ public void testCreateExistedPartition() throws InterruptedException { } @Test + @SuppressWarnings("unchecked") public void testGrantPartitionedTopic() { final String partitionedTopicName = "partitioned-topic"; final int numPartitions = 5; @@ -970,6 +974,7 @@ public void testGrantPartitionedTopic() { } @Test + @SuppressWarnings("unchecked") public void testRevokeNonPartitionedTopic() { final String topicName = "non-partitioned-topic"; AsyncResponse response = mock(AsyncResponse.class); @@ -999,6 +1004,7 @@ public void testRevokeNonPartitionedTopic() { } @Test + @SuppressWarnings("unchecked") public void testRevokePartitionedTopic() { final String partitionedTopicName = "partitioned-topic"; final int numPartitions = 5; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java index 3ec3c05f75506..9293e390ebaca 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicPoliciesTest.java @@ -2329,6 +2329,7 @@ public void testRemoveMaxConsumers() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testDisableSubscribeRate() throws Exception { assertEquals(pulsar.getConfiguration().getSubscribeThrottlingRatePerConsumer(), 0); admin.topics().createNonPartitionedTopic(persistenceTopic); @@ -3480,6 +3481,7 @@ public void testPolicyIsDeleteTogetherManually() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testPoliciesCanBeDeletedWithTopic() throws Exception { final String topic = testTopic + UUID.randomUUID(); final String topic2 = testTopic + UUID.randomUUID(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsTest.java index bcbd133ce5cd9..20de3c9320539 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/TopicsTest.java @@ -376,6 +376,7 @@ public void testLookUpWithRedirect() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testLookUpWithException() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -404,6 +405,7 @@ public void testLookUpWithException() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testLookUpTopicNotExist() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; NamespaceService nameSpaceService = mock(NamespaceService.class); @@ -430,6 +432,7 @@ public void testLookUpTopicNotExist() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProduceWithLongSchema() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -480,6 +483,7 @@ public void testProduceWithLongSchema() throws Exception { // Default schema is String schema @Test + @SuppressWarnings("unchecked") public void testProduceNoSchema() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -551,6 +555,7 @@ private enum GPU { } @Test + @SuppressWarnings("unchecked") public void testProduceWithJsonSchema() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -614,6 +619,7 @@ public void testProduceWithJsonSchema() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProduceWithAvroSchema() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -693,6 +699,7 @@ public void testProduceWithAvroSchema() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProduceWithRestAndClientThenConsumeWithClient() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -753,6 +760,7 @@ public void testProduceWithRestAndClientThenConsumeWithClient() throws Exception } @Test + @SuppressWarnings("unchecked") public void testProduceWithRestThenConsumeWithClient() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -833,6 +841,7 @@ public void testProduceWithRestThenConsumeWithClient() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProduceWithInCompatibleSchema() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); @@ -871,6 +880,7 @@ public void testProduceWithInCompatibleSchema() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProduceWithAutoConsumeSchema() throws Exception { String topicName = "persistent://" + testTenant + "/" + testNamespace + "/" + testTopicName; admin.topics().createNonPartitionedTopic(topicName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java index 221ef4df4830a..1a816bc8f8faf 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/v3/AdminApiTransactionTest.java @@ -708,6 +708,7 @@ public void testTransactionNotEnabled() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testUpdateTransactionCoordinatorNumber() throws Exception { int coordinatorSize = 3; pulsar.getPulsarResources() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java index 4fc35468be7dd..28494ca9e7add 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheRollingRestartTest.java @@ -119,6 +119,7 @@ protected int calculateEntryLength(ManagedLedgerImpl ml, Entry entry) { } @Test(invocationCount = 5) + @SuppressWarnings("unchecked") public void testTailingReadsRollingRestart() throws Exception { // this description is showed in result CSV files String testConfigDescriptionInResult = cacheType.getDescription(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java index 0e7455b1b5d38..0e57b5ee3077e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/BrokerEntryCacheTest.java @@ -135,6 +135,7 @@ private static void configurePR12258Caching(ServiceConfiguration defaultConf) { // change enabled to true to run the test @Test(enabled = false) + @SuppressWarnings("unchecked") public void testTailingReadsKeySharedSlowConsumer() throws Exception { final String topicName = "persistent://my-property/my-ns/cache-test-topic"; final String subscriptionName = "test-subscription"; @@ -301,7 +302,7 @@ public void testTailingReadsKeySharedSlowConsumer() throws Exception { } // change enabled to true to run the test - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test(enabled = false) public void testCatchUpReadsWithFailureProxyDisconnectingAllConnections() throws Exception { final String topicName = "persistent://my-property/my-ns/cache-catchup-test-topic"; @@ -478,6 +479,7 @@ public void testCatchUpReadsWithFailureProxyDisconnectingAllConnections() throws } @Test + @SuppressWarnings("unchecked") public void testTailingReadsClearsCacheAfterCacheTimeout() throws Exception { final String topicName = "persistent://my-property/my-ns/cache-test-topic"; final String subscriptionName = "test-subscription"; @@ -590,6 +592,7 @@ public void testTailingReadsClearsCacheAfterCacheTimeout() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testExpectedReads() throws Exception { final String topicName = "persistent://my-property/my-ns/cache-test-topic"; final String subscriptionName = "test-subscription"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java index 98afae8bf8480..4e68774b75869 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/cache/MinimumBacklogCacheStrategyTest.java @@ -78,6 +78,7 @@ protected ServiceConfiguration getDefaultConf() { * @throws Exception */ @Test + @SuppressWarnings("unchecked") public void testBacklogConsumerCacheReads() throws Exception { log.info("-- Starting {} test --", methodName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtilsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtilsTest.java index edbd44e52e6f8..d1139fe69094a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtilsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtilsTest.java @@ -37,6 +37,7 @@ public class BrokerInterceptorUtilsTest { @Test + @SuppressWarnings("unchecked") public void testLoadBrokerEventListener() throws Exception { BrokerInterceptorDefinition def = new BrokerInterceptorDefinition(); def.setInterceptorClass(MockBrokerInterceptor.class.getName()); @@ -69,6 +70,7 @@ public void testLoadBrokerEventListener() throws Exception { } @Test(expectedExceptions = IOException.class) + @SuppressWarnings("unchecked") public void testLoadBrokerEventListenerWithBlankListenerClass() throws Exception { BrokerInterceptorDefinition def = new BrokerInterceptorDefinition(); def.setDescription("test-broker-listener"); @@ -96,6 +98,7 @@ public void testLoadBrokerEventListenerWithBlankListenerClass() throws Exception } @Test(expectedExceptions = IOException.class) + @SuppressWarnings("unchecked") public void testLoadBrokerEventListenerWithWrongListenerClass() throws Exception { BrokerInterceptorDefinition def = new BrokerInterceptorDefinition(); def.setInterceptorClass(Runnable.class.getName()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java index 2229a89a68fab..a6064ff0c6048 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ExceptionsBrokerInterceptorTest.java @@ -69,6 +69,7 @@ protected void customizeMainPulsarTestContextBuilder(PulsarTestContext.Builder p } @Test + @SuppressWarnings("unchecked") public void testMessageAckedExceptions() throws Exception { String topic = "persistent://public/default/test"; String subName = "test-sub"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ManagedLedgerInterceptorImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ManagedLedgerInterceptorImplTest.java index f2e956ac0067a..a657d9ef93445 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ManagedLedgerInterceptorImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/intercept/ManagedLedgerInterceptorImplTest.java @@ -141,9 +141,9 @@ public void testAddBrokerEntryMetadata() throws Exception { public void testMessagePayloadProcessor() throws Exception { final String ledgerAndCursorName = "topicEntryWithPayloadProcessed"; - Set processors = new HashSet(); + Set processors = new HashSet<>(); processors.add(new TestPayloadProcessor()); - ManagedLedgerInterceptor interceptor = new ManagedLedgerInterceptorImpl(new HashSet(), processors); + ManagedLedgerInterceptor interceptor = new ManagedLedgerInterceptorImpl(new HashSet<>(), processors); ManagedLedgerConfig config = new ManagedLedgerConfig(); config.setMaxEntriesPerLedger(2); @@ -171,9 +171,9 @@ public void testTotalSizeCorrectIfHasInterceptor() throws Exception { // Registry interceptor. ManagedLedgerConfig config = new ManagedLedgerConfig(); - Set processors = new HashSet(); + Set processors = new HashSet<>(); processors.add(new TestPayloadProcessor()); - ManagedLedgerInterceptor interceptor = new ManagedLedgerInterceptorImpl(new HashSet(), processors); + ManagedLedgerInterceptor interceptor = new ManagedLedgerInterceptorImpl(new HashSet<>(), processors); config.setManagedLedgerInterceptor(interceptor); config.setMaxEntriesPerLedger(2); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/AntiAffinityNamespaceGroupTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/AntiAffinityNamespaceGroupTest.java index 26cad55f82400..37f8b28b6e6d8 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/AntiAffinityNamespaceGroupTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/AntiAffinityNamespaceGroupTest.java @@ -535,12 +535,14 @@ protected boolean isLoadManagerUpdatedDomainCache(Object loadManager) throws Exc return !brokerToFailureDomainMap.isEmpty(); } + @SuppressWarnings("unchecked") private NamespaceBundle makeBundle(final String tenant, final String namespace) { return nsFactory.getBundle(NamespaceName.get(tenant, namespace), Range.range(NamespaceBundles.FULL_LOWER_BOUND, BoundType.CLOSED, NamespaceBundles.FULL_UPPER_BOUND, BoundType.CLOSED)); } + @SuppressWarnings("unchecked") private static void filterAntiAffinityGroupOwnedBrokers( PulsarService pulsar, String assignedNamespace, @@ -558,6 +560,7 @@ private static void filterAntiAffinityGroupOwnedBrokers( } } + @SuppressWarnings("unchecked") private static boolean shouldAntiAffinityNamespaceUnload( String namespace, String bundle, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java index aa66c20e77129..8167b3c02ac01 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java @@ -438,6 +438,7 @@ public void testTopicAssignmentWithExistingBundles() throws Exception { } } + @SuppressWarnings("unchecked") private AtomicReference> getRealtimeResourceQuota(PulsarService pulsar) throws NoSuchFieldException, IllegalAccessException { Field quotasField = ((SimpleLoadManagerImpl) pulsar.getLoadManager().get()).getClass() diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java index b210d89cf034a..946c092fa45dd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/ModularLoadManagerStrategyTest.java @@ -46,6 +46,7 @@ @Test(groups = "broker") public class ModularLoadManagerStrategyTest { + @SuppressWarnings("unchecked") public void testAvgShedderWithPreassignedBroker() throws Exception { ModularLoadManagerStrategy strategy = new AvgShedder(); Field field = AvgShedder.class.getDeclaredField("bundleBrokerMap"); @@ -62,6 +63,7 @@ public void testAvgShedderWithPreassignedBroker() throws Exception { assertEquals(bundleBrokerMap.get(bundleData), "2"); } + @SuppressWarnings("unchecked") public void testAvgShedderWithoutPreassignedBroker() throws Exception { ModularLoadManagerStrategy strategy = new AvgShedder(); Field field = AvgShedder.class.getDeclaredField("bundleBrokerMap"); @@ -284,6 +286,7 @@ public void testActiveBrokersChange() throws Exception { strategy.selectBroker(brokerDataMap.keySet(), new BundleData(), loadData, conf); Field field = LeastResourceUsageWithWeight.class.getDeclaredField("brokerAvgResourceUsageWithWeight"); field.setAccessible(true); + @SuppressWarnings("unchecked") Map map = (Map) field.get(strategy); assertEquals(map.size(), 3); strategy.onActiveBrokersChange(new HashSet<>()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java index 7b4e3328f9a02..78e991eef0404 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java @@ -60,6 +60,7 @@ protected String getLoadManagerClassName() { return ExtensibleLoadManagerImpl.class.getName(); } + @SuppressWarnings("unchecked") protected String selectBroker(ServiceUnitId serviceUnit, Object loadManager) { try { return ((ExtensibleLoadManagerImpl) loadManager) @@ -70,6 +71,7 @@ protected String selectBroker(ServiceUnitId serviceUnit, Object loadManager) { } } + @SuppressWarnings("unchecked") protected void selectBrokerForNamespace( Object ownershipData, String broker, String namespace, String assignedBundleName) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/BrokerRegistryTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/BrokerRegistryTest.java index 941d0e4cbc3a0..efdd23e1d3ef4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/BrokerRegistryTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/BrokerRegistryTest.java @@ -402,6 +402,7 @@ public void testKeyPath() { } @Test + @SuppressWarnings("unchecked") public void testRegisterAsyncTimeout() throws Exception { var pulsar1 = createPulsarService(); pulsar1.start(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/SplitManagerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/SplitManagerTest.java index da115f188517a..98d828bb8aa48 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/SplitManagerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/SplitManagerTest.java @@ -194,6 +194,7 @@ public void testClose() throws IllegalAccessException { } } + @SuppressWarnings("unchecked") private Map> getinFlightUnloadRequests(SplitManager manager) throws IllegalAccessException { var inFlightUnloadRequest = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/UnloadManagerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/UnloadManagerTest.java index 6f8e676486eab..155608f009f2e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/UnloadManagerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/manager/UnloadManagerTest.java @@ -214,6 +214,7 @@ public void testClose() throws IllegalAccessException { assertEquals(counter.getBreakdownCounters().get(Failure).get(Unknown).get(), 1); } + @SuppressWarnings("unchecked") private Map> getInFlightUnloadRequestMap(UnloadManager manager) throws IllegalAccessException { Map> inFlightUnloadRequest = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java index 16bdacb93cce1..88d99232ba360 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundlesTest.java @@ -285,6 +285,7 @@ public void testLoadBalancerSheddingBundlesWithPoliciesEnabledConfig() throws Me @Test + @SuppressWarnings("unchecked") public void testPartitionSort() { Random rand = new Random(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java index 4a4cc877bc599..7c8941582caf0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporterTest.java @@ -55,8 +55,7 @@ @Test(groups = "broker") public class BrokerLoadDataReporterTest { PulsarService pulsar; - @SuppressWarnings("rawtypes") - LoadDataStore store; + LoadDataStore store; BrokerService brokerService; PulsarStats pulsarStats; ServiceConfiguration config; @@ -71,7 +70,9 @@ void setup() { config = new ServiceConfiguration(); config.setLoadBalancerDebugModeEnabled(true); pulsar = mock(PulsarService.class); - store = mock(LoadDataStore.class); + @SuppressWarnings("unchecked") + LoadDataStore mockedStore = mock(LoadDataStore.class); + store = mockedStore; brokerService = mock(BrokerService.class); pulsarStats = mock(PulsarStats.class); doReturn(brokerService).when(pulsar).getBrokerService(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java index e1512d92e98e0..c78cd7c0ef00f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporterTest.java @@ -70,6 +70,7 @@ public class TopBundleLoadDataReporterTest { String broker = "broker-1"; @BeforeMethod + @SuppressWarnings("unchecked") void setup() throws MetadataStoreException { config = new ServiceConfiguration(); config.setLoadBalancerDebugModeEnabled(true); @@ -106,12 +107,14 @@ void setup() throws MetadataStoreException { doReturn(bundleStats).when(brokerService).getBundleStats(); } + @SuppressWarnings("unchecked") public void testZeroUpdatedAt() { doReturn(0L).when(pulsarStats).getUpdatedAt(); var target = new TopBundleLoadDataReporter(pulsar, "", store); assertNull(target.generateLoadData()); } + @SuppressWarnings("unchecked") public void testGenerateLoadData() throws IllegalAccessException { doReturn(1L).when(pulsarStats).getUpdatedAt(); config.setLoadBalancerMaxNumberOfBundlesInBundleLoadReport(2); @@ -140,6 +143,7 @@ public void testGenerateLoadData() throws IllegalAccessException { } + @SuppressWarnings("unchecked") public void testReportForce() { var target = new TopBundleLoadDataReporter(pulsar, broker, store); target.reportAsync(false); @@ -149,6 +153,7 @@ public void testReportForce() { } + @SuppressWarnings("unchecked") public void testReport(){ pulsar.getConfiguration().setLoadBalancerMaxNumberOfBundlesInBundleLoadReport(1); var target = new TopBundleLoadDataReporter(pulsar, broker, store); @@ -160,6 +165,7 @@ public void testReport(){ } @Test + @SuppressWarnings("unchecked") public void testTombstone() throws IllegalAccessException { var target = spy(new TopBundleLoadDataReporter(pulsar, broker, store)); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java index 54d1e9febfbcf..ecd9b9dd29c47 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/SplitSchedulerTest.java @@ -103,6 +103,7 @@ public void setUp() { } @Test(timeOut = 30 * 1000) + @SuppressWarnings("unchecked") public void testExecuteSuccess() { AtomicReference> reference = new AtomicReference<>(); SplitCounter counter = new SplitCounter(); @@ -133,6 +134,7 @@ public void testExecuteSuccess() { } @Test(timeOut = 30 * 1000) + @SuppressWarnings("unchecked") public void testExecuteFailure() { AtomicReference> reference = new AtomicReference<>(); SplitCounter counter = new SplitCounter(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/store/LoadDataStoreTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/store/LoadDataStoreTest.java index fe03446e58b7d..dd6e635ce33f7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/store/LoadDataStoreTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/store/LoadDataStoreTest.java @@ -148,6 +148,7 @@ public void testTableViewRestart() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProducerRestart() throws Exception { String topic = TopicDomain.persistent + "://" + NamespaceName.SYSTEM_NAMESPACE + "/" + UUID.randomUUID(); var loadDataStore = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java index a3649ff4af18c..81b637a253417 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/strategy/DefaultNamespaceBundleSplitStrategyTest.java @@ -88,6 +88,7 @@ public class DefaultNamespaceBundleSplitStrategyTest { String broker = "broker-1"; @BeforeMethod + @SuppressWarnings("unchecked") void setup() { config = new ServiceConfiguration(); config.setLoadBalancerDebugModeEnabled(true); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ThresholdShedderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ThresholdShedderTest.java index 941a99a51f9e2..699adc535b782 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ThresholdShedderTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ThresholdShedderTest.java @@ -61,6 +61,7 @@ public void testNoBrokers() { } @Test + @SuppressWarnings("unchecked") public void testCleanCache() throws Exception { testBrokerReachThreshold(); Field field = ThresholdShedder.class.getDeclaredField("brokerAvgResourceUsage"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java index 6dcb69dc831a5..22a6749c343ca 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/namespace/NamespaceServiceTest.java @@ -590,6 +590,7 @@ public void testSplitBundleAndRemoveOldBundleFromOwnerShipCache() throws Excepti @Test + @SuppressWarnings("unchecked") public void testSplitLargestBundle() throws Exception { String namespace = "prop/ns-abc2"; String topic = "persistent://" + namespace + "/t1-"; @@ -662,6 +663,7 @@ public void testSplitBUndleWithNoBundle() throws Exception { * @throws Exception */ @Test + @SuppressWarnings("unchecked") public void testSplitBundleWithHighestThroughput() throws Exception { conf.setLoadManagerClassName(ModularLoadManagerImpl.class.getName()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtilsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtilsTest.java index 0f1e553a3f622..39e50fffc4e34 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtilsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtilsTest.java @@ -39,6 +39,7 @@ public class ProtocolHandlerUtilsTest { @Test + @SuppressWarnings("unchecked") public void testLoadProtocolHandler() throws Exception { ProtocolHandlerDefinition def = new ProtocolHandlerDefinition(); def.setHandlerClass(MockProtocolHandler.class.getName()); @@ -71,6 +72,7 @@ public void testLoadProtocolHandler() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testLoadProtocolHandlerBlankHandlerClass() throws Exception { ProtocolHandlerDefinition def = new ProtocolHandlerDefinition(); def.setDescription("test-protocol-handler"); @@ -103,6 +105,7 @@ public void testLoadProtocolHandlerBlankHandlerClass() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testLoadProtocolHandlerWrongHandlerClass() throws Exception { ProtocolHandlerDefinition def = new ProtocolHandlerDefinition(); def.setHandlerClass(Runnable.class.getName()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlersTest.java index 3429d219f2572..48bc30962f51e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/protocol/ProtocolHandlersTest.java @@ -119,6 +119,7 @@ public void testStart() { } @Test + @SuppressWarnings("unchecked") public void testNewChannelInitializersSuccess() { ChannelInitializer i1 = mock(ChannelInitializer.class); ChannelInitializer i2 = mock(ChannelInitializer.class); @@ -144,6 +145,7 @@ public void testNewChannelInitializersSuccess() { } @Test(expectedExceptions = RuntimeException.class) + @SuppressWarnings("unchecked") public void testNewChannelInitializersOverlapped() { ChannelInitializer i1 = mock(ChannelInitializer.class); ChannelInitializer i2 = mock(ChannelInitializer.class); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java index c4e580c076063..0ec9a5d0b1fad 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/AbstractReplicatorTest.java @@ -58,7 +58,7 @@ @Test(groups = "broker-replication") public class AbstractReplicatorTest { - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testRetryStartProducerStoppedByTopicRemove() throws Exception { final String localCluster = "localCluster"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java index 123aad3aee079..2bd3db935994b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java @@ -962,6 +962,7 @@ public void backlogsStatsNotPreciseWithNoBacklog() throws PulsarAdminException, } } + @SuppressWarnings("unchecked") private void unloadAndLoadTopic(String topic, Producer producer) throws PulsarAdminException, PulsarClientException { admin.topics().unload(topic); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BatchMessageWithBatchIndexLevelTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BatchMessageWithBatchIndexLevelTest.java index faa49c4c930b9..6f2848ddf8612 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BatchMessageWithBatchIndexLevelTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BatchMessageWithBatchIndexLevelTest.java @@ -587,6 +587,7 @@ private ManagedCursorImpl getCursor(String topic, String sub) { /*** * After {@param signal} complete, the consumer({@param consumerName}) start to receive messages. */ + @SuppressWarnings("unchecked") private org.apache.pulsar.broker.service.Consumer makeConsumerReceiveMessagesDelay(String topic, String sub, String consumerName, CompletableFuture signal) throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java index b9905deb9a66e..e76093c68c537 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerBookieIsolationTest.java @@ -292,6 +292,7 @@ public void testBookieIsolation() throws Exception { assertEquals(clientConf.getProperty(REPP_DNS_RESOLVER_CLASS), BookieRackAffinityMapping.class.getName()); } + @SuppressWarnings("unchecked") private LedgerManager getLedgerManager(BookieImpl bookie1) throws IllegalAccessException { DbLedgerStorage ledgerStorage = (DbLedgerStorage) FieldUtils.readDeclaredField(bookie1, "ledgerStorage", true); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java index 1befb310d3899..ed64bd455974a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java @@ -1267,6 +1267,7 @@ public void testConcurrentLoadTopicExceedLimitShouldNotBeAutoCreated() throws Ex } @Test + @SuppressWarnings("unchecked") public void testCheckInactiveSubscriptionsShouldNotDeleteCompactionCursor() throws Exception { String namespace = "prop/test"; @@ -1519,6 +1520,7 @@ public void testCreateNamespacePolicy() throws Exception { * @throws Exception */ @Test + @SuppressWarnings("unchecked") public void testStuckTopicUnloading() throws Exception { final String namespace = "prop/ns-abc"; final String topicName = "persistent://" + namespace + "/unoadTopic"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java index 353d2ab89e29e..c6db10f43c197 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java @@ -632,6 +632,7 @@ public Object[][] enabledDeduplication() { * 4. Verify: All 4 messages are copied to the remote cluster. */ @Test(timeOut = 360 * 1000, dataProvider = "enabledDeduplication") + @SuppressWarnings("unchecked") public void testDeduplicationNotLostMessage(boolean enabledDeduplication) throws Exception { waitInternalClientCreated(); @@ -882,6 +883,7 @@ public void testReplicationLoadSchemaTimeout(boolean enabledDeduplication) throw Runnable taskToClearInjection = injectReplicatorClientCnx( (conf, eventLoopGroup) -> new ClientCnx(InstrumentProvider.NOOP, conf, eventLoopGroup) { @Override + @SuppressWarnings("unchecked") protected void handleGetSchemaResponse(CommandGetSchemaResponse commandGetSchemaResponse) { if (getSchemaSuccess.get()) { getSchemaSuccess.set(false); @@ -903,6 +905,7 @@ protected void handleGetSchemaResponse(CommandGetSchemaResponse commandGetSchema } @Override + @SuppressWarnings("unchecked") protected void handleGetOrCreateSchemaResponse(CommandGetOrCreateSchemaResponse commandGetOrCreateSchemaResponse) { @@ -928,6 +931,7 @@ protected void handleGetOrCreateSchemaResponse(CommandGetOrCreateSchemaResponse }); // Create topics and enable deduplication. + @SuppressWarnings("unchecked") final String topicName = BrokerTestUtil.newUniqueName("persistent://" + nonReplicatedNamespace + "/tp_"); admin1.topics().createNonPartitionedTopic(topicName); admin1.topics().createSubscription(topicName, "s1", MessageId.earliest); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java index fcf392f1d328b..7db0bfb20c936 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorTest.java @@ -474,6 +474,7 @@ public void testNonPersistentReplicatorQueueSize() throws Exception { } @Test(timeOut = 45 * 1000) + @SuppressWarnings("unchecked") public void testTopicCloseWhenInternalProducerCloseErrorOnce() throws Exception { final String topicName = BrokerTestUtil.newUniqueName("persistent://" + replicatedNamespace + "/tp_"); admin1.topics().createNonPartitionedTopic(topicName); @@ -524,6 +525,7 @@ public void testTopicCloseWhenInternalProducerCloseErrorOnce() throws Exception }); } + @SuppressWarnings("unchecked") private Runnable injectMockReplicatorProducerBuilder( BiFunction producerDecorator) throws Exception { @@ -1134,6 +1136,7 @@ public Object[][] replicationLevels() { } @Test(dataProvider = "replicationLevels") + @SuppressWarnings("unchecked") public void testReloadWithTopicLevelGeoReplication(ReplicationLevel replicationLevel) throws Exception { final String topicName = ((Supplier) () -> { if (replicationLevel.equals(ReplicationLevel.TOPIC_LEVEL)) { @@ -1537,6 +1540,7 @@ public void testReplicationCountMetrics() throws Exception { * This test used to confirm the "start replicator retry task" will be skipped after the topic is closed. */ @Test + @SuppressWarnings("unchecked") public void testCloseTopicAfterStartReplicationFailed() throws Exception { Field fieldTopicNameCache = TopicName.class.getDeclaredField("cache"); fieldTopicNameCache.setAccessible(true); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java index 8255b000b042f..7182abb8fa98f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentDispatcherFailoverConsumerTest.java @@ -171,6 +171,7 @@ public void setup() throws Exception { } @AfterMethod(alwaysRun = true) + @SuppressWarnings("unchecked") public void shutdown() throws Exception { if (pulsarTestContext != null) { pulsarTestContext.close(); @@ -178,6 +179,7 @@ public void shutdown() throws Exception { } } + @SuppressWarnings("unchecked") void setupMLAsyncCallbackMocks() { ledgerMock = mock(ManagedLedger.class); cursorMock = mock(ManagedCursorImpl.class); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java index 4ed5b4d0e09e0..f3d99cb562d09 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicE2ETest.java @@ -2001,6 +2001,7 @@ public static class MyTopicFactory implements TopicFactory { private static AtomicInteger count = new AtomicInteger(0); @Override + @SuppressWarnings("unchecked") public T create(String topic, ManagedLedger ledger, BrokerService brokerService, Class topicClazz) { try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicInitializeDelayTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicInitializeDelayTest.java index f528032299aee..11a0b667fd04d 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicInitializeDelayTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicInitializeDelayTest.java @@ -80,6 +80,7 @@ public void testTopicInitializeDelay() throws Exception { public static class MyTopicFactory implements TopicFactory { @Override + @SuppressWarnings("unchecked") public T create(String topic, ManagedLedger ledger, BrokerService brokerService, Class topicClazz) { try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java index 9a1907d8d31f4..d8492d282894f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/PersistentTopicTest.java @@ -262,6 +262,7 @@ public void teardown() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testCreateTopic() { final ManagedLedger ledgerMock = mock(ManagedLedger.class); doReturn(new ManagedLedgerConfig()).when(ledgerMock).getConfig(); @@ -290,6 +291,7 @@ public void testCreateTopic() { } @Test + @SuppressWarnings("unchecked") public void testCreateTopicMLFailure() { final String jinxedTopicName = "persistent://prop/ns-abc/topic3"; doAnswer(invocationOnMock -> { @@ -789,6 +791,7 @@ public void testAddRemoveConsumerDurableCursor() throws Exception { assertTrue(sub.getDispatcher().isClosed()); } + @SuppressWarnings("unchecked") private void testMaxConsumersShared() throws Exception { PersistentTopic topic = new PersistentTopic(successTopicName, ledgerMock, brokerService); topic.initialize().join(); @@ -880,6 +883,7 @@ public void testMaxConsumersSharedForNamespace() throws Exception { testMaxConsumersShared(); } + @SuppressWarnings("unchecked") private void testMaxConsumersFailover() throws Exception { PersistentTopic topic = new PersistentTopic(successTopicName, ledgerMock, brokerService); @@ -990,6 +994,7 @@ private Consumer getMockedConsumerWithSpecificAddress(Topic topic, Subscription } @Test + @SuppressWarnings("unchecked") public void testMaxSameAddressConsumers() throws Exception { // set max clients pulsarTestContext.getConfig().setMaxSameAddressConsumersPerTopic(2); @@ -1690,6 +1695,7 @@ private PulsarAdmin mockReplicationAdmin() { * @throws Exception */ @Test + @SuppressWarnings("unchecked") public void testAtomicReplicationRemoval() throws Exception { final String globalTopicName = "persistent://prop/ns-abc/successTopic"; String localCluster = "local"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java index 51e4f77f950f2..97c5fd2f19144 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/RackAwareTest.java @@ -106,6 +106,7 @@ protected void cleanup() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testPlacement() throws Exception { final String group = "default"; for (int i = 0; i < NUM_BOOKIES; i++) { @@ -149,6 +150,7 @@ public void testPlacement() throws Exception { } @Test(dataProvider = "forceMinRackNumProvider") + @SuppressWarnings("unchecked") public void testPlacementMinRackNumsPerWriteQuorum(boolean forceMinRackNums) throws Exception { cleanup(); config = new ServiceConfiguration(); @@ -202,6 +204,7 @@ public void testPlacementMinRackNumsPerWriteQuorum(boolean forceMinRackNums) thr } } + @SuppressWarnings("unchecked") public void testRackUpdate() throws Exception { // 1. reset configurations for rack-aware cleanup(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicationTxnTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicationTxnTest.java index 1eb59c725f860..b31af34733147 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicationTxnTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicationTxnTest.java @@ -113,6 +113,7 @@ protected void createDefaultTenantsAndClustersAndNamespace() throws Exception { SystemTopicNames.TRANSACTION_COORDINATOR_ASSIGN, new PartitionedTopicMetadata(txnLogPartitions)); } + @SuppressWarnings("unchecked") private void pubAndSubOneMsg(String topic, String subscription) throws Exception { Consumer consumer1 = client1.newConsumer(Schema.STRING).topic(topic).subscriptionName(subscription) .isAckReceiptEnabled(true).subscribe(); @@ -222,6 +223,7 @@ public void testTxnLogNotBeReplicated() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testOngoingMessagesWillNotBeReplicated() throws Exception { final String topic = BrokerTestUtil.newUniqueName("persistent://" + replicatedNamespace + "/tp"); final String subscription = "s1"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java index 4105dad8b86b2..22c11eb198cd2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/ReplicatorTest.java @@ -466,6 +466,7 @@ public void testCounterOfPendingMessagesCorrect() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testReplicationWillNotStuckByIncompleteSchemaFuture() throws Exception { int originalReplicationProducerQueueSize = pulsar1.getConfiguration().getReplicationProducerQueueSize(); pulsar1.getConfiguration().setReplicationProducerQueueSize(5); @@ -1430,7 +1431,7 @@ public void testTopicReplicatedAndProducerCreate(String topicPrefix, String topi nonPersistentProducer2.close(); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testCleanupTopic() throws Exception { 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 b01ef91d99d0e..e06cd6eee9250 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 @@ -1165,6 +1165,7 @@ protected void handleError(CommandError error) { } @Test + @SuppressWarnings("unchecked") public void testExceptionBySeekFunction() throws Exception { final String topicName = "persistent://prop/ns-abc/test" + UUID.randomUUID(); creatProducerAndSendMsg(topicName, 10); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java index 53cb861607724..708dc711549e0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/SystemTopicBasedTopicPoliciesServiceTest.java @@ -317,6 +317,7 @@ public void testHandleNamespaceBeingDeleted() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGetTopicPoliciesWithCleanCache() throws Exception { final String topic = "persistent://" + NAMESPACE1 + "/test" + UUID.randomUUID(); pulsarClient.newProducer().topic(topic).create().close(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumersTest.java index d0c8a0c7dd2b8..a619696c8a8be 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentStickyKeyDispatcherMultipleConsumersTest.java @@ -133,6 +133,7 @@ public void testTotalAvailablePermitsWhenRemoveConsumer() throws Exception { } @Test(timeOut = 10000) + @SuppressWarnings("unchecked") public void testSendMessage() throws BrokerServiceException { Consumer consumerMock = mock(Consumer.class); when(consumerMock.getAvailablePermits()).thenReturn(1000); @@ -166,6 +167,7 @@ public void testSendMessage() throws BrokerServiceException { } @Test(timeOut = 10000) + @SuppressWarnings("unchecked") public void testSendMessageRespectFlowControl() throws BrokerServiceException { Consumer consumerMock = mock(Consumer.class); nonpersistentDispatcher.addConsumer(consumerMock); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/MessageDuplicationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/MessageDuplicationTest.java index 047a09fcffde8..ebd6f560889fd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/MessageDuplicationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/MessageDuplicationTest.java @@ -177,6 +177,7 @@ public void testIsDuplicate() { } @Test + @SuppressWarnings("unchecked") public void testInactiveProducerRemove() throws Exception { PulsarService pulsarService = mock(PulsarService.class); PersistentTopic topic = mock(PersistentTopic.class); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java index 00e8e0ffcbe00..deee8bee7286c 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentSubscriptionTest.java @@ -126,6 +126,7 @@ public void teardown() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testCanAcknowledgeAndAbortForTransaction() throws Exception { List> positionsPair = new ArrayList<>(); positionsPair.add(new MutablePair<>(PositionFactory.create(2, 1), 0)); @@ -210,6 +211,7 @@ public void testCanAcknowledgeAndAbortForTransaction() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testAcknowledgeUpdateCursorLastActive() throws Exception { doAnswer((invocationOnMock) -> { ((AsyncCallbacks.DeleteCallback) invocationOnMock.getArguments()[1]) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java index 1f84993215beb..e2e30c5e65df9 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java @@ -581,6 +581,7 @@ public void testCreateNonExistentPartitions() throws PulsarAdminException, Pulsa } @Test + @SuppressWarnings("unchecked") public void testDeleteTopicFail() throws Exception { final String fullyTopicName = "persistent://prop/ns-abc/" + "tp_" + UUID.randomUUID().toString().replaceAll("-", ""); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsControllerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsControllerTest.java index 92a15ad260553..02f01e7da52bb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsControllerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/ReplicatedSubscriptionsControllerTest.java @@ -61,6 +61,7 @@ public class ReplicatedSubscriptionsControllerTest { @Test + @SuppressWarnings("unchecked") public void testSnapshotRequestWhenReplicatorRemovedConcurrentlyDoesNotThrow() throws Exception { // Use a real PersistentTopic instance so that the replicator removal happens via the production code path // (PersistentTopic#removeReplicator), instead of directly doing "replicators.remove(..)" in the test. diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java index 270f46c1f2b20..bb9cfb99f89be 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/TopicDuplicationTest.java @@ -183,6 +183,7 @@ public void testDeduplicationPriority() throws Exception { checkDeduplicationEnabled(producerName, messageDeduplication, maxSeq3); } + @SuppressWarnings("unchecked") private long sendMessageAndGetMaxSeq(int maxMsgNum, Producer producer) throws Exception{ long seq = System.nanoTime(); for (int i = 0; i <= maxMsgNum; i++) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicServiceTest.java index 7e26f29b4aa9a..a676127f35095 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicServiceTest.java @@ -109,6 +109,7 @@ public void testSystemTopicSchemaCompatibility() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testSendAndReceiveNamespaceEvents() throws Exception { TopicPoliciesSystemTopicClient systemTopicClientForNamespace1 = systemTopicFactory .createTopicPoliciesSystemTopicClient(NamespaceName.get(NAMESPACE1)); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/NonClosingProxyHandler.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/NonClosingProxyHandler.java index 37b7f25d4d963..3d53e799b8708 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/NonClosingProxyHandler.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/testcontext/NonClosingProxyHandler.java @@ -61,6 +61,7 @@ public static boolean isNonClosingProxy(Object instance) { * @param instance proxy instance * @return delegate instance */ + @SuppressWarnings("unchecked") public static K getDelegate(T instance) { if (isNonClosingProxy(instance)) { return (T) ((NonClosingProxyHandler) Proxy.getInvocationHandler(instance)).getDelegate(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java index 33be818a0b065..62ab55ae726da 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/SegmentAbortedTxnProcessorTest.java @@ -137,6 +137,7 @@ public void testPutAbortedTxnIntoProcessor() throws Exception { //3. Delete the ledgers and then verify the date. Field ledgersField = ManagedLedgerImpl.class.getDeclaredField("ledgers"); ledgersField.setAccessible(true); + @SuppressWarnings("unchecked") NavigableMap ledgers = (NavigableMap) ledgersField.get(persistentTopic.getManagedLedger()); @@ -174,7 +175,9 @@ private void verifyAbortedTxnIDAndSegmentIndex(AbortedTxnProcessor processor, in .getDeclaredField("segmentIndex"); unsealedSegmentField.setAccessible(true); indexField.setAccessible(true); + @SuppressWarnings("unchecked") LinkedList unsealedSegment = (LinkedList) unsealedSegmentField.get(processor); + @SuppressWarnings("unchecked") LinkedMap indexes = (LinkedMap) indexField.get(processor); assertEquals(unsealedSegment.size(), txnIdSize % SEGMENT_SIZE); assertEquals(indexes.size(), txnIdSize / SEGMENT_SIZE); @@ -209,6 +212,7 @@ public void testFuturesCanCompleteWhenItIsCanceled() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testClearSnapshotSegments() throws Exception { PersistentTopic persistentTopic = (PersistentTopic) pulsarService.getBrokerService() .getTopic(PROCESSOR_TOPIC, false).get().get(); @@ -383,6 +387,7 @@ private void doCompaction(TopicName topic) throws Exception { Field field = PersistentTopic.class.getDeclaredField("currentCompaction"); field.setAccessible(true); snapshotTopic.triggerCompaction(); + @SuppressWarnings("unchecked") CompletableFuture compactionFuture = (CompletableFuture) field.get(snapshotTopic); org.awaitility.Awaitility.await().untilAsserted(() -> assertTrue(compactionFuture.isDone())); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java index 34e7b508b7075..d7e6007e9c774 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TopicTransactionBufferRecoverTest.java @@ -462,6 +462,7 @@ private void testTopicTransactionBufferDeleteAbort(Boolean enableSnapshotSegment PersistentTopic persistentTopic = (PersistentTopic) topic.get(); var field = ManagedLedgerImpl.class.getDeclaredField("ledgers"); field.setAccessible(true); + @SuppressWarnings("unchecked") NavigableMap ledgers = (NavigableMap) field.get(persistentTopic.getManagedLedger()); @@ -488,6 +489,7 @@ private void testTopicTransactionBufferDeleteAbort(Boolean enableSnapshotSegment Field abortsField = SingleSnapshotAbortedTxnProcessorImpl.class.getDeclaredField("aborts"); abortsField.setAccessible(true); + @SuppressWarnings("unchecked") LinkedMap linkedMap = (LinkedMap) abortsField.get(abortedTxnProcessor); assertEquals(linkedMap.size(), 1); @@ -555,6 +557,7 @@ public void clearTransactionBufferSnapshotTest(Boolean enableSnapshotSegment) th private void checkSnapshotCount(TopicName topicName, boolean hasSnapshot, PersistentTopic persistentTopic, Field field) throws Exception { persistentTopic.triggerCompaction(); + @SuppressWarnings("unchecked") CompletableFuture compactionFuture = (CompletableFuture) field.get(persistentTopic); Awaitility.await().untilAsserted(() -> assertTrue(compactionFuture.isDone())); @@ -593,6 +596,7 @@ public SystemTopicClient.Reader getReader(String topi } @Test(timeOut = 30000) + @SuppressWarnings("unchecked") public void testTransactionBufferRecoverThrowException() throws Exception { OrderedScheduler scheduler = OrderedScheduler.newSchedulerBuilder() .numThreads(1) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionProduceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionProduceTest.java index 757f86ec834da..ed87a8957b1a5 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionProduceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionProduceTest.java @@ -402,6 +402,7 @@ private int getPendingAckCount(String topic, String subscriptionName) throws Exc field = PendingAckHandleImpl.class.getDeclaredField("individualAckPositions"); field.setAccessible(true); + @SuppressWarnings("unchecked") Map> map = (Map>) field.get(pendingAckHandle); if (map != null) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java index 7712501623cf1..d3addfbb2c222 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTest.java @@ -555,6 +555,7 @@ public void testSubscriptionRecreateTopic() ManagedLedgerFactory managedLedgerFactory = pulsarService.getDefaultManagedLedgerFactory(); Field field = ManagedLedgerFactoryImpl.class.getDeclaredField("ledgers"); field.setAccessible(true); + @SuppressWarnings("unchecked") ConcurrentHashMap> ledgers = (ConcurrentHashMap>) field.get(managedLedgerFactory); ledgers.remove(TopicName.get(topic).getPersistenceNamingEncoding()); @@ -785,6 +786,7 @@ public void testMaxReadPositionForNormalPublish() throws Exception { Assert.assertEquals(position4.getEntryId(), messageId4.getEntryId()); //test publishing normal messages will not change maxReadPosition if the state o TB is Initializing. + @SuppressWarnings("unchecked") Class transactionBufferStateClass = (Class) topicTransactionBuffer.getClass().getSuperclass(); Field field = transactionBufferStateClass.getDeclaredField("state"); @@ -1405,6 +1407,7 @@ public void testTransactionAckMessages() throws Exception { Field field = MessagesImpl.class.getDeclaredField("messageList"); field.setAccessible(true); + @SuppressWarnings("unchecked") MessagesImpl messages = (MessagesImpl) method.invoke(consumer); List> messageList = new ArrayList<>(); @@ -1619,6 +1622,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { * see: https://github.com/apache/pulsar/pull/16248. */ @Test + @SuppressWarnings("unchecked") public void testTBRecoverChangeStateError() throws InterruptedException, TimeoutException { final AtomicReference persistentTopic = new AtomicReference<>(); // Create Executor @@ -1814,7 +1818,7 @@ public void testDeleteNamespace() throws Exception { } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test(timeOut = 10_000) public void testTBSnapshotWriter() throws Exception { String namespace = TENANT + "/ns-" + RandomStringUtils.randomAlphabetic(5); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java index 7a1a990577663..b386460d85b88 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/TransactionTestBase.java @@ -238,6 +238,7 @@ public void checkSnapshotPublisherCount(String namespace, int expectCount) { .atMost(5, TimeUnit.SECONDS) .pollInterval(100, TimeUnit.MILLISECONDS) .untilAsserted(() -> { + @SuppressWarnings("unchecked") List publisherStatsList = (List) admin.topics() .getStats(snTopicName.getPartitionedTopicName()).getPublishers(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferClientTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferClientTest.java index 06b6939364f58..4b2dd1c0e581b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferClientTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionBufferClientTest.java @@ -301,6 +301,7 @@ public PulsarClient answer(InvocationOnMock invocation) throws Throwable { Field field = TransactionBufferHandlerImpl.class.getDeclaredField("outstandingRequests"); field.setAccessible(true); + @SuppressWarnings("unchecked") ConcurrentSkipListMap outstandingRequests = (ConcurrentSkipListMap) field.get(transactionBufferHandler); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionLowWaterMarkTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionLowWaterMarkTest.java index 7b77b68e83b68..5d0c7bef6d216 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionLowWaterMarkTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/TransactionLowWaterMarkTest.java @@ -225,8 +225,10 @@ public void testPendingAckLowWaterMark() throws Exception { PendingAckHandleImpl pendingAckHandle = (PendingAckHandleImpl) field.get(persistentSubscription); field = PendingAckHandleImpl.class.getDeclaredField("individualAckOfTransaction"); field.setAccessible(true); - individualAckOfTransaction = + @SuppressWarnings("unchecked") + LinkedMap> map = (LinkedMap>) field.get(pendingAckHandle); + individualAckOfTransaction = map; } } } @@ -447,6 +449,7 @@ private boolean checkTxnIsOngoingInTP(TxnID txnID, String subName) throws Except Field field2 = PendingAckHandleImpl.class.getDeclaredField("individualAckOfTransaction"); field2.setAccessible(true); + @SuppressWarnings("unchecked") LinkedMap> individualAckOfTransaction = (LinkedMap>) field2.get(pendingAckHandle); return individualAckOfTransaction.containsKey(txnID); @@ -462,6 +465,7 @@ private boolean checkTxnIsOngoingInTB(TxnID txnID) throws Exception { (TopicTransactionBuffer) persistentTopic.getTransactionBuffer(); Field field3 = TopicTransactionBuffer.class.getDeclaredField("ongoingTxns"); field3.setAccessible(true); + @SuppressWarnings("unchecked") LinkedMap ongoingTxns = (LinkedMap) field3.get(topicTransactionBuffer); return ongoingTxns.containsKey(txnID); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionPersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionPersistentTopicTest.java index 508423adce4d8..b340dc6c99ba1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionPersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/buffer/impl/TransactionPersistentTopicTest.java @@ -110,6 +110,7 @@ public void testNoOrphanClosedTopicIfTxnInternalFailed() { public static class MyTopicFactory implements TopicFactory { @Override + @SuppressWarnings("unchecked") public T create(String topic, ManagedLedger ledger, BrokerService brokerService, Class topicClazz) { try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckInMemoryDeleteTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckInMemoryDeleteTest.java index fb78d0cd0ab8c..544f59332d007 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckInMemoryDeleteTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckInMemoryDeleteTest.java @@ -126,6 +126,7 @@ public void txnAckTestNoBatchAndSharedSubMemoryDeleteTest() throws Exception { (PendingAckHandleImpl) field.get(persistentSubscription); field = PendingAckHandleImpl.class.getDeclaredField("individualAckOfTransaction"); field.setAccessible(true); + @SuppressWarnings("unchecked") LinkedMap> individualAckOfTransaction = (LinkedMap>) field.get(pendingAckHandle); assertTrue(individualAckOfTransaction.isEmpty()); @@ -215,8 +216,10 @@ public void txnAckTestBatchAndSharedSubMemoryDeleteTest() throws Exception { pendingAckHandle = (PendingAckHandleImpl) field.get(testPersistentSubscription); field = PendingAckHandleImpl.class.getDeclaredField("individualAckOfTransaction"); field.setAccessible(true); - individualAckOfTransaction = + @SuppressWarnings("unchecked") + LinkedMap> ackOfTransaction = (LinkedMap>) field.get(pendingAckHandle); + individualAckOfTransaction = ackOfTransaction; assertTrue(individualAckOfTransaction.isEmpty()); managedCursor = (ManagedCursorImpl) testPersistentSubscription.getCursor(); final var batchDeletedIndexes = managedCursor.getBatchDeletedIndexes(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckMetadataTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckMetadataTest.java index f01ea7ac67ff9..b3e2531b8a426 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckMetadataTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckMetadataTest.java @@ -95,6 +95,7 @@ public void openLedgerFailed(ManagedLedgerException exception, Object ctx) { ManagedLedgerImpl managedLedger = (ManagedLedgerImpl) field.get(pendingAckStore); field = ManagedLedgerImpl.class.getDeclaredField("STATE_UPDATER"); field.setAccessible(true); + @SuppressWarnings("unchecked") AtomicReferenceFieldUpdater state = (AtomicReferenceFieldUpdater) field.get(managedLedger); state.set(managedLedger, WriteFailed); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckPersistentTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckPersistentTest.java index 648398869d75f..4a9d44e52ec94 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckPersistentTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/pendingack/PendingAckPersistentTest.java @@ -305,6 +305,7 @@ public void individualPendingAckReplayTest() throws Exception { (PendingAckHandleImpl) field.get(topic.getSubscription(subName)); field = PendingAckHandleImpl.class.getDeclaredField("pendingAckStoreFuture"); field.setAccessible(true); + @SuppressWarnings("unchecked") CompletableFuture pendingAckStoreCompletableFuture = (CompletableFuture) field.get(pendingAckHandle); pendingAckStoreCompletableFuture.get(); @@ -504,6 +505,7 @@ public void cumulativePendingAckReplayTest() throws Exception { (PendingAckHandleImpl) field.get(topic.getSubscription(subName)); field = PendingAckHandleImpl.class.getDeclaredField("pendingAckStoreFuture"); field.setAccessible(true); + @SuppressWarnings("unchecked") CompletableFuture pendingAckStoreCompletableFuture = (CompletableFuture) field.get(pendingAckHandle); pendingAckStoreCompletableFuture.get(); @@ -621,7 +623,10 @@ public void testDeleteUselessLogDataWhenSubCursorMoved() throws Exception { PendingAckHandleImpl pendingAckHandle = (PendingAckHandleImpl) field.get(persistentSubscription); Field field1 = PendingAckHandleImpl.class.getDeclaredField("pendingAckStoreFuture"); field1.setAccessible(true); - PendingAckStore pendingAckStore = ((CompletableFuture) field1.get(pendingAckHandle)).get(); + @SuppressWarnings("unchecked") + CompletableFuture storeFuture = + (CompletableFuture) field1.get(pendingAckHandle); + PendingAckStore pendingAckStore = storeFuture.get(); Field field3 = MLPendingAckStore.class.getDeclaredField("pendingAckLogIndex"); Field field4 = MLPendingAckStore.class.getDeclaredField("maxIndexLag"); @@ -629,6 +634,7 @@ public void testDeleteUselessLogDataWhenSubCursorMoved() throws Exception { field3.setAccessible(true); field4.setAccessible(true); + @SuppressWarnings("unchecked") ConcurrentSkipListMap pendingAckLogIndex = (ConcurrentSkipListMap) field3.get(pendingAckStore); long maxIndexLag = (long) field4.get(pendingAckStore); @@ -771,6 +777,7 @@ public void testPendingAckLowWaterMarkRemoveFirstTxn() throws Exception { PendingAckHandleImpl oldPendingAckHandle = (PendingAckHandleImpl) field1.get(persistentSubscription); Field field2 = PendingAckHandleImpl.class.getDeclaredField("individualAckOfTransaction"); field2.setAccessible(true); + @SuppressWarnings("unchecked") LinkedMap> oldIndividualAckOfTransaction = (LinkedMap>) field2.get(oldPendingAckHandle); Awaitility.await().untilAsserted(() -> Assert.assertEquals(oldIndividualAckOfTransaction.size(), 0)); @@ -785,6 +792,7 @@ public void testPendingAckLowWaterMarkRemoveFirstTxn() throws Exception { field3.setAccessible(true); Awaitility.await().until(() -> { + @SuppressWarnings("unchecked") CompletableFuture completableFuture = (CompletableFuture) field3.get(pendingAckHandle); completableFuture.get(); @@ -792,6 +800,7 @@ public void testPendingAckLowWaterMarkRemoveFirstTxn() throws Exception { }); + @SuppressWarnings("unchecked") LinkedMap> individualAckOfTransaction = (LinkedMap>) field2.get(pendingAckHandle); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/recover/TransactionRecoverTrackerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/recover/TransactionRecoverTrackerTest.java index f3dea5add9a79..7369205c9471a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/recover/TransactionRecoverTrackerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/transaction/recover/TransactionRecoverTrackerTest.java @@ -37,6 +37,7 @@ public class TransactionRecoverTrackerTest { + @SuppressWarnings("unchecked") @Test public void openStatusRecoverTrackerTest() throws Exception { TransactionMetadataStoreService transactionMetadataStoreService = mock(TransactionMetadataStoreService.class); @@ -65,6 +66,7 @@ public void openStatusRecoverTrackerTest() throws Exception { assertEquals(priorityQueue.size(), 2); } + @SuppressWarnings("unchecked") @Test public void updateStatusRecoverTest() throws Exception { TransactionRecoverTrackerImpl recoverTracker = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java index 8e561c299f80f..dd91af087a0a8 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithPulsarServiceTest.java @@ -35,6 +35,7 @@ public class AdditionalServletWithPulsarServiceTest { @Test + @SuppressWarnings("unchecked") public void testLoadAdditionalServlet() throws Exception { AdditionalServletDefinition def = new AdditionalServletDefinition(); def.setAdditionalServletClass(MockAdditionalServletWithClassLoader.class.getName()); 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 ed50cca4ec980..3173c32d50ff0 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 @@ -553,6 +553,7 @@ public void testSchemaCompatibilityStrategyPermission() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testUpdateTopicPropertiesAuthorization() throws Exception { log.info("-- Starting {} test --", methodName); cleanup(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java index 3d5347e3606ea..12d3248233026 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java @@ -982,6 +982,7 @@ public void testMergeLookupRequests() throws Exception { final LookupService lookupService = pulsarClientImpl.getLookup(); assertTrue(lookupService.isBinaryProtoLookupService()); + @SuppressWarnings("unchecked") final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); admin.topics().createNonPartitionedTopic(tpName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java index f19a4b2a76a0c..b2a5a65d81315 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ClientErrorsTest.java @@ -841,6 +841,7 @@ public void testConsumerReconnect() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testCommandErrorMessageIsNull() throws Exception { @Cleanup PulsarClient client = PulsarClient.builder().serviceUrl(mockBrokerService.getBrokerAddress()).build(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicDefaultMultiPartitionsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicDefaultMultiPartitionsTest.java index df631252e473c..04a71fc19d3ad 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicDefaultMultiPartitionsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicDefaultMultiPartitionsTest.java @@ -58,6 +58,7 @@ protected void cleanup() throws Exception { super.internalCleanup(); } + @SuppressWarnings("unchecked") private void triggerDLQGenerate(String topic, String subscription) throws Exception { String dlq = getDLQName(topic, subscription); String p0OfDLQ = TopicName.get(dlq).getPartition(0).toString(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java index 173b2467fec87..fb119851f9a45 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/DeadLetterTopicTest.java @@ -1605,6 +1605,7 @@ public void sendDeadLetterTopicWithMismatchSchemaProducer() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testCheckUnnecessaryGetPartitionedTopicMetadataWhenUseRetryAndDQL() { PulsarClientImpl client = mock(PulsarClientImpl.class); ClientConfigurationData clientConf = new ClientConfigurationData(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java index f99e68c1c6e11..baee49f1884ac 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java @@ -159,6 +159,7 @@ public Message beforeSend(Producer producer, Message mes } @Override + @SuppressWarnings("unchecked") public void onSendAcknowledgement(Producer producer, Message message, MessageId msgId, Throwable exception) { throw new IllegalArgumentException(); @@ -190,6 +191,7 @@ public Message beforeSend(Producer producer, Message mes } @Override + @SuppressWarnings("unchecked") public void onSendAcknowledgement(Producer producer, Message message, MessageId msgId, Throwable exception) { throw new AbstractMethodError(); @@ -223,6 +225,7 @@ public Message beforeSend(Producer producer, Message mes } @Override + @SuppressWarnings("unchecked") public void onSendAcknowledgement(Producer producer, Message message, MessageId msgId, Throwable exception) { messageDataOnSendAcknowledgement.add(new String(message.getData())); @@ -279,6 +282,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { throw new AbstractMethodError(); } @@ -355,6 +359,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { } @@ -400,6 +405,7 @@ public void onAckTimeoutSend(Consumer consumer, Set messageId consumer.acknowledge(received); consumer.close(); + @SuppressWarnings("unchecked") final CompletableFuture> future = new CompletableFuture<>(); consumer = pulsarClient.newConsumer(Schema.STRING) .topic(topicName) @@ -467,6 +473,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { } @@ -551,6 +558,7 @@ public void onAckTimeoutSend(Consumer consumer, Set messageId } }; + @SuppressWarnings("unchecked") final String topicName = newTopicName(); if (partitions > 0) { @@ -625,6 +633,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { } @@ -703,6 +712,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { } @@ -780,6 +790,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { } @@ -854,6 +865,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { Assert.assertTrue(latch.getCount() > 0); messageIds.forEach(messageId -> latch.countDown()); @@ -923,6 +935,7 @@ public Message beforeRead(Reader reader, Message message } @Override + @SuppressWarnings("unchecked") public void onPartitionsChange(String topicName, int partitions) { newPartition.set(partitions); } @@ -1046,6 +1059,7 @@ public void onNegativeAcksSend(Consumer consumer, Set message } @Override + @SuppressWarnings("unchecked") public void onAckTimeoutSend(Consumer consumer, Set messageIds) { } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java index 7f7de33b43a11..8496bed6d9679 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java @@ -1582,6 +1582,7 @@ private void receive(List> consumers) throws PulsarClientException { /** * Check that every consumer receives a fair number of messages and that same key is delivered to only 1 consumer. */ + @SuppressWarnings("unchecked") private void receiveAndCheckDistribution(List> consumers, int expectedTotalMessage) throws PulsarClientException { // Add a key so that we know this key was already assigned to one consumer @@ -2050,6 +2051,7 @@ public void testRecentJoinedPosWillNotStuckOtherConsumer(KeySharedImplementation boolean allowKeySharedOutOfOrder) throws Exception { final int messagesSentPerTime = 100; final Set totalReceivedMessages = new TreeSet<>(); + @SuppressWarnings("unchecked") final String topic = newUniqueName("persistent://public/default/tp"); final String subName = "my-sub"; admin.topics().createNonPartitionedTopic(topic); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java index 457227f9edbf7..69836c9aa6608 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/MultiTopicsConsumerTest.java @@ -143,7 +143,7 @@ public ExecutorService getInternalExecutorService() { verify(internalExecutorServiceDelegate, times(0)) .schedule(any(Runnable.class), anyLong(), any()); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) // test that reproduces the issue that PR https://github.com/apache/pulsar/pull/12456 fixes // where MultiTopicsConsumerImpl has a data race that causes out-of-order delivery of messages diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java index 5f8c7415e0046..5c47b8b640b18 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PartitionedProducerConsumerTest.java @@ -912,7 +912,7 @@ public void testCustomPartitionedProducer() throws Exception { * * @throws Exception */ - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testPartitionedTopicInterceptor() throws Exception { log.info("-- Starting {} test --", methodName); @@ -944,6 +944,7 @@ public void onSendAcknowledgement(Producer producer, Message mes } @Override + @SuppressWarnings("unchecked") public void onPartitionsChange(String topicName, int partitions) { newProducerPartitions.addAndGet(partitions); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java index 0fa4d147b7263..9690e9887ada4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java @@ -84,6 +84,7 @@ public void testPatternConsumerWithLargeAmountOfConcurrentClientConnections() final int numberOfClients = 100; // create a long topic name to consume more memory per topic + @SuppressWarnings("unchecked") final String topicNamePrefix = "persistent://" + namespace + "/" + StringUtils.repeat('a', 512) + "-"; // number of topics to create final int topicCount = 300; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java index 685411b05c8c6..f72614abba4f3 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/ProducerConsumerBase.java @@ -74,6 +74,7 @@ protected String newTopicName() { return "my-property/my-ns/topic-" + Long.toHexString(random.nextLong()); } + @SuppressWarnings("unchecked") protected ReceivedMessages receiveAndAckMessages( BiFunction ackPredicate, Consumer...consumers) throws Exception { @@ -91,6 +92,7 @@ protected ReceivedMessages receiveAndAckMessages( return receivedMessages; } + @SuppressWarnings("unchecked") protected ReceivedMessages ackAllMessages(Consumer...consumers) throws Exception { return receiveAndAckMessages((msgId, msgV) -> true, consumers); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java index 7c1e42a2ff79e..47339bc5fe613 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java @@ -4424,6 +4424,7 @@ public void testIncomingMessageSize(boolean isPartitioned) throws Exception { } @Test(timeOut = 100000) + @SuppressWarnings("unchecked") public void testNegativeIncomingMessageSize() throws Exception { final String topicName = "persistent://my-property/my-ns/testIncomingMessageSize-" + UUID.randomUUID().toString(); @@ -4994,6 +4995,7 @@ public Message beforeSend(Producer producer, Message message) { } @Override + @SuppressWarnings("unchecked") public void onSendAcknowledgement(Producer producer, Message message, MessageId msgId, Throwable exception) { MessageImpl msgImpl = (MessageImpl) message; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java index 8525c62193806..f3e4ea3c5858e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java @@ -367,6 +367,7 @@ public void testProducerConnectStateWhenRegisteringSchema() throws Exception { ClientBuilderImpl clientBuilder = (ClientBuilderImpl) PulsarClient.builder().serviceUrl(lookupUrl.toString()); PulsarClient client = InjectedClientCnxClientBuilder.create(clientBuilder, (conf, eventLoopGroup) -> new ClientCnx(InstrumentProvider.NOOP, conf, eventLoopGroup) { + @SuppressWarnings("unchecked") protected void handleGetOrCreateSchemaResponse( CommandGetOrCreateSchemaResponse commandGetOrCreateSchemaResponse) { responseSignal.join(); @@ -403,6 +404,7 @@ public void testNoMemoryLeakIfSchemaIncompatible() throws Exception { ClientBuilderImpl clientBuilder = (ClientBuilderImpl) PulsarClient.builder().serviceUrl(lookupUrl.toString()); PulsarClient client = InjectedClientCnxClientBuilder.create(clientBuilder, (conf, eventLoopGroup) -> new ClientCnx(InstrumentProvider.NOOP, conf, eventLoopGroup) { + @SuppressWarnings("unchecked") protected void handleGetOrCreateSchemaResponse( CommandGetOrCreateSchemaResponse commandGetOrCreateSchemaResponse) { responseSignal.join(); @@ -868,6 +870,7 @@ public void testAutoConsume(boolean batching) throws Exception { } @Test(dataProvider = "batchingModesAndValueEncodingType") + @SuppressWarnings("unchecked") public void testAutoKeyValueConsume(boolean batching, KeyValueEncodingType keyValueEncodingType) throws Exception { String topic = NAMESPACE + "/schema-test-auto-keyvalue-consume-" + batching + "-" + keyValueEncodingType; @@ -1154,6 +1157,7 @@ public void testAutoKeyValueConsume(boolean batching, KeyValueEncodingType keyVa } @Test + @SuppressWarnings("unchecked") public void testAutoKeyValueConsumeGenericObject() throws Exception { String topic = NAMESPACE + "/schema-test-auto-keyvalue-consume-" + UUID.randomUUID(); @@ -1425,6 +1429,7 @@ public static Object[] keyEncodingType() { } @Test(dataProvider = "keyEncodingType") + @SuppressWarnings("unchecked") public void testAutoKeyValueConsumeGenericObjectNullValues(KeyValueEncodingType encodingType) throws Exception { String topic = NAMESPACE + "/schema-test-auto-keyvalue-" + encodingType + "-null-value-consume-" + UUID.randomUUID(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SubscriptionPauseOnAckStatPersistTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SubscriptionPauseOnAckStatPersistTest.java index e4ccafb7b028e..39f73a284b030 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SubscriptionPauseOnAckStatPersistTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SubscriptionPauseOnAckStatPersistTest.java @@ -152,6 +152,7 @@ private enum SkipType{ RESET_CURSOR; } + @SuppressWarnings("unchecked") private ReceivedMessages ackOddMessagesOnly(Consumer...consumers) throws Exception { return receiveAndAckMessages((msgId, msgV) -> Integer.valueOf(msgV) % 2 == 1, consumers); } @@ -221,6 +222,7 @@ private void disableDispatcherPauseOnAckStatePersistent(String tpName, TypeOfUpd } @Test(dataProvider = "typesOfSetDispatcherPauseOnAckStatePersistent") + @SuppressWarnings("unchecked") public void testBrokerDynamicConfig(TypeOfUpdateTopicConfig type) throws Exception { final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); final String subscription = "s1"; @@ -275,6 +277,7 @@ private void verifyAckHolesIsMuchThanLimit(String tpName, String subscription) { } @Test(dataProvider = "multiConsumerSubscriptionTypes") + @SuppressWarnings("unchecked") public void testPauseOnAckStatPersist(SubscriptionType subscriptionType) throws Exception { final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); final String subscription = "s1"; @@ -321,6 +324,7 @@ public void testPauseOnAckStatPersist(SubscriptionType subscriptionType) throws } @Test(dataProvider = "skipTypes") + @SuppressWarnings("unchecked") public void testUnPauseOnSkipEntries(SkipType skipType) throws Exception { final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); final String subscription = "s1"; @@ -400,6 +404,7 @@ private void skipMessages(String tpName, String subscription, SkipType skipType, } @Test(dataProvider = "singleConsumerSubscriptionTypes") + @SuppressWarnings("unchecked") public void testSingleConsumerDispatcherWillNotPause(SubscriptionType subscriptionType) throws Exception { final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); final String subscription = "s1"; @@ -442,6 +447,7 @@ public void testSingleConsumerDispatcherWillNotPause(SubscriptionType subscripti } @Test(dataProvider = "multiConsumerSubscriptionTypes") + @SuppressWarnings("unchecked") public void testPauseOnAckStatPersistNotAffectReplayRead(SubscriptionType subscriptionType) throws Exception { final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); final String subscription = "s1"; @@ -495,6 +501,7 @@ public void testPauseOnAckStatPersistNotAffectReplayRead(SubscriptionType subscr } @Test(dataProvider = "multiConsumerSubscriptionTypes") + @SuppressWarnings("unchecked") public void testMultiConsumersPauseOnAckStatPersistNotAffectReplayRead(SubscriptionType subscriptionType) throws Exception { final String tpName = BrokerTestUtil.newUniqueName("persistent://public/default/tp"); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java index 640082addcb9c..7383ba729b55a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/AutoCloseUselessClientConSupports.java @@ -140,6 +140,7 @@ protected void connectionToEveryBroker(PulsarClientImpl pulsarClient){ /** * Ensure producer and consumer works. */ + @SuppressWarnings("unchecked") protected void ensureProducerAndConsumerWorks(Producer producer, Consumer consumer) throws PulsarClientException, ExecutionException, InterruptedException { String messageContent = UUID.randomUUID().toString(); @@ -152,6 +153,7 @@ protected void ensureProducerAndConsumerWorks(Producer producer, Consumer consum /** * Ensure producer and consumer works. */ + @SuppressWarnings("unchecked") protected void ensureProducerAndConsumerWorks(Producer producer1, Producer producer2, Consumer consumer) throws PulsarClientException, ExecutionException, InterruptedException { String messageContent1 = UUID.randomUUID().toString(); @@ -174,6 +176,7 @@ protected void ensureProducerAndConsumerWorks(Producer producer1, Producer produ /** * Ensure transaction works. */ + @SuppressWarnings("unchecked") protected void ensureTransactionWorks(PulsarClientImpl pulsarClient, Producer producer, Consumer consumer) throws PulsarClientException, ExecutionException, InterruptedException { @@ -194,6 +197,7 @@ protected void ensureTransactionWorks(PulsarClientImpl pulsarClient, Producer pr consumer.acknowledge(messageTx); } + @SuppressWarnings("unchecked") protected void waitForTopicListWatcherStarted(Consumer consumer) { Awaitility.await().untilAsserted(() -> { CompletableFuture completableFuture = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java index a70645e68512c..4409fb90851ea 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java @@ -773,6 +773,7 @@ public void asyncClose(org.apache.bookkeeper.client.AsyncCallback.CloseCallback @Test + @SuppressWarnings("unchecked") public void testAvroSchemaProducerConsumerWithSpecifiedReaderAndWriter() throws PulsarClientException { final String topicName = "persistent://my-property/my-ns/my-topic1"; TestMessageObject object = new TestMessageObject(); @@ -806,6 +807,7 @@ public void testAvroSchemaProducerConsumerWithSpecifiedReaderAndWriter() throws } @Test + @SuppressWarnings("unchecked") public void testJsonSchemaProducerConsumerWithSpecifiedReaderAndWriter() throws PulsarClientException { final String topicName = "persistent://my-property/my-ns/my-topic1"; ObjectMapper mapper = new ObjectMapper(); @@ -912,6 +914,7 @@ public void testConsumerWithPooledMessages(boolean isBatchingEnabled) throws Exc * @throws Exception */ @Test(dataProvider = "booleanFlagProvider") + @SuppressWarnings("unchecked") public void testPooledMessageWithAckTimeout(boolean isBatchingEnabled) throws Exception { log.info("-- Starting {} test --", methodName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/CompactionReaderImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/CompactionReaderImplTest.java index 24a1f330ba5fd..db2657519c5e4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/CompactionReaderImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/CompactionReaderImplTest.java @@ -62,6 +62,7 @@ public void cleanup() throws Exception { } @Test + @SuppressWarnings("unchecked") public void test() throws Exception { String topic = "persistent://my-property/my-ns/my-compact-topic"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java index 5d8fc9fb56ef9..d7d1fee31ee68 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java @@ -234,10 +234,12 @@ protected void doResolve(SocketAddress socketAddress, Promise promise) throws Ex } @Override + @SuppressWarnings("unchecked") protected void doResolveAll(SocketAddress socketAddress, Promise promise) throws Exception { final InetSocketAddress socketAddress1 = (InetSocketAddress) socketAddress; String hostName = socketAddress1.getHostName(); final boolean isProxy = hostName.equals("proxy"); + @SuppressWarnings("unchecked") final boolean isBroker = hostName.startsWith("broker"); if (!isProxy && !isBroker) { promise.setFailure(new IllegalStateException()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java index 9cb1eb2fc374a..e04fc324b3c31 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConsumerAckTest.java @@ -231,6 +231,7 @@ public void testCumulativeAck() throws Exception { } // Send 1 non-batched message, then send N-1 messages that are in the same batch + @SuppressWarnings("unchecked") private AckTestData prepareDataForAck(String topic) throws PulsarClientException { final int numMessages = 10; @Cleanup Producer batchProducer = pulsarClient.newProducer(Schema.STRING) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java index 601131ae08dfd..46785c8f50096 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/LookupRetryTest.java @@ -119,6 +119,7 @@ public void testGetPartitionedMetadataRetries() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testTimeoutReleasePendingLookupRequestSemaphore() throws Exception { PulsarClientImpl client = (PulsarClientImpl) newClient(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplTest.java index ab4ed0dd95e33..bc112d6b9ef42 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/PatternTopicsConsumerImplTest.java @@ -825,6 +825,7 @@ public Object[][] regexpConsumerArgs(){ }; } + @SuppressWarnings("unchecked") private void waitTopicListWatcherCreation(Consumer consumer) { Awaitility.await().untilAsserted(() -> { CompletableFuture completableFuture = diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java index 205211bff738d..affb7bc5998f7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java @@ -54,6 +54,7 @@ public class ProducerMemoryLeakTest extends SharedPulsarBaseTest { @Test + @SuppressWarnings("unchecked") public void testSendQueueIsFull() throws Exception { final String topicName = newTopicName(); admin.topics().createNonPartitionedTopic(topicName); @@ -105,6 +106,7 @@ public Object[][] maxMessageSizeAndCompressions(){ } @Test(dataProvider = "maxMessageSizeAndCompressions") + @SuppressWarnings("unchecked") public void testSendMessageSizeExceeded(int maxMessageSize, CompressionType compressionType) throws Exception { final String topicName = newTopicName(); admin.topics().createNonPartitionedTopic(topicName); @@ -184,6 +186,7 @@ public Object[][] maxMessageSizes(){ } @Test(dataProvider = "maxMessageSizes") + @SuppressWarnings("unchecked") public void testBatchedSendMessageSizeExceeded(int maxMessageSize) throws Exception { final String topicName = newTopicName(); admin.topics().createNonPartitionedTopic(topicName); @@ -228,6 +231,7 @@ public void testBatchedSendMessageSizeExceeded(int maxMessageSize) throws Except } @Test + @SuppressWarnings("unchecked") public void testSendAfterClosedProducer() throws Exception { final String topicName = newTopicName(); admin.topics().createNonPartitionedTopic(topicName); @@ -257,6 +261,7 @@ public void testSendAfterClosedProducer() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testBrokenSchema() throws Exception { admin.namespaces().setSchemaCompatibilityStrategy(getNamespace(), SchemaCompatibilityStrategy.ALWAYS_INCOMPATIBLE); @@ -343,6 +348,7 @@ public Message beforeSend(Producer producer, Message message) { } @Override + @SuppressWarnings("unchecked") public void onSendAcknowledgement(Producer producer, Message message, MessageId msgId, Throwable exception) { if (method.equals("onSendAcknowledgement")) { @@ -382,11 +388,13 @@ private static class MsgPayloadTouchableMessageBuilder extends TypedMessageBu public volatile ByteBuf payload; + @SuppressWarnings("unchecked") public MsgPayloadTouchableMessageBuilder(ProducerBase producer, Schema schema) { super(producer, schema); } @Override + @SuppressWarnings("unchecked") public Message getMessage() { MessageImpl msg = (MessageImpl) super.getMessage(); payload = msg.getPayload(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawBatchMessageContainerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawBatchMessageContainerImplTest.java index e8a91a4a194f7..f6e06261e87b7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawBatchMessageContainerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/RawBatchMessageContainerImplTest.java @@ -76,6 +76,7 @@ public void setEncryptionAndCompression(boolean encrypt, boolean compress) { } } + @SuppressWarnings("unchecked") public MessageImpl createMessage(String topic, String value, int entryId) { MessageMetadata metadata = new MessageMetadata() .setPublishTime(System.currentTimeMillis()) @@ -161,6 +162,7 @@ public void testToByteBufWithBatchLimit()throws IOException { } @Test + @SuppressWarnings("unchecked") public void testToByteBufWithCompressionAndEncryption() throws IOException { setEncryptionAndCompression(true, true); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java index a074bb71e4e72..69c95553dd4b6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TableViewTest.java @@ -418,7 +418,7 @@ public void testPublishNullValue(String topicDomain) throws Exception { public static Object[][] partitioned() { return new Object[][] {{true}, {false}}; } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test(timeOut = 30 * 1000, dataProvider = "partitionedTopic") public void testAck(boolean partitionedTopic) throws Exception { @@ -543,6 +543,7 @@ public void testTableViewWithEncryptedMessages() throws Exception { } @Test(timeOut = 30 * 1000) + @SuppressWarnings("unchecked") public void testTableViewTailMessageReadRetry() throws Exception { String topic = "persistent://public/default/tableview-is-interrupted-test"; admin.topics().createNonPartitionedTopic(topic); @@ -580,6 +581,7 @@ public void testTableViewTailMessageReadRetry() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testBuildTableViewWithMessagesAlwaysAvailable() throws Exception { String topic = "persistent://public/default/testBuildTableViewWithMessagesAlwaysAvailable"; admin.topics().createPartitionedTopic(topic, 10); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionClientConnectTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionClientConnectTest.java index ce393664a9d90..7e5a87ef89d89 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionClientConnectTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/TransactionClientConnectTest.java @@ -213,6 +213,7 @@ public void unFence(TransactionMetadataStoreService transactionMetadataStoreServ .get(TransactionCoordinatorID.get(0))).getManagedLedger(), ManagedLedgerImpl.State.LedgerOpened); } + @SuppressWarnings("unchecked") public void waitToReady() throws Exception{ TransactionMetadataStoreService transactionMetadataStoreService = getPulsarServiceList().get(0).getTransactionMetadataStoreService(); 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 6fcf9445660d0..8bf2aef42b787 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 @@ -2187,6 +2187,7 @@ public void testDeleteCompactedLedgerWithSlowAck() throws Exception { compactedLedgerId.get(), BookKeeper.DigestType.CRC32, new byte[]{}))); } + @SuppressWarnings("unchecked") private void triggerCompactionAndWait(String topicName) throws Exception { PersistentTopic persistentTopic = (PersistentTopic) pulsar.getBrokerService().getTopic(topicName, false).get().get(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactorToolTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactorToolTest.java index 23dcd19d9c20a..c089ba7520d34 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactorToolTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/CompactorToolTest.java @@ -49,6 +49,7 @@ public class CompactorToolTest { * @throws Exception */ @Test + @SuppressWarnings("unchecked") public void testGenerateDocs() throws Exception { PrintStream oldStream = System.out; try { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java index 1f7a65b4578a1..f2a6d35ec0277 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/GetLastMessageIdCompactedTest.java @@ -97,6 +97,7 @@ private void triggerLedgerSwitch(String topicName) throws Exception{ }); } + @SuppressWarnings("unchecked") private void clearAllTheLedgersOutdated(String topicName) throws Exception { PersistentTopic persistentTopic = (PersistentTopic) getTopic(topicName, false).get().get(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java index b782a846f6764..136ba751397fd 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/ServiceUnitStateCompactionTest.java @@ -643,7 +643,7 @@ public void testSlowTableviewAfterCompaction() throws Exception { pulsar2.close(); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testSlowReceiveTableviewAfterCompaction() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionRetentionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionRetentionTest.java index e556ec8e0b200..b421d3b558e02 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionRetentionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionRetentionTest.java @@ -39,6 +39,7 @@ public void setup() throws Exception { } @Override + @SuppressWarnings("unchecked") protected long compact(String topic) throws ExecutionException, InterruptedException { return (long) compactor.compact(topic, strategy).get(); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java index 9dd4e8727e937..8629268b3a4c0 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactionTest.java @@ -93,10 +93,11 @@ public void cleanup() throws Exception { } } + @SuppressWarnings("unchecked") private long compact(String topic) throws ExecutionException, InterruptedException { return (long) compactor.compact(topic, strategy).get(); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testNumericOrderCompaction() throws Exception { @@ -181,6 +182,7 @@ public void testNumericOrderCompaction() throws Exception { } @Test(timeOut = 20000) + @SuppressWarnings("unchecked") public void testSameBatchCompactToSameBatch() throws Exception { final String topic = "persistent://my-property/my-ns/testSameBatchCompactToSameBatch" + UUID.randomUUID(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactorTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactorTest.java index bc65791b323cd..32f5c7edb00e9 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactorTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/StrategicCompactorTest.java @@ -38,6 +38,7 @@ public void setup() throws Exception { } @Override + @SuppressWarnings("unchecked") protected long compact(String topic) throws ExecutionException, InterruptedException { return (long) compactor.compact(topic, strategy).get(); } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java index 50d4cdc7b0a71..eee8498ed174b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java @@ -28,6 +28,7 @@ public class TopicCompactionStrategyTest { public static class DummyTopicCompactionStrategy implements TopicCompactionStrategy { @Override + @SuppressWarnings("unchecked") public Schema getSchema() { return Schema.BYTES; } diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java index 5f2fe7893bdaf..06a10687a7282 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionE2ESecurityTest.java @@ -244,6 +244,7 @@ void shutdown() throws Exception { } } + @SuppressWarnings("unchecked") private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) { System.setProperty(JAVA_INSTANCE_JAR_PROPERTY, diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java index f0f4c4812358f..0c72da2bcb7fa 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionLocalRunTest.java @@ -345,7 +345,7 @@ void shutdown() throws Exception { } } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) protected WorkerConfig createWorkerConfig(ServiceConfiguration config) { @@ -622,6 +622,7 @@ protected void testE2EPulsarFunctionLocalRun(String jarFilePathUrl) throws Excep testE2EPulsarFunctionLocalRun(jarFilePathUrl, 1); } + @SuppressWarnings("unchecked") private void testAvroFunctionLocalRun(String jarFilePathUrl) throws Exception { final String namespacePortion = "io"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java index afe4eb380e0e9..9287ddde28dfa 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionPublishTest.java @@ -246,7 +246,7 @@ void shutdown() throws Exception { } } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java index 92a708242d54a..33043766ef8e4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarFunctionTlsTest.java @@ -91,7 +91,7 @@ public class PulsarFunctionTlsTest { protected String testNamespace = testTenant + "/my-ns"; private PulsarFunctionTestTemporaryDirectory[] tempDirectories = new PulsarFunctionTestTemporaryDirectory[BROKER_COUNT]; - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @BeforeMethod(alwaysRun = true) void setup() throws Exception { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java index 53deaf5307d51..a835ec8ad42f1 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/functions/worker/PulsarWorkerAssignmentTest.java @@ -160,6 +160,7 @@ void shutdown() { } } + @SuppressWarnings("unchecked") private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) { workerConfig = new WorkerConfig(); tempDirectory = PulsarFunctionTestTemporaryDirectory.create(getClass().getSimpleName()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java index a636348a20029..121faccb67a43 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/AbstractPulsarE2ETest.java @@ -276,7 +276,7 @@ void shutdown() throws Exception { } } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) throws IOException, URISyntaxException { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java index 020bb1b75980b..79640fe9795aa 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionAdminTest.java @@ -191,7 +191,7 @@ void shutdown() throws Exception { bkEnsemble = null; } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config) { workerConfig = new WorkerConfig(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java index 7fd1c40eb4c1f..915462102141f 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/io/PulsarFunctionTlsTest.java @@ -203,7 +203,7 @@ void shutdown() throws Exception { } } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) private PulsarWorkerService createPulsarFunctionWorker(ServiceConfiguration config, PulsarAdmin mockPulsarAdmin) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java index 0e62deb7bcf37..a6b54a0c1ac62 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/schema/SchemaTest.java @@ -720,6 +720,7 @@ public void testKeyValueSchemaWithStructsSEPARATED() throws Exception { testKeyValueSchemaWithStructs(KeyValueEncodingType.SEPARATED); } + @SuppressWarnings("unchecked") private void testKeyValueSchemaWithStructs(KeyValueEncodingType keyValueEncodingType) throws Exception { final String tenant = PUBLIC_TENANT; final String namespace = "test-namespace-" + randomName(16); @@ -1132,6 +1133,7 @@ private String getTopicName(String ns, String baseTopic) { return ns + "/" + baseTopic; } + @SuppressWarnings("unchecked") private void generateDataByDifferentSchema(String ns, String baseTopic, Schema schema, @@ -1173,6 +1175,7 @@ private void generateDataByDifferentSchema(String ns, consumer.close(); } + @SuppressWarnings("unchecked") private void checkSchemaForAutoSchema(Message message) { if (!message.getReaderSchema().isPresent()) { Assert.fail("Failed to get reader schema for auto consume multiple schema topic."); @@ -1456,6 +1459,7 @@ public SchemaLocator deserialize(String path, byte[] content, Stat stat) } @Test + @SuppressWarnings("unchecked") public void testPendingQueueSizeIfIncompatible() throws Exception { final String namespace = BrokerTestUtil.newUniqueName(PUBLIC_TENANT + "/ns"); admin.namespaces().createNamespace(namespace, Sets.newHashSet(CLUSTER_NAME)); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java index b59ae89c0bf5e..f3c687f5069ad 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/schema/compatibility/SchemaCompatibilityCheckTest.java @@ -499,6 +499,7 @@ public void testProducerSendWithOldSchemaAndConsumerCanRead(SchemaCompatibilityS } @Test + @SuppressWarnings("unchecked") public void testSchemaLedgerAutoRelease() throws Exception { String namespaceName = PUBLIC_TENANT + "/" + DEFAULT_NAMESPACE; String topicName = BrokerTestUtil.newUniqueName("persistent://" + namespaceName + "/tp"); diff --git a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java index 107c1773c0c5d..c3de66abc5cac 100644 --- a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java +++ b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/client/cli/PulsarClientToolForceBatchNum.java @@ -66,7 +66,7 @@ public void updateConfig(ClientBuilder newBuilder, Authentication authentication replaceProducerCommand(produceCommand); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) private ClientBuilder mockClientBuilder(ClientBuilder newBuilder) throws Exception { PulsarClientImpl client = (PulsarClientImpl) newBuilder.build(); ProducerBuilder producerBuilder = client.newProducer() diff --git a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java index 8a32249662dd4..77d7beac1eb1d 100644 --- a/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java +++ b/pulsar-client-tools/src/test/java/org/apache/pulsar/admin/cli/TestCmdNamespaceIsolationPolicy.java @@ -28,6 +28,7 @@ public class TestCmdNamespaceIsolationPolicy { @Test + @SuppressWarnings("unchecked") public void testValidateListMethodToReturnNonNullStringList() { List mockList = Lists.newArrayList("", "1", "", "", "1", "2", "3", "4", "", "", "", "1", ""); List resultList = Lists.newArrayList("1", "1", "2", "3", "4", "1"); diff --git a/pulsar-client-tools/src/test/java/org/apache/pulsar/shell/PulsarShellTest.java b/pulsar-client-tools/src/test/java/org/apache/pulsar/shell/PulsarShellTest.java index 370db8febe7ef..1ebc4634c65e3 100644 --- a/pulsar-client-tools/src/test/java/org/apache/pulsar/shell/PulsarShellTest.java +++ b/pulsar-client-tools/src/test/java/org/apache/pulsar/shell/PulsarShellTest.java @@ -142,6 +142,7 @@ public void setup() throws Exception { @Test + @SuppressWarnings("unchecked") public void testInteractiveMode() throws Exception { Terminal terminal = TerminalBuilder.builder().build(); final MockLineReader linereader = new MockLineReader(terminal); @@ -161,6 +162,7 @@ public void testInteractiveMode() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testFileMode() throws Exception { Terminal terminal = TerminalBuilder.builder().build(); final MockLineReader linereader = new MockLineReader(terminal); @@ -178,6 +180,7 @@ public void testFileMode() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testFileModeExitOnError() throws Exception { Terminal terminal = TerminalBuilder.builder().build(); final MockLineReader linereader = new MockLineReader(terminal); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/api/SchemaDefinitionBuilderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/api/SchemaDefinitionBuilderTest.java index b8292bc303b5a..dba0e752f120c 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/api/SchemaDefinitionBuilderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/api/SchemaDefinitionBuilderTest.java @@ -38,12 +38,14 @@ public void testVerificationWithPojoAndJsonDef() { } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testVerificationWithReaderOnly() { SchemaReader reader = Mockito.mock(SchemaReader.class); SchemaDefinition.builder().withSchemaReader(reader).build(); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testVerificationWithWriterOnly() { SchemaWriter writer = Mockito.mock(SchemaWriter.class); SchemaDefinition.builder().withSchemaWriter(writer).build(); @@ -60,6 +62,7 @@ public void testVerificationWithPojo() { } @Test + @SuppressWarnings("unchecked") public void testVerificationWithPojoAndReaderAndWriter() { SchemaReader reader = Mockito.mock(SchemaReader.class); SchemaWriter writer = Mockito.mock(SchemaWriter.class); @@ -72,6 +75,7 @@ public void testVerificationWithPojoAndReaderAndWriter() { } @Test + @SuppressWarnings("unchecked") public void testVerificationWithJsonDefAndReaderAndWriter() { SchemaReader reader = Mockito.mock(SchemaReader.class); SchemaWriter writer = Mockito.mock(SchemaWriter.class); @@ -84,6 +88,7 @@ public void testVerificationWithJsonDefAndReaderAndWriter() { } @Test + @SuppressWarnings("unchecked") public void testReaderWriterRegistration() { SchemaReader reader = Mockito.mock(SchemaReader.class); SchemaWriter writer = Mockito.mock(SchemaWriter.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java index 9a6be8051070a..db1725089802c 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ClientCnxTest.java @@ -243,6 +243,7 @@ public void testGetLastMessageIdWithError() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testHandleCloseConsumer() { ThreadFactory threadFactory = new DefaultThreadFactory("testHandleCloseConsumer"); EventLoopGroup eventLoop = EventLoopUtil.newEventLoopGroup(1, false, threadFactory); @@ -267,6 +268,7 @@ public void testHandleCloseConsumer() { } @Test + @SuppressWarnings("unchecked") public void testHandleCloseProducer() { ThreadFactory threadFactory = new DefaultThreadFactory("testHandleCloseProducer"); EventLoopGroup eventLoop = EventLoopUtil.newEventLoopGroup(1, false, threadFactory); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java index 0ca83d50a96cf..f357aa316303c 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java @@ -76,17 +76,18 @@ public class ConsumerBuilderImplTest { private static final String TOPIC_NAME = "testTopicName"; - private ConsumerBuilderImpl consumerBuilderImpl; + private ConsumerBuilderImpl consumerBuilderImpl; + @SuppressWarnings("unchecked") @BeforeMethod(alwaysRun = true) public void setup() { PulsarClientImpl client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); when(client.getCnxPool()).thenReturn(connectionPool); - ConsumerConfigurationData consumerConfigurationData = mock(ConsumerConfigurationData.class); + ConsumerConfigurationData consumerConfigurationData = mock(ConsumerConfigurationData.class); when(consumerConfigurationData.getTopicsPattern()).thenReturn(Pattern.compile("\\w+")); when(consumerConfigurationData.getSubscriptionName()).thenReturn("testSubscriptionName"); - consumerBuilderImpl = new ConsumerBuilderImpl(client, consumerConfigurationData, Schema.BYTES); + consumerBuilderImpl = new ConsumerBuilderImpl<>(client, consumerConfigurationData, Schema.BYTES); } @Test @@ -103,18 +104,19 @@ public void testMaxAcknowledgmentGroupSizeInvalid() { @Test public void testConsumerBuilderImpl() throws PulsarClientException { Consumer consumer = mock(Consumer.class); - ConsumerBuilderImpl spyBuilder = spy(consumerBuilderImpl); + ConsumerBuilderImpl spyBuilder = spy(consumerBuilderImpl); doReturn(CompletableFuture.completedFuture(consumer)).when(spyBuilder).subscribeAsync(); assertNotNull(spyBuilder.topic(TOPIC_NAME).subscribe()); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenSchemaIsNull() { PulsarClientImpl client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); when(client.getCnxPool()).thenReturn(connectionPool); ConsumerConfigurationData consumerConfigurationData = mock(ConsumerConfigurationData.class); - new ConsumerBuilderImpl(client, consumerConfigurationData, null); + new ConsumerBuilderImpl<>(client, consumerConfigurationData, null); } @Test(expectedExceptions = IllegalArgumentException.class) @@ -133,22 +135,26 @@ public void testConsumerBuilderImplWhenTopicNamesVarargsHasBlankTopic() { } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenTopicNamesIsNull() { consumerBuilderImpl.topics(null); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenTopicNamesIsEmpty() { consumerBuilderImpl.topics(Arrays.asList()); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenTopicNamesHasBlankTopic() { List topicNames = Arrays.asList("my-topic", " "); consumerBuilderImpl.topics(topicNames); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenTopicNamesHasNullTopic() { List topicNames = Arrays.asList("my-topic", null); consumerBuilderImpl.topics(topicNames); @@ -190,12 +196,14 @@ public void testConsumerBuilderImplWhenDefaultCryptoKeyReaderIsEmptyString() { } @Test(expectedExceptions = NullPointerException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenDefaultCryptoKeyReaderIsNullMap() { consumerBuilderImpl.topic(TOPIC_NAME).subscriptionName("subscriptionName") .defaultCryptoKeyReader((Map) null); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenDefaultCryptoKeyReaderIsEmptyMap() { consumerBuilderImpl.topic(TOPIC_NAME).subscriptionName("subscriptionName") .defaultCryptoKeyReader(new HashMap()); @@ -239,6 +247,7 @@ public void testConsumerBuilderImplWhenPropertyValueIsBlank() { } @Test + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesAreCorrect() { Map properties = new HashMap<>(); properties.put("Test-Key", "Test-Value"); @@ -248,6 +257,7 @@ public void testConsumerBuilderImplWhenPropertiesAreCorrect() { } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesKeyIsNull() { Map properties = new HashMap<>(); properties.put(null, "Test-Value"); @@ -256,6 +266,7 @@ public void testConsumerBuilderImplWhenPropertiesKeyIsNull() { } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesKeyIsBlank() { Map properties = new HashMap<>(); properties.put(" ", "Test-Value"); @@ -264,6 +275,7 @@ public void testConsumerBuilderImplWhenPropertiesKeyIsBlank() { } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesValueIsNull() { Map properties = new HashMap<>(); properties.put("Test-Key", null); @@ -272,6 +284,7 @@ public void testConsumerBuilderImplWhenPropertiesValueIsNull() { } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesValueIsBlank() { Map properties = new HashMap<>(); properties.put("Test-Key", " "); @@ -280,6 +293,7 @@ public void testConsumerBuilderImplWhenPropertiesValueIsBlank() { } @Test + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesIsEmpty() { Map properties = new HashMap<>(); @@ -287,6 +301,7 @@ public void testConsumerBuilderImplWhenPropertiesIsEmpty() { } @Test(expectedExceptions = NullPointerException.class) + @SuppressWarnings("unchecked") public void testConsumerBuilderImplWhenPropertiesIsNull() { consumerBuilderImpl.topic(TOPIC_NAME).properties(null); } diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java index 3344a7f63bdfd..6db122db23d37 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java @@ -167,6 +167,7 @@ public void testNotifyPendingReceivedCallback_InterceptorsWorksWithPrefetchDisab } @Test(invocationTimeOut = 1000) + @SuppressWarnings("unchecked") public void testNotifyPendingReceivedCallback_WorkNormally() { CompletableFuture> receiveFuture = new CompletableFuture<>(); @SuppressWarnings("rawtypes") @@ -263,11 +264,11 @@ public void testMaxReceiverQueueSize() { @Test public void testTopicPriorityLevel() { - ConsumerConfigurationData consumerConf = new ConsumerConfigurationData<>(); - consumerConf.getTopicConfigurations().add( + ConsumerConfigurationData consumerConf2 = new ConsumerConfigurationData<>(); + consumerConf2.getTopicConfigurations().add( TopicConsumerConfigurationData.ofTopicName(topic, 1)); - createConsumer(consumerConf); + createConsumer(consumerConf2); assertThat(consumer.getPriorityLevel()).isEqualTo(1); } diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/DefaultCryptoKeyReaderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/DefaultCryptoKeyReaderTest.java index 158699d6a73aa..b6ab01cf743b4 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/DefaultCryptoKeyReaderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/DefaultCryptoKeyReaderTest.java @@ -32,6 +32,7 @@ public class DefaultCryptoKeyReaderTest { @Test + @SuppressWarnings("unchecked") public void testBuild() throws Exception { Map publicKeys = new HashMap<>(); publicKeys.put("key1", "file:///path/to/public1.key"); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java index e6d6faa350630..34f92480b7f58 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageImplTest.java @@ -105,6 +105,7 @@ public void testGetProducerNameAssigned() { } @Test + @SuppressWarnings("unchecked") public void testDefaultGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -133,6 +134,7 @@ public void testDefaultGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testInlineGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( @@ -162,6 +164,7 @@ public void testInlineGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testSeparatedGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -192,6 +195,7 @@ public void testSeparatedGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testDefaultAVROVersionGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -228,6 +232,7 @@ public void testDefaultAVROVersionGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testSeparatedAVROVersionGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -266,6 +271,7 @@ public void testSeparatedAVROVersionGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testDefaultJSONVersionGetProducerDataAssigned() { JSONSchema fooSchema = JSONSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -302,6 +308,7 @@ public void testDefaultJSONVersionGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testSeparatedJSONVersionGetProducerDataAssigned() { JSONSchema fooSchema = JSONSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -340,6 +347,7 @@ public void testSeparatedJSONVersionGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testDefaultAVROJSONVersionGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -376,6 +384,7 @@ public void testDefaultAVROJSONVersionGetProducerDataAssigned() { } @Test + @SuppressWarnings("unchecked") public void testSeparatedAVROJSONVersionGetProducerDataAssigned() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java index 6068d8aa843e2..6b9fd19e5e13f 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MultiTopicsConsumerImplTest.java @@ -87,7 +87,7 @@ public void cleanUp() { } } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testGetStats() throws Exception { String topicName = "test-stats"; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java index 43134d5d94cc9..5df1eb68509d4 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java @@ -78,13 +78,15 @@ public void setup() { client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); when(client.getCnxPool()).thenReturn(connectionPool); - schema = mock(Schema.class); + @SuppressWarnings("unchecked") + Schema mockedSchema = mock(Schema.class); + schema = mockedSchema; producerInterceptors = mock(ProducerInterceptors.class); producerCreatedFuture = new CompletableFuture<>(); ClientConfigurationData clientConfigurationData = mock(ClientConfigurationData.class); Timer timer = mock(Timer.class); - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); when(client.instrumentProvider()).thenReturn(InstrumentProvider.NOOP); when(client.getConfiguration()).thenReturn(clientConfigurationData); @@ -167,7 +169,7 @@ public void testPartialPartitionWithKey() { assertNotEquals(actualHashList, expectedHashList); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) private MessageRouter getMessageRouter(ProducerConfigurationData producerConfigurationData) throws NoSuchFieldException, IllegalAccessException { PartitionedProducerImpl impl = new PartitionedProducerImpl( @@ -190,6 +192,7 @@ public int choosePartition(Message msg, TopicMetadata metadata) { } @Test + @SuppressWarnings("unchecked") public void testGetStats() throws Exception { String topicName = "test-stats"; ClientConfigurationData conf = new ClientConfigurationData(); @@ -252,6 +255,7 @@ public void testGetStatsWithoutArriveUpdateInterval() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGetNumOfPartitions() throws Exception { String topicName = "test-get-num-of-partitions"; ClientConfigurationData conf = new ClientConfigurationData(); @@ -282,6 +286,7 @@ public void testGetNumOfPartitions() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testMaxPendingQueueSize() throws Exception { String topicName = "test-max-pending-queue-size"; ClientConfigurationData conf = new ClientConfigurationData(); @@ -321,6 +326,7 @@ public void testMaxPendingQueueSize() throws Exception { @Test + @SuppressWarnings("unchecked") public void testOnTopicsExtended() throws Exception { String topicName = "test-on-topics-extended"; ClientConfigurationData conf = new ClientConfigurationData(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java index 523e6c35df20e..7554135943194 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerBuilderImplTest.java @@ -19,6 +19,7 @@ package org.apache.pulsar.client.impl; import static org.mockito.Mockito.any; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -62,9 +63,9 @@ public void setup() { producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); when(client.newProducer()).thenReturn(producerBuilderImpl); - when(client.createProducerAsync( - any(ProducerConfigurationData.class), any(Schema.class), eq(null))) - .thenReturn(CompletableFuture.completedFuture(producer)); + doReturn(CompletableFuture.completedFuture(producer)) + .when(client).createProducerAsync( + any(ProducerConfigurationData.class), any(), eq(null)); } @Test @@ -94,7 +95,7 @@ public void testProducerBuilderImplWhenMessageCryptoSet() throws PulsarClientExc @Test public void testProducerBuilderImplWhenMessageRoutingModeAndMessageRouterAreNotSet() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); Producer producer = producerBuilderImpl.topic(TOPIC_NAME) .create(); assertNotNull(producer); @@ -102,7 +103,7 @@ public void testProducerBuilderImplWhenMessageRoutingModeAndMessageRouterAreNotS @Test public void testProducerBuilderImplWhenMessageRoutingModeIsSinglePartition() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); Producer producer = producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.SinglePartition) .create(); @@ -111,7 +112,7 @@ public void testProducerBuilderImplWhenMessageRoutingModeIsSinglePartition() thr @Test public void testProducerBuilderImplWhenMessageRoutingModeIsRoundRobinPartition() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); Producer producer = producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.RoundRobinPartition) .create(); @@ -120,7 +121,7 @@ public void testProducerBuilderImplWhenMessageRoutingModeIsRoundRobinPartition() @Test public void testProducerBuilderImplWhenMessageRoutingIsSetImplicitly() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); Producer producer = producerBuilderImpl.topic(TOPIC_NAME) .messageRouter(new CustomMessageRouter()) .create(); @@ -129,7 +130,7 @@ public void testProducerBuilderImplWhenMessageRoutingIsSetImplicitly() throws Pu @Test public void testProducerBuilderImplWhenMessageRoutingIsCustomPartition() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); Producer producer = producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.CustomPartition) .messageRouter(new CustomMessageRouter()) @@ -142,7 +143,7 @@ public void testProducerBuilderImplWhenMessageRoutingIsCustomPartition() throws ".*When 'messageRoutingMode' is CustomPartition, 'messageRouter' should be set") public void testProducerBuilderImplWhenMessageRoutingIsCustomPartitionAndMessageRouterNotSet() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.CustomPartition) .create(); @@ -151,7 +152,7 @@ public void testProducerBuilderImplWhenMessageRoutingIsCustomPartitionAndMessage @Test(expectedExceptions = PulsarClientException.class) public void testProducerBuilderImplWhenMessageRoutingModeIsSinglePartitionAndMessageRouterIsSet() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.SinglePartition) .messageRouter(new CustomMessageRouter()) @@ -161,7 +162,7 @@ public void testProducerBuilderImplWhenMessageRoutingModeIsSinglePartitionAndMes @Test(expectedExceptions = PulsarClientException.class) public void testProducerBuilderImplWhenMessageRoutingModeIsRoundRobinPartitionAndMessageRouterIsSet() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.RoundRobinPartition) .messageRouter(new CustomMessageRouter()) @@ -171,7 +172,7 @@ public void testProducerBuilderImplWhenMessageRoutingModeIsRoundRobinPartitionAn @Test(expectedExceptions = PulsarClientException.class) public void testProducerBuilderImplWhenMessageRoutingModeIsCustomPartitionAndMessageRouterIsNotSet() throws PulsarClientException { - ProducerBuilderImpl producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + ProducerBuilderImpl producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .messageRoutingMode(MessageRoutingMode.CustomPartition) .create(); @@ -179,21 +180,21 @@ public void testProducerBuilderImplWhenMessageRoutingModeIsCustomPartitionAndMes @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenTopicNameIsNull() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(null) .create(); } @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenTopicNameIsBlank() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(" ") .create(); } @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenProducerNameIsNull() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .producerName(null) .create(); @@ -201,7 +202,7 @@ public void testProducerBuilderImplWhenProducerNameIsNull() throws PulsarClientE @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenProducerNameIsBlank() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .producerName(" ") .create(); @@ -209,7 +210,7 @@ public void testProducerBuilderImplWhenProducerNameIsBlank() throws PulsarClient @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenSendTimeoutIsNegative() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .producerName("Test-Producer") .sendTimeout(-1, TimeUnit.MILLISECONDS) @@ -218,7 +219,7 @@ public void testProducerBuilderImplWhenSendTimeoutIsNegative() throws PulsarClie @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenMaxPendingMessagesIsNegative() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .producerName("Test-Producer") .maxPendingMessages(-1) @@ -227,31 +228,31 @@ public void testProducerBuilderImplWhenMaxPendingMessagesIsNegative() throws Pul @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenDefaultCryptoKeyReaderIsNullString() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME).defaultCryptoKeyReader((String) null).create(); } @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenDefaultCryptoKeyReaderIsEmptyString() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME).defaultCryptoKeyReader("").create(); } @Test(expectedExceptions = NullPointerException.class) public void testProducerBuilderImplWhenDefaultCryptoKeyReaderIsNullMap() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME).defaultCryptoKeyReader((Map) null).create(); } @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenDefaultCryptoKeyReaderIsEmptyMap() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME).defaultCryptoKeyReader(new HashMap()).create(); } @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenEncryptionKeyIsNull() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .addEncryptionKey(null) .create(); @@ -259,7 +260,7 @@ public void testProducerBuilderImplWhenEncryptionKeyIsNull() throws PulsarClient @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenEncryptionKeyIsBlank() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .addEncryptionKey(" ") .create(); @@ -267,7 +268,7 @@ public void testProducerBuilderImplWhenEncryptionKeyIsBlank() throws PulsarClien @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenPropertyKeyIsNull() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .property(null, "Test-Value") .create(); @@ -275,7 +276,7 @@ public void testProducerBuilderImplWhenPropertyKeyIsNull() throws PulsarClientEx @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenPropertyKeyIsBlank() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .property(" ", "Test-Value") .create(); @@ -283,7 +284,7 @@ public void testProducerBuilderImplWhenPropertyKeyIsBlank() throws PulsarClientE @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenPropertyValueIsNull() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .property("Test-Key", null) .create(); @@ -291,7 +292,7 @@ public void testProducerBuilderImplWhenPropertyValueIsNull() throws PulsarClient @Test(expectedExceptions = IllegalArgumentException.class) public void testProducerBuilderImplWhenPropertyValueIsBlank() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .property("Test-Key", " ") .create(); @@ -299,7 +300,7 @@ public void testProducerBuilderImplWhenPropertyValueIsBlank() throws PulsarClien @Test(expectedExceptions = NullPointerException.class) public void testProducerBuilderImplWhenPropertiesIsNull() throws PulsarClientException { - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .properties(null) .create(); @@ -310,7 +311,7 @@ public void testProducerBuilderImplWhenPropertiesKeyIsNull() throws PulsarClient Map properties = new HashMap<>(); properties.put(null, "Test-Value"); - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .properties(properties) .create(); @@ -321,7 +322,7 @@ public void testProducerBuilderImplWhenPropertiesKeyIsBlank() throws PulsarClien Map properties = new HashMap<>(); properties.put(" ", "Test-Value"); - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .properties(properties) .create(); @@ -332,7 +333,7 @@ public void testProducerBuilderImplWhenPropertiesValueIsNull() throws PulsarClie Map properties = new HashMap<>(); properties.put("Test-Key", null); - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .properties(properties) .create(); @@ -343,7 +344,7 @@ public void testProducerBuilderImplWhenPropertiesValueIsBlank() throws PulsarCli Map properties = new HashMap<>(); properties.put("Test-Key", " "); - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .properties(properties) .create(); @@ -353,7 +354,7 @@ public void testProducerBuilderImplWhenPropertiesValueIsBlank() throws PulsarCli public void testProducerBuilderImplWhenPropertiesIsEmpty() throws PulsarClientException { Map properties = new HashMap<>(); - producerBuilderImpl = new ProducerBuilderImpl(client, Schema.BYTES); + producerBuilderImpl = new ProducerBuilderImpl<>(client, Schema.BYTES); producerBuilderImpl.topic(TOPIC_NAME) .properties(properties) .create(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerImplTest.java index 0fe177b775cbd..4674edacf3629 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ProducerImplTest.java @@ -18,6 +18,7 @@ */ package org.apache.pulsar.client.impl; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -60,10 +61,11 @@ public void testChunkedMessageCtxDeallocate() { } @Test + @SuppressWarnings("unchecked") public void testPopulateMessageSchema() { MessageImpl msg = mock(MessageImpl.class); when(msg.hasReplicateFrom()).thenReturn(true); - when(msg.getSchemaInternal()).thenReturn(mock(Schema.class)); + doReturn(mock(Schema.class)).when(msg).getSchemaInternal(); when(msg.getSchemaInfoForReplicator()).thenReturn(null); ProducerImpl producer = mock(ProducerImpl.class, withSettings() .defaultAnswer(Mockito.CALLS_REAL_METHODS)); @@ -72,6 +74,7 @@ public void testPopulateMessageSchema() { } @Test + @SuppressWarnings("unchecked") public void testFailPendingMessagesSyncRetry() throws Exception { ProducerImpl producer = diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PulsarClientImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PulsarClientImplTest.java index 72c942eaf0c5b..d387aee4e2416 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PulsarClientImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PulsarClientImplTest.java @@ -23,6 +23,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -99,17 +100,18 @@ public void testIsClosed() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testConsumerIsClosed() throws Exception { // mock client connection LookupService lookup = mock(LookupService.class); - when(lookup.getTopicsUnderNamespace( + doReturn(CompletableFuture.completedFuture( + new GetTopicsResult(Collections.emptyList(), null, false, true))) + .when(lookup).getTopicsUnderNamespace( any(NamespaceName.class), any(CommandGetTopicsOfNamespace.Mode.class), nullable(String.class), nullable(String.class), - nullable(Map.class))) - .thenReturn(CompletableFuture.completedFuture( - new GetTopicsResult(Collections.emptyList(), null, false, true))); + nullable(Map.class)); when(lookup.getPartitionedTopicMetadata(any(TopicName.class), anyBoolean(), anyBoolean())) .thenReturn(CompletableFuture.completedFuture(new PartitionedTopicMetadata())); when(lookup.getBroker(any())) diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java index 8f9ad0d5c886f..b4bdda3a84077 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewBuilderImplTest.java @@ -48,6 +48,7 @@ public class TableViewBuilderImplTest { private CompletableFuture readNextFuture; @BeforeClass(alwaysRun = true) + @SuppressWarnings("unchecked") public void setup() { Reader reader = mock(Reader.class); readNextFuture = new CompletableFuture<>(); @@ -136,11 +137,13 @@ public void testTableViewImplWhenDefaultCryptoKeyReaderIsEmptyString() throws Pu } @Test(expectedExceptions = NullPointerException.class) + @SuppressWarnings("unchecked") public void testTableViewImplWhenDefaultCryptoKeyReaderIsNullMap() throws PulsarClientException { tableViewBuilderImpl.topic(TOPIC_NAME).defaultCryptoKeyReader((Map) null).create(); } @Test(expectedExceptions = IllegalArgumentException.class) + @SuppressWarnings("unchecked") public void testTableViewImplWhenDefaultCryptoKeyReaderIsEmptyMap() throws PulsarClientException { tableViewBuilderImpl.topic(TOPIC_NAME).defaultCryptoKeyReader(new HashMap()).create(); } diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java index 0a682eee589c3..4f89e2369f5b5 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TableViewImplTest.java @@ -34,6 +34,7 @@ public class TableViewImplTest { private TableViewConfigurationData data; @BeforeClass(alwaysRun = true) + @SuppressWarnings("unchecked") public void setup() { client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); @@ -46,6 +47,7 @@ public void setup() { } @Test + @SuppressWarnings("unchecked") public void testTableViewImpl() { data.setCryptoKeyReader(mock(CryptoKeyReader.class)); TableView tableView = new TableViewImpl<>(client, Schema.BYTES, data); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicListWatcherTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicListWatcherTest.java index 9dccc7f7c1dff..51805af238501 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicListWatcherTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TopicListWatcherTest.java @@ -56,6 +56,7 @@ public class TopicListWatcherTest { private PatternMultiTopicsConsumerImpl patternConsumer; @BeforeMethod(alwaysRun = true) + @SuppressWarnings("unchecked") public void setup() { listener = mock(TopicsChangedListener.class); client = mock(PulsarClientImpl.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java index 4b61c32fe4939..fe8aa08248c9f 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/TypedMessageBuilderImplTest.java @@ -45,6 +45,7 @@ public class TypedMessageBuilderImplTest { protected ProducerBase producerBase; @Test + @SuppressWarnings("unchecked") public void testDefaultValue() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { producerBase = mock(ProducerBase.class); @@ -81,6 +82,7 @@ public void testDefaultValue() throws NoSuchMethodException, InvocationTargetExc } @Test + @SuppressWarnings("unchecked") public void testInlineValue() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { producerBase = mock(ProducerBase.class); @@ -117,6 +119,7 @@ public void testInlineValue() throws NoSuchMethodException, InvocationTargetExce } @Test + @SuppressWarnings("unchecked") public void testSeparatedValue() throws Exception { producerBase = mock(ProducerBase.class); @@ -153,6 +156,7 @@ public void testSeparatedValue() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testSetKeyEncodingTypeDefault() { producerBase = mock(ProducerBase.class); @@ -173,6 +177,7 @@ public void testSetKeyEncodingTypeDefault() { } @Test + @SuppressWarnings("unchecked") public void testSetKeyEncodingTypeInline() { producerBase = mock(ProducerBase.class); @@ -193,6 +198,7 @@ public void testSetKeyEncodingTypeInline() { } @Test + @SuppressWarnings("unchecked") public void testSetKeyEncodingTypeSeparated() { producerBase = mock(ProducerBase.class); @@ -218,6 +224,7 @@ public void testSetKeyEncodingTypeSeparated() { } @Test + @SuppressWarnings("unchecked") public void testSetKeyBytesEncodingTypeDefault() { producerBase = mock(ProducerBase.class); @@ -238,6 +245,7 @@ public void testSetKeyBytesEncodingTypeDefault() { } @Test + @SuppressWarnings("unchecked") public void testSetKeyBytesEncodingTypeInline() { producerBase = mock(ProducerBase.class); @@ -258,6 +266,7 @@ public void testSetKeyBytesEncodingTypeInline() { } @Test + @SuppressWarnings("unchecked") public void testSetKeyBytesEncodingTypeSeparated() { producerBase = mock(ProducerBase.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/UnAckedMessageTrackerTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/UnAckedMessageTrackerTest.java index 3593b296aa7c5..66757827c08ca 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/UnAckedMessageTrackerTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/UnAckedMessageTrackerTest.java @@ -42,6 +42,7 @@ public class UnAckedMessageTrackerTest { @Test + @SuppressWarnings("unchecked") public void testAddAndRemove() { PulsarClientImpl client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); @@ -82,6 +83,7 @@ public void testAddAndRemove() { } @Test + @SuppressWarnings("unchecked") public void testTrackChunkedMessageId() { PulsarClientImpl client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java index cc04220c839ca..6861ab1314f99 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtilsTest.java @@ -166,6 +166,7 @@ public void testConfigBuilder() throws PulsarClientException { } @Test + @SuppressWarnings("unchecked") public void testLoadSecretParams() { ClientConfigurationData confData = new ClientConfigurationData(); Map authParamMap = new HashMap<>(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AutoProduceBytesSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AutoProduceBytesSchemaTest.java index b67763d5d8590..5b8392e292f7a 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AutoProduceBytesSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AutoProduceBytesSchemaTest.java @@ -31,6 +31,7 @@ public class AutoProduceBytesSchemaTest { @Test + @SuppressWarnings("unchecked") public void testClone() { // test user provided schema Schema stringSchema = Schema.STRING; diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java index 43ddd85af2a6d..1353b0b62b4d4 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/KeyValueSchemaTest.java @@ -236,6 +236,7 @@ public void testNotAllowNullJsonSchemaCreate() { } @Test + @SuppressWarnings("unchecked") public void testAllowNullSchemaEncodeAndDecode() { Schema keyValueSchema = Schema.KeyValue(Foo.class, Bar.class); @@ -261,6 +262,7 @@ public void testAllowNullSchemaEncodeAndDecode() { } @Test + @SuppressWarnings("unchecked") public void testNotAllowNullSchemaEncodeAndDecode() { Schema keyValueSchema = Schema.KeyValue(JSONSchema.of(SchemaDefinition.builder() .withPojo(Foo.class).withAlwaysAllowNull(false).build()), @@ -289,6 +291,7 @@ public void testNotAllowNullSchemaEncodeAndDecode() { } @Test + @SuppressWarnings("unchecked") public void testDefaultKeyValueEncodingTypeSchemaEncodeAndDecode() { AvroSchema fooSchema = AvroSchema.of(SchemaDefinition.builder().withPojo(Foo.class).build()); AvroSchema barSchema = AvroSchema.of(SchemaDefinition.builder().withPojo(Bar.class).build()); @@ -318,6 +321,7 @@ public void testDefaultKeyValueEncodingTypeSchemaEncodeAndDecode() { } @Test + @SuppressWarnings("unchecked") public void testInlineKeyValueEncodingTypeSchemaEncodeAndDecode() { AvroSchema fooSchema = AvroSchema.of(SchemaDefinition.builder().withPojo(Foo.class).build()); @@ -349,6 +353,7 @@ public void testInlineKeyValueEncodingTypeSchemaEncodeAndDecode() { } @Test + @SuppressWarnings("unchecked") public void testSeparatedKeyValueEncodingTypeSchemaEncodeAndDecode() { AvroSchema fooSchema = AvroSchema.of(SchemaDefinition.builder().withPojo(Foo.class).build()); AvroSchema barSchema = AvroSchema.of(SchemaDefinition.builder().withPojo(Bar.class).build()); @@ -444,6 +449,7 @@ public void testNotAllowNullBytesSchemaEncodeAndDecode() { } @Test + @SuppressWarnings("unchecked") public void testKeyValueSchemaSeparatedEncoding() { KeyValueSchemaImpl keyValueSchema = (KeyValueSchemaImpl) KeyValueSchemaImpl.of(Schema.STRING, Schema.STRING, @@ -454,6 +460,7 @@ public void testKeyValueSchemaSeparatedEncoding() { } @Test + @SuppressWarnings("unchecked") public void testKeyValueSchemaCache() { Schema keySchema = spy(Schema.AVRO(Foo.class)); Schema valueSchema = spy(Schema.AVRO(Foo.class)); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java index 202d17cfc3593..55010cbc1de50 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/PrimitiveSchemaTest.java @@ -50,6 +50,7 @@ public class PrimitiveSchemaTest { @DataProvider(name = "schemas") + @SuppressWarnings("unchecked") public Object[][] schemas() { // we are not using a static initialization block, see here: @@ -137,7 +138,7 @@ public void allSchemasShouldSupportNull(Map, List> testData) { } @Test(dataProvider = "schemas") - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) public void allSchemasShouldRoundtripInput(Map> testData) { for (Map.Entry> test : testData.entrySet()) { log.info("Test schema {}", test.getKey()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaTest.java index ed918cd0b8cd3..90d8ef586d464 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaTest.java @@ -155,6 +155,7 @@ public void testSchema() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGenericOf() { try { ProtobufNativeSchema protobufNativeSchema = diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java index 0565c43ab40ff..aa8e339533380 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java @@ -150,6 +150,7 @@ public void testSchema() { } @Test + @SuppressWarnings("unchecked") public void testGenericOf() { try { ProtobufSchema protobufSchema = diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java index dfdcbc8470c79..b146d22f74739 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java @@ -148,6 +148,7 @@ public void testAllPrimitiveFieldsSchema() { } @Test + @SuppressWarnings("unchecked") public void testGenericRecordBuilderByFieldName() { RecordSchemaBuilder recordSchemaBuilder = SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest.AllPrimitiveFields"); @@ -231,6 +232,7 @@ public void testGenericRecordBuilderByIndex() { } @Test + @SuppressWarnings("unchecked") public void testGenericRecordBuilderAvroByFieldname() { RecordSchemaBuilder people1SchemaBuilder = SchemaBuilder.record(People1.class.getCanonicalName()); people1SchemaBuilder.field("age").type(SchemaType.INT32); @@ -299,6 +301,7 @@ public void testGenericRecordBuilderAvroByFieldname() { } @Test + @SuppressWarnings("unchecked") public void testGenericRecordBuilderAvroByFieldnamePojo() { RecordSchemaBuilder people1SchemaBuilder = SchemaBuilder.record(People1.class.getCanonicalName()); people1SchemaBuilder.field("age").type(SchemaType.INT32); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java index 8e4b0b0bea79a..0b95b1ba19754 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SupportVersioningKeyValueSchemaTest.java @@ -33,6 +33,7 @@ public class SupportVersioningKeyValueSchemaTest { @Test + @SuppressWarnings("unchecked") public void testKeyValueVersioningEncodeDecode() { MultiVersionSchemaInfoProvider multiVersionSchemaInfoProvider = mock(MultiVersionSchemaInfoProvider.class); AvroSchema fooSchema = AvroSchema.of( @@ -71,6 +72,7 @@ public void testKeyValueVersioningEncodeDecode() { } @Test + @SuppressWarnings("unchecked") public void testSeparateKeyValueVersioningEncodeDecode() { MultiVersionSchemaInfoProvider multiVersionSchemaInfoProvider = mock(MultiVersionSchemaInfoProvider.class); AvroSchema fooSchema = AvroSchema.of( @@ -104,6 +106,7 @@ public void testSeparateKeyValueVersioningEncodeDecode() { } @Test + @SuppressWarnings("unchecked") public void testKeyValueDefaultVersioningEncodeDecode() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); @@ -137,6 +140,7 @@ public void testKeyValueDefaultVersioningEncodeDecode() { } @Test + @SuppressWarnings("unchecked") public void testKeyValueLatestVersioningEncodeDecode() { AvroSchema fooSchema = AvroSchema.of( SchemaDefinition.builder().withPojo(SchemaTestUtils.Foo.class).build()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/AbstractGenericSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/AbstractGenericSchemaTest.java index b1ca65a6455a0..4ddcfd37bda36 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/AbstractGenericSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/AbstractGenericSchemaTest.java @@ -39,6 +39,7 @@ public class AbstractGenericSchemaTest { @Test + @SuppressWarnings("unchecked") public void testGenericProtobufNativeSchema() { Schema encodeSchema = Schema.PROTOBUF_NATIVE(org.apache.pulsar.client.schema.proto.Test.TestMessage.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java index 1cc611b4226b2..431e2bc60e604 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericAvroReaderTest.java @@ -71,6 +71,7 @@ public void setup() { } @Test + @SuppressWarnings("unchecked") public void testGenericAvroReaderByWriterSchema() { byte[] fooBytes = fooSchema.encode(foo); @@ -82,6 +83,7 @@ public void testGenericAvroReaderByWriterSchema() { } @Test + @SuppressWarnings("unchecked") public void testGenericAvroReaderByReaderSchema() { byte[] fooV2Bytes = fooV2Schema.encode(fooV2); @@ -94,6 +96,7 @@ public void testGenericAvroReaderByReaderSchema() { } @Test + @SuppressWarnings("unchecked") public void testOffsetSchema() { byte[] fooBytes = fooOffsetSchema.encode(foo); ByteBuf byteBuf = Unpooled.buffer(); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java index 5a397a5366887..5ee993ebf06c8 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericJsonRecordTest.java @@ -100,6 +100,7 @@ private enum GPU { } @Test + @SuppressWarnings("unchecked") public void testEncodeAndDecodeObject() throws JsonProcessingException { // test case from issue https://github.com/apache/pulsar/issues/9605 JSONSchema jsonSchema = JSONSchema.of(SchemaDefinition.builder().withPojo(PC.class).build()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeSchemaTest.java index 3e2695a985a54..b20b763d9b737 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericProtobufNativeSchemaTest.java @@ -34,6 +34,7 @@ public class GenericProtobufNativeSchemaTest { private ProtobufNativeSchema clazzBasedProtobufNativeSchema; @BeforeMethod + @SuppressWarnings("unchecked") public void init() { clazzBasedProtobufNativeSchema = ProtobufNativeSchema.of(SchemaDefinition.builder() .withPojo(TestMessage.class).build()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaImplTest.java index 060e436098e14..c7991f16ec756 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaImplTest.java @@ -48,6 +48,7 @@ public class GenericSchemaImplTest { @Test + @SuppressWarnings("unchecked") public void testGenericAvroSchema() { Schema encodeSchema = Schema.AVRO(Foo.class); GenericSchema decodeSchema = GenericSchemaImpl.of(encodeSchema.getSchemaInfo()); @@ -55,6 +56,7 @@ public void testGenericAvroSchema() { } @Test + @SuppressWarnings("unchecked") public void testGenericJsonSchema() { Schema encodeSchema = Schema.JSON(Foo.class); GenericSchema decodeSchema = GenericSchemaImpl.of(encodeSchema.getSchemaInfo()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaTest.java index a4174f3d39946..4d54b29f39ce8 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/generic/GenericSchemaTest.java @@ -53,6 +53,7 @@ public class GenericSchemaTest { @Test + @SuppressWarnings("unchecked") public void testGenericAvroSchema() { Schema encodeSchema = Schema.AVRO(Foo.class); GenericSchema decodeSchema = GenericAvroSchema.of(encodeSchema.getSchemaInfo()); @@ -60,6 +61,7 @@ public void testGenericAvroSchema() { } @Test + @SuppressWarnings("unchecked") public void testGenericJsonSchema() { Schema encodeSchema = Schema.JSON(Foo.class); GenericSchema decodeSchema = GenericJsonSchema.of(encodeSchema.getSchemaInfo()); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java b/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java index 67f956e42d239..1181ab8e2fa4b 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/common/schema/KeyValueTest.java @@ -61,6 +61,7 @@ public class KeyValueTest { + @SuppressWarnings({"serial", "rawtypes", "unchecked"}) private static final Map> testData = new HashMap() { private static final long serialVersionUID = -3081991052949960650L; @@ -99,6 +100,7 @@ public Object[][] schemas() { } @Test(dataProvider = "schemas") + @SuppressWarnings("unchecked") public void testAllSchemas(Map> schemas) { for (Map.Entry> keyEntry : schemas.entrySet()) { for (Map.Entry> valueEntry : schemas.entrySet()) { diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java index b8756c042151b..cf202397cb770 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/semaphore/AsyncDualMemoryLimiterUtilTest.java @@ -232,6 +232,7 @@ public void testWithPermitsFutureWithNullPermit() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testAcquireDirectMemoryPermitsAndWriteAndFlushSuccess() throws Exception { ChannelHandlerContext ctx = mock(ChannelHandlerContext.class); ChannelFuture channelFuture = mock(ChannelFuture.class); @@ -411,6 +412,7 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushCancelled() throws Exc } @Test + @SuppressWarnings("unchecked") public void testAcquireDirectMemoryPermitsAndWriteAndFlushMultipleConcurrent() throws Exception { ChannelHandlerContext ctx = mock(ChannelHandlerContext.class); ChannelFuture channelFuture = mock(ChannelFuture.class); @@ -448,6 +450,7 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushMultipleConcurrent() t } @Test + @SuppressWarnings("unchecked") public void testAcquireDirectMemoryPermitsAndWriteAndFlushReleasesOnWriteFailure() throws Exception { ChannelHandlerContext ctx = mock(ChannelHandlerContext.class); ChannelFuture channelFuture = mock(ChannelFuture.class); @@ -485,6 +488,7 @@ public void testAcquireDirectMemoryPermitsAndWriteAndFlushReleasesOnWriteFailure } @Test + @SuppressWarnings("unchecked") public void testWithPermitsFutureMultipleConcurrent() throws Exception { int numOperations = 20; @SuppressWarnings({"unchecked", "rawtypes"}) diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java index 92d20a6221b6a..f20fc07a5907d 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ContextImplTest.java @@ -93,6 +93,7 @@ public class ContextImplTest { private ProducerCache producerCache; @BeforeMethod(alwaysRun = true) + @SuppressWarnings("unchecked") public void setup() throws PulsarClientException { config = new InstanceConfig(); config.setExposePulsarAdminClientEnabled(true); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java index 1f407460325e3..24d57b817bcda 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerBuilderFactoryTest.java @@ -55,6 +55,7 @@ public class ProducerBuilderFactoryTest { private ProducerBuilder producerBuilder; @BeforeMethod + @SuppressWarnings("unchecked") public void setup() { pulsarClient = mock(PulsarClient.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java index 3994ea39a8637..91e98eb61563a 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/ProducerCacheTest.java @@ -31,6 +31,7 @@ public class ProducerCacheTest { @Test + @SuppressWarnings("unchecked") public void shouldTolerateAlreadyClosedExceptionInClose() { ProducerCache cache = new ProducerCache(); Producer producer = mock(Producer.class); @@ -43,6 +44,7 @@ public void shouldTolerateAlreadyClosedExceptionInClose() { } @Test + @SuppressWarnings("unchecked") public void shouldTolerateRuntimeExceptionInClose() { ProducerCache cache = new ProducerCache(); Producer producer = mock(Producer.class); @@ -54,6 +56,7 @@ public void shouldTolerateRuntimeExceptionInClose() { } @Test + @SuppressWarnings("unchecked") public void shouldTolerateRuntimeExceptionInFlush() { ProducerCache cache = new ProducerCache(); Producer producer = mock(Producer.class); @@ -65,6 +68,7 @@ public void shouldTolerateRuntimeExceptionInFlush() { } @Test + @SuppressWarnings("unchecked") public void shouldCompleteFlushBeforeCloseAndWaitForClosing() { ProducerCache cache = new ProducerCache(); Producer producer = mock(Producer.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java index 78c449f5c1cb3..4ffea41524e47 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/SinkRecordTest.java @@ -29,7 +29,7 @@ public class SinkRecordTest { @Test - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) public void testCustomAck() { PulsarRecord pulsarRecord = Mockito.mock(PulsarRecord.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java index 2d832fb7e2a06..303f4c83c85b0 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/state/BKStateStoreImplTest.java @@ -55,6 +55,7 @@ public class BKStateStoreImplTest { private BKStateStoreImpl stateContext; @BeforeMethod + @SuppressWarnings("unchecked") public void setup() { this.mockTable = mock(Table.class); this.stateContext = new BKStateStoreImpl( @@ -93,6 +94,7 @@ public void testPut() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testDelete() throws Exception { DeleteResult result = mock(DeleteResult.class); when(mockTable.delete(any(ByteBuf.class), eq(Options.delete()))) @@ -117,6 +119,7 @@ public void testGetValue() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testGetStateValue() throws Exception { @SuppressWarnings("rawtypes") KeyValue returnedKeyValue = mock(KeyValue.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java index 3ca2a5f48627c..b88231253f6d5 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/sink/PulsarSinkTest.java @@ -96,6 +96,7 @@ public byte[] serialize(String input) { /** * Verify that JavaInstance does not support functions that take Void type as input. */ + @SuppressWarnings("unchecked") private static PulsarClientImpl getPulsarClient() throws PulsarClientException { PulsarClientImpl pulsarClient = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); @@ -186,6 +187,7 @@ public byte[] serialize(ComplexUserDefinedType input) { * Verify that JavaInstance does support functions that output Void type. */ @Test + @SuppressWarnings("unchecked") public void testVoidOutputClasses() throws Exception { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); // set type to void @@ -205,6 +207,7 @@ public void testVoidOutputClasses() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testInconsistentOutputType() throws IOException { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); // set type to be inconsistent to that of SerDe @@ -230,6 +233,7 @@ public void testInconsistentOutputType() throws IOException { * Verify that Default Serializer works fine. */ @Test + @SuppressWarnings("unchecked") public void testDefaultSerDe() throws PulsarClientException { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); @@ -251,6 +255,7 @@ public void testDefaultSerDe() throws PulsarClientException { * Verify that Explicit setting of Default Serializer works fine. */ @Test + @SuppressWarnings("unchecked") public void testExplicitDefaultSerDe() throws PulsarClientException { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); // set type to void @@ -269,6 +274,7 @@ public void testExplicitDefaultSerDe() throws PulsarClientException { } @Test + @SuppressWarnings("unchecked") public void testComplexOuputType() throws PulsarClientException { PulsarSinkConfig pulsarConfig = getPulsarConfigs(); // set type to void @@ -287,6 +293,7 @@ public void testComplexOuputType() throws PulsarClientException { } @Test + @SuppressWarnings("unchecked") public void testInitializeSchema() throws Exception { PulsarClient pulsarClient = getPulsarClient(); @@ -343,7 +350,7 @@ public void testInitializeSchema() throws Exception { } @Test - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) public void testSinkAndMessageRouting() throws Exception { String[] topics = {"topic-1", "topic-2", "topic-3", null}; @@ -372,6 +379,7 @@ public String getValue() { } @Override + @SuppressWarnings("unchecked") public Optional getDestinationTopic() { return getTopicOptional(topic); } @@ -410,6 +418,7 @@ public String getValue() { } @Override + @SuppressWarnings("unchecked") public Optional getDestinationTopic() { return getTopicOptional(topic); } @@ -448,6 +457,7 @@ public String getValue() { } @Override + @SuppressWarnings("unchecked") public Optional getDestinationTopic() { return getTopicOptional(topic); } @@ -507,6 +517,7 @@ public Optional getPartitionIndex() { } @Override + @SuppressWarnings("unchecked") public Optional getRecordSequence() { return Optional.of(1L); } @@ -551,7 +562,7 @@ public void testWriteGenericRecordsEOS() throws Exception { testWriteGenericRecords(ProcessingGuarantees.EFFECTIVELY_ONCE); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) private void testWriteGenericRecords(ProcessingGuarantees guarantees) throws Exception { String defaultTopic = "default"; @@ -614,6 +625,7 @@ public Optional getPartitionId() { } @Override + @SuppressWarnings("unchecked") public Optional getRecordSequence() { return Optional.of(1L); } diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java index c585f27d5d3fa..39fcf40c635e5 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarFunctionRecordTest.java @@ -29,7 +29,7 @@ public class PulsarFunctionRecordTest { - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testAck() { Record record = mock(Record.class); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarSourceTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarSourceTest.java index 5d6e4a3dc75e7..53a6e2ee74b9e 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarSourceTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/PulsarSourceTest.java @@ -326,6 +326,7 @@ public void testDanglingSubscriptions() throws Exception { } @Test(dataProvider = "sourceImpls") + @SuppressWarnings("unchecked") public void testPreserveOriginalSchema(PulsarSourceConfig pulsarSourceConfig) throws Exception { pulsarSourceConfig.setTypeClassName(GenericRecord.class.getName()); @@ -348,6 +349,7 @@ public void testPreserveOriginalSchema(PulsarSourceConfig pulsarSourceConfig) th } @Test(dataProvider = "sourceImpls") + @SuppressWarnings("unchecked") public void testInputConsumersGetter(PulsarSourceConfig pulsarSourceConfig) throws Exception { PulsarSource pulsarSource = getPulsarSource(pulsarSourceConfig); pulsarSource.open(new HashMap<>(), null); @@ -369,6 +371,7 @@ public void testInputConsumersGetter(PulsarSourceConfig pulsarSourceConfig) thro @Test(dataProvider = "sourceImpls") + @SuppressWarnings("unchecked") public void testPulsarRecordCustomAck(PulsarSourceConfig pulsarSourceConfig) throws Exception { PulsarSource pulsarSource = getPulsarSource(pulsarSourceConfig); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java index 9f6da05678414..46c515dfad3d1 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/source/batch/BatchSourceExecutorTest.java @@ -83,6 +83,7 @@ public void prepare(byte[] task) throws Exception { } @Override + @SuppressWarnings("unchecked") public Record readNext() throws Exception { if (++recordCount % 5 == 0) { return null; @@ -133,6 +134,7 @@ public void discover(Consumer taskEater) throws Exception { } @Override + @SuppressWarnings("unchecked") public void prepare(byte[] task) throws Exception { prepareCount++; for (int i = 0; i < 5; ++i) { @@ -222,6 +224,7 @@ private static BatchSourceConfig createBatchSourceConfig() { } @BeforeMethod + @SuppressWarnings("unchecked") public void setUp() throws Exception { TestBatchSource.closeCount = 0; TestBatchSource.discoverCount = 0; diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java index 72138fe000cd9..59658175aa9a3 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutorTest.java @@ -132,6 +132,7 @@ public void cleanUp() { } @Test + @SuppressWarnings("unchecked") public void testWindowFunctionWithAtmostOnce() throws Exception { windowConfig.setProcessingGuarantees(WindowConfig.ProcessingGuarantees.ATMOST_ONCE); doReturn(Optional.of(new Gson().fromJson(new Gson().toJson(windowConfig), Map.class))).when(context) @@ -146,7 +147,7 @@ public void testWindowFunctionWithAtmostOnce() throws Exception { verify(record, times(1)).ack(); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void testWindowFunctionWithAtleastOnce() throws Exception { @@ -251,6 +252,7 @@ public void testPrepareLateTupleStreamWithoutTs() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testExecuteWithLateTupleStream() throws Exception { windowConfig.setLateDataTopic("$late"); diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java index 39e6c63f92530..b91a1fbc7c675 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/windowing/WindowManagerTest.java @@ -147,6 +147,7 @@ public void testCountBasedWindow() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testExpireThreshold() throws Exception { int threshold = WindowManager.EXPIRE_EVENTS_THRESHOLD; int windowLength = 5; @@ -171,7 +172,7 @@ public void testExpireThreshold() throws Exception { assertEquals(seq(1, threshold - windowLength), listener.onExpiryEvents); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({"unchecked", "rawtypes"}) private void testEvictBeforeWatermarkForWatermarkEvictionPolicy(EvictionPolicy watermarkEvictionPolicy, int windowLength) throws diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java index 7c05fe100869c..a2cdf6b9116c7 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/RuntimeUtilsTest.java @@ -63,7 +63,7 @@ public void testSplitRuntimeArgs() { Assert.assertEquals(result[2], "-Dfoo=\"bar foo\""); } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test(dataProvider = "k8sRuntime") public void getGoInstanceCmd(boolean k8sRuntime) throws IOException { HashMap goInstanceConfig; diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizerTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizerTest.java index 91049213b2143..7544988ebc0e9 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizerTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/BasicKubernetesManifestCustomizerTest.java @@ -62,6 +62,7 @@ public void testInitializeWithData() { } @Test + @SuppressWarnings("unchecked") public void testMergeRuntimeOpts() { Map configs = new Gson().fromJson(KubernetesRuntimeTest.createRuntimeCustomizerConfig(), HashMap.class); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java index 0653d6dcacbd8..2ede9650c13da 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeFactoryTest.java @@ -123,6 +123,7 @@ public KubernetesRuntimeFactoryTest() throws Exception { } @AfterMethod(alwaysRun = true) + @SuppressWarnings("unchecked") public void tearDown() { if (null != this.factory) { this.factory.close(); @@ -137,6 +138,7 @@ KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, Res resourceChangeInLockStep, Optional.empty(), Optional.empty()); } + @SuppressWarnings("unchecked") KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, Resources minResources, Resources maxResources, @@ -539,6 +541,7 @@ public void testDynamicConfigMapLoading() throws Exception { assertEquals(kubernetesRuntimeFactory.getImagePullPolicy(), "test_imagePullPolicy2"); } + @SuppressWarnings("unchecked") private KubernetesRuntimeFactory getKuberentesRuntimeFactory() { KubernetesRuntimeFactory kubernetesRuntimeFactory = new KubernetesRuntimeFactory(); WorkerConfig workerConfig = new WorkerConfig(); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java index 37795100e0c00..ed12fda0ce1af 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java @@ -194,6 +194,7 @@ public void setup() { } @AfterMethod(alwaysRun = true) + @SuppressWarnings("unchecked") public void tearDown() { if (null != this.factory) { this.factory.close(); @@ -209,6 +210,7 @@ KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, int memoryOverCommitRatio, manifestCustomizer, downloadDirectory, null, null); } + @SuppressWarnings("unchecked") KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, int percentMemoryPadding, double cpuOverCommitRatio, double memoryOverCommitRatio, Optional manifestCustomizer, @@ -1096,6 +1098,7 @@ public void testKubernetesRuntimeWithExposeAdminClientEnabled() throws Exception } @Test + @SuppressWarnings("unchecked") public void testKubernetesRuntimeWithExposeAdminClientDisabled() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false, false); @@ -1112,6 +1115,7 @@ KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, int memoryOverCommitRatio, manifestCustomizerClassName, runtimeCustomizerConfig, null, null); } + @SuppressWarnings("unchecked") KubernetesRuntimeFactory createKubernetesRuntimeFactory(String extraDepsDir, int percentMemoryPadding, double cpuOverCommitRatio, double memoryOverCommitRatio, String manifestCustomizerClassName, @@ -1211,6 +1215,7 @@ public static JsonObject createRuntimeCustomizerConfig() { } @Test + @SuppressWarnings("unchecked") public void testBasicKubernetesManifestCustomizerWithRuntimeCustomizerConfig() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); @@ -1254,6 +1259,7 @@ public void testBasicKubernetesManifestCustomizerWithRuntimeCustomizerConfig() t @Test + @SuppressWarnings("unchecked") public void testBasicKubernetesManifestCustomizerWithRuntimeCustomizerConfigOverwrite() throws Exception { InstanceConfig config = createJavaInstanceConfig(FunctionDetails.Runtime.JAVA, false); config.setFunctionDetails(createFunctionDetails(FunctionDetails.Runtime.JAVA, false, (fd) -> { diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java index c8e7bbdb1a638..4f5dbe0404b52 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/process/ProcessRuntimeTest.java @@ -140,6 +140,7 @@ private ProcessRuntimeFactory createProcessRuntimeFactory(String extraDependenci return createProcessRuntimeFactory(extraDependenciesDir, null, false); } + @SuppressWarnings("unchecked") private ProcessRuntimeFactory createProcessRuntimeFactory(String extraDependenciesDir, String webServiceUrl, boolean exposePulsarAdminClientEnabled) { ProcessRuntimeFactory processRuntimeFactory = new ProcessRuntimeFactory(); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntimeFactoryTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntimeFactoryTest.java index 961c3639c7e8a..64ca9d2ca0a23 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntimeFactoryTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/thread/ThreadRuntimeFactoryTest.java @@ -101,6 +101,7 @@ public void testMemoryLimitBothSet() throws Exception { } + @SuppressWarnings("unchecked") private ClientBuilder testMemoryLimit(Long absolute, Double percent) throws Exception { try (MockedStatic mockedPulsarClient = mockStatic(PulsarClient.class)) { ClientBuilder clientBuilder = Mockito.mock(ClientBuilder.class); diff --git a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ActionsTest.java b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ActionsTest.java index 87fc6f28f5605..fe0f5db428900 100644 --- a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ActionsTest.java +++ b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ActionsTest.java @@ -31,6 +31,7 @@ public class ActionsTest { @Test + @SuppressWarnings("unchecked") public void testActionsSuccess() throws InterruptedException { // Test for success @@ -76,6 +77,7 @@ public void testActionsSuccess() throws InterruptedException { @Test + @SuppressWarnings("unchecked") public void testActionsOneAction() throws InterruptedException { // test only run 1 action Supplier supplier1 = mock(Supplier.class); @@ -120,6 +122,7 @@ public void testActionsOneAction() throws InterruptedException { } @Test + @SuppressWarnings("unchecked") public void testActionsRetry() throws InterruptedException { // test retry @@ -165,6 +168,7 @@ public void testActionsRetry() throws InterruptedException { } @Test + @SuppressWarnings("unchecked") public void testActionsNoContinueOn() throws InterruptedException { // No continueOn Suppliersupplier1 = mock(Supplier.class); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java index 5c56a82e2dbfc..5526c1e621cca 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionActionerTest.java @@ -58,6 +58,7 @@ public class FunctionActionerTest { * @throws Exception */ @Test + @SuppressWarnings("unchecked") public void testStartFunctionWithDLNamespace() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); @@ -100,6 +101,7 @@ public void testStartFunctionWithDLNamespace() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testStartFunctionWithPkgUrl() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); @@ -170,6 +172,7 @@ private void startFunction(FunctionActioner actioner, String pkgPathLocation, St } @Test + @SuppressWarnings("unchecked") public void testFunctionAuthDisabled() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -228,6 +231,7 @@ public void testFunctionAuthDisabled() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testStartFunctionWithPackageUrl() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java index 85295ecfbb546..6c5e22cbd0cb1 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionAssignmentTailerTest.java @@ -80,6 +80,7 @@ private static Assignment createAssignment(String workerId, FunctionMetaData fun } @Test(timeOut = 10000) + @SuppressWarnings("unchecked") public void testErrorNotifier() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -128,6 +129,7 @@ public CompletableFuture> answer(InvocationOnMock invocationOnMo when(reader.hasMessageAvailable()).thenAnswer(new Answer() { @Override + @SuppressWarnings("unchecked") public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { return !messageList.isEmpty(); } @@ -196,6 +198,7 @@ public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { } @Test(timeOut = 10000) + @SuppressWarnings("unchecked") public void testProcessingAssignments() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -248,6 +251,7 @@ public CompletableFuture> answer(InvocationOnMock invocationOnMo when(reader.hasMessageAvailable()).thenAnswer(new Answer() { @Override + @SuppressWarnings("unchecked") public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { return !messageList.isEmpty(); } @@ -308,6 +312,7 @@ public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { } @Test(timeOut = 10000) + @SuppressWarnings("unchecked") public void testTriggerReadToTheEndAndExit() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -360,6 +365,7 @@ public CompletableFuture> answer(InvocationOnMock invocationOnMo when(reader.hasMessageAvailable()).thenAnswer(new Answer() { @Override + @SuppressWarnings("unchecked") public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { return !messageList.isEmpty(); } diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java index 6192707117d68..295bdc4bf3c90 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionMetaDataManagerTest.java @@ -54,6 +54,7 @@ public class FunctionMetaDataManagerTest { static byte[] producerByteArray; + @SuppressWarnings("unchecked") private static PulsarClient mockPulsarClient() throws PulsarClientException { ProducerBuilder builder = mock(ProducerBuilder.class); when(builder.topic(anyString())).thenReturn(builder); @@ -292,6 +293,7 @@ private void deregisterFunction(boolean compact) throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProcessRequest() throws PulsarClientException, IOException { WorkerConfig workerConfig = new WorkerConfig(); FunctionMetaDataManager functionMetaDataManager = spy( 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 56ea38cf39ae6..b3a6594ac5ba8 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 @@ -80,6 +80,7 @@ public void testUpdate() throws Exception { CountDownLatch readLatch = new CountDownLatch(1); CountDownLatch processLatch = new CountDownLatch(1); when(reader.readNext(anyInt(), any(TimeUnit.class))).thenReturn(msg).then(new Answer() { + @SuppressWarnings("unchecked") public Message answer(InvocationOnMock invocation) { try { readLatch.countDown(); @@ -96,6 +97,6 @@ public Message answer(InvocationOnMock invocation) { readLatch.await(); verify(reader, times(2)).readNext(anyInt(), any(TimeUnit.class)); - verify(fsm, times(1)).processMetaDataTopicMessage(any(Message.class)); + verify(fsm, times(1)).processMetaDataTopicMessage(any()); } } diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java index a34d4e0691448..b96160fa1fae9 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/FunctionRuntimeManagerTest.java @@ -112,6 +112,7 @@ private static Instance createInstance(FunctionMetaData function, int instanceId } @Test + @SuppressWarnings("unchecked") public void testProcessAssignmentUpdateAddFunctions() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); @@ -193,6 +194,7 @@ public void testProcessAssignmentUpdateAddFunctions() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testProcessAssignmentUpdateDeleteFunctions() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); @@ -284,6 +286,7 @@ private void mockRuntimeFactory(MockedStatic runtimeFactoryMocke } @Test + @SuppressWarnings("unchecked") public void testProcessAssignmentUpdateModifyFunctions() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -402,6 +405,7 @@ public void testProcessAssignmentUpdateModifyFunctions() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testReassignment() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -502,6 +506,7 @@ public void testReassignment() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testRuntimeManagerInitialize() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -635,6 +640,7 @@ public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable { } @Test + @SuppressWarnings("unchecked") public void testExternallyManagedRuntimeUpdate() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -780,6 +786,7 @@ public void testExternallyManagedRuntimeUpdate() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testFunctionRuntimeSetCorrectly() { // Function runtime not set @@ -1008,6 +1015,7 @@ public void testFunctionRuntimeFactoryConfigsBackwardsCompatibility() throws Exc } @Test + @SuppressWarnings("unchecked") public void testThreadFunctionInstancesRestart() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java index 48e4fc9fe90a1..93e951383f078 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/LeaderServiceTest.java @@ -63,6 +63,7 @@ public class LeaderServiceTest { private CompletableFuture readToTheEndAndExitFuture; private MembershipManager membershipManager; + @SuppressWarnings("unchecked") public LeaderServiceTest() { this.workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -76,6 +77,7 @@ public LeaderServiceTest() { } @BeforeMethod + @SuppressWarnings("unchecked") public void setup() throws PulsarClientException { mockClient = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java index b572cd8196bbf..07af4a5654fe1 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/MembershipManagerTest.java @@ -60,6 +60,7 @@ public class MembershipManagerTest { private final WorkerConfig workerConfig; + @SuppressWarnings("unchecked") public MembershipManagerTest() { this.workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -71,6 +72,7 @@ public MembershipManagerTest() { workerConfig.setStateStorageServiceUrl("foo"); } + @SuppressWarnings("unchecked") private static PulsarClient mockPulsarClient() throws PulsarClientException { PulsarClientImpl mockClient = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); @@ -122,6 +124,7 @@ private static Instance createInstance(FunctionMetaData function, int instanceId } @Test + @SuppressWarnings("unchecked") public void testCheckFailuresNoFailures() throws Exception { SchedulerManager schedulerManager = mock(SchedulerManager.class); PulsarClient pulsarClient = mockPulsarClient(); @@ -180,6 +183,7 @@ public void testCheckFailuresNoFailures() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testCheckFailuresSomeFailures() throws Exception { workerConfig.setRescheduleTimeoutMs(30000); SchedulerManager schedulerManager = mock(SchedulerManager.class); @@ -253,6 +257,7 @@ public void testCheckFailuresSomeFailures() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testCheckFailuresSomeUnassigned() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -330,6 +335,7 @@ public void testCheckFailuresSomeUnassigned() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testHeartBeatFunctionWorkerDown() throws Exception { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); 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 1c0c2a69ae73c..bfd8c3968b9e9 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 @@ -117,6 +117,7 @@ private static Assignment parseAssignment(byte[] data) { } @BeforeMethod + @SuppressWarnings("unchecked") public void setup() { WorkerConfig workerConfig = new WorkerConfig(); workerConfig.setWorkerId("worker-1"); @@ -176,6 +177,7 @@ public void stop() { } @Test + @SuppressWarnings("unchecked") public void testSchedule() throws Exception { List functionMetaDataList = new LinkedList<>(); @@ -756,6 +758,7 @@ public void testAssignmentWorkerDoesNotExist() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testDrain() throws Exception { final int numWorkers = 4; diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java index bfbd2db4ad664..3abca76c60246 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/WorkerUtilsTest.java @@ -52,6 +52,7 @@ public class WorkerUtilsTest { @Test + @SuppressWarnings("unchecked") public void testCreateExclusiveProducerWithRetry() { Producer producer = mock(Producer.class); ProducerBuilder builder = mock(ProducerBuilder.class); diff --git a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java index 4d5a8ab889334..2b8286f35e7ce 100644 --- a/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java +++ b/pulsar-functions/worker/src/test/java/org/apache/pulsar/functions/worker/rest/api/v2/FunctionApiV2ResourceTest.java @@ -138,6 +138,7 @@ protected void testListFunctionsMissingArguments( } + @SuppressWarnings("unchecked") protected List listDefaultFunctions() { return new Gson().fromJson(readEntity(resource.listFunctions( TENANT, diff --git a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java index 51596f124cafd..fb1a8f4e0a287 100644 --- a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java +++ b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SinkTest.java @@ -49,6 +49,7 @@ public void close() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testSinkContext() throws Exception { SinkContext sinkContext = mock(SinkContext.class); diff --git a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java index 5ce9be4aa9335..2c2ecc0b63770 100644 --- a/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java +++ b/pulsar-io/core/src/test/java/org/apache/pulsar/io/core/SourceTest.java @@ -48,6 +48,7 @@ public Record read() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testSinkContext() throws Exception { SourceContext sourceContext = mock(SourceContext.class); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java index 30c94009df79d..cc220868a28e8 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java @@ -520,6 +520,7 @@ public void readModifyUpdateBadVersionRetry(String provider, Supplier ur } @Test(dataProvider = "zkImpls") + @SuppressWarnings("unchecked") public void readModifyUpdateOrCreateRetryTimeout(String provider, Supplier urlSupplier) throws Exception { @Cleanup MetadataStore store = MetadataStoreFactory.create(urlSupplier.get(), MetadataStoreConfig.builder().build()); diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java index 259261b18c6aa..08b0e3d23a616 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java @@ -526,6 +526,7 @@ public void testThreadSwitchOfZkMetadataStore(boolean hasSynchronizer, boolean e } @Test + @SuppressWarnings("unchecked") public void testZkLoadConfigFromFile() throws Exception { final String metadataStoreName = UUID.randomUUID().toString().replaceAll("-", ""); MetadataStoreConfig.MetadataStoreConfigBuilder builder = diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java index f564a5921d303..6635fc7a14e18 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/TestZKServer.java @@ -103,7 +103,7 @@ private static ZooKeeperServer getZooKeeperServer(ZooKeeperServerMain zooKeeperS return zkServer; } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @SneakyThrows private static T readField(Class clazz, String field, Object object) { Field declaredField = clazz.getDeclaredField(field); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionUtilsTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionUtilsTest.java index e709e5da947a3..dde2d0fe0b2cf 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionUtilsTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionUtilsTest.java @@ -39,6 +39,7 @@ public class ProxyExtensionUtilsTest { @Test + @SuppressWarnings("unchecked") public void testLoadProtocolHandler() throws Exception { ProxyExtensionDefinition def = new ProxyExtensionDefinition(); def.setExtensionClass(MockProxyExtension.class.getName()); @@ -72,6 +73,7 @@ public void testLoadProtocolHandler() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testLoadProtocolHandlerBlankHandlerClass() throws Exception { ProxyExtensionDefinition def = new ProxyExtensionDefinition(); def.setDescription("test-ext"); @@ -104,6 +106,7 @@ public void testLoadProtocolHandlerBlankHandlerClass() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testLoadProtocolHandlerWrongHandlerClass() throws Exception { ProxyExtensionDefinition def = new ProxyExtensionDefinition(); def.setExtensionClass(Runnable.class.getName()); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionsTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionsTest.java index 92b4510221b61..bcd4783bfaf89 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionsTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/extensions/ProxyExtensionsTest.java @@ -106,6 +106,7 @@ public void testStart() { } @Test + @SuppressWarnings("unchecked") public void testNewChannelInitializersSuccess() { ChannelInitializer i1 = mock(ChannelInitializer.class); ChannelInitializer i2 = mock(ChannelInitializer.class); @@ -131,6 +132,7 @@ public void testNewChannelInitializersSuccess() { } @Test(expectedExceptions = RuntimeException.class) + @SuppressWarnings("unchecked") public void testNewChannelInitializersOverlapped() { ChannelInitializer i1 = mock(ChannelInitializer.class); ChannelInitializer i2 = mock(ChannelInitializer.class); diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/BrokerProxyValidatorTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/BrokerProxyValidatorTest.java index d477bccfb3757..f8a7f91c4f3b4 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/BrokerProxyValidatorTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/BrokerProxyValidatorTest.java @@ -109,6 +109,7 @@ public void shouldAllowIPv6AddressNumeric() throws Exception { brokerProxyValidator.resolveAndCheckTargetAddress("fd4d:801b:73fa:abcd:0000:0000:0000:0001:6650").get(); } + @SuppressWarnings("unchecked") private AddressResolver createMockedAddressResolver(String ipAddressResult) { AddressResolver inetSocketAddressResolver = mock(AddressResolver.class); when(inetSocketAddressResolver.resolve(any())).then(invocationOnMock -> { diff --git a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithExtensibleLoadManagerTest.java b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithExtensibleLoadManagerTest.java index 2529c929a6ffd..b7852a73ca5b1 100644 --- a/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithExtensibleLoadManagerTest.java +++ b/pulsar-proxy/src/test/java/org/apache/pulsar/proxy/server/ProxyWithExtensibleLoadManagerTest.java @@ -118,6 +118,7 @@ private ProxyConfiguration initializeProxyConfig() { return proxyConfig; } + @SuppressWarnings("unchecked") private T spyField(Object target, String fieldName) throws IllegalAccessException { T t = (T) FieldUtils.readDeclaredField(target, fieldName, true); var fieldSpy = spy(t); diff --git a/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/MLTransactionMetadataStoreTest.java b/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/MLTransactionMetadataStoreTest.java index c8bf50b7653ba..eee5494ba2da1 100644 --- a/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/MLTransactionMetadataStoreTest.java +++ b/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/MLTransactionMetadataStoreTest.java @@ -489,6 +489,7 @@ public void testRecoverWhenDeleteFromCursor(TxnLogBufferedWriterConfig txnLogBuf } @Test(dataProvider = "bufferedWriterConfigDataProvider") + @SuppressWarnings("unchecked") public void testManageLedgerWriteFailState(TxnLogBufferedWriterConfig txnLogBufferedWriterConfig) throws Exception { ManagedLedgerFactoryConfig factoryConf = new ManagedLedgerFactoryConfig(); factoryConf.setMaxCacheSize(0); diff --git a/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java b/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java index 4e280a08a9309..368978e286c4c 100644 --- a/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java +++ b/pulsar-transaction/coordinator/src/test/java/org/apache/pulsar/transaction/coordinator/impl/TxnLogBufferedWriterTest.java @@ -197,7 +197,7 @@ public void testMainProcess(int batchedWriteMaxRecords, int batchedWriteMaxSize, * 2. Store the param-context and param-position of callback function for verify. */ // Create TxLogBufferedWriter. - TxnLogBufferedWriter txnLogBufferedWriter = new TxnLogBufferedWriter<>( + TxnLogBufferedWriter txnLogBufferedWriter = new TxnLogBufferedWriter<>( managedLedger, ((ManagedLedgerImpl) managedLedger).getExecutor(), transactionTimer, dataSerializer, batchedWriteMaxRecords, batchedWriteMaxSize, batchedWriteMaxDelayInMillis, batchEnabled, DISABLED_BUFFERED_WRITER_METRICS); @@ -220,6 +220,7 @@ public void addComplete(Position position, Object ctx) { positionsOfCallback.get(lightPosition).add(position); } @Override + @SuppressWarnings("unchecked") public void addFailed(ManagedLedgerException exception, Object ctx) { if (contextArrayOfCallback.contains(Integer.valueOf(String.valueOf(ctx)))){ return; @@ -398,6 +399,7 @@ public void testFlushThresholds() throws Exception{ List dataArrayFlushedToBookie = Collections.synchronizedList(new ArrayList<>()); Mockito.doAnswer(new Answer() { @Override + @SuppressWarnings("unchecked") public Object answer(InvocationOnMock invocation) throws Throwable { ByteBuf byteBuf = (ByteBuf) invocation.getArguments()[0]; byteBuf.skipBytes(4); @@ -460,6 +462,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { * This method is used to verify the fix for the above problem. see: https://github.com/apache/pulsar/pull/16679. */ @Test + @SuppressWarnings("unchecked") public void testPendingScheduleTriggerTaskCount() throws Exception { // Create components. ArrayBlockingQueue workQueue = new ArrayBlockingQueue<>(65536 * 2); @@ -590,6 +593,7 @@ public static List deserializeMergedData(ByteBuf byteBuf){ return deserializeMergedData(new String(bytes, Charset.defaultCharset())); } + @SuppressWarnings("unchecked") public static List deserializeMergedData(String json){ try { return objectMapper.readValue(json, ArrayList.class); @@ -907,6 +911,7 @@ public void testMetricsStatsThatTriggeredByLargeSingleData() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testFailWhenAddData() throws Exception { int batchedWriteMaxSize = 1024; @SuppressWarnings("rawtypes") diff --git a/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/ProducerHandlerTest.java b/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/ProducerHandlerTest.java index d9adcebb5a334..540d8e45f9381 100644 --- a/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/ProducerHandlerTest.java +++ b/pulsar-websocket/src/test/java/org/apache/pulsar/websocket/ProducerHandlerTest.java @@ -46,6 +46,7 @@ public class ProducerHandlerTest { @Test + @SuppressWarnings("unchecked") public void testProduceMessageAttributes() throws IOException { String producerV2 = "/ws/v2/producer/persistent/my-property/my-ns/my-topic"; HttpServletRequest httpServletRequest = mock(HttpServletRequest.class); From 7742f7ff057e885dd482a3cb9297be4b7f7e657a Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Tue, 31 Mar 2026 15:01:45 +0300 Subject: [PATCH 15/22] [improve][build] Use public Gradle build scans for PRs and cleanup workflows (#25439) --- .github/actions/setup-gradle/action.yml | 60 ++++++++++++++ .github/actions/ssh-access/action.yml | 5 +- .github/workflows/ci-go-functions.yaml | 3 - .github/workflows/ci-gradle-cache-update.yaml | 5 +- .../workflows/ci-semantic-pull-request.yml | 2 +- .github/workflows/codeql.yaml | 6 +- .github/workflows/labeler.yml | 4 + .github/workflows/pulsar-ci-flaky.yaml | 13 +-- .github/workflows/pulsar-ci.yaml | 80 ++++--------------- pulsar-build/run_unit_group_gradle.sh | 3 - 10 files changed, 94 insertions(+), 87 deletions(-) create mode 100644 .github/actions/setup-gradle/action.yml diff --git a/.github/actions/setup-gradle/action.yml b/.github/actions/setup-gradle/action.yml new file mode 100644 index 0000000000000..c7f2518a23204 --- /dev/null +++ b/.github/actions/setup-gradle/action.yml @@ -0,0 +1,60 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +name: Setup Gradle +description: Sets up Gradle with Develocity or public build scan publishing by default +inputs: + develocity-access-key: + description: 'Develocity access key for authenticated build scans' + required: false + default: '' + build-scan-publish: + description: 'Whether to publish build scans or use Develocity when the access key is set' + required: false + default: 'true' + cache-read-only: + description: 'Whether the Gradle cache is read-only' + required: false + default: ${{ github.event.repository != null && github.ref_name != github.event.repository.default_branch }} + add-job-summary: + description: 'When to add a job summary' + required: false + default: 'always' +runs: + using: composite + steps: + - name: Setup Gradle with Develocity + if: ${{ inputs.develocity-access-key != '' && inputs.build-scan-publish == 'true' }} + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + with: + develocity-injection-enabled: true + develocity-url: https://develocity.apache.org + develocity-access-key: ${{ inputs.develocity-access-key }} + cache-read-only: ${{ inputs.cache-read-only }} + add-job-summary: ${{ inputs.add-job-summary }} + + - name: Setup Gradle + if: ${{ !(inputs.develocity-access-key != '' && inputs.build-scan-publish == 'true') }} + uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + with: + build-scan-publish: ${{ inputs.build-scan-publish }} + build-scan-terms-of-use-url: 'https://gradle.com/terms-of-service' + build-scan-terms-of-use-agree: 'yes' + cache-read-only: ${{ inputs.cache-read-only }} + add-job-summary: ${{ inputs.add-job-summary }} \ No newline at end of file diff --git a/.github/actions/ssh-access/action.yml b/.github/actions/ssh-access/action.yml index 2c8f0a01648ea..89f9b74e60404 100644 --- a/.github/actions/ssh-access/action.yml +++ b/.github/actions/ssh-access/action.yml @@ -138,7 +138,8 @@ runs: if command -v upterm &>/dev/null; then shopt -s nullglob echo "SSH connection information" - upterm session current --admin-socket ~/.upterm/*.sock || { + export UPTERM_ADMIN_SOCKET=$(find $HOME/.upterm $XDG_RUNTIME_DIR/upterm /run/user/$(id -u)/upterm -name "*.sock" | head -n 1) + upterm session current || { echo "upterm isn't running. Not waiting any longer." exit 0 } @@ -146,7 +147,7 @@ runs: echo "Waiting $timeout seconds..." sleep $timeout echo "Keep waiting as long as there's a connected session" - while upterm session current --admin-socket ~/.upterm/*.sock|grep Connected &>/dev/null; do + while upterm session current|grep Connected &>/dev/null; do sleep 30 done echo "No session is connected. Not waiting any longer." diff --git a/.github/workflows/ci-go-functions.yaml b/.github/workflows/ci-go-functions.yaml index 1581e853e2475..9e57b4f8b5e84 100644 --- a/.github/workflows/ci-go-functions.yaml +++ b/.github/workflows/ci-go-functions.yaml @@ -31,9 +31,6 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true -env: - MAVEN_OPTS: -Xss1500k -Xmx1024m -Daether.connector.http.reuseConnections=false -Daether.connector.requestTimeout=60000 -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.serviceUnavailableRetryStrategy.class=standard -Dmaven.wagon.rto=60000 - jobs: preconditions: name: Preconditions diff --git a/.github/workflows/ci-gradle-cache-update.yaml b/.github/workflows/ci-gradle-cache-update.yaml index 610a3312e66cf..6f417745d6c58 100644 --- a/.github/workflows/ci-gradle-cache-update.yaml +++ b/.github/workflows/ci-gradle-cache-update.yaml @@ -65,7 +65,10 @@ jobs: java-version: 21 - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle + with: + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + cache-read-only: false - name: Run Gradle build run: | diff --git a/.github/workflows/ci-semantic-pull-request.yml b/.github/workflows/ci-semantic-pull-request.yml index 15ac85090243c..bd552b4199601 100644 --- a/.github/workflows/ci-semantic-pull-request.yml +++ b/.github/workflows/ci-semantic-pull-request.yml @@ -34,7 +34,7 @@ jobs: name: Check pull request title runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request@v5.5.2 + - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index ccf93219b8f91..7f6c5480f2d18 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -62,10 +62,10 @@ jobs: uses: actions/checkout@v6 - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + cache-read-only: true # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 25e6c38f836cd..6a69a424be1ec 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -19,6 +19,10 @@ name: "Pull Request Labeler" on: - pull_request_target +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + jobs: triage: permissions: diff --git a/.github/workflows/pulsar-ci-flaky.yaml b/.github/workflows/pulsar-ci-flaky.yaml index 159f1ddbf6ee2..041970735a979 100644 --- a/.github/workflows/pulsar-ci-flaky.yaml +++ b/.github/workflows/pulsar-ci-flaky.yaml @@ -166,7 +166,6 @@ jobs: env: JOB_NAME: Flaky tests suite COLLECT_COVERAGE: "${{ needs.preconditions.outputs.collect_coverage }}" - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} TRACE_TEST_RESOURCE_CLEANUP: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.trace_test_resource_cleanup || 'off' }} TRACE_TEST_RESOURCE_CLEANUP_DIR: ${{ github.workspace }}/target/trace-test-resource-cleanup @@ -203,11 +202,10 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} cache-read-only: false - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - name: Run unit test group BROKER_FLAKY run: | @@ -221,13 +219,6 @@ jobs: if: ${{ always() }} uses: ./.github/actions/copy-test-reports - - name: Publish Test Report - uses: apache/pulsar-test-infra/action-junit-report@master - if: ${{ always() }} - with: - report_paths: 'test-reports/TEST-*.xml' - annotate_only: 'true' - - name: Report detected thread leaks if: ${{ always() }} run: | diff --git a/.github/workflows/pulsar-ci.yaml b/.github/workflows/pulsar-ci.yaml index f6dceda881e2e..35d7ab4131876 100644 --- a/.github/workflows/pulsar-ci.yaml +++ b/.github/workflows/pulsar-ci.yaml @@ -149,7 +149,6 @@ jobs: name: Build and License check env: JOB_NAME: Build and License check - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} runs-on: ubuntu-24.04 timeout-minutes: 60 @@ -176,15 +175,12 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + cache-read-only: false - name: Build, check licenses and code style - # --no-configuration-cache: Shadow plugin's filesMatching { filter { } } lambdas - # capture Gradle script references that can't be serialized by the configuration cache. run: >- ./gradlew assemble rat spotlessCheck checkstyleMain checkstyleTest --no-configuration-cache @@ -232,7 +228,6 @@ jobs: name: CI - Unit - ${{ matrix.name }} env: JOB_NAME: CI - Unit - ${{ matrix.name }} - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} TRACE_TEST_RESOURCE_CLEANUP: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.trace_test_resource_cleanup || 'off' }} TRACE_TEST_RESOURCE_CLEANUP_DIR: ${{ github.workspace }}/build/trace-test-resource-cleanup @@ -303,11 +298,9 @@ jobs: java-version: ${{ matrix.jdk || env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Restore build outputs from build job uses: actions/download-artifact@v8 @@ -334,13 +327,6 @@ jobs: if: ${{ always() }} uses: ./.github/actions/copy-test-reports - - name: Publish Test Report - uses: apache/pulsar-test-infra/action-junit-report@master - if: ${{ always() }} - with: - report_paths: 'test-reports/TEST-*.xml' - annotate_only: 'true' - - name: Report detected thread leaks if: ${{ always() }} run: | @@ -393,7 +379,6 @@ jobs: needs: ['preconditions', 'build-and-license-check'] if: ${{ needs.preconditions.outputs.docs_only != 'true' }} env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} steps: - name: checkout @@ -409,11 +394,9 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Build with Gradle run: ./gradlew assemble @@ -425,7 +408,6 @@ jobs: needs: ['preconditions', 'build-and-license-check'] if: ${{ needs.preconditions.outputs.docs_only != 'true' }} env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} steps: - name: checkout @@ -448,11 +430,9 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Restore build outputs from build job uses: actions/download-artifact@v8 @@ -493,7 +473,6 @@ jobs: env: JOB_NAME: CI - Integration - ${{ matrix.name }} PULSAR_TEST_IMAGE_NAME: apachepulsar/java-test-image:latest - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} strategy: fail-fast: false @@ -562,11 +541,9 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Restore build outputs from build job uses: actions/download-artifact@v8 @@ -609,13 +586,6 @@ jobs: if: ${{ always() }} uses: ./.github/actions/copy-test-reports - - name: Publish Test Report - uses: apache/pulsar-test-infra/action-junit-report@master - if: ${{ always() }} - with: - report_paths: 'test-reports/TEST-*.xml' - annotate_only: 'true' - - name: Upload test reports uses: actions/upload-artifact@v7 if: ${{ !success() }} @@ -661,7 +631,6 @@ jobs: needs: ['preconditions', 'build-and-license-check'] if: ${{ needs.preconditions.outputs.docs_only != 'true' }} env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} steps: - name: checkout @@ -684,11 +653,9 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Restore build outputs from build job uses: actions/download-artifact@v8 @@ -754,7 +721,6 @@ jobs: env: JOB_NAME: CI - System - ${{ matrix.name }} PULSAR_TEST_IMAGE_NAME: apachepulsar/pulsar-test-latest-version:latest - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} strategy: fail-fast: false @@ -802,11 +768,9 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Restore build outputs from build job uses: actions/download-artifact@v8 @@ -837,13 +801,6 @@ jobs: if: ${{ always() }} uses: ./.github/actions/copy-test-reports - - name: Publish Test Report - uses: apache/pulsar-test-infra/action-junit-report@master - if: ${{ always() }} - with: - report_paths: 'test-reports/TEST-*.xml' - annotate_only: 'true' - - name: Upload test reports uses: actions/upload-artifact@v7 if: ${{ !success() }} @@ -893,7 +850,6 @@ jobs: contents: read security-events: write env: - DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} CI_JDK_MAJOR_VERSION: ${{ needs.preconditions.outputs.jdk_major_version }} CODEQL_LANGUAGE: java-kotlin steps: @@ -918,11 +874,9 @@ jobs: java-version: ${{ env.CI_JDK_MAJOR_VERSION }} - name: Setup Gradle - uses: gradle/actions/setup-gradle@39e147cb9de83bb9910b8ef8bd7fff0ee20fcd6f + uses: ./.github/actions/setup-gradle with: - develocity-injection-enabled: true - develocity-url: https://develocity.apache.org - add-job-summary: always + develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }} - name: Initialize CodeQL uses: github/codeql-action/init@v3 diff --git a/pulsar-build/run_unit_group_gradle.sh b/pulsar-build/run_unit_group_gradle.sh index 72d0ff4e14c66..58bc30eaeb2ed 100755 --- a/pulsar-build/run_unit_group_gradle.sh +++ b/pulsar-build/run_unit_group_gradle.sh @@ -45,9 +45,6 @@ function gradle_test() { continue_args="--continue" fi echo "::group::Run tests for " "$@" - # --no-configuration-cache: required because the Shadow plugin's filesMatching { filter { } } - # lambdas in shaded JAR builds capture Gradle script references that can't be serialized. - # This is a known Shadow plugin limitation tracked upstream. ./gradlew --no-configuration-cache $continue_args "$@" $failfast_args "${COMMANDLINE_ARGS[@]}" echo "::endgroup::" set +x From 26827e788360ef546e615226af64ec39768689d8 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Tue, 31 Mar 2026 16:03:04 +0300 Subject: [PATCH 16/22] [improve][build] Upgrade Checkstyle from 10.14.2 to 13.3.0 (#25440) --- buildtools/src/main/resources/pulsar/checkstyle.xml | 2 +- buildtools/src/main/resources/pulsar/suppressions.xml | 2 +- gradle/libs.versions.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/buildtools/src/main/resources/pulsar/checkstyle.xml b/buildtools/src/main/resources/pulsar/checkstyle.xml index e5cf3061abb60..49c8e6804a8fb 100644 --- a/buildtools/src/main/resources/pulsar/checkstyle.xml +++ b/buildtools/src/main/resources/pulsar/checkstyle.xml @@ -21,7 +21,7 @@ --> + "https://checkstyle.org/dtds/configuration_1_3.dtd"> + "https://checkstyle.org/dtds/suppressions_1_1.dtd"> diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cafc8c5cb29a6..4ed2e75831444 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ java = "17" docker-jdk = "21" pulsar-client-python = "3.10.0" # Code quality -checkstyle = "10.14.2" +checkstyle = "13.3.0" # Major frameworks bookkeeper = "4.17.3" zookeeper = "3.9.5" From fa2b4112791e7843eaf3bb806487414cba7430aa Mon Sep 17 00:00:00 2001 From: Denovo1998 Date: Tue, 31 Mar 2026 21:06:55 +0800 Subject: [PATCH 17/22] [fix][broker] Handle flow_or_qps bundle split requests in ELM --- .../extensions/ExtensibleLoadManagerImpl.java | 65 +++++++++++-------- .../broker/namespace/NamespaceService.java | 11 ++-- .../pulsar/broker/admin/AdminApiTest.java | 18 +++++ .../ExtensibleLoadManagerImplTest.java | 16 +++++ 4 files changed, 79 insertions(+), 31 deletions(-) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java index af95df60174db..b040a07f4f04f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java @@ -750,34 +750,47 @@ public CompletableFuture splitNamespaceBundleAsync(ServiceUnitId bundle, final String bundleRange = LoadManagerShared.getBundleRangeFromBundleName(bundle.toString()); NamespaceBundle namespaceBundle = pulsar.getNamespaceService().getNamespaceBundleFactory().getBundle(namespaceName, bundleRange); - return pulsar.getNamespaceService().getSplitBoundary(namespaceBundle, splitAlgorithm, boundaries) - .thenCompose(splitBundlesPair -> { - if (splitBundlesPair == null) { - String msg = format("Bundle %s not found under namespace", namespaceBundle); - log.error(msg); - return FutureUtil.failedFuture(new IllegalStateException(msg)); + return pulsar.getNamespaceService().getSplitBoundary(namespaceBundle, boundaries, splitAlgorithm) + .thenCompose(splitBoundaries -> { + if (splitBoundaries == null || splitBoundaries.isEmpty()) { + log.info("[{}] No valid boundary found in {} to split bundle {}", + namespaceBundle.getNamespaceObject(), boundaries, namespaceBundle.getBundleRange()); + return CompletableFuture.completedFuture(null); } - - return getOwnershipAsync(Optional.empty(), bundle) - .thenCompose(brokerOpt -> { - if (brokerOpt.isEmpty()) { - String msg = String.format("Namespace bundle: %s is not owned by any broker.", - bundle); - log.warn(msg); - throw new IllegalStateException(msg); + return pulsar.getNamespaceService().getNamespaceBundleFactory() + .splitBundles(namespaceBundle, splitBoundaries.size() + 1, splitBoundaries) + .thenCompose(splitBundlesPair -> { + if (splitBundlesPair == null) { + String msg = format("Bundle %s not found under namespace", namespaceBundle); + log.error(msg); + return FutureUtil.failedFuture(new IllegalStateException(msg)); } - String sourceBroker = brokerOpt.get(); - SplitDecision splitDecision = new SplitDecision(); - List splitBundles = splitBundlesPair.getRight(); - Map> splitServiceUnitToDestBroker = new HashMap<>(); - splitBundles.forEach(splitBundle -> splitServiceUnitToDestBroker - .put(splitBundle.getBundleRange(), Optional.empty())); - splitDecision.setSplit( - new Split(bundle.toString(), sourceBroker, splitServiceUnitToDestBroker)); - splitDecision.setLabel(Success); - splitDecision.setReason(Admin); - return splitAsync(splitDecision, - conf.getNamespaceBundleUnloadingTimeoutMs(), TimeUnit.MILLISECONDS); + + return getOwnershipAsync(Optional.empty(), bundle) + .thenCompose(brokerOpt -> { + if (brokerOpt.isEmpty()) { + String msg = String.format( + "Namespace bundle: %s is not owned by any broker.", + bundle); + log.warn(msg); + throw new IllegalStateException(msg); + } + String sourceBroker = brokerOpt.get(); + SplitDecision splitDecision = new SplitDecision(); + List splitBundles = splitBundlesPair.getRight(); + Map> splitServiceUnitToDestBroker = + new HashMap<>(); + splitBundles.forEach(splitBundle -> splitServiceUnitToDestBroker + .put(splitBundle.getBundleRange(), Optional.empty())); + splitDecision.setSplit( + new Split(bundle.toString(), sourceBroker, + splitServiceUnitToDestBroker)); + splitDecision.setLabel(Success); + splitDecision.setReason(Admin); + return splitAsync(splitDecision, + conf.getNamespaceBundleUnloadingTimeoutMs(), + TimeUnit.MILLISECONDS); + }); }); }); } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java index c16c9338bf994..f43df1561364e 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java @@ -88,6 +88,7 @@ import org.apache.pulsar.common.lookup.GetTopicsResult; import org.apache.pulsar.common.lookup.data.LookupData; import org.apache.pulsar.common.naming.BundleSplitOption; +import org.apache.pulsar.common.naming.FlowOrQpsEquallyDivideBundleSplitAlgorithm; import org.apache.pulsar.common.naming.FlowOrQpsEquallyDivideBundleSplitOption; import org.apache.pulsar.common.naming.NamespaceBundle; import org.apache.pulsar.common.naming.NamespaceBundleFactory; @@ -948,7 +949,7 @@ void splitAndOwnBundleOnceAndRetry(NamespaceBundle bundle, CompletableFuture completionFuture, NamespaceBundleSplitAlgorithm splitAlgorithm, List boundaries) { - BundleSplitOption bundleSplitOption = getBundleSplitOption(bundle, boundaries, config); + BundleSplitOption bundleSplitOption = getBundleSplitOption(bundle, boundaries, config, splitAlgorithm); splitAlgorithm.getSplitBoundary(bundleSplitOption).whenComplete((splitBoundaries, ex) -> { CompletableFuture> updateFuture = new CompletableFuture<>(); @@ -1091,16 +1092,16 @@ public CompletableFuture>> getSplit public CompletableFuture> getSplitBoundary( NamespaceBundle bundle, List boundaries, NamespaceBundleSplitAlgorithm nsBundleSplitAlgorithm) { - BundleSplitOption bundleSplitOption = getBundleSplitOption(bundle, boundaries, config); + BundleSplitOption bundleSplitOption = getBundleSplitOption(bundle, boundaries, config, nsBundleSplitAlgorithm); return nsBundleSplitAlgorithm.getSplitBoundary(bundleSplitOption); } private BundleSplitOption getBundleSplitOption(NamespaceBundle bundle, List boundaries, - ServiceConfiguration config) { + ServiceConfiguration config, + NamespaceBundleSplitAlgorithm splitAlgorithm) { BundleSplitOption bundleSplitOption; - if (config.getDefaultNamespaceBundleSplitAlgorithm() - .equals(NamespaceBundleSplitAlgorithm.FLOW_OR_QPS_EQUALLY_DIVIDE)) { + if (splitAlgorithm instanceof FlowOrQpsEquallyDivideBundleSplitAlgorithm) { Map topicStatsMap = pulsar.getBrokerService().getTopicStats(bundle); bundleSplitOption = new FlowOrQpsEquallyDivideBundleSplitOption(this, bundle, boundaries, topicStatsMap, 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 2b7b404e655b0..4248eeb47578a 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 @@ -1717,6 +1717,24 @@ public void testNamespaceSplitBundleWithTopicCountEquallyDivideAlgorithm() throw } } + @Test + public void testNamespaceSplitBundleWithFlowOrQpsAlgorithmUsesRequestedAlgorithm() throws Exception { + final String namespace = "prop-xyz/flow-or-qps-split"; + final String topicName = "persistent://" + namespace + "/topic-1"; + admin.namespaces().createNamespace(namespace, 1); + admin.topics().createNonPartitionedTopic(topicName); + admin.lookups().lookupTopic(topicName); + + try { + admin.namespaces().splitNamespaceBundle(namespace, "0x00000000_0xffffffff", true, + NamespaceBundleSplitAlgorithm.FLOW_OR_QPS_EQUALLY_DIVIDE); + } catch (Exception e) { + fail("split bundle with flow_or_qps_equally_divide shouldn't have thrown exception", e); + } + + assertEquals(admin.namespaces().getBundles(namespace).getNumBundles(), 1); + } + @Test public void testNamespacesGetTopicHashPositions() throws Exception { // Force to create a namespace with only one bundle and create a topic diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java index 82fed30cb356e..e4b4fae7a72cb 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java @@ -123,6 +123,7 @@ import org.apache.pulsar.client.api.SubscriptionType; import org.apache.pulsar.client.impl.LookupService; import org.apache.pulsar.common.naming.NamespaceBundle; +import org.apache.pulsar.common.naming.NamespaceBundleSplitAlgorithm; import org.apache.pulsar.common.naming.NamespaceName; import org.apache.pulsar.common.naming.ServiceUnitId; import org.apache.pulsar.common.naming.TopicDomain; @@ -1016,6 +1017,21 @@ public void testSplitBundleWithSpecificPositionAdminAPI() throws Exception { assertTrue(bundlesData.getBoundaries().contains(midBundle)); assertTrue(bundlesData.getBoundaries().contains(highBundle)); } + + @Test(timeOut = 30 * 1000) + public void testSplitBundleWithFlowOrQpsAdminAPINoValidBoundary() throws Exception { + String namespace = "public/test-split-with-flow-or-qps"; + String topic = "persistent://" + namespace + "/test-split-with-flow-or-qps"; + admin.namespaces().createNamespace(namespace, 1); + admin.topics().createNonPartitionedTopic(topic); + admin.lookups().lookupTopic(topic); + + admin.namespaces().splitNamespaceBundle(namespace, "0x00000000_0xffffffff", true, + NamespaceBundleSplitAlgorithm.FLOW_OR_QPS_EQUALLY_DIVIDE); + + assertEquals(admin.namespaces().getBundles(namespace).getNumBundles(), 1); + } + @Test(timeOut = 30 * 1000) public void testDeleteNamespaceBundle() throws Exception { final String namespace = "public/testDeleteNamespaceBundle"; From 5be2b4a2390bbbb1eb53df8e8f1666e0c76187a6 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Tue, 31 Mar 2026 18:56:35 +0300 Subject: [PATCH 18/22] [improve][build] Fix and enable configure-on-demand for Gradle builds (#25441) --- build.gradle.kts | 9 ---- distribution/offloaders/build.gradle.kts | 9 ++++ distribution/server/build.gradle.kts | 31 ++++++++++++- docker/pulsar/build.gradle.kts | 24 ++++++++--- gradle.properties | 1 + pulsar-broker/build.gradle.kts | 5 +++ pulsar-functions/runtime-all/build.gradle.kts | 11 +++++ .../java-test-image/build.gradle.kts | 34 +++++++++++---- .../latest-version-image/build.gradle.kts | 43 ++++++++++++++----- 9 files changed, 130 insertions(+), 37 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e14c968cc4979..8b4e2cc1f4451 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,15 +20,6 @@ import com.github.vlsi.gradle.git.dsl.gitignore import org.jetbrains.gradle.ext.copyright import org.jetbrains.gradle.ext.settings -buildscript { - // The license plugin pulls in plexus-utils:2.0.6 which conflicts with - // the Shadow plugin's plexus-utils:4.0.2 (missing 4-arg matchPath method). - // Force the newer version to avoid NoSuchMethodError at shading time. - configurations.classpath { - resolutionStrategy.force("org.codehaus.plexus:plexus-utils:4.0.2") - } -} - plugins { alias(libs.plugins.rat) alias(libs.plugins.version.catalog.update) diff --git a/distribution/offloaders/build.gradle.kts b/distribution/offloaders/build.gradle.kts index 553583e904ab8..f710ed05f1e32 100644 --- a/distribution/offloaders/build.gradle.kts +++ b/distribution/offloaders/build.gradle.kts @@ -66,6 +66,15 @@ val offloaderDistTar by tasks.registering(Tar::class) { } } +// Consumable configuration exposing the offloader distribution tarball +val offloaderDistElements by configurations.creating { + isCanBeConsumed = true + isCanBeResolved = false + outgoing { + artifact(offloaderDistTar) + } +} + tasks.named("assemble") { dependsOn(offloaderDistTar) } diff --git a/distribution/server/build.gradle.kts b/distribution/server/build.gradle.kts index ce76801fb4901..5ca29d63819ef 100644 --- a/distribution/server/build.gradle.kts +++ b/distribution/server/build.gradle.kts @@ -75,6 +75,20 @@ val distLib by configurations.creating { exclude(group = "org.codehaus.mojo", module = "animal-sniffer-annotations") } +// Resolvable configurations for cross-project artifact dependencies. +// Using configurations instead of direct task references (project().tasks.named()) +// ensures compatibility with Gradle's configure-on-demand feature. +val runtimeAllShadowJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} +val apiExamplesJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} + dependencies { // Version constraints from the enforced platform (inherited via implementation, // which distLib extends) ensure consistent versions without manual resolutionStrategy. @@ -174,6 +188,10 @@ dependencies { // pulsar-broker-common test jar is included in Maven server dist // but requires test-fixtures support in pulsar-broker-common; skipped for now + + // Cross-project artifact dependencies for the server distribution tarball + runtimeAllShadowJar(project(path = ":pulsar-functions:pulsar-functions-runtime-all", configuration = "shadowJarElements")) + apiExamplesJar(project(":pulsar-functions:pulsar-functions-api-examples")) } val pulsarVersion = project.version.toString() @@ -294,13 +312,13 @@ val serverDistTar by tasks.registering(Tar::class) { } // Java instance JAR (runtime-all fat jar, produced by Shadow plugin) - from(project(":pulsar-functions:pulsar-functions-runtime-all").tasks.named("shadowJar")) { + from(runtimeAllShadowJar) { into("${baseDir}/instances") rename(".*", "java-instance.jar") } // Java examples JAR - from(project(":pulsar-functions:pulsar-functions-api-examples").tasks.named("jar")) { + from(apiExamplesJar) { into("${baseDir}/examples") rename(".*", "api-examples.jar") } @@ -319,6 +337,15 @@ val serverDistTar by tasks.registering(Tar::class) { } } +// Consumable configuration exposing the server distribution tarball +val serverDistElements by configurations.creating { + isCanBeConsumed = true + isCanBeResolved = false + outgoing { + artifact(serverDistTar) + } +} + tasks.named("assemble") { dependsOn(serverDistTar) } diff --git a/docker/pulsar/build.gradle.kts b/docker/pulsar/build.gradle.kts index 91b27fbffb388..a43eea374a707 100644 --- a/docker/pulsar/build.gradle.kts +++ b/docker/pulsar/build.gradle.kts @@ -28,20 +28,32 @@ val dockerTag = providers.gradleProperty("docker.tag").getOrElse("latest") val dockerPlatforms = providers.gradleProperty("docker.platforms").getOrElse("") val useWolfi = providers.gradleProperty("docker.wolfi").isPresent -val serverDistTask = project(":distribution:pulsar-server-distribution").tasks.named("serverDistTar") -val offloaderDistTask = project(":distribution:pulsar-offloader-distribution").tasks.named("offloaderDistTar") +// Resolvable configurations for cross-project artifact dependencies. +// Using configurations instead of direct task references (project().tasks.named()) +// ensures compatibility with Gradle's configure-on-demand feature. +val serverDist by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false +} +val offloaderDist by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false +} + +dependencies { + serverDist(project(path = ":distribution:pulsar-server-distribution", configuration = "serverDistElements")) + offloaderDist(project(path = ":distribution:pulsar-offloader-distribution", configuration = "offloaderDistElements")) +} // Copy the server tarball into target/ (Docker build context) val copyTarball by tasks.registering(Copy::class) { - dependsOn(serverDistTask) - from(serverDistTask.map { (it as Tar).archiveFile }) + from(serverDist) into(layout.buildDirectory.dir("target")) } // Copy offloader tarball into build context val copyOffloaderTarball by tasks.registering(Copy::class) { - dependsOn(offloaderDistTask) - from(offloaderDistTask.map { (it as Tar).archiveFile }) + from(offloaderDist) into(layout.buildDirectory.dir("target")) } diff --git a/gradle.properties b/gradle.properties index 20a29b3a26eaf..657c24b120dd5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,6 +18,7 @@ # org.gradle.configuration-cache=true +org.gradle.configureondemand=true org.gradle.parallel=true org.gradle.caching=true org.gradle.jvmargs=-Xmx4g -Xss2m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError diff --git a/pulsar-broker/build.gradle.kts b/pulsar-broker/build.gradle.kts index b0390397ed1e5..94d0f9697f162 100644 --- a/pulsar-broker/build.gradle.kts +++ b/pulsar-broker/build.gradle.kts @@ -135,6 +135,11 @@ dependencies { } } +// Ensure parent projects are configured before resolving cross-project task references. +// Required for --configure-on-demand: the Kotlin DSL needs parent ClassLoaderScopes to be locked. +evaluationDependsOn(":pulsar-io") +evaluationDependsOn(":pulsar-functions") + // NAR/JAR files needed by broker tests (mirrors Maven's maven-dependency-plugin config). tasks.withType { dependsOn( diff --git a/pulsar-functions/runtime-all/build.gradle.kts b/pulsar-functions/runtime-all/build.gradle.kts index cd6fbfee2a162..767f9f5eff382 100644 --- a/pulsar-functions/runtime-all/build.gradle.kts +++ b/pulsar-functions/runtime-all/build.gradle.kts @@ -45,6 +45,17 @@ tasks.named("shadowJ exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA") } +// Consumable configuration exposing the shadow jar for cross-project dependencies. +// Unlike pulsar.shadow-conventions (which replaces runtimeElements), this project +// uses the Shadow plugin directly, so we create a dedicated configuration. +val shadowJarElements by configurations.creating { + isCanBeConsumed = true + isCanBeResolved = false + outgoing { + artifact(tasks.named("shadowJar")) + } +} + tasks.withType().configureEach { dependsOn(tasks.named("shadowJar")) } diff --git a/tests/docker-images/java-test-image/build.gradle.kts b/tests/docker-images/java-test-image/build.gradle.kts index 0f7646856fd04..744878667ca63 100644 --- a/tests/docker-images/java-test-image/build.gradle.kts +++ b/tests/docker-images/java-test-image/build.gradle.kts @@ -26,15 +26,31 @@ val dockerOrganization = providers.gradleProperty("docker.organization").getOrEl val dockerTag = providers.gradleProperty("docker.tag").getOrElse("latest") val dockerPlatforms = providers.gradleProperty("docker.platforms").getOrElse("") -// Dependencies: base pulsar image, java-test-functions jar, buildtools jar -val pulsarDockerBuild = project(":docker:pulsar-docker-image").tasks.named("dockerBuild") -val testFunctionsJar = project(":tests:java-test-functions").tasks.named("shadowJar") -val buildtoolsJar = project(":buildtools").tasks.named("jar") +// Ensure the parent project is configured before resolving cross-project task references. +// Required for --configure-on-demand: the Kotlin DSL needs parent ClassLoaderScopes to be locked. +evaluationDependsOn(":docker") + +// Resolvable configurations for cross-project artifact dependencies. +// Using configurations instead of direct task references (project().tasks.named()) +// ensures compatibility with Gradle's configure-on-demand feature. +val testFunctionsJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} +val buildtoolsJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} + +dependencies { + testFunctionsJar(project(":tests:java-test-functions")) + buildtoolsJar(project(":buildtools")) +} // Prepare the build context in build/target/ val prepareBuildContext by tasks.registering(Sync::class) { - dependsOn(testFunctionsJar, buildtoolsJar) - // Copy scripts from docker/pulsar/scripts and latest-version-image/scripts from("${rootDir}/docker/pulsar/scripts") { into("scripts") @@ -54,12 +70,12 @@ val prepareBuildContext by tasks.registering(Sync::class) { } // Copy java-test-functions.jar - from(testFunctionsJar.map { (it as Jar).archiveFile }) { + from(testFunctionsJar) { rename { "java-test-functions.jar" } } // Copy buildtools.jar - from(buildtoolsJar.map { (it as Jar).archiveFile }) { + from(buildtoolsJar) { rename { "buildtools.jar" } } @@ -70,7 +86,7 @@ val dockerBuild by tasks.registering(Exec::class) { group = "docker" description = "Build the java-test-image Docker image" - dependsOn(pulsarDockerBuild, prepareBuildContext) + dependsOn(":docker:pulsar-docker-image:dockerBuild", prepareBuildContext) val imageName = "${dockerOrganization}/java-test-image:${dockerTag}" val pulsarImage = "${dockerOrganization}/pulsar:${dockerTag}" diff --git a/tests/docker-images/latest-version-image/build.gradle.kts b/tests/docker-images/latest-version-image/build.gradle.kts index d283d69c6150c..4d7c14cc2124b 100644 --- a/tests/docker-images/latest-version-image/build.gradle.kts +++ b/tests/docker-images/latest-version-image/build.gradle.kts @@ -27,16 +27,37 @@ val dockerTag = providers.gradleProperty("docker.tag").getOrElse("latest") val dockerPlatforms = providers.gradleProperty("docker.platforms").getOrElse("") val golangImage = providers.gradleProperty("docker.golang.image").getOrElse("golang:1.24-alpine") -// Dependencies: pulsar image, java-test-functions jar, java-test-plugins jar, buildtools jar -val pulsarDockerBuild = project(":docker:pulsar-docker-image").tasks.named("dockerBuild") -val testFunctionsJar = project(":tests:java-test-functions").tasks.named("shadowJar") -val testPluginsJar = project(":tests:java-test-plugins").tasks.named("jar") -val buildtoolsJar = project(":buildtools").tasks.named("jar") +// Ensure the parent project is configured before resolving cross-project task references. +// Required for --configure-on-demand: the Kotlin DSL needs parent ClassLoaderScopes to be locked. +evaluationDependsOn(":docker") + +// Resolvable configurations for cross-project artifact dependencies. +// Using configurations instead of direct task references (project().tasks.named()) +// ensures compatibility with Gradle's configure-on-demand feature. +val testFunctionsJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} +val testPluginsJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} +val buildtoolsJar by configurations.creating { + isCanBeResolved = true + isCanBeConsumed = false + isTransitive = false +} + +dependencies { + testFunctionsJar(project(":tests:java-test-functions")) + testPluginsJar(project(":tests:java-test-plugins")) + buildtoolsJar(project(":buildtools")) +} // Prepare the build context in target/ (to match Dockerfile COPY paths) val prepareBuildContext by tasks.registering(Sync::class) { - dependsOn(testFunctionsJar, testPluginsJar, buildtoolsJar) - // Copy pulsar-function-go source from("${rootDir}/pulsar-function-go") { into("pulsar-function-go") @@ -48,18 +69,18 @@ val prepareBuildContext by tasks.registering(Sync::class) { } // Copy java-test-functions.jar - from(testFunctionsJar.map { (it as Jar).archiveFile }) { + from(testFunctionsJar) { rename { "java-test-functions.jar" } } // Copy java-test-plugins as .nar - from(testPluginsJar.map { (it as Jar).archiveFile }) { + from(testPluginsJar) { rename { "java-test-plugins.nar" } into("plugins") } // Copy buildtools.jar - from(buildtoolsJar.map { (it as Jar).archiveFile }) { + from(buildtoolsJar) { rename { "buildtools.jar" } } @@ -70,7 +91,7 @@ val dockerBuild by tasks.registering(Exec::class) { group = "docker" description = "Build the pulsar-test-latest-version Docker image" - dependsOn(pulsarDockerBuild, prepareBuildContext) + dependsOn(":docker:pulsar-docker-image:dockerBuild", prepareBuildContext) val imageName = "${dockerOrganization}/pulsar-test-latest-version:${dockerTag}" val pulsarImage = "${dockerOrganization}/pulsar:${dockerTag}" From fabf2f7406bbc0a4d54a71ff9698c2823e0847e4 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Tue, 31 Mar 2026 13:07:55 -0700 Subject: [PATCH 19/22] [improve][build] Enable -Xlint:deprecation and -Xlint:unchecked and fix all warnings (#25446) --- .../kotlin/pulsar.java-conventions.gradle.kts | 2 +- .../tests/ExtendedNettyLeakDetector.java | 3 ++ .../tests/ThreadLeakDetectorListener.java | 4 +- .../TraceTestResourceCleanupListener.java | 6 +-- .../mledger/impl/ManagedLedgerImpl.java | 1 + .../impl/cache/RangeCacheRemovalQueue.java | 2 +- .../oidc/AuthenticationProviderOpenID.java | 1 + .../oidc/AuthenticationStateOpenID.java | 1 + .../AuthenticationProvider.java | 1 + .../AuthenticationProviderBasic.java | 1 + .../AuthenticationProviderList.java | 1 + .../AuthenticationProviderTls.java | 1 + .../AuthenticationProviderToken.java | 1 + .../authentication/AuthenticationService.java | 1 + .../authentication/utils/AuthTokenUtils.java | 1 + .../MultiRolesTokenAuthorizationProvider.java | 1 + .../broker/limiter/ConnectionController.java | 4 +- .../validator/MultipleListenerValidator.java | 8 ++-- .../servlet/AdditionalServletUtils.java | 1 + .../metrics/JettyStatisticsCollector.java | 1 + .../apache/pulsar/PulsarBrokerStarter.java | 1 + .../org/apache/pulsar/PulsarStandalone.java | 1 + .../apache/pulsar/broker/PulsarService.java | 3 ++ .../pulsar/broker/admin/AdminResource.java | 1 + .../broker/admin/impl/NamespacesBase.java | 4 ++ .../admin/impl/PersistentTopicsBase.java | 22 ++++++++- .../broker/admin/impl/ResourceGroupsBase.java | 1 + .../pulsar/broker/admin/v2/Bookies.java | 1 + .../pulsar/broker/admin/v2/BrokerStats.java | 1 + .../pulsar/broker/admin/v2/Brokers.java | 1 + .../pulsar/broker/admin/v2/Clusters.java | 1 + .../admin/v2/ExtNonPersistentTopics.java | 1 + .../broker/admin/v2/ExtPersistentTopics.java | 1 + .../pulsar/broker/admin/v2/Functions.java | 1 + .../broker/admin/v2/MetadataMigration.java | 1 + .../pulsar/broker/admin/v2/Namespaces.java | 3 ++ .../broker/admin/v2/NonPersistentTopics.java | 3 ++ .../broker/admin/v2/PersistentTopics.java | 2 + .../broker/admin/v2/ResourceGroups.java | 1 + .../broker/admin/v2/ResourceQuotas.java | 1 + .../broker/admin/v2/SchemasResource.java | 1 + .../pulsar/broker/admin/v2/Tenants.java | 1 + .../pulsar/broker/admin/v3/Functions.java | 1 + .../apache/pulsar/broker/admin/v3/Sinks.java | 1 + .../pulsar/broker/admin/v3/Sources.java | 1 + .../pulsar/broker/admin/v3/Transactions.java | 1 + .../bucket/BucketDelayedDeliveryTracker.java | 4 +- .../delayed/bucket/ImmutableBucket.java | 2 +- .../intercept/BrokerInterceptorUtils.java | 1 + .../BrokerInterceptorWithClassLoader.java | 2 + .../broker/intercept/BrokerInterceptors.java | 1 + .../extensions/ExtensibleLoadManagerImpl.java | 4 +- .../channel/ServiceUnitStateChannelImpl.java | 13 +++--- .../ServiceUnitStateDataConflictResolver.java | 6 +-- .../ServiceUnitStateTableViewImpl.java | 1 + .../extensions/data/BrokerLoadData.java | 2 + .../extensions/models/TopKBundles.java | 1 + .../reporter/BrokerLoadDataReporter.java | 6 +-- .../reporter/TopBundleLoadDataReporter.java | 6 +-- .../store/TableViewLoadDataStoreImpl.java | 1 + .../broker/loadbalance/impl/AvgShedder.java | 2 +- .../impl/GenericBrokerHostUsageImpl.java | 2 + .../impl/LeastResourceUsageWithWeight.java | 2 + .../impl/LinuxBrokerHostUsageImpl.java | 1 + .../impl/SimpleLoadManagerImpl.java | 3 ++ .../loadbalance/impl/UniformLoadShedder.java | 46 +++++++++---------- .../broker/namespace/NamespaceService.java | 6 ++- .../broker/protocol/ProtocolHandlerUtils.java | 1 + .../broker/qos/AsyncTokenBucketBuilder.java | 1 + .../org/apache/pulsar/broker/rest/Topics.java | 1 + .../apache/pulsar/broker/rest/TopicsBase.java | 2 + .../service/AbstractBaseDispatcher.java | 1 + .../broker/service/AbstractReplicator.java | 9 ++-- .../pulsar/broker/service/AbstractTopic.java | 2 + .../broker/service/BacklogQuotaManager.java | 1 + .../pulsar/broker/service/BrokerService.java | 11 +++-- .../pulsar/broker/service/Consumer.java | 2 + .../broker/service/EntryBatchIndexesAcks.java | 1 + .../pulsar/broker/service/ServerCnx.java | 1 + .../SystemTopicBasedTopicPoliciesService.java | 2 +- .../NonPersistentReplicator.java | 1 + .../nonpersistent/NonPersistentTopic.java | 2 + .../persistent/GeoPersistentReplicator.java | 1 + .../persistent/PersistentSubscription.java | 1 + .../service/persistent/PersistentTopic.java | 12 +++-- .../ReplicatedSubscriptionsController.java | 1 + .../service/persistent/ShadowReplicator.java | 1 + .../service/plugin/EntryFilterProvider.java | 1 + .../schema/SchemaRegistryServiceImpl.java | 8 ++-- .../NamespaceEventsSystemTopicFactory.java | 1 + .../broker/tools/GenerateDocsCommand.java | 1 + .../pendingack/impl/MLPendingAckStore.java | 1 + .../pulsar/broker/web/PreInterceptFilter.java | 10 ++-- .../broker/web/ProcessHandlerFilter.java | 10 ++-- .../broker/web/ResponseHandlerFilter.java | 10 ++-- .../apache/pulsar/broker/web/WebService.java | 1 + .../client/impl/CompactionReaderImpl.java | 1 + .../pulsar/client/impl/RawReaderImpl.java | 1 + .../compaction/AbstractTwoPhaseCompactor.java | 3 ++ .../StrategicTwoPhaseCompactor.java | 3 ++ .../ConcurrentBitmapSortedLongPairSet.java | 2 +- .../utils/auth/tokens/TokensCliUtils.java | 1 + .../zookeeper/LocalBookkeeperEnsemble.java | 1 + .../client/admin/internal/FunctionsImpl.java | 3 ++ .../client/admin/internal/NamespacesImpl.java | 2 + .../internal/NonPersistentTopicsImpl.java | 1 + .../client/admin/internal/SinksImpl.java | 1 + .../client/admin/internal/SourcesImpl.java | 1 + .../client/admin/internal/TopicsImpl.java | 1 + .../apache/pulsar/client/api/Consumer.java | 1 + .../client/api/MultiTopicConsumerStats.java | 1 + .../api/PartitionedTopicProducerStats.java | 1 + .../apache/pulsar/client/api/Producer.java | 1 + .../ProducerInterceptorWrapper.java | 1 + .../utils/CustomCommandFactoryProvider.java | 1 + .../admin/cli/utils/SchemaExtractor.java | 1 + .../client/impl/ConsumerBuilderImpl.java | 4 +- .../client/impl/ConsumerStatsDisabled.java | 1 + .../impl/ConsumerStatsRecorderImpl.java | 1 + .../impl/GeoReplicationProducerImpl.java | 1 + .../pulsar/client/impl/HttpLookupService.java | 1 + ...ssDeduplicationDecoratorLookupService.java | 1 + .../client/impl/MultiTopicsConsumerImpl.java | 1 + .../impl/PatternMultiTopicsConsumerImpl.java | 4 +- .../client/impl/ProducerBuilderImpl.java | 3 +- .../pulsar/client/impl/ReaderBuilderImpl.java | 4 +- ...meAuthParamsLookupAutoClusterFailover.java | 9 ++-- .../client/impl/auth/AuthenticationBasic.java | 1 + .../impl/conf/ConfigurationDataUtils.java | 1 + .../impl/schema/AbstractStructSchema.java | 1 + .../impl/schema/NativeAvroBytesSchema.java | 1 + .../impl/schema/ProtobufNativeSchema.java | 3 ++ .../schema/ProtobufNativeSchemaUtils.java | 1 + .../client/impl/schema/ProtobufSchema.java | 3 ++ .../schema/SchemaDefinitionBuilderImpl.java | 1 + .../impl/schema/reader/ProtobufReader.java | 1 + .../client/impl/schema/util/SchemaUtil.java | 1 + .../instance/stats/SinkStatsManager.java | 3 -- .../instance/stats/SourceStatsManager.java | 3 -- pulsar-functions/proto/build.gradle.kts | 5 ++ .../socket/client/PerformanceClient.java | 1 + .../pulsar/testclient/BrokerMonitor.java | 1 + .../testclient/DefaultMessageFormatter.java | 1 + .../testclient/LoadSimulationClient.java | 1 + .../testclient/LoadSimulationController.java | 2 + .../pulsar/testclient/PerfClientUtils.java | 1 + .../testclient/PerformanceProducer.java | 2 + .../pulsar/testclient/PerformanceReader.java | 1 + .../functions/GenericObjectFunction.java | 1 + .../functions/RemoveAvroFieldFunction.java | 1 + .../RemoveAvroFieldRecordFunction.java | 1 + .../plugins/LoggingBrokerInterceptor.java | 1 + 152 files changed, 305 insertions(+), 100 deletions(-) diff --git a/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts b/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts index 0e6341834ff3c..666648175b552 100644 --- a/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts +++ b/build-logic/conventions/src/main/kotlin/pulsar.java-conventions.gradle.kts @@ -30,7 +30,7 @@ version = catalog.findVersion("pulsar").get().requiredVersion tasks.withType().configureEach { options.encoding = "UTF-8" options.release.set(17) - options.compilerArgs.addAll(listOf("-parameters")) + options.compilerArgs.addAll(listOf("-parameters", "-Xlint:deprecation", "-Xlint:unchecked")) } configurations.all { diff --git a/buildtools/src/main/java/org/apache/pulsar/tests/ExtendedNettyLeakDetector.java b/buildtools/src/main/java/org/apache/pulsar/tests/ExtendedNettyLeakDetector.java index b270a1c8a2f09..d6d627825b437 100644 --- a/buildtools/src/main/java/org/apache/pulsar/tests/ExtendedNettyLeakDetector.java +++ b/buildtools/src/main/java/org/apache/pulsar/tests/ExtendedNettyLeakDetector.java @@ -102,14 +102,17 @@ private static void triggerLeakReporting() { buffer.release(); } + @SuppressWarnings("deprecation") public ExtendedNettyLeakDetector(Class resourceType, int samplingInterval, long maxActive) { super(resourceType, samplingInterval, maxActive); } + @SuppressWarnings("deprecation") public ExtendedNettyLeakDetector(Class resourceType, int samplingInterval) { super(resourceType, samplingInterval); } + @SuppressWarnings("deprecation") public ExtendedNettyLeakDetector(String resourceType, int samplingInterval, long maxActive) { super(resourceType, samplingInterval, maxActive); } diff --git a/buildtools/src/main/java/org/apache/pulsar/tests/ThreadLeakDetectorListener.java b/buildtools/src/main/java/org/apache/pulsar/tests/ThreadLeakDetectorListener.java index 93baf491b485d..dbdc1dcce06ad 100644 --- a/buildtools/src/main/java/org/apache/pulsar/tests/ThreadLeakDetectorListener.java +++ b/buildtools/src/main/java/org/apache/pulsar/tests/ThreadLeakDetectorListener.java @@ -19,12 +19,12 @@ package org.apache.pulsar.tests; -import com.google.common.base.Charsets; import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Collections; @@ -172,7 +172,7 @@ private void detectLeakedThreads(List testClasses) { File threaddumpFile = new File(DUMP_DIR, "threaddump" + datetimePart + firstTestClassName + ".txt"); try { - Files.asCharSink(threaddumpFile, Charsets.UTF_8) + Files.asCharSink(threaddumpFile, StandardCharsets.UTF_8) .write(ThreadDumpUtil.buildThreadDiagnosticString()); } catch (IOException e) { LOG.error("Cannot write thread dump", e); diff --git a/buildtools/src/main/java/org/apache/pulsar/tests/TraceTestResourceCleanupListener.java b/buildtools/src/main/java/org/apache/pulsar/tests/TraceTestResourceCleanupListener.java index 5692d94bcf15b..f0e6172915b88 100644 --- a/buildtools/src/main/java/org/apache/pulsar/tests/TraceTestResourceCleanupListener.java +++ b/buildtools/src/main/java/org/apache/pulsar/tests/TraceTestResourceCleanupListener.java @@ -19,9 +19,9 @@ package org.apache.pulsar.tests; -import com.google.common.base.Charsets; import com.google.common.io.Files; import java.io.File; +import java.nio.charset.StandardCharsets; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import org.testng.IExecutionListener; @@ -68,7 +68,7 @@ static void createDumps() { try { String threadDump = ThreadDumpUtil.buildThreadDiagnosticString(); File threaddumpFile = new File(DUMP_DIR, "threaddump" + datetimePart + ".txt"); - Files.asCharSink(threaddumpFile, Charsets.UTF_8).write(threadDump); + Files.asCharSink(threaddumpFile, StandardCharsets.UTF_8).write(threadDump); } catch (Throwable t) { System.err.println("Error dumping threads"); t.printStackTrace(System.err); @@ -77,7 +77,7 @@ static void createDumps() { try { String heapHistogram = HeapHistogramUtil.buildHeapHistogram(); File heapHistogramFile = new File(DUMP_DIR, "heaphistogram" + datetimePart + ".txt"); - Files.asCharSink(heapHistogramFile, Charsets.UTF_8).write(heapHistogram); + Files.asCharSink(heapHistogramFile, StandardCharsets.UTF_8).write(heapHistogram); } catch (Throwable t) { System.err.println("Error dumping heap histogram"); t.printStackTrace(System.err); diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java index ed686128529e8..f6c3de05b59ea 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java @@ -2005,6 +2005,7 @@ boolean isNeededCreateNewLedgerAfterCloseLedger() { } @VisibleForTesting + @SuppressWarnings("deprecation") @Override public void rollCurrentLedgerIfFull() { log.info("[{}] Start checking if current ledger is full", name); diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/RangeCacheRemovalQueue.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/RangeCacheRemovalQueue.java index 41d98c441cde2..46446599bdbc2 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/RangeCacheRemovalQueue.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/cache/RangeCacheRemovalQueue.java @@ -220,7 +220,7 @@ public synchronized Pair getNonEvictableSize() { bytesSize.add(entryWrapper.size); } }); - return Pair.of(entries.getValue(), bytesSize.getValue()); + return Pair.of(entries.intValue(), bytesSize.longValue()); } /** diff --git a/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java b/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java index cb7877543bf04..a70d1146e636d 100644 --- a/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java +++ b/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java @@ -148,6 +148,7 @@ public class AuthenticationProviderOpenID implements AuthenticationProvider { private AuthenticationMetrics authenticationMetrics; + @SuppressWarnings("deprecation") @Override public void initialize(ServiceConfiguration config) throws IOException { initialize(Context.builder().config(config).build()); diff --git a/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationStateOpenID.java b/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationStateOpenID.java index 3046a6dd0e3b4..ffa5a7247d322 100644 --- a/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationStateOpenID.java +++ b/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationStateOpenID.java @@ -84,6 +84,7 @@ public AuthenticationDataSource getAuthDataSource() { return authenticationDataSource; } + @SuppressWarnings("deprecation") @Override public boolean isComplete() { return role != null; diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProvider.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProvider.java index d0a3a487b3478..7443ca228e274 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProvider.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProvider.java @@ -169,6 +169,7 @@ default CompletableFuture authenticateHttpRequestAsync(HttpServletReque } } + @SuppressWarnings("deprecation") default void incrementFailureMetric(Enum errorCode) { AuthenticationMetrics.authenticateFailure(getClass().getSimpleName(), getAuthMethodName(), errorCode); } diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java index 91bf56a071c42..4dc3c25c5a3f9 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderBasic.java @@ -40,6 +40,7 @@ import org.apache.pulsar.broker.authentication.metrics.AuthenticationMetrics; import org.apache.pulsar.client.api.url.URL; +@SuppressWarnings("deprecation") public class AuthenticationProviderBasic implements AuthenticationProvider { private static final String HTTP_HEADER_NAME = "Authorization"; private static final String CONF_SYSTEM_PROPERTY_KEY = "pulsar.auth.basic.conf"; diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderList.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderList.java index 02ed52b5ec042..47992dd976449 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderList.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderList.java @@ -36,6 +36,7 @@ * An authentication provider wraps a list of auth providers. */ @Slf4j +@SuppressWarnings("deprecation") public class AuthenticationProviderList implements AuthenticationProvider { private AuthenticationMetrics authenticationMetrics; diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java index f7ff47fe8e61e..64383e1ee38b7 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderTls.java @@ -25,6 +25,7 @@ import org.apache.pulsar.broker.ServiceConfiguration; import org.apache.pulsar.broker.authentication.metrics.AuthenticationMetrics; +@SuppressWarnings("deprecation") public class AuthenticationProviderTls implements AuthenticationProvider { private AuthenticationMetrics authenticationMetrics; diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java index 7a1b518831fab..0d40dfa85a6d2 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationProviderToken.java @@ -46,6 +46,7 @@ import org.apache.pulsar.broker.authentication.utils.AuthTokenUtils; import org.apache.pulsar.common.api.AuthData; +@SuppressWarnings({"deprecation", "unchecked"}) public class AuthenticationProviderToken implements AuthenticationProvider { static final String HTTP_HEADER_NAME = "Authorization"; diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationService.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationService.java index 5b719bd680145..f806d3442d904 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationService.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/AuthenticationService.java @@ -119,6 +119,7 @@ private AuthenticationProvider getAuthProvider(String authMethodName) throws Aut return providerToUse; } + @SuppressWarnings("deprecation") public boolean authenticateHttpRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { String authMethodName = getAuthMethodName(request); diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/AuthTokenUtils.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/AuthTokenUtils.java index e29b106f4f17e..c0ab486056545 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/AuthTokenUtils.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authentication/utils/AuthTokenUtils.java @@ -43,6 +43,7 @@ import org.apache.commons.io.IOUtils; import org.apache.pulsar.client.api.url.URL; +@SuppressWarnings("deprecation") @UtilityClass public class AuthTokenUtils { diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProvider.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProvider.java index 4a25caf63b35c..73dc21c077db6 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProvider.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/authorization/MultiRolesTokenAuthorizationProvider.java @@ -151,6 +151,7 @@ public CompletableFuture validateTenantAdminAccess(String tenantName, S }); } + @SuppressWarnings({"deprecation", "unchecked"}) private Set getRoles(String role, AuthenticationDataSource authData) { if (authData == null || (authData instanceof AuthenticationDataSubscription && ((AuthenticationDataSubscription) authData).getAuthData() == null)) { diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/ConnectionController.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/ConnectionController.java index fcf010a04816c..bb76a3dfc9f03 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/ConnectionController.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/limiter/ConnectionController.java @@ -90,10 +90,10 @@ public State increaseConnection(SocketAddress remoteAddress) { remoteAddress, totalConnectionNum); return State.REACH_MAX_CONNECTION; } - if (maxConnectionsLimitPerIpEnabled && CONNECTIONS.get(ip).getValue() > maxConnectionPerIp) { + if (maxConnectionsLimitPerIpEnabled && CONNECTIONS.get(ip).intValue() > maxConnectionPerIp) { log.info("Reject connect request from {}, because reached the maximum number " + "of connections per Ip {}", - remoteAddress, CONNECTIONS.get(ip).getValue()); + remoteAddress, CONNECTIONS.get(ip).intValue()); return State.REACH_MAX_CONNECTION_PER_IP; } } catch (Exception e) { diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/MultipleListenerValidator.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/MultipleListenerValidator.java index 780203371ecdc..7a75c0196baf9 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/MultipleListenerValidator.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/validator/MultipleListenerValidator.java @@ -84,28 +84,28 @@ public static Map validateAndAnalysisAdvertisedListe for (final String strUri : entry.getValue()) { try { URI uri = URI.create(strUri); - if (StringUtils.equalsIgnoreCase(uri.getScheme(), "pulsar")) { + if ("pulsar".equalsIgnoreCase(uri.getScheme())) { if (pulsarAddress == null) { pulsarAddress = uri; } else { throw new IllegalArgumentException("there are redundant configure for listener `" + entry.getKey() + "`"); } - } else if (StringUtils.equalsIgnoreCase(uri.getScheme(), "pulsar+ssl")) { + } else if ("pulsar+ssl".equalsIgnoreCase(uri.getScheme())) { if (pulsarSslAddress == null) { pulsarSslAddress = uri; } else { throw new IllegalArgumentException("there are redundant configure for listener `" + entry.getKey() + "`"); } - } else if (StringUtils.equalsIgnoreCase(uri.getScheme(), "http")) { + } else if ("http".equalsIgnoreCase(uri.getScheme())) { if (pulsarHttpAddress == null) { pulsarHttpAddress = uri; } else { throw new IllegalArgumentException("there are redundant configure for listener `" + entry.getKey() + "`"); } - } else if (StringUtils.equalsIgnoreCase(uri.getScheme(), "https")) { + } else if ("https".equalsIgnoreCase(uri.getScheme())) { if (pulsarHttpsAddress == null) { pulsarHttpsAddress = uri; } else { diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtils.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtils.java index c3d18833de5a8..5c2e1b6791c08 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtils.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletUtils.java @@ -116,6 +116,7 @@ public AdditionalServletDefinitions searchForServlets(String additionalServletDi * * @param metadata the additional servlet definition. */ + @SuppressWarnings("unchecked") public AdditionalServletWithClassLoader load( AdditionalServletMetadata metadata, String narExtractionDirectory) throws IOException { diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/jetty/metrics/JettyStatisticsCollector.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/jetty/metrics/JettyStatisticsCollector.java index c4facc315153d..bb13de1e51508 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/jetty/metrics/JettyStatisticsCollector.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/jetty/metrics/JettyStatisticsCollector.java @@ -41,6 +41,7 @@ public JettyStatisticsCollector(StatisticsHandler statisticsHandler) { } @Override + @SuppressWarnings("deprecation") public List collect() { return Arrays.asList( buildCounter("jetty_requests_total", "Number of requests", statisticsHandler.getRequests()), diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/PulsarBrokerStarter.java b/pulsar-broker/src/main/java/org/apache/pulsar/PulsarBrokerStarter.java index 7be3d16d49b80..8e096849ffcc2 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/PulsarBrokerStarter.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/PulsarBrokerStarter.java @@ -328,6 +328,7 @@ CommandLine getCommander() { } + @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { DateFormat dateFormat = new SimpleDateFormat( FixedDateFormat.FixedFormat.ISO8601_OFFSET_DATE_TIME_HHMM.getPattern()); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandalone.java b/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandalone.java index c6b48fd3f241b..385f0202805b4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandalone.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/PulsarStandalone.java @@ -274,6 +274,7 @@ public boolean isHelp() { private boolean usingNewDefaultsPIP117; + @SuppressWarnings("deprecation") public void start() throws Exception { if (config == null) { log.error("Failed to load configuration"); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java index 341154f3b7111..e3d6cd8dd7295 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java @@ -1544,6 +1544,7 @@ public String getStatusFilePath() { return config.getStatusFilePath(); } + @SuppressWarnings("deprecation") public InternalConfigurationData getInternalConfigurationData() { return new InternalConfigurationData( config.getMetadataStoreUrl(), @@ -2000,6 +2001,7 @@ public synchronized void addPrometheusRawMetricsProvider(PrometheusRawMetricsPro } } + @SuppressWarnings("deprecation") private void startWorkerService(AuthenticationService authenticationService, AuthorizationService authorizationService) throws Exception { @@ -2078,6 +2080,7 @@ public MonotonicClock getMonotonicClock() { return monotonicClock; } + @SuppressWarnings("deprecation") public static WorkerConfig initializeWorkerConfigFromBrokerConfig(ServiceConfiguration brokerConfig, String workerConfigFile) throws IOException { WorkerConfig workerConfig = WorkerConfig.load(workerConfigFile); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java index 190ed01114329..21008e4c77c2a 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/AdminResource.java @@ -786,6 +786,7 @@ protected CompletableFuture getSchemaCompatibilityS }); } + @SuppressWarnings("deprecation") protected CompletableFuture getSchemaCompatibilityStrategyAsyncWithoutAuth() { CompletableFuture future = getTopicPoliciesAsyncWithRetry(topicName) .thenApply(op -> op.map(TopicPolicies::getSchemaCompatibilityStrategy).orElse(null)); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java index 0f626eb738581..1cded999be527 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/NamespacesBase.java @@ -1668,6 +1668,7 @@ protected CompletableFuture internalSetTopicDispatchRateAsync(DispatchRate })); } + @SuppressWarnings("deprecation") protected CompletableFuture internalDeleteTopicDispatchRateAsync() { return validateNamespacePolicyOperationAsync(namespaceName, PolicyName.RATE, PolicyOperation.WRITE) .thenCompose(__ -> updatePoliciesAsync(namespaceName, policies -> { @@ -2022,6 +2023,7 @@ protected void internalModifyEncryptionRequired(boolean encryptionRequired) { } } + @SuppressWarnings("deprecation") protected Boolean internalGetEncryptionRequired() { validateNamespacePolicyOperation(namespaceName, PolicyName.ENCRYPTION, PolicyOperation.READ); Policies policies = getNamespacePolicies(namespaceName); @@ -2607,6 +2609,7 @@ protected CompletableFuture internalSetAllowedTopicPropertyKeysForMetricsA } + @SuppressWarnings({"deprecation", "unchecked"}) private void mutatePolicy(Function policyTransformation, Function getter, String policyName) { @@ -2920,6 +2923,7 @@ protected void internalSetNamespaceResourceGroup(String rgName) { internalSetPolicies("resource_group_name", rgName); } + @SuppressWarnings("deprecation") protected void internalScanOffloadedLedgers(OffloaderObjectsScannerUtils.ScannerResultSink sink) throws Exception { log.info("internalScanOffloadedLedgers {}", namespaceName); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java index ad6854e24260b..bb94156eb8f44 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/PersistentTopicsBase.java @@ -974,6 +974,7 @@ protected void internalUnloadTopic(AsyncResponse asyncResponse, boolean authorit }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetDelayedDeliveryPolicies(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) @@ -1004,6 +1005,7 @@ protected CompletableFuture internalGetDelayedDeliveryP }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetOffloadPolicies(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> { @@ -1019,6 +1021,7 @@ protected CompletableFuture internalGetOffloadPolicies(bool }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalSetOffloadPolicies(OffloadPoliciesImpl offloadPoliciesToSet, boolean isGlobal) { return pulsar().getTopicPoliciesService() @@ -1027,6 +1030,7 @@ protected CompletableFuture internalSetOffloadPolicies(OffloadPoliciesImpl }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetInactiveTopicPolicies (boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) @@ -1051,6 +1055,7 @@ protected CompletableFuture internalSetOffloadPolicies(OffloadPoliciesImpl }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetMaxUnackedMessagesOnSubscription(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) @@ -1078,6 +1083,7 @@ protected CompletableFuture internalSetMaxUnackedMessagesOnSubscription(In }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetMaxUnackedMessagesOnConsumer(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getMaxUnackedMessagesOnConsumer) @@ -3116,6 +3122,7 @@ protected CompletableFuture internalGetBacklogAsync }); } + @SuppressWarnings("deprecation") protected CompletableFuture> internalGetBacklogQuota( boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) @@ -3351,6 +3358,7 @@ protected CompletableFuture internalRemoveReplicationClusters(boolean isGl })); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetDeduplication(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getDeduplicationEnabled) @@ -3370,6 +3378,7 @@ protected CompletableFuture internalSetDeduplication(Boolean enabledToSet, }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetSubscriptionExpirationTime(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getSubscriptionExpirationTimeInMinutes) @@ -3426,6 +3435,7 @@ private CompletableFuture getRetentionPoliciesAsync(TopicName .thenApply(policies -> policies.retention_policies); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetRetention(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getRetentionPolicies).orElseGet(() -> { @@ -3495,6 +3505,7 @@ protected CompletableFuture internalGetDispatcherPauseOnAckStatePersist .orElse(false)); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetPersistence(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getPersistence) @@ -3548,6 +3559,7 @@ protected CompletableFuture> internalGetMaxMessageSize(boolean .thenApply(op -> op.map(TopicPolicies::getMaxMessageSize)); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetMaxProducers(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getMaxProducerPerTopic) @@ -3589,6 +3601,7 @@ protected CompletableFuture internalSetMaxSubscriptionsPerTopic(Integer ma }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetReplicatorDispatchRate(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getReplicatorDispatchRate) @@ -3645,6 +3658,7 @@ protected CompletableFuture internalRemoveMaxProducers(boolean isGlobal) { }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetMaxConsumers(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getMaxConsumerPerTopic) @@ -4266,7 +4280,7 @@ public CompletableFuture getPartitionedTopicMetadata( */ public static CompletableFuture unsafeGetPartitionedTopicMetadataAsync( PulsarService pulsar, TopicName topicName) { - CompletableFuture metadataFuture = new CompletableFuture(); + CompletableFuture metadataFuture = new CompletableFuture<>(); // validates global-namespace contains local/peer cluster: if peer/local cluster present then lookup can // serve/redirect request else fail partitioned-metadata-request so, client fails while creating @@ -4541,6 +4555,7 @@ private CompletableFuture trimPartitionedTopic(AsyncResponse asyncResponse return FutureUtil.waitForAll(futures).thenAccept(asyncResponse::resume); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetDispatchRate(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getDispatchRate) @@ -4569,6 +4584,7 @@ protected CompletableFuture internalRemoveDispatchRate(boolean isGlobal) { }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetSubscriptionDispatchRate(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getSubscriptionDispatchRate) @@ -4663,6 +4679,7 @@ protected CompletableFuture internalRemoveMaxConsumersPerSubscription(bool }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetCompactionThreshold(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getCompactionThreshold) @@ -4735,6 +4752,7 @@ protected CompletableFuture internalRemovePublishRate(boolean isGlobal) { }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetSubscribeRate(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) .thenApply(op -> op.map(TopicPolicies::getSubscribeRate) @@ -5096,6 +5114,7 @@ protected CompletableFuture internalSetSchemaCompatibilityStrategy( }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetSchemaValidationEnforced(boolean applied) { // Schema validation enforced is typically a local policy return getTopicPoliciesAsyncWithRetry(topicName) @@ -5215,6 +5234,7 @@ protected CompletableFuture internalSetAutoSubscriptionCreation( }); } + @SuppressWarnings("deprecation") protected CompletableFuture internalGetAutoSubscriptionCreation(boolean applied, boolean isGlobal) { return getTopicPoliciesAsyncWithRetry(topicName, isGlobal) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java index 826b9c322e353..39c28185954a2 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ResourceGroupsBase.java @@ -138,6 +138,7 @@ protected void internalCreateOrUpdateResourceGroup(String rgName, ResourceGroup } } + @SuppressWarnings("deprecation") protected boolean internalCheckRgInUse(String rgName) { try { for (String tenant : tenantResources().listTenants()) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Bookies.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Bookies.java index c7b09ca9b0aa1..947228e0ebb13 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Bookies.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Bookies.java @@ -56,6 +56,7 @@ @Api(value = "/bookies", description = "Configure bookies rack placement", tags = "bookies") @Produces(MediaType.APPLICATION_JSON) @Slf4j +@SuppressWarnings("deprecation") public class Bookies extends AdminResource { private static final String PATH_SEPARATOR = "/"; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/BrokerStats.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/BrokerStats.java index 6f280e8d197f8..31b999c389430 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/BrokerStats.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/BrokerStats.java @@ -37,6 +37,7 @@ @Path("/broker-stats") @Api(value = "/broker-stats", description = "Stats for broker", tags = "broker-stats") @Produces(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class BrokerStats extends BrokerStatsBase { @GET diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Brokers.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Brokers.java index 088962e6ed098..71edaef5b455d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Brokers.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Brokers.java @@ -27,5 +27,6 @@ @Path("/brokers") @Api(value = "/brokers", description = "BrokersBase admin apis", tags = "brokers") @Produces(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class Brokers extends BrokersBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Clusters.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Clusters.java index 8b9d35c80939d..617f85780af49 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Clusters.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Clusters.java @@ -27,5 +27,6 @@ @Path("/clusters") @Api(value = "/clusters", description = "Cluster admin apis", tags = "clusters") @Produces(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class Clusters extends ClustersBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtNonPersistentTopics.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtNonPersistentTopics.java index 9f821ae7594df..11edff868071b 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtNonPersistentTopics.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtNonPersistentTopics.java @@ -47,6 +47,7 @@ @Path("/non-persistent") @Produces(MediaType.APPLICATION_JSON) @Api(value = "/non-persistent", description = "Non-Persistent topic admin apis", tags = "non-persistent topic") +@SuppressWarnings("deprecation") public class ExtNonPersistentTopics extends PersistentTopicsBase { @PUT diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtPersistentTopics.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtPersistentTopics.java index 2c449cb501062..46d393bfb4cc8 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtPersistentTopics.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ExtPersistentTopics.java @@ -49,6 +49,7 @@ @Path("/persistent") @Produces(MediaType.APPLICATION_JSON) @Api(value = "/persistent", description = "Persistent topic admin apis", tags = "persistent topic") +@SuppressWarnings("deprecation") public class ExtPersistentTopics extends PersistentTopicsBase { @PUT diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java index 84e0b8a48c94f..cc7e056286ee3 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Functions.java @@ -50,6 +50,7 @@ @Api(value = "/functions", description = "Functions admin apis", tags = "functions", hidden = true) @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class Functions extends AdminResource { FunctionsV2 functions() { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/MetadataMigration.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/MetadataMigration.java index 6b9a516fc8094..e86450ce60be2 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/MetadataMigration.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/MetadataMigration.java @@ -30,5 +30,6 @@ @Path("/metadata/migration") @Api(value = "/metadata/migration", description = "Metadata store migration admin APIs", tags = "metadata-migration") @Produces(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class MetadataMigration extends MetadataMigrationBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java index b770c078a2876..3147fb4a06e3d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Namespaces.java @@ -95,6 +95,7 @@ @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Api(value = "/namespaces", description = "Namespaces admin apis", tags = "namespaces") +@SuppressWarnings("deprecation") public class Namespaces extends NamespacesBase { @GET @@ -2468,6 +2469,7 @@ public void clearOffloadDeletionLag(@PathParam("tenant") String tenant, @ApiResponses(value = { @ApiResponse(code = 403, message = "Don't have admin permission"), @ApiResponse(code = 404, message = "Namespace doesn't exist"), @ApiResponse(code = 409, message = "Concurrent modification") }) + @SuppressWarnings("deprecation") public SchemaAutoUpdateCompatibilityStrategy getSchemaAutoUpdateCompatibilityStrategy( @PathParam("tenant") String tenant, @PathParam("namespace") String namespace) { @@ -2486,6 +2488,7 @@ public SchemaAutoUpdateCompatibilityStrategy getSchemaAutoUpdateCompatibilityStr @ApiResponse(code = 403, message = "Don't have admin permission"), @ApiResponse(code = 404, message = "Namespace doesn't exist"), @ApiResponse(code = 409, message = "Concurrent modification")}) + @SuppressWarnings("deprecation") public void setSchemaAutoUpdateCompatibilityStrategy( @PathParam("tenant") String tenant, @PathParam("namespace") String namespace, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java index 16cbc7104d4d8..c92d1147c807f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/NonPersistentTopics.java @@ -70,6 +70,7 @@ @Path("/non-persistent") @Produces(MediaType.APPLICATION_JSON) @Api(value = "/non-persistent", description = "Non-Persistent topic admin apis", tags = "non-persistent topic") +@SuppressWarnings("deprecation") public class NonPersistentTopics extends PersistentTopics { private static final Logger log = LoggerFactory.getLogger(NonPersistentTopics.class); @@ -370,6 +371,7 @@ public void unloadTopic( @ApiResponse(code = 500, message = "Internal server error"), @ApiResponse(code = 503, message = "Failed to validate global cluster configuration"), }) + @SuppressWarnings("deprecation") public void getList( @Suspended final AsyncResponse asyncResponse, @ApiParam(value = "Specify the tenant", required = true) @@ -449,6 +451,7 @@ public void getList( @ApiResponse(code = 500, message = "Internal server error"), @ApiResponse(code = 503, message = "Failed to validate global cluster configuration"), }) + @SuppressWarnings("deprecation") public void getListFromBundle( @Suspended final AsyncResponse asyncResponse, @ApiParam(value = "Specify the tenant", required = true) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java index 3d54d73ff45b2..5d932ff68a1d4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/PersistentTopics.java @@ -102,6 +102,7 @@ @Path("/persistent") @Produces(MediaType.APPLICATION_JSON) @Api(value = "/persistent", description = "Persistent topic admin apis", tags = "persistent topic") +@SuppressWarnings("deprecation") public class PersistentTopics extends PersistentTopicsBase { @GET @@ -2545,6 +2546,7 @@ public void removeSubscriptionExpirationTime(@Suspended final AsyncResponse asyn @ApiResponse(code = 404, message = "Namespace or topic doesn't exist"), @ApiResponse(code = 405, message = "Topic level policy is disabled, enable the topic level policy and retry")}) + @SuppressWarnings("deprecation") public void getMessageTTL(@Suspended final AsyncResponse asyncResponse, @PathParam("tenant") String tenant, @PathParam("namespace") String namespace, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java index 58f593e20ce3b..396a77fee81c9 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceGroups.java @@ -38,6 +38,7 @@ @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Api(value = "/resourcegroups", description = "ResourceGroups admin apis", tags = "resourcegroups") +@SuppressWarnings("deprecation") public class ResourceGroups extends ResourceGroupsBase { @GET diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java index d2884e8ea6f7e..b1825efa7a0d4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/ResourceQuotas.java @@ -43,6 +43,7 @@ @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Api(value = "/resource-quotas", description = "Quota admin APIs", tags = "resource-quotas") +@SuppressWarnings("deprecation") public class ResourceQuotas extends ResourceQuotasBase { @GET diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/SchemasResource.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/SchemasResource.java index 07758436f6ca7..90591ee394bf4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/SchemasResource.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/SchemasResource.java @@ -61,6 +61,7 @@ tags = "schemas" ) @Slf4j +@SuppressWarnings("deprecation") public class SchemasResource extends SchemasResourceBase { @VisibleForTesting diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Tenants.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Tenants.java index ebd02dffa0921..59525e6fe530c 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Tenants.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v2/Tenants.java @@ -29,5 +29,6 @@ @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Api(value = "/tenants", description = "Tenant admin apis", tags = "tenants") +@SuppressWarnings("deprecation") public class Tenants extends TenantsBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Functions.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Functions.java index e4d3b88c292f5..78b581de0c06d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Functions.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Functions.java @@ -29,5 +29,6 @@ @Api(value = "/functions", description = "Functions admin apis", tags = "functions") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class Functions extends FunctionsBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sinks.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sinks.java index 35c777592bdb6..0eb077f2b117f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sinks.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sinks.java @@ -29,5 +29,6 @@ @Api(value = "/sinks", description = "Sinks admin apis", tags = "sinks") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class Sinks extends SinksBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sources.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sources.java index e0f533799811a..57aa223f44202 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sources.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Sources.java @@ -29,5 +29,6 @@ @Api(value = "/sources", description = "Sources admin apis", tags = "sources") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) +@SuppressWarnings("deprecation") public class Sources extends SourcesBase { } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java index ab1787d2b2cd3..26d63d804958b 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/v3/Transactions.java @@ -63,6 +63,7 @@ @Consumes(MediaType.APPLICATION_JSON) @Api(value = "/transactions", description = "Transactions admin apis", tags = "transactions") @Slf4j +@SuppressWarnings("deprecation") public class Transactions extends TransactionsBase { @GET diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java index 9ed304c73312d..91964f0eb90c8 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java @@ -235,9 +235,9 @@ private synchronized long recoverBucketSnapshot() throws RecoverDelayedDeliveryT }); log.info("[{}] Recover delayed message index bucket snapshot finish, buckets: {}, numberDelayedMessages: {}", - dispatcher.getName(), immutableBucketMap.size(), numberDelayedMessages.getValue()); + dispatcher.getName(), immutableBucketMap.size(), numberDelayedMessages.longValue()); - return numberDelayedMessages.getValue(); + return numberDelayedMessages.longValue(); } /** diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/ImmutableBucket.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/ImmutableBucket.java index e9032572348eb..72b4258811d30 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/ImmutableBucket.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/ImmutableBucket.java @@ -168,7 +168,7 @@ private void recoverDelayedIndexBitMapAndNumber(int startSnapshotIndex, } // optimize bm delayedIndexBitMap.values().forEach(RoaringBitmap::runOptimize); - setNumberBucketDelayedMessages(numberMessages.getValue()); + setNumberBucketDelayedMessages(numberMessages.longValue()); } CompletableFuture> getRemainSnapshotSegment() { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtils.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtils.java index 0d0d33fa1dfc6..4357e35667b4e 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtils.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorUtils.java @@ -117,6 +117,7 @@ public BrokerInterceptorDefinitions searchForInterceptors(String interceptorsDir * * @param metadata the broker interceptors definition. */ + @SuppressWarnings("unchecked") BrokerInterceptorWithClassLoader load(BrokerInterceptorMetadata metadata, String narExtractionDirectory) throws IOException { final File narFile = metadata.getArchivePath().toAbsolutePath().normalize().toFile(); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.java index 849f7aa39f0ef..7c6d40bb35688 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptorWithClassLoader.java @@ -54,6 +54,7 @@ public class BrokerInterceptorWithClassLoader implements BrokerInterceptor { private final NarClassLoader narClassLoader; @Override + @SuppressWarnings("deprecation") public void beforeSendMessage(Subscription subscription, Entry entry, long[] ackSet, @@ -69,6 +70,7 @@ public void beforeSendMessage(Subscription subscription, } @Override + @SuppressWarnings("deprecation") public void beforeSendMessage(Subscription subscription, Entry entry, long[] ackSet, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptors.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptors.java index 3c448529de9e9..079774e233329 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptors.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/intercept/BrokerInterceptors.java @@ -109,6 +109,7 @@ public void onMessagePublish(Producer producer, } @Override + @SuppressWarnings("deprecation") public void beforeSendMessage(Subscription subscription, Entry entry, long[] ackSet, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java index af95df60174db..16798ef18bc8e 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImpl.java @@ -593,8 +593,8 @@ private CompletableFuture> dedupeLookupRequest( return future; }); } finally { - if (newFutureCreated.getValue() != null) { - newFutureCreated.getValue().whenComplete((v, ex) -> { + if (newFutureCreated.get() != null) { + newFutureCreated.get().whenComplete((v, ex) -> { if (ex != null) { assignCounter.incrementFailure(); } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java index c462edc634603..0f2af55b39675 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateChannelImpl.java @@ -51,6 +51,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -444,7 +445,7 @@ public boolean isOwner(String serviceUnit, String targetBrokerId) { return false; } var owner = ownerFuture.join(); - if (owner.isPresent() && StringUtils.equals(targetBrokerId, owner.get())) { + if (owner.isPresent() && Objects.equals(targetBrokerId, owner.get())) { return true; } return false; @@ -1041,10 +1042,10 @@ private CompletableFuture dedupeGetOwnerRequest(String serviceUnit) { // Defer this request til the inflight ownership change is complete. requested.setValue(deferGetOwner(serviceUnit)); } - return requested.getValue(); + return requested.get(); }); } finally { - var future = requested.getValue(); + var future = requested.get(); if (future != null) { future.whenComplete((__, e) -> { getOwnerRequests.remove(serviceUnit); @@ -1417,7 +1418,7 @@ private void scheduleCleanup(String broker, long delayInSecs) { return future; }); } finally { - var future = scheduled.getValue(); + var future = scheduled.get(); if (future != null) { future.whenComplete((v, ex) -> { cleanupJobs.remove(broker); @@ -1619,8 +1620,8 @@ private void doCleanup(String broker, boolean gracefully) { var stateData = etr.getValue(); var serviceUnit = etr.getKey(); var state = state(stateData); - if (StringUtils.equals(broker, stateData.dstBroker()) && isActiveState(state) - || StringUtils.equals(broker, stateData.sourceBroker()) && isInFlightState(state)) { + if (Objects.equals(broker, stateData.dstBroker()) && isActiveState(state) + || Objects.equals(broker, stateData.sourceBroker()) && isInFlightState(state)) { if (serviceUnit.startsWith(SYSTEM_NAMESPACE.toString())) { orphanSystemServiceUnits.put(serviceUnit, stateData); } else { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateDataConflictResolver.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateDataConflictResolver.java index 3e43237f4c00e..86bf83a29ae38 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateDataConflictResolver.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateDataConflictResolver.java @@ -24,9 +24,9 @@ import static org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitState.StorageType.SystemTopic; import static org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitStateData.state; import com.google.common.annotations.VisibleForTesting; +import java.util.Objects; import java.util.function.BiConsumer; import lombok.Setter; -import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.client.api.Schema; import org.apache.pulsar.common.topics.TopicCompactionStrategy; @@ -136,8 +136,8 @@ public boolean shouldKeepLeft(ServiceUnitStateData from, ServiceUnitStateData to } private boolean notEquals(ServiceUnitStateData from, ServiceUnitStateData to) { - return !StringUtils.equals(from.dstBroker(), to.dstBroker()) - || !StringUtils.equals(from.sourceBroker(), to.sourceBroker()); + return !Objects.equals(from.dstBroker(), to.dstBroker()) + || !Objects.equals(from.sourceBroker(), to.sourceBroker()); } private boolean invalidUnload(ServiceUnitStateData from, ServiceUnitStateData to) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateTableViewImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateTableViewImpl.java index d1ac87fdf3c8b..6073403435175 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateTableViewImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/channel/ServiceUnitStateTableViewImpl.java @@ -52,6 +52,7 @@ public class ServiceUnitStateTableViewImpl extends ServiceUnitStateTableViewBase private volatile TableView tableview; @Override + @SuppressWarnings("deprecation") public void start(PulsarService pulsar, BiConsumer tailItemListener, BiConsumer existingItemListener, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadData.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadData.java index 95d89932ed96d..0ed6732c28e7b 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadData.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/data/BrokerLoadData.java @@ -181,6 +181,7 @@ private double getMaxResourceUsageWithWeight(final double cpuWeight, final doubl bandwidthOut.percentUsage() * bandwidthOutWeight) / 100; } + @SuppressWarnings("deprecation") private void updateWeightedMaxEMA(ServiceConfiguration conf) { var historyPercentage = conf.getLoadBalancerHistoryResourcePercentage(); var weightedMax = getMaxResourceUsageWithWeight( @@ -218,6 +219,7 @@ public void clear() { reportedAt = 0; } + @SuppressWarnings("deprecation") public String toString(ServiceConfiguration conf) { return String.format("cpu= %.2f%%, memory= %.2f%%, directMemory= %.2f%%, " + "bandwidthIn= %.2f%%, bandwidthOut= %.2f%%, " diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundles.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundles.java index 481e907d04439..fdbafef608756 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundles.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/models/TopKBundles.java @@ -112,6 +112,7 @@ public void update(Map bundleStats, int topk) { } } + @SuppressWarnings("unchecked") public static void partitionSort(List> arr, int k) { int start = 0; int end = arr.size() - 1; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporter.java index 3061969120bb3..bed8f9cb71185 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporter.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/BrokerLoadDataReporter.java @@ -19,11 +19,11 @@ package org.apache.pulsar.broker.loadbalance.extensions.reporter; import com.google.common.annotations.VisibleForTesting; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.broker.ServiceConfiguration; @@ -209,13 +209,13 @@ public void handleEvent(String serviceUnit, ServiceUnitStateData data, Throwable ServiceUnitState state = ServiceUnitStateData.state(data); switch (state) { case Releasing, Splitting -> { - if (StringUtils.equals(data.sourceBroker(), brokerId)) { + if (Objects.equals(data.sourceBroker(), brokerId)) { localData.clear(); tombstone(); } } case Owned -> { - if (StringUtils.equals(data.dstBroker(), brokerId)) { + if (Objects.equals(data.dstBroker(), brokerId)) { localData.clear(); tombstone(); } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporter.java index 43e05ad1ac972..f2e2ea219267a 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporter.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/reporter/TopBundleLoadDataReporter.java @@ -19,9 +19,9 @@ package org.apache.pulsar.broker.loadbalance.extensions.reporter; import com.google.common.annotations.VisibleForTesting; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.broker.loadbalance.extensions.ExtensibleLoadManagerImpl; import org.apache.pulsar.broker.loadbalance.extensions.channel.ServiceUnitState; @@ -129,12 +129,12 @@ public void handleEvent(String serviceUnit, ServiceUnitStateData data, Throwable ServiceUnitState state = ServiceUnitStateData.state(data); switch (state) { case Releasing, Splitting -> { - if (StringUtils.equals(data.sourceBroker(), brokerId)) { + if (Objects.equals(data.sourceBroker(), brokerId)) { tombstone(); } } case Owned -> { - if (StringUtils.equals(data.dstBroker(), brokerId)) { + if (Objects.equals(data.dstBroker(), brokerId)) { tombstone(); } } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/store/TableViewLoadDataStoreImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/store/TableViewLoadDataStoreImpl.java index 3ce44a1e65a73..2f7615a279f7f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/store/TableViewLoadDataStoreImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/extensions/store/TableViewLoadDataStoreImpl.java @@ -165,6 +165,7 @@ private synchronized void closeProducer() throws IOException { } } @Override + @SuppressWarnings("deprecation") public synchronized void startTableView() throws LoadDataStoreException { validateState(); if (tableView == null) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/AvgShedder.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/AvgShedder.java index 53f5c014761be..0f289903abde9 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/AvgShedder.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/AvgShedder.java @@ -191,7 +191,7 @@ private void selectBundleForUnloading(LoadData loadData, String overloadedBroker ).forEach(e -> { Map.Entry bundle = e.getLeft(); double traffic = e.getRight(); - if (traffic > 0 && traffic <= trafficMarkedToOffload.getValue()) { + if (traffic > 0 && traffic <= trafficMarkedToOffload.doubleValue()) { selectedBundlesCache.put(overloadedBroker, bundle.getKey()); bundleBrokerMap.put(bundle.getValue(), underloadedBroker); trafficMarkedToOffload.add(-traffic); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/GenericBrokerHostUsageImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/GenericBrokerHostUsageImpl.java index 1a28bd7a39269..88bdf10fd4d78 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/GenericBrokerHostUsageImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/GenericBrokerHostUsageImpl.java @@ -66,6 +66,7 @@ public SystemResourceUsage getBrokerHostUsage() { return usage; } + @SuppressWarnings("deprecation") private synchronized void checkCpuLoad() { cpuUsageSum += systemBean.getSystemCpuLoad(); cpuUsageCount++; @@ -103,6 +104,7 @@ private ResourceUsage getCpuUsage() { return new ResourceUsage(getTotalCpuUsage() * totalCpuLimit, totalCpuLimit); } + @SuppressWarnings("deprecation") private ResourceUsage getMemUsage() { double total = ((double) systemBean.getTotalPhysicalMemorySize()) / (1024 * 1024); double free = ((double) systemBean.getFreePhysicalMemorySize()) / (1024 * 1024); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LeastResourceUsageWithWeight.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LeastResourceUsageWithWeight.java index 2baf58c9f05b5..71ec57b1a4611 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LeastResourceUsageWithWeight.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LeastResourceUsageWithWeight.java @@ -50,6 +50,7 @@ public LeastResourceUsageWithWeight() { } // A broker's max resource usage with weight using its historical load and short-term load data with weight. + @SuppressWarnings("deprecation") private double getMaxResourceUsageWithWeight(final String broker, final BrokerData brokerData, final ServiceConfiguration conf) { final double overloadThreshold = conf.getLoadBalancerBrokerOverloadedThresholdPercentage() / 100.0; @@ -87,6 +88,7 @@ private double getMaxResourceUsageWithWeight(final String broker, final BrokerDa * @param conf The service configuration. * @return the max resource usage with weight of broker */ + @SuppressWarnings("deprecation") private double updateAndGetMaxResourceUsageWithWeight(String broker, BrokerData brokerData, ServiceConfiguration conf) { final double historyPercentage = conf.getLoadBalancerHistoryResourcePercentage(); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LinuxBrokerHostUsageImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LinuxBrokerHostUsageImpl.java index 86634c4fdb2e9..a63dfd71b1169 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LinuxBrokerHostUsageImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/LinuxBrokerHostUsageImpl.java @@ -174,6 +174,7 @@ private double getTotalCpuUsageForEntireHost() { return currentUsage; } + @SuppressWarnings("deprecation") private ResourceUsage getMemUsage() { double total = ((double) systemBean.getTotalPhysicalMemorySize()) / (1024 * 1024); double free = ((double) systemBean.getFreePhysicalMemorySize()) / (1024 * 1024); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java index b577e0f628072..ae01847487af8 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java @@ -358,6 +358,7 @@ private boolean getDynamicConfigurationBoolean(String path, String settingName, return defaultValue; } + @SuppressWarnings("deprecation") private String getLoadBalancerPlacementStrategy() { String strategy = this.getDynamicConfigurationFromStore(LOADBALANCER_DYNAMIC_SETTING_STRATEGY_ZPATH, SETTING_NAME_STRATEGY, pulsar.getConfiguration().getLoadBalancerPlacementStrategy()); @@ -377,6 +378,7 @@ public boolean isCentralized() { return false; } + @SuppressWarnings("deprecation") private long getLoadBalancerBrokerUnderloadedThresholdPercentage() { return (long) this.getDynamicConfigurationDouble(LOADBALANCER_DYNAMIC_SETTING_UNDERLOAD_THRESHOLD_ZPATH, SETTING_NAME_UNDERLOAD_THRESHOLD, @@ -389,6 +391,7 @@ private long getLoadBalancerBrokerOverloadedThresholdPercentage() { pulsar.getConfiguration().getLoadBalancerBrokerOverloadedThresholdPercentage()); } + @SuppressWarnings("deprecation") private long getLoadBalancerBrokerComfortLoadThresholdPercentage() { return (long) this.getDynamicConfigurationDouble(LOADBALANCER_DYNAMIC_SETTING_COMFORT_LOAD_THRESHOLD_ZPATH, SETTING_NAME_COMFORTLOAD_THRESHOLD, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/UniformLoadShedder.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/UniformLoadShedder.java index 1f292c0e8faf3..9b6708cc89847 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/UniformLoadShedder.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/UniformLoadShedder.java @@ -76,22 +76,22 @@ public Multimap findBundlesForUnloading(final LoadData loadData, double msgRate = data.getLocalData().getMsgRateIn() + data.getLocalData().getMsgRateOut(); double throughputRate = data.getLocalData().getMsgThroughputIn() + data.getLocalData().getMsgThroughputOut(); - if (msgRate > maxMsgRate.getValue()) { + if (msgRate > maxMsgRate.doubleValue()) { msgRateOverloadedBroker.setValue(broker); maxMsgRate.setValue(msgRate); } - if (throughputRate > maxThroughput.getValue()) { + if (throughputRate > maxThroughput.doubleValue()) { msgThroughputOverloadedBroker.setValue(broker); maxThroughput.setValue(throughputRate); } - if (msgRate < minMsgRate.getValue()) { + if (msgRate < minMsgRate.doubleValue()) { msgRateUnderloadedBroker.setValue(broker); minMsgRate.setValue(msgRate); } - if (throughputRate < minThroughput.getValue()) { + if (throughputRate < minThroughput.doubleValue()) { msgThroughputUnderloadedBroker.setValue(broker); minThroughput.setValue(throughputRate); } @@ -100,15 +100,15 @@ public Multimap findBundlesForUnloading(final LoadData loadData, // find the difference between two brokers based on msgRate and throughout and check if the load distribution // discrepancy is higher than threshold. if that matches then try to unload bundle from overloaded brokers to // give chance of uniform load distribution. - if (minMsgRate.getValue() <= EPS && minMsgRate.getValue() >= -EPS) { + if (minMsgRate.doubleValue() <= EPS && minMsgRate.doubleValue() >= -EPS) { minMsgRate.setValue(1.0); } - if (minThroughput.getValue() <= EPS && minThroughput.getValue() >= -EPS) { + if (minThroughput.doubleValue() <= EPS && minThroughput.doubleValue() >= -EPS) { minThroughput.setValue(1.0); } - double msgRateDifferencePercentage = ((maxMsgRate.getValue() - minMsgRate.getValue()) * 100) - / (minMsgRate.getValue()); - double msgThroughputDifferenceRate = maxThroughput.getValue() / minThroughput.getValue(); + double msgRateDifferencePercentage = ((maxMsgRate.doubleValue() - minMsgRate.doubleValue()) * 100) + / (minMsgRate.doubleValue()); + double msgThroughputDifferenceRate = maxThroughput.doubleValue() / minThroughput.doubleValue(); // if the threshold matches then find out how much load needs to be unloaded by considering number of msgRate // and throughput. @@ -121,22 +121,22 @@ public Multimap findBundlesForUnloading(final LoadData loadData, if (isMsgRateThresholdExceeded || isMsgThroughputThresholdExceeded) { MutableInt msgRateRequiredFromUnloadedBundles = new MutableInt( - (int) ((maxMsgRate.getValue() - minMsgRate.getValue()) * conf.getMaxUnloadPercentage())); + (int) ((maxMsgRate.doubleValue() - minMsgRate.doubleValue()) * conf.getMaxUnloadPercentage())); MutableInt msgThroughputRequiredFromUnloadedBundles = new MutableInt( - (int) ((maxThroughput.getValue() - minThroughput.getValue()) + (int) ((maxThroughput.doubleValue() - minThroughput.doubleValue()) * conf.getMaxUnloadPercentage())); if (isMsgRateThresholdExceeded) { if (log.isDebugEnabled()) { log.debug("Found bundles for uniform load balancing. " + "msgRate overloaded broker: {} with msgRate: {}, " + "msgRate underloaded broker: {} with msgRate: {}", - msgRateOverloadedBroker.getValue(), maxMsgRate.getValue(), - msgRateUnderloadedBroker.getValue(), minMsgRate.getValue()); + msgRateOverloadedBroker.get(), maxMsgRate.doubleValue(), + msgRateUnderloadedBroker.get(), minMsgRate.doubleValue()); } LocalBrokerData overloadedBrokerData = - brokersData.get(msgRateOverloadedBroker.getValue()).getLocalData(); + brokersData.get(msgRateOverloadedBroker.get()).getLocalData(); if (overloadedBrokerData.getBundles().size() > 1 - && (msgRateRequiredFromUnloadedBundles.getValue() >= conf.getMinUnloadMessage())) { + && (msgRateRequiredFromUnloadedBundles.intValue() >= conf.getMinUnloadMessage())) { // Sort bundles by msgRate, then pick the bundle which can help to reduce load uniformly with // under-loaded broker loadBundleData.entrySet().stream() @@ -154,10 +154,10 @@ public Multimap findBundlesForUnloading(final LoadData loadData, } String bundle = e.getLeft(); double bundleMsgRate = e.getRight(); - if (bundleMsgRate <= msgRateRequiredFromUnloadedBundles.getValue()) { + if (bundleMsgRate <= msgRateRequiredFromUnloadedBundles.intValue()) { log.info("Found bundle to unload with msgRate {}", bundleMsgRate); msgRateRequiredFromUnloadedBundles.add(-bundleMsgRate); - selectedBundlesCache.put(msgRateOverloadedBroker.getValue(), bundle); + selectedBundlesCache.put(msgRateOverloadedBroker.get(), bundle); } }); } @@ -166,14 +166,14 @@ public Multimap findBundlesForUnloading(final LoadData loadData, log.debug("Found bundles for uniform load balancing. " + "msgThroughput overloaded broker: {} with msgThroughput {}, " + "msgThroughput underloaded broker: {} with msgThroughput: {}", - msgThroughputOverloadedBroker.getValue(), maxThroughput.getValue(), - msgThroughputUnderloadedBroker.getValue(), minThroughput.getValue()); + msgThroughputOverloadedBroker.get(), maxThroughput.doubleValue(), + msgThroughputUnderloadedBroker.get(), minThroughput.doubleValue()); } LocalBrokerData overloadedBrokerData = - brokersData.get(msgThroughputOverloadedBroker.getValue()).getLocalData(); + brokersData.get(msgThroughputOverloadedBroker.get()).getLocalData(); if (overloadedBrokerData.getBundles().size() > 1 && - msgThroughputRequiredFromUnloadedBundles.getValue() >= conf.getMinUnloadMessageThroughput()) { + msgThroughputRequiredFromUnloadedBundles.intValue() >= conf.getMinUnloadMessageThroughput()) { // Sort bundles by throughput, then pick the bundle which can help to reduce load uniformly with // under-loaded broker loadBundleData.entrySet().stream() @@ -192,10 +192,10 @@ public Multimap findBundlesForUnloading(final LoadData loadData, } String bundle = e.getLeft(); double msgThroughput = e.getRight(); - if (msgThroughput <= msgThroughputRequiredFromUnloadedBundles.getValue()) { + if (msgThroughput <= msgThroughputRequiredFromUnloadedBundles.intValue()) { log.info("Found bundle to unload with msgThroughput {}", msgThroughput); msgThroughputRequiredFromUnloadedBundles.add(-msgThroughput); - selectedBundlesCache.put(msgThroughputOverloadedBroker.getValue(), bundle); + selectedBundlesCache.put(msgThroughputOverloadedBroker.get(), bundle); } }); } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java index c16c9338bf994..d9e076a00022e 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java @@ -409,6 +409,7 @@ public void registerBootstrapNamespaces() throws PulsarServerException { * @return true if the namespace was successfully registered, false otherwise * @throws PulsarServerException if an error occurs when registering the namespace */ + @SuppressWarnings("deprecation") public boolean registerNamespace(NamespaceName nsname, boolean ensureOwned) throws PulsarServerException { try { // all pre-registered namespace is assumed to have bundles disabled @@ -846,6 +847,7 @@ public CompletableFuture isNamespaceBundleOwned(NamespaceBundle bundle) return pulsar.getLocalMetadataStore().exists(ServiceUnitUtils.path(bundle)); } + @SuppressWarnings("deprecation") public CompletableFuture> getOwnedNameSpacesStatusAsync() { return pulsar.getPulsarResources().getNamespaceResources().getIsolationPolicies() .getIsolationDataPoliciesAsync(pulsar.getConfiguration().getClusterName()) @@ -1181,6 +1183,7 @@ public OwnershipCache getOwnershipCache() { return ownershipCache; } + @SuppressWarnings("deprecation") public Set getOwnedServiceUnits() { if (ExtensibleLoadManagerImpl.isLoadManagerExtensionEnabled(pulsar)) { ExtensibleLoadManagerImpl extensibleLoadManager = ExtensibleLoadManagerImpl.get(loadManager.get()); @@ -1549,7 +1552,7 @@ private CompletableFuture> getListOfUserTopicsInternal( initializedByCurrentThread.setTrue(); return topicsSupplier.get().thenApplyAsync(TopicList::filterSystemTopic, pulsar.getExecutor()); }); - if (initializedByCurrentThread.getValue()) { + if (initializedByCurrentThread.booleanValue()) { queryRes.whenComplete((ignore, ex) -> { inProgressQueryUserTopics.remove(key, queryRes); }); @@ -1663,6 +1666,7 @@ private CompletableFuture> getNonPersistentTopicsFromPeerCluster(Cl .thenApply(GetTopicsResult::getTopics); } + @SuppressWarnings("deprecation") public PulsarClientImpl getNamespaceClient(ClusterDataImpl cluster) { PulsarClientImpl client = namespaceClients.get(cluster); if (client != null) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtils.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtils.java index b66f493555886..9773d1f4066f8 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtils.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerUtils.java @@ -117,6 +117,7 @@ public static ProtocolHandlerDefinitions searchForHandlers(String handlersDirect * @param metadata the protocol handler definition. * @return */ + @SuppressWarnings("unchecked") static ProtocolHandlerWithClassLoader load(ProtocolHandlerMetadata metadata, String narExtractionDirectory) throws IOException { final File narFile = metadata.getArchivePath().toAbsolutePath().normalize().toFile(); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/AsyncTokenBucketBuilder.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/AsyncTokenBucketBuilder.java index 9c0f5f5605c76..d57f763c50c12 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/AsyncTokenBucketBuilder.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/qos/AsyncTokenBucketBuilder.java @@ -27,6 +27,7 @@ public abstract class AsyncTokenBucketBuilder buildMessage(ProducerMessages producerMessages, Schema schema, String producerName, TopicName topicName, SchemaVersion schemaVersion) { List messages; @@ -692,6 +693,7 @@ private List buildMessage(ProducerMessages producerMessages, Schema sch } // Encode message with corresponding schema, do necessary conversion before encoding + @SuppressWarnings("unchecked") private byte[] encodeWithSchema(String input, Schema schema) { try { switch (schema.getSchemaInfo().getType()) { 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 c5e001692f2f3..222e1f14f6adb 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 @@ -122,6 +122,7 @@ public int filterEntriesForConsumer(List entries, EntryBatchSiz * @see AbstractBaseDispatcher#filterEntriesForConsumer(List, EntryBatchSizes, SendMessageInfo, * EntryBatchIndexesAcks, ManagedCursor, boolean, Consumer) */ + @SuppressWarnings("deprecation") public int filterEntriesForConsumer(@Nullable MessageMetadata[] metadataArray, int startOffset, List entries, EntryBatchSizes batchSizes, SendMessageInfo sendMessageInfo, 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 656ed9a4e8ac4..28e3ba7d7779a 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 @@ -20,13 +20,13 @@ import com.google.common.annotations.VisibleForTesting; import io.opentelemetry.api.common.Attributes; +import java.util.Objects; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; import lombok.Getter; import org.apache.bookkeeper.mledger.Position; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.pulsar.broker.PulsarServerException; @@ -107,6 +107,7 @@ public enum State { Terminated; } + @SuppressWarnings("deprecation") public AbstractReplicator(String localCluster, Topic localTopic, String remoteCluster, String remoteTopicName, String replicatorPrefix, BrokerService brokerService, PulsarClientImpl replicationClient, PulsarAdmin replicationAdmin) @@ -125,9 +126,9 @@ public AbstractReplicator(String localCluster, Topic localTopic, String remoteCl this.producer = null; this.producerQueueSize = brokerService.pulsar().getConfiguration().getReplicationProducerQueueSize(); this.replicatorId = String.format("%s | %s", - StringUtils.equals(localTopicName, remoteTopicName) ? localTopicName : + Objects.equals(localTopicName, remoteTopicName) ? localTopicName : localTopicName + "-->" + remoteTopicName, - StringUtils.equals(localCluster, remoteCluster) ? localCluster : localCluster + "-->" + remoteCluster + Objects.equals(localCluster, remoteCluster) ? localCluster : localCluster + "-->" + remoteCluster ); this.producerBuilder = replicationClient.newProducer(Schema.AUTO_PRODUCE_BYTES()) // .topic(remoteTopicName) @@ -350,6 +351,7 @@ protected void afterDisconnected() {} /** * This method only be used by {@link PersistentTopic#checkGC} now. */ + @SuppressWarnings("unchecked") protected CompletableFuture closeProducerAsync(boolean closeTheStartingProducer) { Pair setDisconnectingRes = compareSetAndGetState(State.Started, State.Disconnecting); if (!setDisconnectingRes.getLeft()) { @@ -427,6 +429,7 @@ protected CompletableFuture doCloseProducerAsync(Producer producer protected abstract void beforeTerminate(); + @SuppressWarnings("unchecked") public CompletableFuture terminate() { if (!tryChangeStatusToTerminating()) { log.info("[{}] Skip current termination since other thread is doing termination, state : {}", replicatorId, 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 8be1002b3a8db..2e26e45444bb9 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 @@ -377,6 +377,7 @@ private Integer normalizeValue(Integer policyValue) { return policyValue != null && policyValue < 0 ? null : policyValue; } + @SuppressWarnings("deprecation") private void updateNamespaceDispatchRate(Policies namespacePolicies, String cluster) { DispatchRateImpl dispatchRate = namespacePolicies.topicDispatchRate.get(cluster); if (dispatchRate == null) { @@ -400,6 +401,7 @@ private void updateNamespaceReplicatorDispatchRate(Policies namespacePolicies, S .updateNamespaceValue(DispatchRateImpl.normalize(namespacePolicies.replicatorDispatchRate.get(cluster))); } + @SuppressWarnings("deprecation") private void updateSchemaCompatibilityStrategyNamespaceValue(Policies namespacePolicies){ if (isSystemTopic()) { return; 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 f04570c5441cd..600dd469d8948 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 @@ -48,6 +48,7 @@ public class BacklogQuotaManager { private final BacklogQuotaImpl defaultQuota; private final NamespaceResources namespaceResources; + @SuppressWarnings("deprecation") public BacklogQuotaManager(PulsarService pulsar) { double backlogQuotaGB = pulsar.getConfiguration().getBacklogQuotaDefaultLimitGB(); this.defaultQuota = BacklogQuotaImpl.builder() 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 d6226254f3c45..72651b7927b45 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 @@ -494,11 +494,12 @@ public BrokerService(PulsarService pulsar, EventLoopGroup eventLoopGroup) throws } protected DispatchRateLimiterFactory createDispatchRateLimiterFactory(ServiceConfiguration config) - throws ClassNotFoundException, InstantiationException, IllegalAccessException { + throws Exception { String dispatchRateLimiterFactoryClassName = config.getDispatchRateLimiterFactoryClassName(); if (isNotBlank(dispatchRateLimiterFactoryClassName)) { try { - return (DispatchRateLimiterFactory) Class.forName(dispatchRateLimiterFactoryClassName).newInstance(); + return (DispatchRateLimiterFactory) Class.forName(dispatchRateLimiterFactoryClassName) + .getDeclaredConstructor().newInstance(); } catch (Exception e) { log.warn("Failed to initialize dispatch rate limiter factory class {}", dispatchRateLimiterFactoryClassName, e); @@ -603,6 +604,7 @@ public Map getTopicStats(NamespaceBundle bundle) { return topicStatsMap; } + @SuppressWarnings("deprecation") public void start() throws Exception { this.producerNameGenerator = new DistributedIdGenerator(pulsar.getCoordinationService(), PRODUCER_NAME_GENERATOR_PATH, pulsar.getConfiguration().getClusterName()); @@ -1490,6 +1492,7 @@ private CompletableFuture> createNonPersistentTopic(String topic return topicFuture; } + @SuppressWarnings("deprecation") public PulsarClient getReplicationClient(String cluster, Optional clusterDataOp) { PulsarClient client = replicationClients.get(cluster); if (client != null) { @@ -2739,6 +2742,7 @@ private void handleDynamicConfigurationUpdates() { } } + @SuppressWarnings("unchecked") private void configValueChanged(String configKey, String newValueStr) { ConfigField configFieldWrapper = dynamicConfigurationMap.get(configKey); if (configFieldWrapper == null) { @@ -3998,7 +4002,8 @@ private TopicFactory createPersistentTopicFactory() throws Exception { String topicFactoryClassName = pulsar.getConfig().getTopicFactoryClassName(); if (StringUtils.isNotBlank(topicFactoryClassName)) { try { - return (TopicFactory) Class.forName(topicFactoryClassName).newInstance(); + return (TopicFactory) Class.forName(topicFactoryClassName) + .getDeclaredConstructor().newInstance(); } catch (Exception e) { log.warn("Failed to initialize topic factory class {}", topicFactoryClassName, e); throw e; 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 27a7dddf29f3d..048c4c4b7fcb1 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 @@ -960,6 +960,7 @@ public void updateRates() { stats.chunkedMessageRate = chunkedMessageRate.getRate(); } + @SuppressWarnings("deprecation") public void updateStats(ConsumerStatsImpl consumerStats) { msgOutCounter.add(consumerStats.msgOutCounter); bytesOutCounter.add(consumerStats.bytesOutCounter); @@ -977,6 +978,7 @@ public void updateStats(ConsumerStatsImpl consumerStats) { avgMessagesPerEntry.set(consumerStats.avgMessagesPerEntry); } + @SuppressWarnings("deprecation") public ConsumerStatsImpl getStats() { stats.msgOutCounter = msgOutCounter.longValue(); stats.bytesOutCounter = bytesOutCounter.longValue(); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/EntryBatchIndexesAcks.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/EntryBatchIndexesAcks.java index eb5580b24fb62..3126756b51469 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/EntryBatchIndexesAcks.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/EntryBatchIndexesAcks.java @@ -23,6 +23,7 @@ import java.util.BitSet; import org.apache.commons.lang3.tuple.Pair; +@SuppressWarnings("unchecked") public class EntryBatchIndexesAcks { private int size = 100; private Pair[] indexesAcks = new Pair[size]; 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 f84f1c080ede3..bc8ef08b6f564 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 @@ -1132,6 +1132,7 @@ private void refreshAuthenticationCredentials() { private static final byte[] emptyArray = new byte[0]; @Override + @SuppressWarnings("deprecation") protected void handleConnect(CommandConnect connect) { checkArgument(state == State.Start); 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 ad18af308e2c4..374626db6bd9d 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 @@ -536,7 +536,7 @@ public CompletableFuture> getTopicPoliciesAsync(TopicNam } return existingFuture; }); - final var p = policiesFutureHolder.getValue(); + final var p = policiesFutureHolder.get(); if (!p.getLeft()) { log.info("The future of {} has been removed from cache, retry getTopicPolicies again", namespace); return getTopicPoliciesAsync(topicName, type); 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 38320e5be70c5..11f519a736100 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 @@ -87,6 +87,7 @@ protected void setProducerAndTriggerReadEntries(Producer producer) { } } + @SuppressWarnings("unchecked") public void sendMessage(Entry entry) { if ((STATE_UPDATER.get(this) == State.Started) && isWritable()) { 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 45a92c92f7ee9..7b2598164185e 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 @@ -264,6 +264,7 @@ public CompletableFuture subscribe(SubscriptionOption option) { } @Override + @SuppressWarnings("deprecation") public CompletableFuture subscribe(final TransportCnx cnx, String subscriptionName, long consumerId, SubType subType, int priorityLevel, String consumerName, boolean isDurable, MessageId startMessageId, @@ -901,6 +902,7 @@ public TopicStatsImpl getStats(GetStatsOptions getStatsOptions) { } @Override + @SuppressWarnings("unchecked") public CompletableFuture asyncGetStats(boolean getPreciseBacklog, boolean subscriptionBacklogSize, boolean getEarliestTimeInBacklog) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/GeoPersistentReplicator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/GeoPersistentReplicator.java index 922a0e42c3ddb..90486008e0119 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/GeoPersistentReplicator.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/GeoPersistentReplicator.java @@ -140,6 +140,7 @@ private CompletableFuture createRemoteTopicIfDoesNotExist(String partition } @Override + @SuppressWarnings("unchecked") protected boolean replicateEntries(List entries, final InFlightTask inFlightTask) { boolean atLeastOneMessageSentForReplication = false; boolean isEnableReplicatedSubscriptions = 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 a5cd832e99f2c..66e0de38c1ddd 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 @@ -1327,6 +1327,7 @@ public long estimateBacklogSize() { return cursor.getEstimatedSizeSinceMarkDeletePosition(); } + @SuppressWarnings("deprecation") public CompletableFuture getStatsAsync(GetStatsOptions getStatsOptions) { SubscriptionStatsImpl subStats = new SubscriptionStatsImpl(); subStats.lastExpireTimestamp = lastExpireTimestamp; 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 88d511217c473..377cbcca8b845 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 @@ -927,6 +927,7 @@ public CompletableFuture subscribe(SubscriptionOption option) { option.getConsumerEpoch(), option.getSchemaType()); } + @SuppressWarnings("deprecation") private CompletableFuture internalSubscribe(final TransportCnx cnx, String subscriptionName, long consumerId, SubType subType, int priorityLevel, String consumerName, boolean isDurable, @@ -1104,6 +1105,7 @@ && isCompactionSubscription(subscriptionName)) { }); } + @SuppressWarnings("deprecation") @Override public CompletableFuture subscribe(final TransportCnx cnx, String subscriptionName, long consumerId, SubType subType, int priorityLevel, String consumerName, @@ -1544,7 +1546,7 @@ private CompletableFuture delete(boolean failIfHasSubscriptions, fenceTopicToCloseOrDelete(); // Avoid clients reconnections while deleting // Mark the progress of close to prevent close calling concurrently. this.closeFutures = - new CloseFutures(new CompletableFuture(), new CompletableFuture(), new CompletableFuture()); + new CloseFutures(new CompletableFuture<>(), new CompletableFuture<>(), new CompletableFuture<>()); AtomicBoolean alreadyUnFenced = new AtomicBoolean(); CompletableFuture res = getBrokerService().getPulsar().getPulsarResources().getNamespaceResources() @@ -1726,10 +1728,10 @@ public CompletableFuture close( fenceTopicToCloseOrDelete(); if (closeType == CloseTypes.transferring) { transferring = true; - this.closeFutures = new CloseFutures(new CompletableFuture(), null, null); + this.closeFutures = new CloseFutures(new CompletableFuture<>(), null, null); } else { - this.closeFutures = - new CloseFutures(new CompletableFuture(), new CompletableFuture(), new CompletableFuture()); + this.closeFutures = new CloseFutures( + new CompletableFuture<>(), new CompletableFuture<>(), new CompletableFuture<>()); } } finally { lock.writeLock().unlock(); @@ -2804,6 +2806,7 @@ public TopicStatsImpl getStats(GetStatsOptions getStatsOptions) { } } + @SuppressWarnings("unchecked") @Override public CompletableFuture asyncGetStats(boolean getPreciseBacklog, boolean subscriptionBacklogSize, boolean getEarliestTimeInBacklog) { @@ -4299,6 +4302,7 @@ public synchronized CompletableFuture triggerCompactionWithCheckHasMoreMes }); } + @SuppressWarnings("unchecked") public synchronized void triggerCompaction() throws PulsarServerException, AlreadyRunningException { if (currentCompaction.isDone()) { 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 a156566d0feaa..d1497dd6b0ef5 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 @@ -306,6 +306,7 @@ private void cleanupTimedOutSnapshots() { } } + @SuppressWarnings("deprecation") void snapshotCompleted(String snapshotId) { ReplicatedSubscriptionsSnapshotBuilder snapshot = pendingSnapshots.remove(snapshotId); lastCompletedSnapshotId = snapshotId; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ShadowReplicator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ShadowReplicator.java index 2e5e91fb9a633..36822ad769e60 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ShadowReplicator.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/ShadowReplicator.java @@ -57,6 +57,7 @@ protected String getProducerName() { } @Override + @SuppressWarnings("unchecked") protected boolean replicateEntries(List entries, InFlightTask inFlightTask) { boolean atLeastOneMessageSentForReplication = false; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/plugin/EntryFilterProvider.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/plugin/EntryFilterProvider.java index 297c124c60525..dc688eaffe4d0 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/plugin/EntryFilterProvider.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/plugin/EntryFilterProvider.java @@ -177,6 +177,7 @@ static EntryFilterDefinition getEntryFilterDefinition(NarClassLoader ncl) throws ); } + @SuppressWarnings("unchecked") protected EntryFilter load(EntryFilterMetaData metadata) throws IOException { final EntryFilterDefinition def = metadata.getDefinition(); 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 b722a2df25854..7106c0d7a592d 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 @@ -228,10 +228,10 @@ public CompletableFuture putSchemaIfAbsent(String schemaId, Schem return CompletableFuture.completedFuture(Pair.of(info.toByteArray(), context)); }); }))).whenComplete((v, ex) -> { - var latencyMs = this.clock.millis() - start.getValue(); + var latencyMs = this.clock.millis() - start.longValue(); if (ex != null) { log.error("[{}] Put schema failed", schemaId, ex); - if (start.getValue() != 0) { + if (start.longValue() != 0) { this.stats.recordPutFailed(schemaId, latencyMs); } promise.completeExceptionally(ex); @@ -242,8 +242,8 @@ public CompletableFuture putSchemaIfAbsent(String schemaId, Schem // The schema storage will return null schema version if no schema is persisted to the storage if (v != null) { promise.complete(v); - if (start.getValue() != 0) { - this.stats.recordPutLatency(schemaId, this.clock.millis() - start.getValue()); + if (start.longValue() != 0) { + this.stats.recordPutLatency(schemaId, this.clock.millis() - start.longValue()); } } } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicFactory.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicFactory.java index 0eabe0f2cc393..3abf8e5602e70 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicFactory.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/systopic/NamespaceEventsSystemTopicFactory.java @@ -68,6 +68,7 @@ public static CompletableFuture checkSystemTopicExists(NamespaceName na return nonPartitionedExists.thenCombine(partition0Exists, (a, b) -> a | b); } + @SuppressWarnings("unchecked") public TransactionBufferSnapshotBaseSystemTopicClient createTransactionBufferSystemTopicClient( TopicName systemTopicName, SystemTopicTxnBufferSnapshotService systemTopicTxnBufferSnapshotService, Class schemaType) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/GenerateDocsCommand.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/GenerateDocsCommand.java index b0ed54bc53fd0..60c4b2c2c40d3 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/GenerateDocsCommand.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/tools/GenerateDocsCommand.java @@ -44,6 +44,7 @@ public GenerateDocsCommand(CommandLine rootCmd) { } @Override + @SuppressWarnings("unchecked") public Integer call() throws Exception { CmdGenerateDocs cmd = new CmdGenerateDocs("pulsar"); cmd.addCommand("broker-tool", rootCmd); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStore.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStore.java index 25c7727259db3..2563a3b6c85c4 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStore.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/transaction/pendingack/impl/MLPendingAckStore.java @@ -118,6 +118,7 @@ public class MLPendingAckStore implements PendingAckStore { private TxnLogBufferedWriter bufferedWriter; + @SuppressWarnings("unchecked") public MLPendingAckStore(ManagedLedger managedLedger, ManagedCursor cursor, ManagedCursor subManagedCursor, long transactionPendingAckLogIndexMinLag, TxnLogBufferedWriterConfig bufferedWriterConfig, 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 3686550789b8f..fc8742d5de6e0 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 @@ -19,6 +19,7 @@ package org.apache.pulsar.broker.web; import java.io.IOException; +import java.util.Locale; import java.util.Objects; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -29,7 +30,6 @@ import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.broker.intercept.BrokerInterceptor; import org.apache.pulsar.common.intercept.InterceptException; @@ -58,9 +58,11 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo servletRequest.getServletContext().getContextPath(), servletRequest.getContentType()); } - if (StringUtils.containsIgnoreCase(servletRequest.getContentType(), MediaType.MULTIPART_FORM_DATA) - || StringUtils.containsIgnoreCase(servletRequest.getContentType(), - MediaType.APPLICATION_OCTET_STREAM)) { + String contentType = servletRequest.getContentType(); + if (contentType != null && (contentType.toLowerCase(Locale.ROOT).contains( + MediaType.MULTIPART_FORM_DATA.toLowerCase(Locale.ROOT)) + || contentType.toLowerCase(Locale.ROOT).contains( + MediaType.APPLICATION_OCTET_STREAM.toLowerCase(Locale.ROOT)))) { // skip multipart request at this moment filterChain.doFilter(servletRequest, servletResponse); return; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ProcessHandlerFilter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ProcessHandlerFilter.java index 374642f045eec..d2dae40056a70 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ProcessHandlerFilter.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/ProcessHandlerFilter.java @@ -19,6 +19,7 @@ package org.apache.pulsar.broker.web; import java.io.IOException; +import java.util.Locale; import java.util.Objects; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -27,7 +28,6 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.ws.rs.core.MediaType; -import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.broker.intercept.BrokerInterceptor; public class ProcessHandlerFilter implements Filter { @@ -41,8 +41,12 @@ public ProcessHandlerFilter(BrokerInterceptor brokerInterceptor) { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - if (!StringUtils.containsIgnoreCase(request.getContentType(), MediaType.MULTIPART_FORM_DATA) - && !StringUtils.containsIgnoreCase(request.getContentType(), MediaType.APPLICATION_OCTET_STREAM)) { + String contentType = request.getContentType(); + if (contentType == null + || (!contentType.toLowerCase(Locale.ROOT).contains( + MediaType.MULTIPART_FORM_DATA.toLowerCase(Locale.ROOT)) + && !contentType.toLowerCase(Locale.ROOT).contains( + MediaType.APPLICATION_OCTET_STREAM.toLowerCase(Locale.ROOT)))) { interceptor.onFilter(request, response, chain); } else { chain.doFilter(request, response); 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 3fa00beea1f92..2667a9c797566 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 @@ -19,6 +19,7 @@ package org.apache.pulsar.broker.web; import java.io.IOException; +import java.util.Locale; import java.util.Objects; import javax.servlet.AsyncEvent; import javax.servlet.AsyncListener; @@ -32,7 +33,6 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response.Status; -import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.broker.PulsarService; import org.apache.pulsar.broker.intercept.BrokerInterceptor; import org.slf4j.Logger; @@ -103,8 +103,12 @@ public void onStartAsync(AsyncEvent asyncEvent) { } private void handleInterceptor(ServletRequest request, ServletResponse response) { - if (!StringUtils.containsIgnoreCase(request.getContentType(), MediaType.MULTIPART_FORM_DATA) - && !StringUtils.containsIgnoreCase(request.getContentType(), MediaType.APPLICATION_OCTET_STREAM)) { + String contentType = request.getContentType(); + if (contentType == null + || (!contentType.toLowerCase(Locale.ROOT).contains( + MediaType.MULTIPART_FORM_DATA.toLowerCase(Locale.ROOT)) + && !contentType.toLowerCase(Locale.ROOT).contains( + MediaType.APPLICATION_OCTET_STREAM.toLowerCase(Locale.ROOT)))) { try { interceptor.onWebserviceResponse(request, response); } catch (Exception e) { 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 21c99f8196fec..09ea4949a8e83 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 @@ -112,6 +112,7 @@ public void updateHttpRequestsFailOnUnknownPropertiesEnabled(boolean httpRequest .setSkipUnknownProperty(!httpRequestsFailOnUnknownPropertiesEnabled); } + @SuppressWarnings("deprecation") public WebService(PulsarService pulsar) throws PulsarServerException { this.handlers = new ArrayList<>(); this.pulsar = pulsar; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/CompactionReaderImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/CompactionReaderImpl.java index 5961cf0fae7e2..36617dca7edcc 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/CompactionReaderImpl.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/client/impl/CompactionReaderImpl.java @@ -85,6 +85,7 @@ public CompletableFuture> readNextAsync() { return consumer.receiveAsync(); } + @SuppressWarnings("deprecation") public CompletableFuture getLastMessageIdAsync() { return consumer.getLastMessageIdAsync(); } 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 c3f8254fb5e30..fd6ae7307e9fc 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 @@ -108,6 +108,7 @@ public CompletableFuture closeAsync() { } @Override + @SuppressWarnings("deprecation") public CompletableFuture getLastMessageIdAsync() { return consumer.getLastMessageIdAsync(); } diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/compaction/AbstractTwoPhaseCompactor.java b/pulsar-broker/src/main/java/org/apache/pulsar/compaction/AbstractTwoPhaseCompactor.java index 7aba181cb4464..e926b43ca7d65 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/compaction/AbstractTwoPhaseCompactor.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/compaction/AbstractTwoPhaseCompactor.java @@ -87,6 +87,7 @@ protected abstract boolean compactBatchMessage(String topic, Map late RawMessage m, MessageMetadata metadata, MessageId id); + @SuppressWarnings("unchecked") @Override protected CompletableFuture doCompaction(RawReader reader, BookKeeper bk) { return reader.hasMessageAvailableAsync() @@ -101,6 +102,7 @@ protected CompletableFuture doCompaction(RawReader reader, BookKeeper bk) }); } + @SuppressWarnings("unchecked") private CompletableFuture phaseOne(RawReader reader) { Map latestForKey = new HashMap<>(); CompletableFuture loopPromise = new CompletableFuture<>(); @@ -124,6 +126,7 @@ private CompletableFuture phaseOne(RawReader reader) { return loopPromise; } + @SuppressWarnings("unchecked") private void phaseOneLoop(RawReader reader, Optional firstMessageId, Optional toMessageId, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/compaction/StrategicTwoPhaseCompactor.java b/pulsar-broker/src/main/java/org/apache/pulsar/compaction/StrategicTwoPhaseCompactor.java index 3c6749757421a..b69814aab81c8 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/compaction/StrategicTwoPhaseCompactor.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/compaction/StrategicTwoPhaseCompactor.java @@ -85,6 +85,7 @@ public CompletableFuture compact(String topic, return compact(topic, strategy, null); } + @SuppressWarnings("unchecked") public CompletableFuture compact(String topic, TopicCompactionStrategy strategy, CryptoKeyReader cryptoKeyReader) { @@ -98,6 +99,7 @@ public CompletableFuture compact(String topic, return consumerFuture.thenComposeAsync(__ -> compactAndCloseReader(reader, strategy), scheduler); } + @SuppressWarnings("unchecked") CompletableFuture doCompaction(Reader reader, TopicCompactionStrategy strategy) { if (!(reader instanceof CompactionReaderImpl)) { @@ -212,6 +214,7 @@ public String toString() { } + @SuppressWarnings("unchecked") private CompletableFuture phaseOne(Reader reader, TopicCompactionStrategy strategy) { CompletableFuture promise = new CompletableFuture<>(); PhaseOneResult result = new PhaseOneResult(reader.getTopic()); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/utils/ConcurrentBitmapSortedLongPairSet.java b/pulsar-broker/src/main/java/org/apache/pulsar/utils/ConcurrentBitmapSortedLongPairSet.java index 70437d07dbee0..9c4fa593873ba 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/utils/ConcurrentBitmapSortedLongPairSet.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/utils/ConcurrentBitmapSortedLongPairSet.java @@ -117,7 +117,7 @@ public > Optional first(LongPairSet.LongPairFunction< result.setValue(Optional.of(item)); return false; }); - return result.getValue(); + return result.get(); } public > NavigableSet items(int numberOfItems, diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtils.java b/pulsar-broker/src/main/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtils.java index b2cf1f2006fba..558a9686ac9b3 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtils.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/utils/auth/tokens/TokensCliUtils.java @@ -49,6 +49,7 @@ import picocli.CommandLine.ScopeType; @Command(name = "tokens", showDefaultValues = true, scope = ScopeType.INHERIT) +@SuppressWarnings("deprecation") public class TokensCliUtils { private final CommandLine commander; diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java b/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java index 51da8ba099779..44ca34adb410d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/zookeeper/LocalBookkeeperEnsemble.java @@ -394,6 +394,7 @@ public void runStreamStorage(CompositeConfiguration conf) throws Exception { } } + @SuppressWarnings("deprecation") public void start(boolean enableStreamStorage) throws Exception { LOG.debug("Local ZK/BK starting ..."); ServerConfiguration conf = new ServerConfiguration(); diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java index bfcc3fe39a444..9055af41b4afc 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/FunctionsImpl.java @@ -581,6 +581,7 @@ public State onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception return future; } + @SuppressWarnings("deprecation") @Override public List getConnectorsList() throws PulsarAdminException { try { @@ -595,12 +596,14 @@ public List getConnectorsList() throws PulsarAdminException } } + @SuppressWarnings("deprecation") @Override public Set getSources() throws PulsarAdminException { return getConnectorsList().stream().filter(c -> !StringUtils.isEmpty(c.getSourceClass())) .map(ConnectorDefinition::getName).collect(Collectors.toSet()); } + @SuppressWarnings("deprecation") @Override public Set getSinks() throws PulsarAdminException { return getConnectorsList().stream().filter(c -> !StringUtils.isEmpty(c.getSinkClass())) diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java index 47c5fc430f2ed..c62ecd0b205c2 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NamespacesImpl.java @@ -1678,6 +1678,7 @@ public CompletableFuture clearOffloadDeleteLagAsync(String namespace) { return asyncDeleteRequest(path); } + @SuppressWarnings("deprecation") @Override public SchemaAutoUpdateCompatibilityStrategy getSchemaAutoUpdateCompatibilityStrategy(String namespace) throws PulsarAdminException { @@ -1690,6 +1691,7 @@ public SchemaAutoUpdateCompatibilityStrategy getSchemaAutoUpdateCompatibilityStr } } + @SuppressWarnings("deprecation") @Override public void setSchemaAutoUpdateCompatibilityStrategy(String namespace, SchemaAutoUpdateCompatibilityStrategy strategy) diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NonPersistentTopicsImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NonPersistentTopicsImpl.java index 2368cf87dcf1f..a27262f27262d 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NonPersistentTopicsImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/NonPersistentTopicsImpl.java @@ -33,6 +33,7 @@ import org.apache.pulsar.common.policies.data.NonPersistentTopicStats; import org.apache.pulsar.common.policies.data.PersistentTopicInternalStats; +@SuppressWarnings("deprecation") public class NonPersistentTopicsImpl extends BaseResource implements NonPersistentTopics { private final WebTarget adminV2NonPersistentTopics; diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SinksImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SinksImpl.java index bba0289d81254..15c28e8c54c51 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SinksImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SinksImpl.java @@ -48,6 +48,7 @@ import org.glassfish.jersey.media.multipart.FormDataMultiPart; @Slf4j +@SuppressWarnings("deprecation") public class SinksImpl extends ComponentResource implements Sinks, Sink { private final WebTarget sink; diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SourcesImpl.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SourcesImpl.java index 56cf7db229b78..4e3502461d2d9 100644 --- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SourcesImpl.java +++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/SourcesImpl.java @@ -47,6 +47,7 @@ import org.glassfish.jersey.media.multipart.FormDataMultiPart; @Slf4j +@SuppressWarnings("deprecation") public class SourcesImpl extends ComponentResource implements Sources, Source { private final WebTarget source; 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 11a25b63af985..3641b59be8b0f 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 @@ -102,6 +102,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@SuppressWarnings("deprecation") public class TopicsImpl extends BaseResource implements Topics { private final WebTarget adminV2Topics; // CHECKSTYLE.OFF: MemberName diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Consumer.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Consumer.java index 339a05d1b53e9..e897289319540 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Consumer.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Consumer.java @@ -466,6 +466,7 @@ CompletableFuture reconsumeLaterCumulativeAsync(Message message, * * @return statistic for the consumer */ + @SuppressWarnings("deprecation") ConsumerStats getStats(); /** diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/MultiTopicConsumerStats.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/MultiTopicConsumerStats.java index e1c1d3372c391..bd6736a720b7e 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/MultiTopicConsumerStats.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/MultiTopicConsumerStats.java @@ -30,6 +30,7 @@ */ @InterfaceAudience.Public @InterfaceStability.Stable +@SuppressWarnings("deprecation") public interface MultiTopicConsumerStats extends ConsumerStats { /** diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/PartitionedTopicProducerStats.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/PartitionedTopicProducerStats.java index 5fd3c1f34a0e0..8674033acce7b 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/PartitionedTopicProducerStats.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/PartitionedTopicProducerStats.java @@ -30,6 +30,7 @@ */ @InterfaceAudience.Public @InterfaceStability.Stable +@SuppressWarnings("deprecation") public interface PartitionedTopicProducerStats extends ProducerStats { /** diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Producer.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Producer.java index d6b07713708dd..513841cf1707c 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Producer.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/Producer.java @@ -235,6 +235,7 @@ TypedMessageBuilder newMessage(Schema schema, * * @return statistic for the producer or null if ProducerStatsRecorderImpl is disabled. */ + @SuppressWarnings("deprecation") ProducerStats getStats(); /** diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/ProducerInterceptorWrapper.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/ProducerInterceptorWrapper.java index 9d7c211019718..3d0b796c1a0f0 100644 --- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/ProducerInterceptorWrapper.java +++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/interceptor/ProducerInterceptorWrapper.java @@ -29,6 +29,7 @@ */ @InterfaceAudience.Private @InterfaceStability.Stable +@SuppressWarnings("deprecation") public class ProducerInterceptorWrapper implements ProducerInterceptor { private final org.apache.pulsar.client.api.ProducerInterceptor innerInterceptor; diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/CustomCommandFactoryProvider.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/CustomCommandFactoryProvider.java index 5c6566ac8ce1e..3669797f1c598 100644 --- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/CustomCommandFactoryProvider.java +++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/CustomCommandFactoryProvider.java @@ -139,6 +139,7 @@ static CustomCommandFactoryDefinition getCustomCommandFactoryDefinition(NarClass ); } + @SuppressWarnings("unchecked") private static CustomCommandFactory load(CustomCommandFactoryMetaData metadata, String narExtractionDirectory) throws IOException { diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/SchemaExtractor.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/SchemaExtractor.java index 7a566010e11f5..295f40fbc6cb0 100644 --- a/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/SchemaExtractor.java +++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/admin/cli/utils/SchemaExtractor.java @@ -30,6 +30,7 @@ public static String getJsonSchemaInfo(SchemaDefinition schemaDefinition) { StandardCharsets.UTF_8); } + @SuppressWarnings("unchecked") public static String getAvroSchemaInfo(SchemaDefinition schemaDefinition) { return new String(Schema.AVRO(schemaDefinition).getSchemaInfo().getSchema(), diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerBuilderImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerBuilderImpl.java index 7abae35856967..991f1d02cd3cc 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerBuilderImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerBuilderImpl.java @@ -89,6 +89,7 @@ public ConsumerBuilderImpl(PulsarClientImpl client, Schema schema) { } @Override + @SuppressWarnings("unchecked") public ConsumerBuilder loadConf(Map config) { this.conf = ConfigurationDataUtils.loadData(config, conf, ConsumerConfigurationData.class); return this; @@ -513,7 +514,8 @@ public ConsumerBuilder replicateSubscriptionState(boolean replicateSubscripti } @Override - public ConsumerBuilder intercept(ConsumerInterceptor... interceptors) { + @SafeVarargs + public final ConsumerBuilder intercept(ConsumerInterceptor... interceptors) { if (interceptorList == null) { interceptorList = new ArrayList<>(); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsDisabled.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsDisabled.java index 374b88ab3eb7d..f59a1d93ada6d 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsDisabled.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsDisabled.java @@ -25,6 +25,7 @@ import org.apache.pulsar.client.api.Message; import org.apache.pulsar.client.api.ProducerStats; +@SuppressWarnings("deprecation") public class ConsumerStatsDisabled implements ConsumerStatsRecorder { private static final long serialVersionUID = 1L; diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsRecorderImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsRecorderImpl.java index 444ca7a72f50e..dfc96f2216884 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsRecorderImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerStatsRecorderImpl.java @@ -255,6 +255,7 @@ public Integer getMsgNumInReceiverQueue() { } @Override + @SuppressWarnings("unchecked") public Map getMsgNumInSubReceiverQueue() { if (consumer instanceof MultiTopicsConsumerImpl) { List> consumerList = ((MultiTopicsConsumerImpl) consumer).getConsumers(); diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/GeoReplicationProducerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/GeoReplicationProducerImpl.java index b5d6afc5432f2..198dc93da09ad 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/GeoReplicationProducerImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/GeoReplicationProducerImpl.java @@ -33,6 +33,7 @@ import org.apache.pulsar.common.protocol.Markers; @Slf4j +@SuppressWarnings("unchecked") public class GeoReplicationProducerImpl extends ProducerImpl{ public static final String MSG_PROP_REPL_SOURCE_POSITION = "__MSG_PROP_REPL_SOURCE_POSITION"; diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpLookupService.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpLookupService.java index 22ae64da1045c..076aa8e7dd966 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpLookupService.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpLookupService.java @@ -103,6 +103,7 @@ public void updateServiceUrl(String serviceUrl) throws PulsarClientException { * @param topicName topic-name * @return broker-socket-address that serves given topic */ + @SuppressWarnings("deprecation") @Override public CompletableFuture getBroker(TopicName topicName, Map lookupProperties) { if (lookupProperties == null) { diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/InProgressDeduplicationDecoratorLookupService.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/InProgressDeduplicationDecoratorLookupService.java index 2c00d4f7d02f4..55845273926e6 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/InProgressDeduplicationDecoratorLookupService.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/InProgressDeduplicationDecoratorLookupService.java @@ -125,6 +125,7 @@ public boolean isBinaryProtoLookupService() { private static class InProgressHolder> { private final ConcurrentHashMap inProgress = new ConcurrentHashMap<>(); + @SuppressWarnings("deprecation") public V getOrComputeIfAbsent(K key, Supplier supplier) { final MutableObject newFutureCreated = new MutableObject<>(); try { 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 62694179ae92d..5cbb6348ec168 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 @@ -1207,6 +1207,7 @@ private ConsumerImpl createInternalConsumer(ConsumerConfigurationData conf } // handling failure during subscribe new topic, unsubscribe success created partitions + @SuppressWarnings("unchecked") protected void handleSubscribeOneTopicError(String topicName, Throwable error, CompletableFuture subscribeFuture) { diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PatternMultiTopicsConsumerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PatternMultiTopicsConsumerImpl.java index 3db3786498660..5374600497445 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PatternMultiTopicsConsumerImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PatternMultiTopicsConsumerImpl.java @@ -428,7 +428,7 @@ public CompletableFuture onTopicsAdded(Collection addedTopics) { topicName.getPartitionIndex() + 1); } expendPartitionsForLog.add(topicName.toString()); - CompletableFuture consumerFuture = subscribeAsync(topicName.toString(), + CompletableFuture consumerFuture = subscribeAsync(topicName.toString(), PartitionedTopicMetadata.NON_PARTITIONED); consumerFuture.whenComplete((__, ex) -> { if (ex != null) { @@ -454,7 +454,7 @@ public CompletableFuture onTopicsAdded(Collection addedTopics) { } // Case 3: Non-partitioned topic or Partitioned topic, which has not been subscribed. for (String partitionedTopic : groupedTopics) { - CompletableFuture consumerFuture = subscribeAsync(partitionedTopic, false); + CompletableFuture consumerFuture = subscribeAsync(partitionedTopic, false); consumerFuture.whenComplete((__, ex) -> { if (ex != null) { log.warn("Pattern consumer [{}] Failed to subscribe to topics: {}", diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerBuilderImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerBuilderImpl.java index 2bd6895eb1de4..9b9c2c07e4958 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerBuilderImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerBuilderImpl.java @@ -325,7 +325,8 @@ public ProducerBuilder intercept(ProducerInterceptor... interceptors) { @Override @Deprecated - public ProducerBuilder intercept(org.apache.pulsar.client.api.ProducerInterceptor... interceptors) { + @SafeVarargs + public final ProducerBuilder intercept(org.apache.pulsar.client.api.ProducerInterceptor... interceptors) { if (interceptorList == null) { interceptorList = new ArrayList<>(); } 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 c996df5d8b7d1..e69ed90c92fdd 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 @@ -115,6 +115,7 @@ public CompletableFuture> createAsync() { } @Override + @SuppressWarnings("unchecked") public ReaderBuilder loadConf(Map config) { MessageId startMessageId = conf.getStartMessageId(); conf = ConfigurationDataUtils.loadData(config, conf, ReaderConfigurationData.class); @@ -272,7 +273,8 @@ public ReaderBuilder autoUpdatePartitionsInterval(int interval, TimeUnit unit } @Override - public ReaderBuilder intercept(ReaderInterceptor... interceptors) { + @SafeVarargs + public final ReaderBuilder intercept(ReaderInterceptor... interceptors) { if (interceptors != null) { this.conf.setReaderInterceptorList(Arrays.asList(interceptors)); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/SameAuthParamsLookupAutoClusterFailover.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/SameAuthParamsLookupAutoClusterFailover.java index 5ae7b96906e8c..f21eb72ccb996 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/SameAuthParamsLookupAutoClusterFailover.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/SameAuthParamsLookupAutoClusterFailover.java @@ -110,6 +110,7 @@ public String getServiceUrl() { return pulsarServiceUrlArray[currentPulsarServiceIndex]; } + @SuppressWarnings("deprecation") @Override public void close() throws Exception { if (closed) { @@ -171,8 +172,8 @@ private void checkPulsarServices() { break; } case PreRecover: { - checkCounterArray[i].setValue(checkCounterArray[i].getValue() + 1); - if (checkCounterArray[i].getValue() >= recoverThreshold) { + checkCounterArray[i].setValue(checkCounterArray[i].intValue() + 1); + if (checkCounterArray[i].intValue() >= recoverThreshold) { pulsarServiceStateArray[i] = PulsarServiceState.Healthy; checkCounterArray[i].setValue(0); } @@ -187,8 +188,8 @@ private void checkPulsarServices() { break; } case PreFail: { - checkCounterArray[i].setValue(checkCounterArray[i].getValue() + 1); - if (checkCounterArray[i].getValue() >= failoverThreshold) { + checkCounterArray[i].setValue(checkCounterArray[i].intValue() + 1); + if (checkCounterArray[i].intValue() >= failoverThreshold) { pulsarServiceStateArray[i] = PulsarServiceState.Failed; checkCounterArray[i].setValue(0); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationBasic.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationBasic.java index e73bdf46b545b..ec548b26b68b4 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationBasic.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/AuthenticationBasic.java @@ -42,6 +42,7 @@ public String getAuthMethodName() { return AUTH_METHOD_NAME; } + @SuppressWarnings("deprecation") @Override public AuthenticationDataProvider getAuthData() throws PulsarClientException { try { diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtils.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtils.java index 90fbadb44f96b..45cd56c2acf93 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtils.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/ConfigurationDataUtils.java @@ -44,6 +44,7 @@ public static ObjectMapper create() { private ConfigurationDataUtils() {} + @SuppressWarnings("unchecked") public static T loadData(Map config, T existingData, Class dataCls) { diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AbstractStructSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AbstractStructSchema.java index 929460d5f99bd..2f2e0232b1146 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AbstractStructSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AbstractStructSchema.java @@ -168,6 +168,7 @@ public byte[] encode(T message) { } @Override + @SuppressWarnings("unchecked") public Optional getNativeSchema() { if (reader instanceof AbstractMultiVersionReader) { AbstractMultiVersionReader abstractMultiVersionReader = (AbstractMultiVersionReader) reader; diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/NativeAvroBytesSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/NativeAvroBytesSchema.java index b29141a9dcda3..0c7580ee9b275 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/NativeAvroBytesSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/NativeAvroBytesSchema.java @@ -88,6 +88,7 @@ public Optional getNativeSchema() { } @Override + @SuppressWarnings("unchecked") public Schema clone() { return new NativeAvroBytesSchema(nativeSchema); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchema.java index 9243303e84288..f2eb46cb0c8a9 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchema.java @@ -108,12 +108,14 @@ public static ProtobufNativeSchema of(Class pojo) { return of(pojo, new HashMap<>()); } + @SuppressWarnings("unchecked") public static ProtobufNativeSchema ofGenericClass(Class pojo, Map properties) { SchemaDefinition schemaDefinition = SchemaDefinition.builder().withPojo(pojo) .withProperties(properties).build(); return ProtobufNativeSchema.of(schemaDefinition); } + @SuppressWarnings("unchecked") public static ProtobufNativeSchema of(SchemaDefinition schemaDefinition) { Class pojo = schemaDefinition.getPojo(); @@ -137,6 +139,7 @@ public static ProtobufNativeSchema of(SchemaDefinition schemaDefinition) } } + @SuppressWarnings("unchecked") public static ProtobufNativeSchema of(Class pojo, Map properties) { return ofGenericClass(pojo, properties); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaUtils.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaUtils.java index 2dd90ce0c3fa1..0f87015de1aaa 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaUtils.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaUtils.java @@ -88,6 +88,7 @@ private static void serializeFileDescriptor(Descriptors.FileDescriptor fileDescr private static final ObjectReader PROTOBUF_NATIVE_SCHEMADATA_READER = ObjectMapperFactory.getMapper().reader() .forType(ProtobufNativeSchemaData.class); + @SuppressWarnings("deprecation") public static Descriptors.Descriptor deserialize(byte[] schemaDataBytes) { Descriptors.Descriptor descriptor; try { diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java index 71e0bed69120e..d9d8f8d0e7d44 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java @@ -93,12 +93,14 @@ public static ProtobufSchema of(Class pojo) { return of(pojo, new HashMap<>()); } + @SuppressWarnings("unchecked") public static ProtobufSchema ofGenericClass(Class pojo, Map properties) { SchemaDefinition schemaDefinition = SchemaDefinition.builder().withPojo(pojo) .withProperties(properties).build(); return ProtobufSchema.of(schemaDefinition); } + @SuppressWarnings("unchecked") public static ProtobufSchema of(SchemaDefinition schemaDefinition) { Class pojo = schemaDefinition.getPojo(); @@ -122,6 +124,7 @@ public static ProtobufSchema of(SchemaDefinition schemaDefinition) { } } + @SuppressWarnings("unchecked") public static ProtobufSchema of(Class pojo, Map properties) { return ofGenericClass(pojo, properties); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/SchemaDefinitionBuilderImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/SchemaDefinitionBuilderImpl.java index 328f6cc6dc183..4249a511f3f6b 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/SchemaDefinitionBuilderImpl.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/SchemaDefinitionBuilderImpl.java @@ -149,6 +149,7 @@ public SchemaDefinitionBuilder withSchemaWriter(SchemaWriter writer) { } @Override + @SuppressWarnings("unchecked") public SchemaDefinition build() { checkArgument(StringUtils.isNotBlank(jsonDef) || clazz != null, "Must specify one of the pojo or jsonDef for the schema definition."); diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/ProtobufReader.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/ProtobufReader.java index a56fb30b1406b..a8405634370fa 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/ProtobufReader.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/ProtobufReader.java @@ -31,6 +31,7 @@ public class ProtobufReader implements SchemaReader { private Parser tParser; + @SuppressWarnings("unchecked") public ProtobufReader(T protoMessageInstance) { tParser = (Parser) (protoMessageInstance).getParserForType(); } diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/util/SchemaUtil.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/util/SchemaUtil.java index 94a2fbe816dc1..5fdffb5634926 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/util/SchemaUtil.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/util/SchemaUtil.java @@ -65,6 +65,7 @@ public static SchemaInfo parseSchemaInfo(SchemaDefinition schemaDefinitio .type(schemaType).build(); } + @SuppressWarnings("unchecked") public static Schema createAvroSchema(SchemaDefinition schemaDefinition) { Class pojo = schemaDefinition.getPojo(); diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java index 10436d75607f2..28e07f1a9b612 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SinkStatsManager.java @@ -24,7 +24,6 @@ import io.prometheus.client.Gauge; import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; -import lombok.Getter; import org.apache.pulsar.functions.proto.FunctionStatus; public class SinkStatsManager extends ComponentStatsManager { @@ -82,10 +81,8 @@ public class SinkStatsManager extends ComponentStatsManager { private Counter.Child statTotalSinkExceptionsChild1min; private Counter.Child statTotalWrittenChild1min; - @Getter private EvictingQueue latestSystemExceptions = EvictingQueue.create(10); - @Getter private EvictingQueue latestSinkExceptions = EvictingQueue.create(10); diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java index 454df8fe377d1..2948012eaa194 100644 --- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java +++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/SourceStatsManager.java @@ -24,7 +24,6 @@ import io.prometheus.client.Gauge; import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; -import lombok.Getter; import org.apache.pulsar.functions.proto.FunctionStatus; public class SourceStatsManager extends ComponentStatsManager { @@ -82,10 +81,8 @@ public class SourceStatsManager extends ComponentStatsManager { private Counter.Child statTotalSourceExceptionsChild1min; private Counter.Child statTotalWrittenChild1min; - @Getter private EvictingQueue latestSystemExceptions = EvictingQueue.create(10); - @Getter private EvictingQueue latestSourceExceptions = EvictingQueue.create(10); diff --git a/pulsar-functions/proto/build.gradle.kts b/pulsar-functions/proto/build.gradle.kts index 677c50dffe69a..c1a8a0a5d01d4 100644 --- a/pulsar-functions/proto/build.gradle.kts +++ b/pulsar-functions/proto/build.gradle.kts @@ -22,6 +22,11 @@ plugins { alias(libs.plugins.lightproto) } +// Suppress warnings in LightProto generated code +tasks.withType().configureEach { + options.compilerArgs.add("-Xlint:-dep-ann") +} + dependencies { implementation(libs.netty.buffer) implementation(libs.grpc.all) { diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/proxy/socket/client/PerformanceClient.java b/pulsar-testclient/src/main/java/org/apache/pulsar/proxy/socket/client/PerformanceClient.java index 53d588e3ba7c6..4692812972941 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/proxy/socket/client/PerformanceClient.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/proxy/socket/client/PerformanceClient.java @@ -402,6 +402,7 @@ public void runPerformanceTest() throws InterruptedException, IOException { } + @SuppressWarnings("unchecked") static IMessageFormatter getMessageFormatter(String formatterClass) { try { ClassLoader classLoader = PerformanceClient.class.getClassLoader(); diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/BrokerMonitor.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/BrokerMonitor.java index b875c92c795fa..daf9ea8cb0277 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/BrokerMonitor.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/BrokerMonitor.java @@ -483,6 +483,7 @@ public void start() { private TableView brokerLoadDataTableView; + @SuppressWarnings("deprecation") private BrokerMonitor(String brokerServiceUrl) { super("monitor-brokers"); try { diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/DefaultMessageFormatter.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/DefaultMessageFormatter.java index 6823d35db4d44..da93d5dbf6b69 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/DefaultMessageFormatter.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/DefaultMessageFormatter.java @@ -80,6 +80,7 @@ private float get_FloatValue(float size) { return f; } + @SuppressWarnings("deprecation") private String getStringValue(float size) { return RandomStringUtils.randomAlphabetic((int) size); } diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationClient.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationClient.java index 1b8b71d8d0641..d28f754facdd9 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationClient.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationClient.java @@ -327,6 +327,7 @@ public LoadSimulationClient() throws PulsarClientException { * */ @Override + @SuppressWarnings("deprecation") public void run() throws Exception { admin = PulsarAdmin.builder() .serviceHttpUrl(this.serviceURL) diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java index 26f8cae012ffd..8a5f8da3f0d75 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java @@ -361,6 +361,7 @@ private void handleChange(final ShellArguments arguments) throws Exception { } // Handle the command line arguments associated with the copy command. + @SuppressWarnings("unchecked") private void handleCopy(final ShellArguments arguments) throws Exception { final List commandArguments = arguments.commandArguments; // Copy accepts 3 application arguments: Tenant name, source ZooKeeper and target ZooKeeper connect strings. @@ -443,6 +444,7 @@ private void handleCopy(final ShellArguments arguments) throws Exception { } // Handle the command line arguments associated with the simulate command. + @SuppressWarnings("unchecked") private void handleSimulate(final ShellArguments arguments) throws Exception { final List commandArguments = arguments.commandArguments; checkAppArgs(commandArguments.size() - 1, 1); diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerfClientUtils.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerfClientUtils.java index 18d738f6ae3ac..6326e1fb95ad5 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerfClientUtils.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerfClientUtils.java @@ -67,6 +67,7 @@ public static void printJVMInformation(Logger log) { FileUtils.byteCountToDisplaySize(Runtime.getRuntime().maxMemory())); } + @SuppressWarnings("deprecation") public static ClientBuilder createClientBuilderFromArguments(PerformanceBaseArguments arguments) throws PulsarClientException.UnsupportedAuthenticationException { diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceProducer.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceProducer.java index b27715cd6d169..ae208216726d8 100644 --- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceProducer.java +++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/PerformanceProducer.java @@ -447,6 +447,7 @@ private static void executorShutdownNow(ExecutorService executor) { } } + @SuppressWarnings("unchecked") static IMessageFormatter getMessageFormatter(String formatterClass) { try { ClassLoader classLoader = PerformanceProducer.class.getClassLoader(); @@ -460,6 +461,7 @@ static IMessageFormatter getMessageFormatter(String formatterClass) { } } + @SuppressWarnings("deprecation") ProducerBuilder createProducerBuilder(PulsarClient client, int producerId) { ProducerBuilder producerBuilder = client.newProducer() // .sendTimeout(this.sendTimeout, TimeUnit.SECONDS) // 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 d4170509a6e5e..ba6104c7d4a97 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 @@ -99,6 +99,7 @@ public void validate() throws Exception { } @Override + @SuppressWarnings("deprecation") public void run() throws Exception { // Dump config variables PerfClientUtils.printJVMInformation(log); diff --git a/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/GenericObjectFunction.java b/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/GenericObjectFunction.java index ad7ffa970e172..e0015f096cb55 100644 --- a/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/GenericObjectFunction.java +++ b/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/GenericObjectFunction.java @@ -33,6 +33,7 @@ public class GenericObjectFunction implements Function { @Override + @SuppressWarnings("unchecked") public Void process(GenericObject genericObject, Context context) throws Exception { Record currentRecord = context.getCurrentRecord(); log.info("apply to {} {}", genericObject, genericObject.getNativeObject()); diff --git a/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldFunction.java b/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldFunction.java index efa7c9f281e48..e851d050f1bfd 100644 --- a/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldFunction.java +++ b/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldFunction.java @@ -44,6 +44,7 @@ public class RemoveAvroFieldFunction implements Function { private static final String FIELD_TO_REMOVE = "age"; @Override + @SuppressWarnings({"deprecation", "unchecked"}) public Void process(GenericObject genericObject, Context context) throws Exception { Record currentRecord = context.getCurrentRecord(); log.info("apply to {} {}", genericObject, genericObject.getNativeObject()); diff --git a/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldRecordFunction.java b/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldRecordFunction.java index bf8afe28468cc..bc29c4711cd09 100644 --- a/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldRecordFunction.java +++ b/tests/docker-images/java-test-functions/src/main/java/org/apache/pulsar/tests/integration/functions/RemoveAvroFieldRecordFunction.java @@ -44,6 +44,7 @@ public class RemoveAvroFieldRecordFunction implements Function process(GenericObject genericObject, Context context) throws Exception { Record currentRecord = context.getCurrentRecord(); log.info("apply to {} {}", genericObject, genericObject.getNativeObject()); diff --git a/tests/docker-images/java-test-plugins/src/main/java/org/apache/pulsar/tests/integration/plugins/LoggingBrokerInterceptor.java b/tests/docker-images/java-test-plugins/src/main/java/org/apache/pulsar/tests/integration/plugins/LoggingBrokerInterceptor.java index 7e46ba18492d2..cf1f71d184116 100644 --- a/tests/docker-images/java-test-plugins/src/main/java/org/apache/pulsar/tests/integration/plugins/LoggingBrokerInterceptor.java +++ b/tests/docker-images/java-test-plugins/src/main/java/org/apache/pulsar/tests/integration/plugins/LoggingBrokerInterceptor.java @@ -76,6 +76,7 @@ public void close() { @Override + @SuppressWarnings("deprecation") public void beforeSendMessage(Subscription subscription, Entry entry, long[] ackSet, MessageMetadata msgMetadata) { log.info("beforeSendMessage: " + ("producer".equals(msgMetadata.getProducerName()) ? "OK" : "WRONG")); From 396290adabdf85f905add66b03f406b1c14cd20b Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Tue, 31 Mar 2026 23:20:40 +0300 Subject: [PATCH 20/22] [improve][ci] Cleanup tune-runner-vm and clean-disk actions (#25444) --- .github/actions/clean-disk/action.yml | 116 ++++++++++++++++------ .github/actions/tune-runner-vm/action.yml | 50 ++++------ 2 files changed, 102 insertions(+), 64 deletions(-) diff --git a/.github/actions/clean-disk/action.yml b/.github/actions/clean-disk/action.yml index e67ce59a08ddb..fe5fa9e7cc93a 100644 --- a/.github/actions/clean-disk/action.yml +++ b/.github/actions/clean-disk/action.yml @@ -23,44 +23,98 @@ inputs: mode: description: "Use 'full' to clean as much as possible" required: false + clean-threshold-gb: + description: "Skip cleaning if available disk space exceeds this threshold (in GB)" + required: false + default: '20' + full-clean-threshold-gb: + description: "In 'full' mode, skip additional cleaning steps if available disk space exceeds this threshold (in GB)" + required: false + default: '40' runs: using: composite steps: - - run: | + - shell: bash + env: + CLEAN_MODE: ${{ inputs.mode }} + CLEAN_THRESHOLD_GB: ${{ inputs.clean-threshold-gb }} + FULL_CLEAN_THRESHOLD_GB: ${{ inputs.full-clean-threshold-gb }} + run: | if [[ "$OSTYPE" == "linux-gnu"* ]]; then - directories=(/usr/local/lib/android /opt/ghc) - if [[ "${{ inputs.mode }}" == "full" ]]; then - # remove these directories only when mode is 'full' - directories+=(/usr/share/dotnet /opt/hostedtoolcache/CodeQL) + + available_gb() { + df --output=avail -BG / | tail -1 | tr -d ' G' + } + + show_disk() { + if mountpoint -q /mnt; then df -BM / /mnt; else df -BM /; fi + } + + remove_dir() { + local directory=$1 + if [ -d "$directory" ]; then + echo "::group::Removing $directory" + local emptydir=/tmp/empty$$/ + mkdir -p "$emptydir" + # fast way to delete a lot of files on linux + time sudo eatmydata rsync -a --delete "$emptydir" "${directory}/" + time sudo eatmydata rm -rf "${directory}" + rmdir "$emptydir" 2>/dev/null || true + time show_disk + echo "::endgroup::" + fi + } + + # Remove directories one at a time, stopping when threshold is met + clean_dirs() { + local threshold=$1 + shift + for directory in "$@"; do + if (( $(available_gb) >= threshold )); then + return + fi + remove_dir "$directory" + done + } + + if [[ "$CLEAN_MODE" == "full" ]]; then + threshold=$FULL_CLEAN_THRESHOLD_GB + else + threshold=$CLEAN_THRESHOLD_GB fi - emptydir=/tmp/empty$$/ - mkdir $emptydir - echo "::group::Available diskspace" - time df -BM / /mnt + + echo "::group::Available diskspace (threshold: ${threshold}GB)" + time show_disk echo "::endgroup::" - for directory in "${directories[@]}"; do - echo "::group::Removing $directory" - # fast way to delete a lot of files on linux - time sudo eatmydata rsync -a --delete $emptydir ${directory}/ - time sudo eatmydata rm -rf ${directory} - time df -BM / /mnt - echo "::endgroup::" - done - if [[ "${{ inputs.mode }}" == "full" ]]; then - echo "::group::Moving /var/lib/docker to /mnt/docker" - sudo systemctl stop docker - echo '{"data-root": "/mnt/docker"}' | sudo tee /etc/docker/daemon.json - sudo mv /var/lib/docker /mnt/docker - sudo systemctl start docker - time df -BM / /mnt + + if (( $(available_gb) >= threshold )); then + echo "Available disk space meets threshold, skipping cleanup." + exit 0 + fi + + clean_dirs "$threshold" /usr/local/lib/android /opt/ghc + + if [[ "$CLEAN_MODE" == "full" ]]; then + clean_dirs "$threshold" /usr/share/dotnet /opt/hostedtoolcache/CodeQL + if (( $(available_gb) < threshold )) && mountpoint -q /mnt; then + echo "::group::Moving /var/lib/docker to /mnt/docker" + sudo systemctl stop docker + echo '{"data-root": "/mnt/docker"}' | sudo tee /etc/docker/daemon.json + sudo mv /var/lib/docker /mnt/docker + sudo systemctl start docker + time show_disk + echo "::endgroup::" + fi + fi + + if (( $(available_gb) < threshold )); then + echo "::group::Cleaning apt state" + time sudo bash -c "apt-get clean; apt-get autoclean; apt-get -y --purge autoremove" + time show_disk echo "::endgroup::" fi - echo "::group::Cleaning apt state" - time sudo bash -c "apt-get clean; apt-get autoclean; apt-get -y --purge autoremove" - time df -BM / /mnt + + echo "::group::Available diskspace" + time show_disk echo "::endgroup::" fi - echo "::group::Available diskspace" - time df -BM / /mnt - echo "::endgroup::" - shell: bash diff --git a/.github/actions/tune-runner-vm/action.yml b/.github/actions/tune-runner-vm/action.yml index ab0f65767a62d..d071f534dbb4f 100644 --- a/.github/actions/tune-runner-vm/action.yml +++ b/.github/actions/tune-runner-vm/action.yml @@ -22,7 +22,8 @@ description: tunes the GitHub Runner VM operation system runs: using: composite steps: - - run: | + - shell: bash + run: | if [[ "$OSTYPE" == "linux-gnu"* ]]; then echo "::group::Configure and tune OS" # Ensure that reverse lookups for current hostname are handled properly @@ -33,49 +34,38 @@ runs: # consumption is high. # Set vm.swappiness=1 to avoid swapping and allow high RAM usage echo 1 | sudo tee /proc/sys/vm/swappiness - ( - shopt -s nullglob - # Set swappiness to 1 for all cgroups and sub-groups - for swappiness_file in /sys/fs/cgroup/memory/*/memory.swappiness /sys/fs/cgroup/memory/*/*/memory.swappiness; do - echo 1 | sudo tee $swappiness_file > /dev/null - done - ) || true # use "madvise" Linux Transparent HugePages (THP) setting # https://www.kernel.org/doc/html/latest/admin-guide/mm/transhuge.html # "madvise" is generally a better option than the default "always" setting - # Based on Azul instructions from https://docs.azul.com/prime/Enable-Huge-Pages#transparent-huge-pages-thp + # recommendation from https://netflixtechblog.com/bending-pause-times-to-your-will-with-generational-zgc-256629c9386b echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled echo advise | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled - echo defer+madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag + echo defer | sudo tee /sys/kernel/mm/transparent_hugepage/defrag echo 1 | sudo tee /sys/kernel/mm/transparent_hugepage/khugepaged/defrag # tune filesystem mount options, https://www.kernel.org/doc/Documentation/filesystems/ext4.txt # commit=999999, effectively disables automatic syncing to disk (default is every 5 seconds) # nobarrier/barrier=0, loosen data consistency on system crash (no negative impact to empheral CI nodes) sudo mount -o remount,nodiscard,commit=999999,barrier=0 / || true - sudo mount -o remount,nodiscard,commit=999999,barrier=0 /mnt || true + if mountpoint -q /mnt; then + sudo mount -o remount,nodiscard,commit=999999,barrier=0 /mnt || true + fi # disable discard/trim at device level since remount with nodiscard doesn't seem to be effective # https://www.spinics.net/lists/linux-ide/msg52562.html for i in /sys/block/sd*/queue/discard_max_bytes; do echo 0 | sudo tee $i done - # disable any background jobs that run SSD discard/trim - sudo systemctl disable fstrim.timer || true - sudo systemctl stop fstrim.timer || true - sudo systemctl disable fstrim.service || true - sudo systemctl stop fstrim.service || true + # disable unnecessary timers + sudo systemctl stop fstrim.timer fstrim.service \ + podman-auto-update.timer sysstat-collect.timer sysstat-summary.timer \ + phpsessionclean.timer man-db.timer motd-news.timer \ + dpkg-db-backup.timer e2scrub_all.timer \ + update-notifier-download.timer update-notifier-motd.timer || true - # stop php-fpm - sudo systemctl stop php8.0-fpm.service || true - sudo systemctl stop php7.4-fpm.service || true - # stop mono-xsp4 - sudo systemctl disable mono-xsp4.service || true - sudo systemctl stop mono-xsp4.service || true - sudo killall mono || true - - # stop Azure Linux agent to save RAM - sudo systemctl stop walinuxagent.service || true + # stop unnecessary services + sudo systemctl stop php8.3-fpm.service ModemManager.service \ + multipathd.service udisks2.service walinuxagent.service || true echo '::endgroup::' @@ -87,10 +77,4 @@ runs: echo "::group::Available diskspace" df -BM echo "::endgroup::" - # show cggroup - echo "::group::Cgroup settings for current cgroup $CURRENT_CGGROUP" - CURRENT_CGGROUP=$(cat /proc/self/cgroup | grep '0::' | awk -F: '{ print $3 }') - sudo cgget -a $CURRENT_CGGROUP || true - echo '::endgroup::' - fi - shell: bash + fi \ No newline at end of file From c9715812a0eab12576508456fad07c936ac8c248 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Tue, 31 Mar 2026 13:29:10 -0700 Subject: [PATCH 21/22] [improve][test] Speed up HealthCheckTest by sharing cluster across test methods (#25448) --- .../integration/cli/HealthCheckTest.java | 46 ++++++++----------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/HealthCheckTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/HealthCheckTest.java index 4cacad3f76a2b..4582f8d2c9e0f 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/HealthCheckTest.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/HealthCheckTest.java @@ -18,10 +18,6 @@ */ package org.apache.pulsar.tests.integration.cli; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.HashMap; -import java.util.Map; import java.util.UUID; import org.apache.pulsar.tests.TestRetrySupport; import org.apache.pulsar.tests.integration.containers.BKContainer; @@ -30,11 +26,9 @@ import org.apache.pulsar.tests.integration.docker.ContainerExecResult; import org.apache.pulsar.tests.integration.topologies.PulsarCluster; import org.apache.pulsar.tests.integration.topologies.PulsarClusterSpec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** @@ -42,8 +36,6 @@ */ public class HealthCheckTest extends TestRetrySupport { - private static final Logger log = LoggerFactory.getLogger(HealthCheckTest.class); - private final PulsarClusterSpec spec = PulsarClusterSpec.builder() .clusterName("HealthCheckTest-" + UUID.randomUUID().toString().substring(0, 8)) .numProxies(0) @@ -52,14 +44,16 @@ public class HealthCheckTest extends TestRetrySupport { private PulsarCluster pulsarCluster = null; - @BeforeMethod(alwaysRun = true) + @Override + @BeforeClass(alwaysRun = true) public final void setup() throws Exception { incrementSetupNumber(); pulsarCluster = PulsarCluster.forSpec(spec); pulsarCluster.start(); } - @AfterMethod(alwaysRun = true) + @Override + @AfterClass(alwaysRun = true) public final void cleanup() { markCurrentSetupNumberCleaned(); if (pulsarCluster != null) { @@ -91,28 +85,24 @@ private void assertHealthcheckFailure() throws Exception { @Test public void testZooKeeperDown() throws Exception { pulsarCluster.getZooKeeper().execCmd("pkill", "-STOP", "java"); - assertHealthcheckFailure(); + try { + assertHealthcheckFailure(); + } finally { + pulsarCluster.getZooKeeper().execCmd("pkill", "-CONT", "java"); + } } - // Disabled until PulsarAdmin can time out (#2891) - // @Test - // public void testBrokerDown() throws Exception { - // for (BrokerContainer b : pulsarCluster.getBrokers()) { - // b.execCmd("pkill", "-STOP", "java"); - // } - // assertHealthcheckFailure(); - // } - @Test public void testBookKeeperDown() throws Exception { for (BKContainer b : pulsarCluster.getBookies()) { b.execCmd("pkill", "-STOP", "java"); } - assertHealthcheckFailure(); - } - - private static Map parseOutput(String output) throws Exception { - ObjectMapper mapper = new ObjectMapper(); - return mapper.readValue(output, new TypeReference>() {}); + try { + assertHealthcheckFailure(); + } finally { + for (BKContainer b : pulsarCluster.getBookies()) { + b.execCmd("pkill", "-CONT", "java"); + } + } } } From 388dcd1e8705f3e3fae7a8807eda15cf2221b80a Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Tue, 31 Mar 2026 13:32:35 -0700 Subject: [PATCH 22/22] [improve][test] Fix deprecation and unchecked compilation warnings in test code (#25447) --- .../mledger/impl/cache/PendingReadsManagerTest.java | 2 ++ .../apache/pulsar/broker/EmbeddedPulsarCluster.java | 2 -- .../AntiAffinityNamespaceGroupExtensionTest.java | 2 +- .../service/OneWayReplicatorDeduplicationTest.java | 1 + .../service/persistent/PersistentTopicTest.java | 1 + .../pulsar/client/api/BrokerServiceLookupTest.java | 1 + .../apache/pulsar/client/api/InterceptorsTest.java | 1 + .../pulsar/client/api/KeySharedSubscriptionTest.java | 1 + ...opicWatcherBackPressureMultipleConsumersTest.java | 4 +--- .../client/api/SimpleProducerConsumerTest.java | 3 +-- .../apache/pulsar/client/api/SimpleSchemaTest.java | 2 ++ .../pulsar/client/impl/ConnectionPoolTest.java | 1 + .../pulsar/client/impl/ProducerMemoryLeakTest.java | 1 + .../compaction/TopicCompactionStrategyTest.java | 3 +-- .../apache/pulsar/admin/cli/PulsarAdminToolTest.java | 2 +- .../pulsar/client/impl/ConsumerBuilderImplTest.java | 2 +- .../apache/pulsar/client/impl/ConsumerImplTest.java | 3 ++- .../client/impl/PartitionedProducerImplTest.java | 2 +- .../pulsar/client/impl/schema/BooleanSchemaTest.java | 12 ++++++------ .../functions/instance/JavaInstanceRunnableTest.java | 1 + .../runtime/kubernetes/KubernetesRuntimeTest.java | 1 + .../worker/FunctionMetaDataTopicTailerTest.java | 1 + .../apache/pulsar/io/common/IOConfigUtilsTest.java | 3 +++ .../auth/token/TokenAuthWithPublicPrivateKeys.java | 2 ++ .../integration/cli/FileSystemPackagesCliTest.java | 2 ++ .../tests/integration/cli/PackagesCliTest.java | 2 ++ .../tests/integration/cli/PulsarVersionTest.java | 1 + .../containers/PulsarInitMetadataContainer.java | 1 + .../integration/io/PulsarGenericObjectSinkTest.java | 1 + .../integration/metrics/OpenTelemetrySanityTest.java | 3 +++ .../tests/integration/offload/TestBaseOffload.java | 3 +++ .../tests/integration/topologies/PulsarCluster.java | 1 + .../pulsar/tests/integration/utils/DockerUtils.java | 1 + .../integration/SimpleProducerConsumerTest.java | 1 + 34 files changed, 50 insertions(+), 20 deletions(-) diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/PendingReadsManagerTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/PendingReadsManagerTest.java index 9c6c79eb95b40..99762235ca649 100644 --- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/PendingReadsManagerTest.java +++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/cache/PendingReadsManagerTest.java @@ -47,6 +47,7 @@ import java.util.function.IntSupplier; import java.util.stream.Collectors; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.apache.bookkeeper.client.api.ReadHandle; import org.apache.bookkeeper.mledger.AsyncCallbacks; @@ -132,6 +133,7 @@ public Object answer(InvocationOnMock invocationOnMock) throws Throwable { @Data + @EqualsAndHashCode(callSuper = false) private static class CapturingReadEntriesCallback extends CompletableFuture implements AsyncCallbacks.ReadEntriesCallback { List entries; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java index f66f5d8633544..b5fac356fc6c6 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/EmbeddedPulsarCluster.java @@ -35,10 +35,8 @@ public class EmbeddedPulsarCluster implements AutoCloseable { private static final String CLUSTER_NAME = "embedded"; - @Builder.Default private int numBrokers = 1; - @Builder.Default private int numBookies = 1; private final String metadataStoreUrl; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java index 78e991eef0404..fe3d7b3a2e6d2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/AntiAffinityNamespaceGroupExtensionTest.java @@ -89,8 +89,8 @@ protected void verifyLoadSheddingWithAntiAffinityNamespace(String namespace, Str // No-op } + @SuppressWarnings("unchecked") protected boolean isLoadManagerUpdatedDomainCache(Object loadManager) throws Exception { - @SuppressWarnings("unchecked") var antiAffinityGroupPolicyHelper = (AntiAffinityGroupPolicyHelper) FieldUtils.readDeclaredField( diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java index c6db10f43c197..b63f15f9ac840 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/OneWayReplicatorDeduplicationTest.java @@ -857,6 +857,7 @@ public ChannelHandlerContext ctx() { } @Test(timeOut = 360 * 1000, dataProvider = "enabledDeduplication") + @SuppressWarnings("unchecked") public void testReplicationLoadSchemaTimeout(boolean enabledDeduplication) throws Exception { waitInternalClientCreated(); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java index e2e30c5e65df9..f69c1d66aec7e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/persistent/PersistentTopicTest.java @@ -304,6 +304,7 @@ public void testAccumulativeStats() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testPersistentPartitionedTopicUnload() throws Exception { final String topicName = "persistent://prop/ns/failedUnload"; final String ns = "prop/ns"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java index 12d3248233026..280d692b50b3e 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/BrokerServiceLookupTest.java @@ -976,6 +976,7 @@ public void testMergeGetPartitionedMetadataRequests() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testMergeLookupRequests() throws Exception { // Assert the lookup service is a "BinaryProtoLookupService". final PulsarClientImpl pulsarClientImpl = (PulsarClientImpl) pulsarClient; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java index baee49f1884ac..3690ad80f3f22 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/InterceptorsTest.java @@ -47,6 +47,7 @@ import org.testng.annotations.Test; @Test(groups = "broker-api") +@SuppressWarnings("unchecked") public class InterceptorsTest extends SharedPulsarBaseTest { private static final Logger log = LoggerFactory.getLogger(InterceptorsTest.class); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java index 8496bed6d9679..6434a18b39300 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/KeySharedSubscriptionTest.java @@ -2047,6 +2047,7 @@ public Object[][] allowKeySharedOutOfOrder() { * - at last, all messages will be received. */ @Test(timeOut = 180 * 1000, dataProvider = "allowKeySharedOutOfOrder") // the test will be finished in 60s. + @SuppressWarnings("unchecked") public void testRecentJoinedPosWillNotStuckOtherConsumer(KeySharedImplementationType impl, boolean allowKeySharedOutOfOrder) throws Exception { final int messagesSentPerTime = 100; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java index 9690e9887ada4..eeabe37c66099 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/PatternConsumerTopicWatcherBackPressureMultipleConsumersTest.java @@ -71,9 +71,8 @@ protected boolean useTcpLookup() { protected void cleanup() throws Exception { super.internalCleanup(); } - @SuppressWarnings("deprecation") - @Test(timeOut = 60 * 1000) + @SuppressWarnings({"deprecation", "unchecked"}) public void testPatternConsumerWithLargeAmountOfConcurrentClientConnections() throws PulsarAdminException, InterruptedException, IOException, ExecutionException, TimeoutException { // create a new namespace for this test @@ -84,7 +83,6 @@ public void testPatternConsumerWithLargeAmountOfConcurrentClientConnections() final int numberOfClients = 100; // create a long topic name to consume more memory per topic - @SuppressWarnings("unchecked") final String topicNamePrefix = "persistent://" + namespace + "/" + StringUtils.repeat('a', 512) + "-"; // number of topics to create final int topicCount = 300; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java index 47339bc5fe613..ccd7efc4322de 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleProducerConsumerTest.java @@ -4968,9 +4968,8 @@ public Object[][] enableBatchSend() { {false} }; } - @SuppressWarnings("deprecation") - @Test(dataProvider = "enableBatchSend") + @SuppressWarnings({"deprecation", "unchecked"}) public void testPublishWithCreateMessageManually(boolean enableBatchSend) throws Exception { final int messageCount = 10; final List messageArrayBeforeSend = Collections.synchronizedList(new ArrayList<>()); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java index f3e4ea3c5858e..51776748c27d7 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/SimpleSchemaTest.java @@ -356,6 +356,7 @@ public void newProducerForMessageSchemaOnTopicWithMultiVersionSchema() throws Ex } @Test + @SuppressWarnings("unchecked") public void testProducerConnectStateWhenRegisteringSchema() throws Exception { final String topic = BrokerTestUtil.newUniqueName(NAMESPACE_ALWAYS_COMPATIBLE + "/tp"); final String subscription = "s1"; @@ -393,6 +394,7 @@ protected void handleGetOrCreateSchemaResponse( } @Test + @SuppressWarnings("unchecked") public void testNoMemoryLeakIfSchemaIncompatible() throws Exception { final String topic = BrokerTestUtil.newUniqueName(NAMESPACE_NEVER_COMPATIBLE + "/tp"); final String subscription = "s1"; diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java index d7d1fee31ee68..e8d30c90aa3a9 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ConnectionPoolTest.java @@ -211,6 +211,7 @@ public void testEnableConnectionPool() throws Exception { @Test + @SuppressWarnings("unchecked") public void testSetProxyToTargetBrokerAddress() throws Exception { ClientConfigurationData conf = new ClientConfigurationData(); conf.setConnectionsPerBroker(1); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java index affb7bc5998f7..8f857c952d8e2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/ProducerMemoryLeakTest.java @@ -317,6 +317,7 @@ public Object[][] failedInterceptAt() { } @Test(dataProvider = "failedInterceptAt") + @SuppressWarnings("unchecked") public void testInterceptorError(String method) throws Exception { final String topicName = newTopicName(); admin.topics().createNonPartitionedTopic(topicName); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java index eee8498ed174b..770ce140460ce 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/compaction/TopicCompactionStrategyTest.java @@ -28,8 +28,7 @@ public class TopicCompactionStrategyTest { public static class DummyTopicCompactionStrategy implements TopicCompactionStrategy { @Override - @SuppressWarnings("unchecked") - public Schema getSchema() { + public Schema getSchema() { return Schema.BYTES; } 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 f39b4f3e21ef1..82132078cd783 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 @@ -1589,7 +1589,7 @@ public void topicsSetOffloadPolicies() throws Exception { } - @SuppressWarnings("deprecation") + @SuppressWarnings({"deprecation", "unchecked"}) @Test public void topics() throws Exception { PulsarAdmin admin = Mockito.mock(PulsarAdmin.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java index f357aa316303c..186d6ad99bb72 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerBuilderImplTest.java @@ -121,7 +121,7 @@ public void testConsumerBuilderImplWhenSchemaIsNull() { @Test(expectedExceptions = IllegalArgumentException.class) public void testConsumerBuilderImplWhenTopicNamesVarargsIsNull() { - consumerBuilderImpl.topic(null); + consumerBuilderImpl.topic((String[]) null); } @Test(expectedExceptions = IllegalArgumentException.class) diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java index 6db122db23d37..27ba9f4f2edeb 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/ConsumerImplTest.java @@ -70,7 +70,7 @@ public void setUp() { createConsumer(consumerConf); } - @SuppressWarnings("rawtypes") + @SuppressWarnings({"rawtypes", "unchecked"}) private void createConsumer(ConsumerConfigurationData consumerConf) { executorProvider = new ExecutorProvider(1, "ConsumerImplTest"); internalExecutor = Executors.newSingleThreadScheduledExecutor(); @@ -148,6 +148,7 @@ public void testNotifyPendingReceivedCallback_CompleteWithExceptionWhenMessageIs } @Test(invocationTimeOut = 1000) + @SuppressWarnings("unchecked") public void testNotifyPendingReceivedCallback_InterceptorsWorksWithPrefetchDisabled() { CompletableFuture> receiveFuture = new CompletableFuture<>(); @SuppressWarnings("rawtypes") diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java index 5df1eb68509d4..f2acdfa3f17b7 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/PartitionedProducerImplTest.java @@ -73,7 +73,7 @@ public class PartitionedProducerImplTest { private CompletableFuture producerCreatedFuture; @BeforeMethod(alwaysRun = true) - @SuppressWarnings("rawtypes") + @SuppressWarnings({"rawtypes", "unchecked"}) public void setup() { client = mock(PulsarClientImpl.class); ConnectionPool connectionPool = mock(ConnectionPool.class); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/BooleanSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/BooleanSchemaTest.java index 750e308151d33..84cce1f7ec66e 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/BooleanSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/BooleanSchemaTest.java @@ -41,8 +41,8 @@ public void testSchemaEncode() { @Test public void testSchemaEncodeDecodeFidelity() { BooleanSchema schema = BooleanSchema.of(); - Assert.assertEquals(new Boolean(true), schema.decode(schema.encode(true))); - Assert.assertEquals(new Boolean(false), schema.decode(schema.encode(false))); + Assert.assertEquals(Boolean.valueOf(true), schema.decode(schema.encode(true))); + Assert.assertEquals(Boolean.valueOf(false), schema.decode(schema.encode(false))); } @Test @@ -54,16 +54,16 @@ public void testSchemaDecode() { 0 }; BooleanSchema schema = BooleanSchema.of(); - Assert.assertEquals(new Boolean(true), schema.decode(trueBytes)); - Assert.assertEquals(new Boolean(false), schema.decode(falseBytes)); + Assert.assertEquals(Boolean.valueOf(true), schema.decode(trueBytes)); + Assert.assertEquals(Boolean.valueOf(false), schema.decode(falseBytes)); ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer(1); byteBuf.writeBytes(trueBytes); - Assert.assertEquals(new Boolean(true), schema.decode(byteBuf)); + Assert.assertEquals(Boolean.valueOf(true), schema.decode(byteBuf)); byteBuf.writerIndex(0); byteBuf.writeBytes(falseBytes); - Assert.assertEquals(new Boolean(false), schema.decode(byteBuf)); + Assert.assertEquals(Boolean.valueOf(false), schema.decode(byteBuf)); } @Test diff --git a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java index c66910fd0f0a9..0e76761fb4787 100644 --- a/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java +++ b/pulsar-functions/instance/src/test/java/org/apache/pulsar/functions/instance/JavaInstanceRunnableTest.java @@ -197,6 +197,7 @@ public void testFunctionAsyncTime() throws Exception { } @Test + @SuppressWarnings("unchecked") public void testFunctionResultNull() throws Exception { JavaExecutionResult javaExecutionResult = new JavaExecutionResult(); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java index ed12fda0ce1af..252906557b632 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/kubernetes/KubernetesRuntimeTest.java @@ -1011,6 +1011,7 @@ public void testGolangConstructor() throws Exception { verifyGolangInstance(config); } + @SuppressWarnings("deprecation") private void verifyGolangInstance(InstanceConfig config) throws Exception { KubernetesRuntime container = factory.createContainer(config, userJarFile, userJarFile, null, null, 30L); 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 b3a6594ac5ba8..6decd0271ec5f 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 @@ -51,6 +51,7 @@ public class FunctionMetaDataTopicTailerTest { private FunctionMetaDataTopicTailer fsc; @BeforeMethod(alwaysRun = true) + @SuppressWarnings("unchecked") public void before() throws Exception { this.reader = mock(Reader.class); this.readerBuilder = mock(ReaderBuilder.class); diff --git a/pulsar-io/common/src/test/java/org/apache/pulsar/io/common/IOConfigUtilsTest.java b/pulsar-io/common/src/test/java/org/apache/pulsar/io/common/IOConfigUtilsTest.java index b9c09c67888ba..37986b0259b2b 100644 --- a/pulsar-io/common/src/test/java/org/apache/pulsar/io/common/IOConfigUtilsTest.java +++ b/pulsar-io/common/src/test/java/org/apache/pulsar/io/common/IOConfigUtilsTest.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import org.apache.pulsar.client.api.ConsumerBuilder; import org.apache.pulsar.client.api.PulsarClient; @@ -149,6 +150,7 @@ static class TestConfig { } @Data + @EqualsAndHashCode(callSuper = false) static class DerivedConfig extends TestConfig { @FieldDoc( required = true, @@ -160,6 +162,7 @@ static class DerivedConfig extends TestConfig { } @Data + @EqualsAndHashCode(callSuper = false) static class DerivedDerivedConfig extends DerivedConfig { @FieldDoc( required = true, diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/auth/token/TokenAuthWithPublicPrivateKeys.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/auth/token/TokenAuthWithPublicPrivateKeys.java index 1ccdf90194408..a7ec0983aad67 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/auth/token/TokenAuthWithPublicPrivateKeys.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/auth/token/TokenAuthWithPublicPrivateKeys.java @@ -74,12 +74,14 @@ protected void createKeysAndTokens(PulsarContainer container) throws Exception { log.info("Created proxy token: {}", proxyAuthToken); } + @SuppressWarnings("deprecation") @Override protected void configureBroker(BrokerContainer brokerContainer) throws Exception { brokerContainer.withFileSystemBind(publicKeyFile.toString(), PUBLIC_KEY_PATH_INSIDE_CONTAINER); brokerContainer.withEnv("tokenPublicKey", "file://" + PUBLIC_KEY_PATH_INSIDE_CONTAINER); } + @SuppressWarnings("deprecation") @Override protected void configureProxy(ProxyContainer proxyContainer) throws Exception { proxyContainer.withFileSystemBind(publicKeyFile.toString(), PUBLIC_KEY_PATH_INSIDE_CONTAINER); diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java index 59b8a6c400834..c0c67a1e8e383 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/FileSystemPackagesCliTest.java @@ -38,6 +38,7 @@ public class FileSystemPackagesCliTest extends TestRetrySupport { private static final String clusterNamePrefix = "file-system-packages-service"; private PulsarCluster pulsarCluster; + @SuppressWarnings("deprecation") @BeforeClass(alwaysRun = true) public final void setup() throws Exception { incrementSetupNumber(); @@ -66,6 +67,7 @@ private Map getPackagesManagementServiceEnvs() { return envs; } + @SuppressWarnings("deprecation") @Test(timeOut = 60000 * 8) public void testPackagesOperationsWithUploadingPackagesUsingFileSystemStorageProvider() throws Exception { BrokerContainer container = pulsarCluster.getBroker(0); diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java index 440ab2fb3bf2e..fd979c112fe79 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PackagesCliTest.java @@ -39,6 +39,7 @@ public class PackagesCliTest extends TestRetrySupport { private static final String clusterNamePrefix = "packages-service"; private PulsarCluster pulsarCluster; + @SuppressWarnings("deprecation") @BeforeClass(alwaysRun = true) public final void setup() throws Exception { incrementSetupNumber(); @@ -82,6 +83,7 @@ public void testPackagesOperationsWithoutUploadingPackages() throws Exception { } } + @SuppressWarnings("deprecation") @Test(timeOut = 60000 * 8) public void testPackagesOperationsWithUploadingPackages() throws Exception { String testPackageName = "function://public/default/test@v1"; diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PulsarVersionTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PulsarVersionTest.java index 711dd3b9c001e..e33540421464e 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PulsarVersionTest.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/cli/PulsarVersionTest.java @@ -36,6 +36,7 @@ public class PulsarVersionTest extends TestRetrySupport { private static final String clusterNamePrefix = "pulsar-version"; private PulsarCluster pulsarCluster; + @SuppressWarnings("deprecation") @Override @BeforeClass(alwaysRun = true) public final void setup() throws Exception { diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/PulsarInitMetadataContainer.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/PulsarInitMetadataContainer.java index 68757d9fecef8..bb26cc7a62873 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/PulsarInitMetadataContainer.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/containers/PulsarInitMetadataContainer.java @@ -37,6 +37,7 @@ public class PulsarInitMetadataContainer extends GenericContainer getOpenTelemetryProps(String exporter, Pair ... extraProps) { var defaultProps = Map.of( "OTEL_SDK_DISABLED", "false", diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/offload/TestBaseOffload.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/offload/TestBaseOffload.java index 339660fd7858c..c2a98e418dc6a 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/offload/TestBaseOffload.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/offload/TestBaseOffload.java @@ -52,6 +52,7 @@ private byte[] buildEntry(String pattern) { return entry; } + @SuppressWarnings("deprecation") protected void testPublishOffloadAndConsumeViaCLI(String serviceUrl, String adminUrl) throws Exception { final String tenant = "offload-test-cli-" + randomName(4); final String namespace = tenant + "/ns1"; @@ -133,6 +134,7 @@ protected void testPublishOffloadAndConsumeViaCLI(String serviceUrl, String admi } } + @SuppressWarnings("deprecation") protected void testPublishOffloadAndConsumeViaThreshold(String serviceUrl, String adminUrl) throws Exception { final String tenant = "offload-test-threshold-" + randomName(4); final String namespace = tenant + "/ns1"; @@ -269,6 +271,7 @@ private long writeAndWaitForOffload(String serviceUrl, String adminUrl, String t } } + @SuppressWarnings("deprecation") public boolean ledgerExistsInBookKeeper(long ledgerId) throws Exception { ClientConfiguration bkConf = new ClientConfiguration(); bkConf.setZkServers(pulsarCluster.getZKConnString()); diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/topologies/PulsarCluster.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/topologies/PulsarCluster.java index 73d9076ad08d0..fa54a49d48bf6 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/topologies/PulsarCluster.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/topologies/PulsarCluster.java @@ -115,6 +115,7 @@ public static PulsarCluster forSpec(PulsarClusterSpec spec, CSContainer csContai private final String metadataStoreUrl; private final String configurationMetadataStoreUrl; + @SuppressWarnings("deprecation") private PulsarCluster(PulsarClusterSpec spec, Network network, CSContainer csContainer, boolean sharedCsContainer) { this.spec = spec; this.sharedCsContainer = sharedCsContainer; diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/utils/DockerUtils.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/utils/DockerUtils.java index fde3463498c46..419cae3787a99 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/utils/DockerUtils.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/utils/DockerUtils.java @@ -148,6 +148,7 @@ public static void dumpContainerDirToTargetCompressed(DockerClient dockerClient, } } + @SuppressWarnings("deprecation") public static void dumpContainerLogDirToTarget(DockerClient docker, String containerId, String path) { File targetDirectory = getTargetDirectory(containerId); diff --git a/tests/pulsar-client-shade-test/src/test/java/org/apache/pulsar/tests/integration/SimpleProducerConsumerTest.java b/tests/pulsar-client-shade-test/src/test/java/org/apache/pulsar/tests/integration/SimpleProducerConsumerTest.java index e245d81c9fe85..b178a6385408a 100644 --- a/tests/pulsar-client-shade-test/src/test/java/org/apache/pulsar/tests/integration/SimpleProducerConsumerTest.java +++ b/tests/pulsar-client-shade-test/src/test/java/org/apache/pulsar/tests/integration/SimpleProducerConsumerTest.java @@ -111,6 +111,7 @@ public void cleanup() throws Exception { } } + @SuppressWarnings("deprecation") private PulsarClient newPulsarClient(String url, int intervalInSecs) throws PulsarClientException { return PulsarClient.builder().serviceUrl(url).statsInterval(intervalInSecs, TimeUnit.SECONDS).build(); }