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 2025/03/05 12:33:02 UTC

(pulsar) branch branch-3.3 updated (d8b8e7af53c -> 50d896730ee)

This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a change to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/pulsar.git


    from d8b8e7af53c Bump version to next snapshot version
     new dab8744071a [fix][doc] fix doc related to chunk message feature. (#24023)
     new 40ee0ceb9d8 [fix][broker] Add expire check for replicator (#23975)
     new 92cbc936b6f [improve] Upgrade Netty to 4.1.119.Final (#24049)
     new 50d896730ee [fix][broker] Fix missing validation when setting retention policy on topic level (#24032)

The 4 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:
 buildtools/pom.xml                                 |  2 +-
 distribution/server/src/assemble/LICENSE.bin.txt   | 40 +++++++++++-----------
 distribution/shell/src/assemble/LICENSE.bin.txt    | 38 ++++++++++----------
 pom.xml                                            |  2 +-
 .../apache/pulsar/broker/admin/AdminResource.java  | 15 ++++++++
 .../pulsar/broker/admin/impl/NamespacesBase.java   | 15 --------
 .../broker/admin/impl/PersistentTopicsBase.java    |  1 +
 .../persistent/GeoPersistentReplicator.java        | 12 +++++++
 .../broker/service/persistent/PersistentTopic.java |  4 +++
 .../service/persistent/ShadowReplicator.java       | 12 +++++++
 .../pulsar/broker/admin/TopicPoliciesTest.java     | 30 ++++++++++++++++
 .../pulsar/broker/service/ReplicatorTest.java      | 14 ++++----
 .../broker/service/SubscriptionSeekTest.java       |  2 +-
 .../apache/pulsar/client/api/ProducerBuilder.java  |  7 ++--
 14 files changed, 126 insertions(+), 68 deletions(-)


(pulsar) 01/04: [fix][doc] fix doc related to chunk message feature. (#24023)

Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit dab8744071acff5ac9e85bdd708a9e4c1787411c
Author: Wenzhi Feng <52...@users.noreply.github.com>
AuthorDate: Wed Feb 26 15:41:27 2025 +0800

    [fix][doc] fix doc related to chunk message feature. (#24023)
    
    (cherry picked from commit efcf7c27b3f0fa5dc0252ce46f54b28a897e08bd)
---
 .../main/java/org/apache/pulsar/client/api/ProducerBuilder.java    | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/ProducerBuilder.java b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/ProducerBuilder.java
index 896c2231324..6015bc7af21 100644
--- a/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/ProducerBuilder.java
+++ b/pulsar-client-api/src/main/java/org/apache/pulsar/client/api/ProducerBuilder.java
@@ -328,12 +328,11 @@ public interface ProducerBuilder<T> extends Cloneable {
      * of the pulsar producer and consumer is recommended to use this feature:
      *
      * <pre>
-     * 1. This feature is currently only supported for non-shared subscriptions and persistent topics.
-     * 2. Disable batching to use chunking feature.
-     * 3. Pulsar-client stores published messages in buffer cache until it receives acknowledgement from the broker.
+     * 1. Disable batching to use chunking feature.
+     * 2. Pulsar-client stores published messages in buffer cache until it receives acknowledgement from the broker.
      * Therefore, it's best practice to reduce the "maxPendingMessages" size to avoid the producer occupying large
      * amounts of memory with buffered messages.
-     * 4. Set message-ttl on the namespace to clean up incomplete chunked messages.
+     * 3. Set message-ttl on the namespace to clean up incomplete chunked messages.
      * (If a producer fails to publish an entire large message, the consumer will be unable to consume and acknowledge
      * those messages. These messages can only be discarded by message TTL or by configuring
      * {@link ConsumerBuilder#expireTimeOfIncompleteChunkedMessage}.


(pulsar) 02/04: [fix][broker] Add expire check for replicator (#23975)

Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 40ee0ceb9d8882377f8bc97e32aee803a4e022e9
Author: Zixuan Liu <no...@gmail.com>
AuthorDate: Fri Feb 28 23:20:03 2025 +0800

    [fix][broker] Add expire check for replicator (#23975)
    
    Signed-off-by: Zixuan Liu <no...@gmail.com>
    (cherry picked from commit d0025e79e9b866b9d2b5024f16e4d631e744ecd9)
---
 .../broker/service/persistent/GeoPersistentReplicator.java | 12 ++++++++++++
 .../pulsar/broker/service/persistent/PersistentTopic.java  |  4 ++++
 .../pulsar/broker/service/persistent/ShadowReplicator.java | 12 ++++++++++++
 .../org/apache/pulsar/broker/service/ReplicatorTest.java   | 14 +++++++-------
 4 files changed, 35 insertions(+), 7 deletions(-)

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 2bad0bf1d19..9b28aa8f823 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
@@ -124,6 +124,18 @@ public class GeoPersistentReplicator extends PersistentReplicator {
                     continue;
                 }
 
+                if (msg.isExpired(messageTTLInSeconds)) {
+                    msgExpired.recordEvent(0 /* no value stat */);
+                    if (log.isDebugEnabled()) {
+                        log.debug("[{}] Discarding expired message at position {}, replicateTo {}",
+                                replicatorId, entry.getPosition(), msg.getReplicateTo());
+                    }
+                    cursor.asyncDelete(entry.getPosition(), this, entry.getPosition());
+                    entry.release();
+                    msg.recycle();
+                    continue;
+                }
+
                 if (STATE_UPDATER.get(this) != State.Started || isLocalMessageSkippedOnce) {
                     // The producer is not ready yet after having stopped/restarted. Drop the message because it will
                     // recovered when the producer is ready
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 a39c9b1a93f..07d9245137f 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
@@ -2037,6 +2037,10 @@ public class PersistentTopic extends AbstractTopic implements Topic, AddEntryCal
                    sub.expireMessages(messageTtlInSeconds);
                 }
             });
+            replicators.forEach((__, replicator)
+                    -> ((PersistentReplicator) replicator).expireMessages(messageTtlInSeconds));
+            shadowReplicators.forEach((__, replicator)
+                    -> ((PersistentReplicator) replicator).expireMessages(messageTtlInSeconds));
         }
     }
 
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 072767858ac..bcbb7f62d69 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
@@ -77,6 +77,18 @@ public class ShadowReplicator extends PersistentReplicator {
                     continue;
                 }
 
+                if (msg.isExpired(messageTTLInSeconds)) {
+                    msgExpired.recordEvent(0 /* no value stat */);
+                    if (log.isDebugEnabled()) {
+                        log.debug("[{}] Discarding expired message at position {}, replicateTo {}",
+                                replicatorId, entry.getPosition(), msg.getReplicateTo());
+                    }
+                    cursor.asyncDelete(entry.getPosition(), this, entry.getPosition());
+                    entry.release();
+                    msg.recycle();
+                    continue;
+                }
+
                 if (STATE_UPDATER.get(this) != State.Started || isLocalMessageSkippedOnce) {
                     // The producer is not ready yet after having stopped/restarted. Drop the message because it will
                     // recovered when the producer is ready
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 23f2a2323ba..044b36992a9 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
@@ -1763,36 +1763,36 @@ public class ReplicatorTest extends ReplicatorTestBase {
 
         @Cleanup
         Producer<byte[]> persistentProducer1 = client1.newProducer().topic(topic.toString()).create();
+        // Send V1 message, which will be replicated to the remote cluster by the replicator.
         persistentProducer1.send("V1".getBytes());
-
         waitReplicateFinish(topic, admin1);
 
+        // Pause replicator
         PersistentTopic persistentTopic =
                 (PersistentTopic) pulsar1.getBrokerService().getTopicReference(topic.toString()).get();
         persistentTopic.getReplicators().forEach((cluster, replicator) -> {
             PersistentReplicator persistentReplicator = (PersistentReplicator) replicator;
-            // Pause replicator
             pauseReplicator(persistentReplicator);
         });
 
+        // Send V2 and V3 messages, then let them expire. These messages will not be replicated to the remote cluster.
         persistentProducer1.send("V2".getBytes());
         persistentProducer1.send("V3".getBytes());
-
         Thread.sleep(1000);
-
         admin1.topics().expireMessagesForAllSubscriptions(topic.toString(), 1);
 
+        // Start replicator
         persistentTopic.getReplicators().forEach((cluster, replicator) -> {
             PersistentReplicator persistentReplicator = (PersistentReplicator) replicator;
             persistentReplicator.startProducer();
         });
-
         waitReplicateFinish(topic, admin1);
 
+        // Send V4 message, which will be replicated to the remote cluster.
         persistentProducer1.send("V4".getBytes());
-
         waitReplicateFinish(topic, admin1);
 
+        // Receive messages from the remote cluster: only V1 and V4 messages should be received.
         @Cleanup
         PulsarClient client2 = PulsarClient.builder().serviceUrl(url2.toString()).statsInterval(0, TimeUnit.SECONDS)
                 .build();
@@ -1810,7 +1810,7 @@ public class ReplicatorTest extends ReplicatorTestBase {
             result.add(new String(receive.getValue()));
         }
 
-        assertEquals(result, Lists.newArrayList("V1", "V2", "V3", "V4"));
+        assertEquals(result, Lists.newArrayList("V1", "V4"));
     }
 
     @Test


(pulsar) 04/04: [fix][broker] Fix missing validation when setting retention policy on topic level (#24032)

Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 50d896730eed3dfe69a54e14da5a950b1f82c0c8
Author: Hao Zhang <zh...@cmss.chinamobile.com>
AuthorDate: Mon Mar 3 09:42:59 2025 +0800

    [fix][broker] Fix missing validation when setting retention policy on topic level (#24032)
    
    Co-authored-by: 张浩 <zh...@100.me>
    (cherry picked from commit 1eb7866e1c25f8296a95941b1c0591339da82f80)
---
 .../apache/pulsar/broker/admin/AdminResource.java  | 15 +++++++++++
 .../pulsar/broker/admin/impl/NamespacesBase.java   | 15 -----------
 .../broker/admin/impl/PersistentTopicsBase.java    |  1 +
 .../pulsar/broker/admin/TopicPoliciesTest.java     | 30 ++++++++++++++++++++++
 .../broker/service/SubscriptionSeekTest.java       |  2 +-
 5 files changed, 47 insertions(+), 16 deletions(-)

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 d2dc5eb787b..2df8626b7cb 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
@@ -853,6 +853,21 @@ public abstract class AdminResource extends PulsarWebResource {
 
     }
 
+    protected void validateRetentionPolicies(RetentionPolicies retention) {
+        if (retention == null) {
+            return;
+        }
+        checkArgument(retention.getRetentionSizeInMB() >= -1,
+                "Invalid retention policy: size limit must be >= -1");
+        checkArgument(retention.getRetentionTimeInMinutes() >= -1,
+                "Invalid retention policy: time limit must be >= -1");
+        checkArgument((retention.getRetentionTimeInMinutes() != 0 && retention.getRetentionSizeInMB() != 0)
+                        || (retention.getRetentionTimeInMinutes() == 0 && retention.getRetentionSizeInMB() == 0),
+                "Invalid retention policy: Setting a single time or size limit to 0 is invalid when "
+                        + "one of the limits has a non-zero value. Use the value of -1 instead of 0 to ignore a "
+                        + "specific limit. To disable retention both limits must be set to 0.");
+    }
+
     protected void validateEntryFilters(EntryFilters entryFilters) {
         if (entryFilters == null) {
             // remove entry filters
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 90838d7c410..74107a60d47 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
@@ -1995,21 +1995,6 @@ public abstract class NamespacesBase extends AdminResource {
             });
     }
 
-    protected void validateRetentionPolicies(RetentionPolicies retention) {
-        if (retention == null) {
-            return;
-        }
-        checkArgument(retention.getRetentionSizeInMB() >= -1,
-                "Invalid retention policy: size limit must be >= -1");
-        checkArgument(retention.getRetentionTimeInMinutes() >= -1,
-                "Invalid retention policy: time limit must be >= -1");
-        checkArgument((retention.getRetentionTimeInMinutes() != 0 && retention.getRetentionSizeInMB() != 0)
-                        || (retention.getRetentionTimeInMinutes() == 0 && retention.getRetentionSizeInMB() == 0),
-                "Invalid retention policy: Setting a single time or size limit to 0 is invalid when "
-                        + "one of the limits has a non-zero value. Use the value of -1 instead of 0 to ignore a "
-                        + "specific limit. To disable retention both limits must be set to 0.");
-    }
-
     protected void internalSetDeduplicationSnapshotInterval(Integer interval) {
         validateNamespacePolicyOperation(namespaceName, PolicyName.DEDUPLICATION_SNAPSHOT, PolicyOperation.WRITE);
         if (interval != null && interval < 0) {
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 4fe1a9eb55f..b948fd4b31b 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
@@ -3467,6 +3467,7 @@ public class PersistentTopicsBase extends AdminResource {
     }
 
     protected CompletableFuture<Void> internalSetRetention(RetentionPolicies retention, boolean isGlobal) {
+        validateRetentionPolicies(retention);
         if (retention == null) {
             return CompletableFuture.completedFuture(null);
         }
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 9f56acfb57f..162a2d0469e 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
@@ -39,6 +39,7 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
+import javax.ws.rs.BadRequestException;
 import lombok.Cleanup;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.bookkeeper.mledger.ManagedLedgerConfig;
@@ -635,6 +636,35 @@ public class TopicPoliciesTest extends MockedPulsarServiceBaseTest {
         admin.topics().deletePartitionedTopic(testTopic, true);
     }
 
+    @Test
+    public void testRetentionPolicyValidation() throws Exception {
+        // should pass
+        admin.topicPolicies().setRetention(testTopic, new RetentionPolicies());
+        admin.topicPolicies().setRetention(testTopic, new RetentionPolicies(-1, -1));
+        admin.topicPolicies().setRetention(testTopic, new RetentionPolicies(1, 1));
+
+        // should not pass validation
+        assertInvalidRetentionPolicy(testTopic, 1, 0);
+        assertInvalidRetentionPolicy(testTopic, 0, 1);
+        assertInvalidRetentionPolicy(testTopic, -1, 0);
+        assertInvalidRetentionPolicy(testTopic, 0, -1);
+        assertInvalidRetentionPolicy(testTopic, -2, 1);
+        assertInvalidRetentionPolicy(testTopic, 1, -2);
+
+        admin.topics().deletePartitionedTopic(testTopic, true);
+    }
+
+    private void assertInvalidRetentionPolicy(String topicName, int retentionTimeInMinutes, int retentionSizeInMB) {
+        try {
+            RetentionPolicies retention = new RetentionPolicies(retentionTimeInMinutes, retentionSizeInMB);
+            admin.topicPolicies().setRetention(topicName, retention);
+            fail("Validation should have failed for " + retention);
+        } catch (PulsarAdminException e) {
+            assertTrue(e.getCause() instanceof BadRequestException);
+            assertTrue(e.getMessage().startsWith("Invalid retention policy"));
+        }
+    }
+
     @Test
     public void testRemoveRetention() 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 582d10294a5..787205a9e37 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
@@ -810,7 +810,7 @@ public class SubscriptionSeekTest extends BrokerTestBase {
     public void testSeekWillNotEncounteredFencedError() throws Exception {
         String topicName = "persistent://prop/ns-abc/my-topic2";
         admin.topics().createNonPartitionedTopic(topicName);
-        admin.topicPolicies().setRetention(topicName, new RetentionPolicies(3600, 0));
+        admin.topicPolicies().setRetention(topicName, new RetentionPolicies(3600, -1));
         // Create a pulsar client with a subscription fenced counter.
         ClientBuilderImpl clientBuilder = (ClientBuilderImpl) PulsarClient.builder().serviceUrl(lookupUrl.toString());
         AtomicInteger receivedFencedErrorCounter = new AtomicInteger();


(pulsar) 03/04: [improve] Upgrade Netty to 4.1.119.Final (#24049)

Posted by lh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 92cbc936b6f604bc924de26a9366c90eb057b418
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Tue Mar 4 13:18:48 2025 +0200

    [improve] Upgrade Netty to 4.1.119.Final (#24049)
    
    (cherry picked from commit d6c09af7e8c50c6e3925600cb61eb0cbc0a0e2a0)
---
 buildtools/pom.xml                               |  2 +-
 distribution/server/src/assemble/LICENSE.bin.txt | 40 ++++++++++++------------
 distribution/shell/src/assemble/LICENSE.bin.txt  | 38 +++++++++++-----------
 pom.xml                                          |  2 +-
 4 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/buildtools/pom.xml b/buildtools/pom.xml
index 63b5ef90373..d36eae73772 100644
--- a/buildtools/pom.xml
+++ b/buildtools/pom.xml
@@ -54,7 +54,7 @@
     <license-maven-plugin.version>4.1</license-maven-plugin.version>
     <puppycrawl.checkstyle.version>10.14.2</puppycrawl.checkstyle.version>
     <maven-checkstyle-plugin.version>3.1.2</maven-checkstyle-plugin.version>
-    <netty.version>4.1.118.Final</netty.version>
+    <netty.version>4.1.119.Final</netty.version>
     <guice.version>4.2.3</guice.version>
     <guava.version>32.1.2-jre</guava.version>
     <ant.version>1.10.12</ant.version>
diff --git a/distribution/server/src/assemble/LICENSE.bin.txt b/distribution/server/src/assemble/LICENSE.bin.txt
index 0334f335144..e33523decc5 100644
--- a/distribution/server/src/assemble/LICENSE.bin.txt
+++ b/distribution/server/src/assemble/LICENSE.bin.txt
@@ -292,26 +292,26 @@ The Apache Software License, Version 2.0
     - org.apache.commons-commons-lang3-3.11.jar
     - org.apache.commons-commons-text-1.10.0.jar
  * Netty
-    - io.netty-netty-buffer-4.1.118.Final.jar
-    - io.netty-netty-codec-4.1.118.Final.jar
-    - io.netty-netty-codec-dns-4.1.118.Final.jar
-    - io.netty-netty-codec-http-4.1.118.Final.jar
-    - io.netty-netty-codec-http2-4.1.118.Final.jar
-    - io.netty-netty-codec-socks-4.1.118.Final.jar
-    - io.netty-netty-codec-haproxy-4.1.118.Final.jar
-    - io.netty-netty-common-4.1.118.Final.jar
-    - io.netty-netty-handler-4.1.118.Final.jar
-    - io.netty-netty-handler-proxy-4.1.118.Final.jar
-    - io.netty-netty-resolver-4.1.118.Final.jar
-    - io.netty-netty-resolver-dns-4.1.118.Final.jar
-    - io.netty-netty-resolver-dns-classes-macos-4.1.118.Final.jar
-    - io.netty-netty-resolver-dns-native-macos-4.1.118.Final-osx-aarch_64.jar
-    - io.netty-netty-resolver-dns-native-macos-4.1.118.Final-osx-x86_64.jar
-    - io.netty-netty-transport-4.1.118.Final.jar
-    - io.netty-netty-transport-classes-epoll-4.1.118.Final.jar
-    - io.netty-netty-transport-native-epoll-4.1.118.Final-linux-aarch_64.jar
-    - io.netty-netty-transport-native-epoll-4.1.118.Final-linux-x86_64.jar
-    - io.netty-netty-transport-native-unix-common-4.1.118.Final.jar
+    - io.netty-netty-buffer-4.1.119.Final.jar
+    - io.netty-netty-codec-4.1.119.Final.jar
+    - io.netty-netty-codec-dns-4.1.119.Final.jar
+    - io.netty-netty-codec-http-4.1.119.Final.jar
+    - io.netty-netty-codec-http2-4.1.119.Final.jar
+    - io.netty-netty-codec-socks-4.1.119.Final.jar
+    - io.netty-netty-codec-haproxy-4.1.119.Final.jar
+    - io.netty-netty-common-4.1.119.Final.jar
+    - io.netty-netty-handler-4.1.119.Final.jar
+    - io.netty-netty-handler-proxy-4.1.119.Final.jar
+    - io.netty-netty-resolver-4.1.119.Final.jar
+    - io.netty-netty-resolver-dns-4.1.119.Final.jar
+    - io.netty-netty-resolver-dns-classes-macos-4.1.119.Final.jar
+    - io.netty-netty-resolver-dns-native-macos-4.1.119.Final-osx-aarch_64.jar
+    - io.netty-netty-resolver-dns-native-macos-4.1.119.Final-osx-x86_64.jar
+    - io.netty-netty-transport-4.1.119.Final.jar
+    - io.netty-netty-transport-classes-epoll-4.1.119.Final.jar
+    - io.netty-netty-transport-native-epoll-4.1.119.Final-linux-aarch_64.jar
+    - io.netty-netty-transport-native-epoll-4.1.119.Final-linux-x86_64.jar
+    - io.netty-netty-transport-native-unix-common-4.1.119.Final.jar
     - io.netty-netty-tcnative-boringssl-static-2.0.70.Final.jar
     - io.netty-netty-tcnative-boringssl-static-2.0.70.Final-linux-aarch_64.jar
     - io.netty-netty-tcnative-boringssl-static-2.0.70.Final-linux-x86_64.jar
diff --git a/distribution/shell/src/assemble/LICENSE.bin.txt b/distribution/shell/src/assemble/LICENSE.bin.txt
index 6e40549f573..a2a8cdfeb78 100644
--- a/distribution/shell/src/assemble/LICENSE.bin.txt
+++ b/distribution/shell/src/assemble/LICENSE.bin.txt
@@ -347,22 +347,22 @@ The Apache Software License, Version 2.0
     - commons-text-1.10.0.jar
     - commons-compress-1.26.0.jar
  * Netty
-    - netty-buffer-4.1.118.Final.jar
-    - netty-codec-4.1.118.Final.jar
-    - netty-codec-dns-4.1.118.Final.jar
-    - netty-codec-http-4.1.118.Final.jar
-    - netty-codec-socks-4.1.118.Final.jar
-    - netty-codec-haproxy-4.1.118.Final.jar
-    - netty-common-4.1.118.Final.jar
-    - netty-handler-4.1.118.Final.jar
-    - netty-handler-proxy-4.1.118.Final.jar
-    - netty-resolver-4.1.118.Final.jar
-    - netty-resolver-dns-4.1.118.Final.jar
-    - netty-transport-4.1.118.Final.jar
-    - netty-transport-classes-epoll-4.1.118.Final.jar
-    - netty-transport-native-epoll-4.1.118.Final-linux-aarch_64.jar
-    - netty-transport-native-epoll-4.1.118.Final-linux-x86_64.jar
-    - netty-transport-native-unix-common-4.1.118.Final.jar
+    - netty-buffer-4.1.119.Final.jar
+    - netty-codec-4.1.119.Final.jar
+    - netty-codec-dns-4.1.119.Final.jar
+    - netty-codec-http-4.1.119.Final.jar
+    - netty-codec-socks-4.1.119.Final.jar
+    - netty-codec-haproxy-4.1.119.Final.jar
+    - netty-common-4.1.119.Final.jar
+    - netty-handler-4.1.119.Final.jar
+    - netty-handler-proxy-4.1.119.Final.jar
+    - netty-resolver-4.1.119.Final.jar
+    - netty-resolver-dns-4.1.119.Final.jar
+    - netty-transport-4.1.119.Final.jar
+    - netty-transport-classes-epoll-4.1.119.Final.jar
+    - netty-transport-native-epoll-4.1.119.Final-linux-aarch_64.jar
+    - netty-transport-native-epoll-4.1.119.Final-linux-x86_64.jar
+    - netty-transport-native-unix-common-4.1.119.Final.jar
     - netty-tcnative-boringssl-static-2.0.70.Final.jar
     - netty-tcnative-boringssl-static-2.0.70.Final-linux-aarch_64.jar
     - netty-tcnative-boringssl-static-2.0.70.Final-linux-x86_64.jar
@@ -373,9 +373,9 @@ The Apache Software License, Version 2.0
     - netty-incubator-transport-classes-io_uring-0.0.26.Final.jar
     - netty-incubator-transport-native-io_uring-0.0.26.Final-linux-aarch_64.jar
     - netty-incubator-transport-native-io_uring-0.0.26.Final-linux-x86_64.jar
-    - netty-resolver-dns-classes-macos-4.1.118.Final.jar
-    - netty-resolver-dns-native-macos-4.1.118.Final-osx-aarch_64.jar
-    - netty-resolver-dns-native-macos-4.1.118.Final-osx-x86_64.jar
+    - netty-resolver-dns-classes-macos-4.1.119.Final.jar
+    - netty-resolver-dns-native-macos-4.1.119.Final-osx-aarch_64.jar
+    - netty-resolver-dns-native-macos-4.1.119.Final-osx-x86_64.jar
  * Prometheus client
     - simpleclient-0.16.0.jar
     - simpleclient_log4j2-0.16.0.jar
diff --git a/pom.xml b/pom.xml
index 231812afffb..69834f30bd5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -144,7 +144,7 @@ flexible messaging model and an intuitive client API.</description>
     <snappy.version>1.1.10.5</snappy.version> <!-- ZooKeeper server -->
     <dropwizardmetrics.version>4.1.12.1</dropwizardmetrics.version> <!-- ZooKeeper server -->
     <curator.version>5.7.1</curator.version>
-    <netty.version>4.1.118.Final</netty.version>
+    <netty.version>4.1.119.Final</netty.version>
     <netty-iouring.version>0.0.26.Final</netty-iouring.version>
     <jetty.version>9.4.56.v20240826</jetty.version>
     <conscrypt.version>2.5.2</conscrypt.version>