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

jinrongtong pushed a commit to branch 4.9.x
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/4.9.x by this push:
     new c3ada7314 Make configPath unable to update at runtime
c3ada7314 is described below

commit c3ada731405c5990c36bf58d50b3e61965300703
Author: rongtong <[email protected]>
AuthorDate: Thu May 11 18:01:29 2023 +0800

    Make configPath unable to update at runtime
---
 .../namesrv/processor/DefaultRequestProcessor.java |  6 ++++
 .../processor/DefaultRequestProcessorTest.java     | 40 ++++++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git 
a/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
 
b/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
index 94797667d..0efef1b52 100644
--- 
a/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
+++ 
b/namesrv/src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
@@ -581,6 +581,12 @@ public class DefaultRequestProcessor extends 
AsyncNettyRequestProcessor implemen
                 return response;
             }
 
+            if (properties.containsKey("kvConfigPath") || 
properties.containsKey("configStorePathName")) {
+                response.setCode(ResponseCode.NO_PERMISSION);
+                response.setRemark("Can not update config path");
+                return response;
+            }
+
             this.namesrvController.getConfiguration().update(properties);
         }
 
diff --git 
a/namesrv/src/test/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessorTest.java
 
b/namesrv/src/test/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessorTest.java
index 22cf978fe..329fe53fe 100644
--- 
a/namesrv/src/test/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessorTest.java
+++ 
b/namesrv/src/test/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessorTest.java
@@ -20,10 +20,13 @@ import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
+import org.apache.rocketmq.common.MixAll;
 import org.apache.rocketmq.common.TopicConfig;
 import org.apache.rocketmq.logging.InternalLogger;
 import org.apache.rocketmq.common.namesrv.NamesrvConfig;
@@ -159,6 +162,43 @@ public class DefaultRequestProcessorTest {
             .isNull();
     }
 
+    @Test
+    public void testProcessRequest_UpdateConfigPath() throws 
RemotingCommandException {
+        final RemotingCommand updateConfigRequest = 
RemotingCommand.createRequestCommand(RequestCode.UPDATE_NAMESRV_CONFIG, null);
+        Properties properties = new Properties();
+
+        // Update allowed value
+        properties.setProperty("enableTopicList", "true");
+        
updateConfigRequest.setBody(MixAll.properties2String(properties).getBytes(StandardCharsets.UTF_8));
+
+        RemotingCommand response = 
defaultRequestProcessor.processRequest(null, updateConfigRequest);
+
+        assertThat(response).isNotNull();
+        assertThat(response.getCode()).isEqualTo(ResponseCode.SUCCESS);
+
+        //update disallowed value
+        properties.clear();
+        properties.setProperty("configStorePathName", "test/path");
+        
updateConfigRequest.setBody(MixAll.properties2String(properties).getBytes(StandardCharsets.UTF_8));
+
+        response = defaultRequestProcessor.processRequest(null, 
updateConfigRequest);
+
+        assertThat(response).isNotNull();
+        assertThat(response.getCode()).isEqualTo(ResponseCode.NO_PERMISSION);
+        assertThat(response.getRemark()).contains("Can not update config 
path");
+
+        //update disallowed values
+        properties.clear();
+        properties.setProperty("kvConfigPath", "test/path");
+        
updateConfigRequest.setBody(MixAll.properties2String(properties).getBytes(StandardCharsets.UTF_8));
+
+        response = defaultRequestProcessor.processRequest(null, 
updateConfigRequest);
+
+        assertThat(response).isNotNull();
+        assertThat(response.getCode()).isEqualTo(ResponseCode.NO_PERMISSION);
+        assertThat(response.getRemark()).contains("Can not update config 
path");
+    }
+
     @Test
     public void testProcessRequest_RegisterBroker() throws 
RemotingCommandException,
         NoSuchFieldException, IllegalAccessException {

Reply via email to