This is an automated email from the ASF dual-hosted git repository. dinglei pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push: new 430ee0a755 Add validation in broker container configure updating command. (#7587) 430ee0a755 is described below commit 430ee0a755daf867de31e37b12df417f64811b3a Author: rongtong <jinrongto...@163.com> AuthorDate: Tue Nov 28 16:11:14 2023 +0800 Add validation in broker container configure updating command. (#7587) --- .../rocketmq/container/BrokerContainerConfig.java | 16 +++++++++ .../container/BrokerContainerProcessor.java | 40 +++++++++++++++++++--- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerConfig.java b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerConfig.java index e03b10c34d..03b4b263f9 100644 --- a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerConfig.java +++ b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerConfig.java @@ -49,6 +49,14 @@ public class BrokerContainerConfig { */ private long updateNamesrvAddrInterval = 60 * 2 * 1000; + + /** + * Config in this black list will be not allowed to update by command. + * Try to update this config black list by restart process. + * Try to update configures in black list by restart process. + */ + private String configBlackList = "configBlackList;brokerConfigPaths"; + public String getRocketmqHome() { return rocketmqHome; } @@ -108,4 +116,12 @@ public class BrokerContainerConfig { public void setUpdateNamesrvAddrInterval(long updateNamesrvAddrInterval) { this.updateNamesrvAddrInterval = updateNamesrvAddrInterval; } + + public String getConfigBlackList() { + return configBlackList; + } + + public void setConfigBlackList(String configBlackList) { + this.configBlackList = configBlackList; + } } diff --git a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerProcessor.java b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerProcessor.java index 5b825fe811..5ced082576 100644 --- a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerProcessor.java +++ b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerProcessor.java @@ -19,6 +19,9 @@ package org.apache.rocketmq.container; import io.netty.channel.ChannelHandlerContext; import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import java.util.List; import java.util.Properties; import org.apache.rocketmq.broker.BrokerController; @@ -45,8 +48,19 @@ public class BrokerContainerProcessor implements NettyRequestProcessor { private final BrokerContainer brokerContainer; private List<BrokerBootHook> brokerBootHookList; + private final Set<String> configBlackList = new HashSet<>(); + public BrokerContainerProcessor(BrokerContainer brokerContainer) { this.brokerContainer = brokerContainer; + initConfigBlackList(); + } + + private void initConfigBlackList() { + configBlackList.add("brokerConfigPaths"); + configBlackList.add("rocketmqHome"); + configBlackList.add("configBlackList"); + String[] configArray = brokerContainer.getBrokerContainerConfig().getConfigBlackList().split(";"); + configBlackList.addAll(Arrays.asList(configArray)); } @Override @@ -232,15 +246,24 @@ public class BrokerContainerProcessor implements NettyRequestProcessor { try { String bodyStr = new String(body, MixAll.DEFAULT_CHARSET); Properties properties = MixAll.string2Properties(bodyStr); - if (properties != null) { - LOGGER.info("updateSharedBrokerConfig, new config: [{}] client: {} ", properties, ctx.channel().remoteAddress()); - this.brokerContainer.getConfiguration().update(properties); - } else { + + if (properties == null) { LOGGER.error("string2Properties error"); response.setCode(ResponseCode.SYSTEM_ERROR); response.setRemark("string2Properties error"); return response; } + + if (validateBlackListConfigExist(properties)) { + response.setCode(ResponseCode.NO_PERMISSION); + response.setRemark("Can not update config in black list."); + return response; + } + + + LOGGER.info("updateBrokerContainerConfig, new config: [{}] client: {} ", properties, ctx.channel().remoteAddress()); + this.brokerContainer.getConfiguration().update(properties); + } catch (UnsupportedEncodingException e) { LOGGER.error("", e); response.setCode(ResponseCode.SYSTEM_ERROR); @@ -254,6 +277,15 @@ public class BrokerContainerProcessor implements NettyRequestProcessor { return response; } + private boolean validateBlackListConfigExist(Properties properties) { + for (String blackConfig : configBlackList) { + if (properties.containsKey(blackConfig)) { + return true; + } + } + return false; + } + private RemotingCommand getBrokerConfig(ChannelHandlerContext ctx, RemotingCommand request) { final RemotingCommand response = RemotingCommand.createResponseCommand(GetBrokerConfigResponseHeader.class);