From 7bc8bc53f0838e7b3efacdd3b0cfbb7e0bba7724 Mon Sep 17 00:00:00 2001 From: bjhuxiaohua Date: Tue, 30 Aug 2022 23:21:44 +0800 Subject: [PATCH] [fix][broker] Fix NPE when updating topic's properties --- .../pulsar/broker/admin/impl/PersistentTopicsBase.java | 3 ++- .../org/apache/pulsar/broker/admin/AdminApi2Test.java | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) 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 6ef6f66202919..44ecf72954f2b 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 @@ -622,7 +622,8 @@ protected CompletableFuture internalUpdatePropertiesAsync(boolean authorit return namespaceResources() .getPartitionedTopicResources().updatePartitionedTopicAsync(topicName, p -> new PartitionedTopicMetadata(p.partitions, - MapUtils.putAll(p.properties, properties.entrySet().toArray()))); + p.properties == null ? properties + : MapUtils.putAll(p.properties, properties.entrySet().toArray()))); }); } }).thenAccept(__ -> 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 99ad1b99abda2..d492ad73d7860 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 @@ -894,11 +894,14 @@ public void testUpdatePartitionedTopicProperties() throws Exception { final String topicName = "persistent://" + namespace + "/testUpdatePartitionedTopicProperties"; admin.namespaces().createNamespace(namespace, 20); - // create partitioned topic with properties + // create partitioned topic without properties + admin.topics().createPartitionedTopic(topicName, 2); + Map properties = admin.topics().getProperties(topicName); + Assert.assertNull(properties); Map topicProperties = new HashMap<>(); topicProperties.put("key1", "value1"); - admin.topics().createPartitionedTopic(topicName, 2, topicProperties); - Map properties = admin.topics().getProperties(topicName); + admin.topics().updateProperties(topicName, topicProperties); + properties = admin.topics().getProperties(topicName); Assert.assertNotNull(properties); Assert.assertEquals(properties.get("key1"), "value1");