You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by lh...@apache.org on 2026/08/04 15:02:26 UTC
(pulsar) branch branch-4.2 updated (d8df12dd94ac -> ff1952ee4e59)
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a change to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
from d8df12dd94ac [fix][sec][branch-4.2] Upgrade Spring to 7.0.8 (#26270)
new 77999672a668 [improve][fn] Standardize log4j2 Root logger configuration to use system property (#26121)
new 9430ebe89588 [fix][test] Await reader reconnect after seek() to fix flaky TopicReaderTest assertions (#26141)
new 1dc88987bc14 [fix][sec] Bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /pulsar-function-go/examples (#26231)
new eca68d5d773f [fix][sec] Upgrade grpc in pulsar-function-go to 1.82.1 to fix GHSA-hrxh-6v49-42gf (#26235)
new 340d5704a642 [fix][broker] Log exception in PulsarMetadataEventSynchronizer failure path (#26203)
new cd889206c1be [fix][ml] Tolerate concurrent creation of the managed ledger z-node (#26247)
new d85cfae1ddb2 [fix][sec] Upgrade lz4-java to 1.11.1 to address CVE-2026-59949 (#26250)
new ff1952ee4e59 [fix][client] Avoid exception in ConsumerImpl hasMessageAvailable before first receive (#25857)
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
distribution/server/src/assemble/LICENSE.bin.txt | 2 +-
.../bookkeeper/mledger/impl/MetaStoreImpl.java | 11 ++
.../bookkeeper/mledger/impl/MetaStoreImplTest.java | 48 ++++++++
pom.xml | 2 +-
.../service/PulsarMetadataEventSynchronizer.java | 2 +-
.../client/api/SimpleProducerConsumerTest.java | 132 +++++++++++++++++++++
.../apache/pulsar/client/api/TopicReaderTest.java | 16 ++-
.../apache/pulsar/client/impl/ConsumerImpl.java | 72 ++++++-----
pulsar-function-go/examples/go.mod | 8 +-
pulsar-function-go/examples/go.sum | 40 +++----
pulsar-function-go/go.mod | 8 +-
pulsar-function-go/go.sum | 40 +++----
.../src/main/resources/java_instance_log4j2.xml | 3 +-
.../main/resources/kubernetes_instance_log4j2.xml | 3 +-
14 files changed, 297 insertions(+), 90 deletions(-)
(pulsar) 05/08: [fix][broker] Log exception in PulsarMetadataEventSynchronizer failure path (#26203)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 340d5704a642c031a973986f1dc79b2890e43b2a
Author: SongOf <46...@users.noreply.github.com>
AuthorDate: Mon Jul 20 18:08:34 2026 +0800
[fix][broker] Log exception in PulsarMetadataEventSynchronizer failure path (#26203)
Co-authored-by: maxlisongsong <ma...@didiglobal.com>
(cherry picked from commit f1650c5ab57bb9742717852e2496ffcea0f6f7b9)
---
.../apache/pulsar/broker/service/PulsarMetadataEventSynchronizer.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarMetadataEventSynchronizer.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarMetadataEventSynchronizer.java
index 686a718a1794..d93c2393a2fa 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarMetadataEventSynchronizer.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/PulsarMetadataEventSynchronizer.java
@@ -209,7 +209,7 @@ public class PulsarMetadataEventSynchronizer implements MetadataEventSynchronize
.collect(Collectors.toList())), c, msg);
}
} catch (Exception e) {
- log.warn("Failed to synchronize {} for {}", msg.getMessageId(), topicName);
+ log.warn("Failed to synchronize {} for {}", msg.getMessageId(), topicName, e);
}
});
consumerBuilder.subscribeAsync().thenAccept(consumer -> {
(pulsar) 08/08: [fix][client] Avoid exception in ConsumerImpl hasMessageAvailable before first receive (#25857)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit ff1952ee4e59787e478f3512fb784a907f1e944d
Author: void-ptr974 <vo...@protonmail.com>
AuthorDate: Mon Jul 27 17:39:15 2026 +0800
[fix][client] Avoid exception in ConsumerImpl hasMessageAvailable before first receive (#25857)
Co-authored-by: Lari Hotari <lh...@users.noreply.github.com>
(cherry picked from commit ac4cda7fc12adbbe7f86b3a5f3c84340f91829ca)
---
.../client/api/SimpleProducerConsumerTest.java | 132 +++++++++++++++++++++
.../apache/pulsar/client/impl/ConsumerImpl.java | 72 ++++++-----
2 files changed, 175 insertions(+), 29 deletions(-)
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 dcafd157a908..30b425e9fd0e 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
@@ -21,6 +21,7 @@ package org.apache.pulsar.client.api;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.pulsar.common.naming.TopicName.PARTITIONED_TOPIC_SUFFIX;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
@@ -3503,6 +3504,137 @@ public class SimpleProducerConsumerTest extends ProducerConsumerBase {
log.info("-- Exiting {} test --", methodName);
}
+ @Test(timeOut = 100000)
+ public void testConsumerImplHasMessageAvailableDoesNotThrowBeforeReceive() throws Exception {
+ log.info("-- Starting {} test --", methodName);
+ String topicName = BrokerTestUtil.newUniqueName("persistent://my-property/my-ns/has-message-available");
+
+ @Cleanup
+ Producer<byte[]> producer = pulsarClient.newProducer()
+ .topic(topicName)
+ .enableBatching(false)
+ .create();
+ producer.send("existing-message".getBytes(UTF_8));
+
+ // hasMessageAvailable is exposed by ConsumerImpl, not the Consumer public API.
+ @Cleanup
+ ConsumerImpl<byte[]> latestConsumer = (ConsumerImpl<byte[]>) pulsarClient.newConsumer()
+ .topic(topicName)
+ .subscriptionName("test-has-message-available-latest")
+ .receiverQueueSize(0)
+ .subscribe();
+ assertThat(latestConsumer.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(false);
+ assertThatCode(latestConsumer::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertFalse(latestConsumer.hasMessageAvailable());
+
+ @Cleanup
+ ConsumerImpl<byte[]> earliestConsumer = (ConsumerImpl<byte[]>) pulsarClient.newConsumer()
+ .topic(topicName)
+ .subscriptionName("test-has-message-available-earliest")
+ .subscriptionInitialPosition(SubscriptionInitialPosition.Earliest)
+ .receiverQueueSize(0)
+ .subscribe();
+ assertThat(earliestConsumer.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(true);
+ assertThatCode(earliestConsumer::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertTrue(earliestConsumer.hasMessageAvailable());
+
+ log.info("-- Exiting {} test --", methodName);
+ }
+
+ @Test(timeOut = 100000)
+ public void testReaderHasMessageAvailableDoesNotThrowBeforeRead() throws Exception {
+ log.info("-- Starting {} test --", methodName);
+ String topicName = BrokerTestUtil.newUniqueName("persistent://my-property/my-ns/reader-has-message-available");
+
+ @Cleanup
+ Producer<byte[]> producer = pulsarClient.newProducer()
+ .topic(topicName)
+ .enableBatching(false)
+ .create();
+ producer.send("existing-message".getBytes(UTF_8));
+
+ @Cleanup
+ Reader<byte[]> latestReader = pulsarClient.newReader()
+ .topic(topicName)
+ .startMessageId(MessageId.latest)
+ .receiverQueueSize(0)
+ .create();
+ assertThat(latestReader.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(false);
+ assertThatCode(latestReader::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertFalse(latestReader.hasMessageAvailable());
+
+ @Cleanup
+ Reader<byte[]> earliestReader = pulsarClient.newReader()
+ .topic(topicName)
+ .startMessageId(MessageId.earliest)
+ .receiverQueueSize(0)
+ .create();
+ assertThat(earliestReader.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(true);
+ assertThatCode(earliestReader::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertTrue(earliestReader.hasMessageAvailable());
+
+ log.info("-- Exiting {} test --", methodName);
+ }
+
+ @Test(timeOut = 100000)
+ public void testHasMessageAvailableDoesNotThrowOnEmptyTopic() throws Exception {
+ log.info("-- Starting {} test --", methodName);
+ String topicName = BrokerTestUtil.newUniqueName("persistent://my-property/my-ns/empty-has-message-available");
+
+ @Cleanup
+ ConsumerImpl<byte[]> consumer = (ConsumerImpl<byte[]>) pulsarClient.newConsumer()
+ .topic(topicName)
+ .subscriptionName("test-empty-has-message-available")
+ .receiverQueueSize(0)
+ .subscribe();
+ assertThat(consumer.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(false);
+ assertThatCode(consumer::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertFalse(consumer.hasMessageAvailable());
+
+ @Cleanup
+ Reader<byte[]> latestReader = pulsarClient.newReader()
+ .topic(topicName)
+ .startMessageId(MessageId.latest)
+ .receiverQueueSize(0)
+ .create();
+ assertThat(latestReader.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(false);
+ assertThatCode(latestReader::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertFalse(latestReader.hasMessageAvailable());
+
+ @Cleanup
+ Reader<byte[]> earliestReader = pulsarClient.newReader()
+ .topic(topicName)
+ .startMessageId(MessageId.earliest)
+ .receiverQueueSize(0)
+ .create();
+ assertThat(earliestReader.hasMessageAvailableAsync())
+ .succeedsWithin(Duration.ofSeconds(10))
+ .isEqualTo(false);
+ assertThatCode(earliestReader::hasMessageAvailable)
+ .doesNotThrowAnyException();
+ assertFalse(earliestReader.hasMessageAvailable());
+
+ log.info("-- Exiting {} test --", methodName);
+ }
+
@Test(timeOut = 100000)
public void testMultiTopicsConsumerImplPauseForPartitionNumberChange() throws Exception {
log.info("-- Starting {} test --", methodName);
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
index 0b5ecf7e13e6..bc9646620e12 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
@@ -2724,6 +2724,19 @@ public class ConsumerImpl<T> extends ConsumerBase<T> implements ConnectionHandle
// we haven't read yet. use startMessageId for comparison
if (lastDequeuedMessageId == MessageId.earliest) {
+ if (startMessageId == null) {
+ internalGetLastMessageIdAsync().thenAccept(response -> {
+ lastMessageIdInBroker = response.lastMessageId;
+ completehasMessageAvailableWithValue(booleanFuture,
+ hasMoreMessagesThanMarkDeletePosition(response, false, false));
+ }).exceptionally(e -> {
+ log.error("[{}][{}] Failed getLastMessageId command", topic, subscription, e);
+ booleanFuture.completeExceptionally(FutureUtil.unwrapCompletionException(e));
+ return null;
+ });
+ return booleanFuture;
+ }
+
// If the last seek is called with timestamp, startMessageId cannot represent the position to start, so we
// have to get the mark-delete position from the GetLastMessageId response to compare as well.
// if we are starting from latest, we should seek to the actual last message first.
@@ -2739,33 +2752,12 @@ public class ConsumerImpl<T> extends ConsumerBase<T> implements ConnectionHandle
}
future.thenAccept(response -> {
- MessageIdAdv lastMessageId = (MessageIdAdv) response.lastMessageId;
- MessageIdAdv markDeletePosition = (MessageIdAdv) response.markDeletePosition;
-
- if (markDeletePosition != null && !(markDeletePosition.getEntryId() < 0
- && markDeletePosition.getLedgerId() > lastMessageId.getLedgerId())) {
- // we only care about comparing ledger ids and entry ids as mark delete position doesn't have
- // other ids such as batch index
- int result = ComparisonChain.start()
- .compare(markDeletePosition.getLedgerId(), lastMessageId.getLedgerId())
- .compare(markDeletePosition.getEntryId(), lastMessageId.getEntryId())
- .result();
- if (lastMessageId.getEntryId() < 0) {
- completehasMessageAvailableWithValue(booleanFuture, false);
- } else if (hasSoughtByTimestamp) {
- completehasMessageAvailableWithValue(booleanFuture, result < 0);
- } else {
- completehasMessageAvailableWithValue(booleanFuture,
- resetIncludeHead ? result <= 0 : result < 0);
- }
- } else if (lastMessageId == null || lastMessageId.getEntryId() < 0) {
- completehasMessageAvailableWithValue(booleanFuture, false);
- } else {
- completehasMessageAvailableWithValue(booleanFuture, resetIncludeHead);
- }
+ completehasMessageAvailableWithValue(booleanFuture,
+ hasMoreMessagesThanMarkDeletePosition(response,
+ !hasSoughtByTimestamp && resetIncludeHead, resetIncludeHead));
}).exceptionally(ex -> {
log.error("[{}][{}] Failed getLastMessageId command", topic, subscription, ex);
- booleanFuture.completeExceptionally(ex.getCause());
+ booleanFuture.completeExceptionally(FutureUtil.unwrapCompletionException(ex));
return null;
});
@@ -2782,8 +2774,8 @@ public class ConsumerImpl<T> extends ConsumerBase<T> implements ConnectionHandle
completehasMessageAvailableWithValue(booleanFuture,
hasMoreMessages(lastMessageIdInBroker, startMessageId, resetIncludeHead));
}).exceptionally(e -> {
- log.error("[{}][{}] Failed getLastMessageId command", topic, subscription);
- booleanFuture.completeExceptionally(e.getCause());
+ log.error("[{}][{}] Failed getLastMessageId command", topic, subscription, e);
+ booleanFuture.completeExceptionally(FutureUtil.unwrapCompletionException(e));
return null;
});
@@ -2799,8 +2791,8 @@ public class ConsumerImpl<T> extends ConsumerBase<T> implements ConnectionHandle
completehasMessageAvailableWithValue(booleanFuture,
hasMoreMessages(lastMessageIdInBroker, lastDequeuedMessageId, false));
}).exceptionally(e -> {
- log.error("[{}][{}] Failed getLastMessageId command", topic, subscription);
- booleanFuture.completeExceptionally(e.getCause());
+ log.error("[{}][{}] Failed getLastMessageId command", topic, subscription, e);
+ booleanFuture.completeExceptionally(FutureUtil.unwrapCompletionException(e));
return null;
});
}
@@ -2824,6 +2816,28 @@ public class ConsumerImpl<T> extends ConsumerBase<T> implements ConnectionHandle
&& ((MessageIdImpl) lastMessageIdInBroker).getEntryId() != -1;
}
+ private boolean hasMoreMessagesThanMarkDeletePosition(GetLastMessageIdResponse response, boolean inclusive,
+ boolean includeHeadWhenMarkDeleteIsAfterLastMessage) {
+ MessageIdAdv lastMessageId = (MessageIdAdv) response.lastMessageId;
+ if (lastMessageId == null || lastMessageId.getEntryId() < 0) {
+ return false;
+ }
+
+ MessageIdAdv markDeletePosition = (MessageIdAdv) response.markDeletePosition;
+ if (markDeletePosition == null || (markDeletePosition.getEntryId() < 0
+ && markDeletePosition.getLedgerId() > lastMessageId.getLedgerId())) {
+ return includeHeadWhenMarkDeleteIsAfterLastMessage;
+ }
+
+ // We only care about comparing ledger ids and entry ids as mark delete position doesn't have
+ // other ids such as batch index.
+ int result = ComparisonChain.start()
+ .compare(markDeletePosition.getLedgerId(), lastMessageId.getLedgerId())
+ .compare(markDeletePosition.getEntryId(), lastMessageId.getEntryId())
+ .result();
+ return inclusive ? result <= 0 : result < 0;
+ }
+
private static final class GetLastMessageIdResponse {
final MessageId lastMessageId;
final MessageId markDeletePosition;
(pulsar) 02/08: [fix][test] Await reader reconnect after seek() to fix flaky TopicReaderTest assertions (#26141)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 9430ebe8958881fb0da479661c61882224ef045a
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Fri Jul 3 00:54:49 2026 +0300
[fix][test] Await reader reconnect after seek() to fix flaky TopicReaderTest assertions (#26141)
(cherry picked from commit e0c58b0f9a94f7ba25551255eb61e9938f334edd)
---
.../org/apache/pulsar/client/api/TopicReaderTest.java | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
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 6e872627fb67..304ddd1fd2f9 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
@@ -55,6 +55,7 @@ import org.apache.pulsar.client.impl.TopicMessageIdImpl;
import org.apache.pulsar.client.impl.TopicMessageImpl;
import org.apache.pulsar.common.policies.data.TopicStats;
import org.apache.pulsar.common.util.RelativeTimeUtil;
+import org.awaitility.Awaitility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
@@ -1291,8 +1292,9 @@ public class TopicReaderTest extends SharedPulsarBaseTest {
testMessageOrderAndDuplicates(messageSetB, receivedMessage, expectedMessage);
}
- // Reader should be finished
- assertTrue(reader.isConnected());
+ // Reader should be finished. seek() triggers an asynchronous reconnect of the underlying consumer(s), so
+ // isConnected() can be transiently false right after the post-seek reads; await it to avoid flakiness.
+ Awaitility.await().untilAsserted(() -> assertTrue(reader.isConnected()));
assertFalse(reader.hasMessageAvailable());
assertEquals(((ReaderImpl) reader).getConsumer().numMessagesInQueue(), 0);
@@ -1337,8 +1339,9 @@ public class TopicReaderTest extends SharedPulsarBaseTest {
Assert.assertTrue(messageSetB.add(receivedMessage), "Received duplicate message " + receivedMessage);
}
- // Reader should be finished
- assertTrue(reader.isConnected());
+ // Reader should be finished. seek() triggers an asynchronous reconnect of the underlying consumer(s), so
+ // isConnected() can be transiently false right after the post-seek reads; await it to avoid flakiness.
+ Awaitility.await().untilAsserted(() -> assertTrue(reader.isConnected()));
assertFalse(reader.hasMessageAvailable());
assertEquals(((MultiTopicsReaderImpl) reader).getMultiTopicsConsumer().numMessagesInQueue(), 0);
@@ -1392,8 +1395,9 @@ public class TopicReaderTest extends SharedPulsarBaseTest {
testMessageOrderAndDuplicates(messageSetB, receivedMessage, expectedMessage);
}
- // Reader should be finished
- assertTrue(reader.isConnected());
+ // Reader should be finished. seek() triggers an asynchronous reconnect of the underlying consumer(s), so
+ // isConnected() can be transiently false right after the post-seek reads; await it to avoid flakiness.
+ Awaitility.await().untilAsserted(() -> assertTrue(reader.isConnected()));
assertFalse(reader.hasMessageAvailable());
assertEquals(((ReaderImpl) reader).getConsumer().numMessagesInQueue(), 0);
(pulsar) 06/08: [fix][ml] Tolerate concurrent creation of the managed ledger z-node (#26247)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit cd889206c1be9e50c2238c699fbdce529014251c
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Mon Jul 27 10:17:48 2026 +0300
[fix][ml] Tolerate concurrent creation of the managed ledger z-node (#26247)
(cherry picked from commit d54d83df25ca3ebdb7574a80f31e5252d5d91995)
---
.../bookkeeper/mledger/impl/MetaStoreImpl.java | 11 +++++
.../bookkeeper/mledger/impl/MetaStoreImplTest.java | 48 ++++++++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
index 4e7adf9aeaf5..a1d4b109d468 100644
--- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
+++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
@@ -132,6 +132,17 @@ public class MetaStoreImpl implements MetaStore, Consumer<Notification> {
}
callback.operationComplete(ledgerBuilder, stat);
}).exceptionally(ex -> {
+ if (FutureUtil.unwrapCompletionException(ex)
+ instanceof MetadataStoreException.BadVersionException) {
+ // The z-node was created concurrently after the read above returned
+ // "not found". This happens for example when the broker creates the
+ // partitions of a topic while the same topic is being loaded. Read the
+ // z-node back instead of failing the managed ledger initialization.
+ log.info("Managed ledger path '{}' was concurrently created, reading it "
+ + "back", path);
+ getManagedLedgerInfo(ledgerName, false, null, callback);
+ return null;
+ }
callback.operationFailed(getException(ex));
return null;
});
diff --git a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/MetaStoreImplTest.java b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/MetaStoreImplTest.java
index e6802906791e..e7a524c30107 100644
--- a/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/MetaStoreImplTest.java
+++ b/managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/MetaStoreImplTest.java
@@ -18,6 +18,10 @@
*/
package org.apache.bookkeeper.mledger.impl;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.spy;
+import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
@@ -25,6 +29,7 @@ import static org.testng.Assert.fail;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -37,6 +42,7 @@ import org.apache.bookkeeper.test.MockedBookKeeperTestCase;
import org.apache.pulsar.metadata.api.MetadataCache;
import org.apache.pulsar.metadata.api.MetadataStoreException;
import org.apache.pulsar.metadata.api.Stat;
+import org.apache.pulsar.metadata.api.extended.MetadataStoreExtended;
import org.apache.pulsar.metadata.impl.FaultInjectionMetadataStore;
import org.testng.annotations.Test;
@@ -158,6 +164,48 @@ public class MetaStoreImplTest extends MockedBookKeeperTestCase {
promise.get();
}
+ /**
+ * The z-node backing a managed ledger can be created by another party (for example
+ * {@code AdminResource#tryCreatePartitionAsync}) in between the read and the write that
+ * {@code getManagedLedgerInfo(createIfMissing = true)} performs. The metadata store reports that as a
+ * {@link MetadataStoreException.BadVersionException}, which must not fail the managed ledger initialization.
+ */
+ @Test(timeOut = 20000)
+ void createMLNodeConcurrently() throws Exception {
+ String ledgerName = "my_test";
+ String path = "/managed-ledgers/" + ledgerName;
+
+ AtomicBoolean raceInjected = new AtomicBoolean();
+ MetadataStoreExtended racyStore = spy(metadataStore);
+ doAnswer(invocation -> {
+ if (path.equals(invocation.getArgument(0)) && raceInjected.compareAndSet(false, true)) {
+ // Create the z-node behind the caller's back and report it as still missing, so that the
+ // subsequent create hits an already existing z-node.
+ metadataStore.put(path, new byte[0], Optional.of(-1L)).get();
+ return CompletableFuture.completedFuture(Optional.empty());
+ }
+ return invocation.callRealMethod();
+ }).when(racyStore).get(anyString());
+
+ MetaStore store = new MetaStoreImpl(racyStore, executor);
+
+ final CompletableFuture<ManagedLedgerInfo> promise = new CompletableFuture<>();
+ store.getManagedLedgerInfo(ledgerName, true, new MetaStoreCallback<ManagedLedgerInfo>() {
+ public void operationFailed(MetaStoreException e) {
+ promise.completeExceptionally(e);
+ }
+
+ public void operationComplete(ManagedLedgerInfo result, Stat version) {
+ promise.complete(result);
+ }
+ });
+
+ ManagedLedgerInfo info = promise.get();
+ assertNotNull(info);
+ assertEquals(info.getLedgerInfosCount(), 0);
+ assertTrue(raceInjected.get());
+ }
+
@Test(timeOut = 20000)
void updatingCursorNode() throws Exception {
MetaStore store = new MetaStoreImpl(metadataStore, executor);
(pulsar) 07/08: [fix][sec] Upgrade lz4-java to 1.11.1 to address CVE-2026-59949 (#26250)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit d85cfae1ddb2a5f909febc57eb0849bb2f931505
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Mon Jul 27 12:13:57 2026 +0300
[fix][sec] Upgrade lz4-java to 1.11.1 to address CVE-2026-59949 (#26250)
(cherry picked from commit bbd1970deebc9d0d4136cb5d18d60d0c26f9b3ba)
---
distribution/server/src/assemble/LICENSE.bin.txt | 2 +-
pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/distribution/server/src/assemble/LICENSE.bin.txt b/distribution/server/src/assemble/LICENSE.bin.txt
index 59721c947777..88104a6eaa6e 100644
--- a/distribution/server/src/assemble/LICENSE.bin.txt
+++ b/distribution/server/src/assemble/LICENSE.bin.txt
@@ -383,7 +383,7 @@ The Apache Software License, Version 2.0
- org.apache.bookkeeper-bookkeeper-slogger-api-4.17.4.jar
- org.apache.bookkeeper-bookkeeper-slogger-slf4j-4.17.4.jar
- org.apache.bookkeeper-native-io-4.17.4.jar
- - at.yawk.lz4-lz4-java-1.10.3.jar
+ - at.yawk.lz4-lz4-java-1.11.1.jar
* Apache HTTP Client
- org.apache.httpcomponents-httpclient-4.5.14.jar
- org.apache.httpcomponents-httpcore-4.4.16.jar
diff --git a/pom.xml b/pom.xml
index 91b749f6fb06..8910bc128094 100644
--- a/pom.xml
+++ b/pom.xml
@@ -375,7 +375,7 @@ flexible messaging model and an intuitive client API.</description>
<commons-beanutils.version>1.11.0</commons-beanutils.version>
<commons-configuration2.version>2.15.1</commons-configuration2.version>
<mina-core.version>2.1.10</mina-core.version>
- <lz4java.version>1.10.3</lz4java.version>
+ <lz4java.version>1.11.1</lz4java.version>
<jsr305.version>3.0.2</jsr305.version>
</properties>
(pulsar) 04/08: [fix][sec] Upgrade grpc in pulsar-function-go to 1.82.1 to fix GHSA-hrxh-6v49-42gf (#26235)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit eca68d5d773fa4e0a039b9302f06d1eb2edb6c87
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Fri Jul 24 07:15:21 2026 +0300
[fix][sec] Upgrade grpc in pulsar-function-go to 1.82.1 to fix GHSA-hrxh-6v49-42gf (#26235)
(cherry picked from commit 8aab815314ddcfcef2780f295e0675b42c59fa89)
---
pulsar-function-go/go.mod | 8 ++++----
pulsar-function-go/go.sum | 40 ++++++++++++++++++++--------------------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/pulsar-function-go/go.mod b/pulsar-function-go/go.mod
index 54a618c7e32a..53365d37757e 100644
--- a/pulsar-function-go/go.mod
+++ b/pulsar-function-go/go.mod
@@ -9,8 +9,8 @@ require (
github.com/prometheus/client_model v0.6.1
github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.10.0
- google.golang.org/grpc v1.79.3
- google.golang.org/protobuf v1.36.10
+ google.golang.org/grpc v1.82.1
+ google.golang.org/protobuf v1.36.11
gopkg.in/yaml.v2 v2.4.0
)
@@ -50,10 +50,10 @@ require (
go.uber.org/atomic v1.11.0 // indirect
golang.org/x/mod v0.35.0 // indirect
golang.org/x/net v0.55.0 // indirect
- golang.org/x/oauth2 v0.34.0 // indirect
+ golang.org/x/oauth2 v0.36.0 // indirect
golang.org/x/sys v0.45.0 // indirect
golang.org/x/text v0.37.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apimachinery v0.32.3 // indirect
diff --git a/pulsar-function-go/go.sum b/pulsar-function-go/go.sum
index 619d0258f881..852a5cdd4bec 100644
--- a/pulsar-function-go/go.sum
+++ b/pulsar-function-go/go.sum
@@ -181,16 +181,16 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
-go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
-go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
-go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
-go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
-go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
-go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
-go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
-go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
-go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
-go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
+go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
+go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
+go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
+go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
+go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
+go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
+go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
+go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
+go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
+go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -208,8 +208,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
-golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
-golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
+golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
+golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -231,14 +231,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
-gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
-google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
-google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
-google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
-google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
+gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE=
+google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA=
+google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
+google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
(pulsar) 03/08: [fix][sec] Bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /pulsar-function-go/examples (#26231)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 1dc88987bc14140d8b891d8d9782ac618702ec60
Author: dependabot[bot] <49...@users.noreply.github.com>
AuthorDate: Thu Jul 23 22:15:55 2026 +0300
[fix][sec] Bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /pulsar-function-go/examples (#26231)
Signed-off-by: dependabot[bot] <su...@github.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
(cherry picked from commit 99f5848926813fad7d4dde1546b2cfc702394a3d)
---
pulsar-function-go/examples/go.mod | 8 ++++----
pulsar-function-go/examples/go.sum | 40 +++++++++++++++++++-------------------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/pulsar-function-go/examples/go.mod b/pulsar-function-go/examples/go.mod
index 3040d08d0818..6e80ff92e5d6 100644
--- a/pulsar-function-go/examples/go.mod
+++ b/pulsar-function-go/examples/go.mod
@@ -44,12 +44,12 @@ require (
go.uber.org/atomic v1.11.0 // indirect
golang.org/x/mod v0.35.0 // indirect
golang.org/x/net v0.55.0 // indirect
- golang.org/x/oauth2 v0.34.0 // indirect
+ golang.org/x/oauth2 v0.36.0 // indirect
golang.org/x/sys v0.45.0 // indirect
golang.org/x/text v0.37.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
- google.golang.org/grpc v1.79.3 // indirect
- google.golang.org/protobuf v1.36.10 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect
+ google.golang.org/grpc v1.82.1 // indirect
+ google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
diff --git a/pulsar-function-go/examples/go.sum b/pulsar-function-go/examples/go.sum
index aebbffd2a138..bbecdf3040d2 100644
--- a/pulsar-function-go/examples/go.sum
+++ b/pulsar-function-go/examples/go.sum
@@ -180,16 +180,16 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
-go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48=
-go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8=
-go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0=
-go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs=
-go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
-go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
-go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
-go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
-go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI=
-go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA=
+go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
+go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
+go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
+go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
+go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
+go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
+go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
+go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
+go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
+go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -207,8 +207,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
-golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
-golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
+golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
+golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -230,14 +230,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
-gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
-google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
-google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
-google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
-google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
+gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
+google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE=
+google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA=
+google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
+google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
(pulsar) 01/08: [improve][fn] Standardize log4j2 Root logger configuration to use system property (#26121)
Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 77999672a668c5b8cc7f04cbe5da847c039b7bac
Author: Malla Sandeep <sa...@gmail.com>
AuthorDate: Wed Jul 1 06:22:15 2026 +0530
[improve][fn] Standardize log4j2 Root logger configuration to use system property (#26121)
(cherry picked from commit 373ab2b32116229314942fafbde62e4004aff52b)
---
.../runtime-all/src/main/resources/java_instance_log4j2.xml | 3 +--
.../runtime-all/src/main/resources/kubernetes_instance_log4j2.xml | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/pulsar-functions/runtime-all/src/main/resources/java_instance_log4j2.xml b/pulsar-functions/runtime-all/src/main/resources/java_instance_log4j2.xml
index c6e4b8eeb86e..271669bb1638 100644
--- a/pulsar-functions/runtime-all/src/main/resources/java_instance_log4j2.xml
+++ b/pulsar-functions/runtime-all/src/main/resources/java_instance_log4j2.xml
@@ -120,10 +120,9 @@
</AppenderRef>
</Logger>
<Root>
- <level>info</level>
+ <level>${sys:pulsar.log.level:-info}</level>
<AppenderRef>
<ref>${sys:pulsar.log.appender}</ref>
- <level>${sys:pulsar.log.level}</level>
</AppenderRef>
</Root>
</Loggers>
diff --git a/pulsar-functions/runtime-all/src/main/resources/kubernetes_instance_log4j2.xml b/pulsar-functions/runtime-all/src/main/resources/kubernetes_instance_log4j2.xml
index d245fe7714fa..582905605c95 100644
--- a/pulsar-functions/runtime-all/src/main/resources/kubernetes_instance_log4j2.xml
+++ b/pulsar-functions/runtime-all/src/main/resources/kubernetes_instance_log4j2.xml
@@ -50,10 +50,9 @@
</AppenderRef>
</Logger>
<Root>
- <level>info</level>
+ <level>${sys:pulsar.log.level:-info}</level>
<AppenderRef>
<ref>Console</ref>
- <level>${sys:pulsar.log.level}</level>
</AppenderRef>
</Root>
</Loggers>