diff --git a/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java b/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java index 812ca90e82b..96944db2dba 100644 --- a/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java +++ b/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java @@ -1066,6 +1066,7 @@ private RemotingCommand getBrokerConfig(ChannelHandlerContext ctx, RemotingComma String content = this.brokerController.getConfiguration().getAllConfigsFormatString(); if (content != null && content.length() > 0) { try { + content = MixAll.adjustConfigForPlatform(content); response.setBody(content.getBytes(MixAll.DEFAULT_CHARSET)); } catch (UnsupportedEncodingException e) { LOGGER.error("AdminBrokerProcessor#getBrokerConfig: unexpected error, caller={}", diff --git a/common/src/main/java/org/apache/rocketmq/common/MixAll.java b/common/src/main/java/org/apache/rocketmq/common/MixAll.java index aca9bd4ed7b..d63906e2163 100644 --- a/common/src/main/java/org/apache/rocketmq/common/MixAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/MixAll.java @@ -557,4 +557,13 @@ public static boolean topicAllowsLMQ(String topic) { && !topic.startsWith(TopicValidator.SYSTEM_TOPIC_PREFIX) && !topic.equals(TopicValidator.RMQ_SYS_SCHEDULE_TOPIC); } + + public static String adjustConfigForPlatform(String config) { + if (StringUtils.isNotBlank(config)) { + if (isWindows()) { + config = StringUtils.replace(config, "\\", "\\\\"); + } + } + return config; + } } diff --git a/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java b/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java index 5b358ca8e61..5de6cc51105 100644 --- a/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/MixAllTest.java @@ -85,4 +85,43 @@ public void testIsLmq() { testLmq = "%LMQ%GID_TEST"; assertThat(MixAll.isLmq(testLmq)).isTrue(); } + + @Test + public void testAdjustConfigForPlatform_OnWindows() { + if (MixAll.isWindows()) { + String configWithSingleBackslash = "data\\path\\config\\file.properties"; + String adjusted = MixAll.adjustConfigForPlatform(configWithSingleBackslash); + assertThat(adjusted).isEqualTo("data\\\\path\\\\config\\\\file.properties"); + + String configWithMultipleBackslashes = "C:\\\\RocketMQ\\\\logs\\\\broker.log"; + adjusted = MixAll.adjustConfigForPlatform(configWithMultipleBackslashes); + assertThat(adjusted).isEqualTo("C:\\\\\\\\RocketMQ\\\\\\\\logs\\\\\\\\broker.log"); + + String configWithoutBackslash = "listenPort=10911"; + adjusted = MixAll.adjustConfigForPlatform(configWithoutBackslash); + assertThat(adjusted).isEqualTo("listenPort=10911"); + + String emptyConfig = ""; + adjusted = MixAll.adjustConfigForPlatform(emptyConfig); + assertThat(adjusted).isEqualTo(""); + + adjusted = MixAll.adjustConfigForPlatform(null); + assertThat(adjusted).isNull(); + } else { + String configWithSingleBackslash = "/home/rocketmq/conf/broker.conf"; + String adjusted = MixAll.adjustConfigForPlatform(configWithSingleBackslash); + assertThat(adjusted).isEqualTo("/home/rocketmq/conf/broker.conf"); + + String linuxPathWithBackslash = "some\\directory\\file.txt"; + adjusted = MixAll.adjustConfigForPlatform(linuxPathWithBackslash); + assertThat(adjusted).isEqualTo("some\\directory\\file.txt"); + + String emptyConfig = ""; + adjusted = MixAll.adjustConfigForPlatform(emptyConfig); + assertThat(adjusted).isEqualTo(""); + + adjusted = MixAll.adjustConfigForPlatform(null); + assertThat(adjusted).isNull(); + } + } } 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 80dd6ccb13b..5aaa0f7c364 100644 --- a/container/src/main/java/org/apache/rocketmq/container/BrokerContainerProcessor.java +++ b/container/src/main/java/org/apache/rocketmq/container/BrokerContainerProcessor.java @@ -291,6 +291,7 @@ private RemotingCommand getBrokerConfig(ChannelHandlerContext ctx, RemotingComma String content = this.brokerContainer.getConfiguration().getAllConfigsFormatString(); if (content != null && content.length() > 0) { try { + content = MixAll.adjustConfigForPlatform(content); response.setBody(content.getBytes(MixAll.DEFAULT_CHARSET)); } catch (UnsupportedEncodingException e) { LOGGER.error("", e); diff --git a/controller/src/main/java/org/apache/rocketmq/controller/processor/ControllerRequestProcessor.java b/controller/src/main/java/org/apache/rocketmq/controller/processor/ControllerRequestProcessor.java index 2713cf3dea2..4bd33efe2c6 100644 --- a/controller/src/main/java/org/apache/rocketmq/controller/processor/ControllerRequestProcessor.java +++ b/controller/src/main/java/org/apache/rocketmq/controller/processor/ControllerRequestProcessor.java @@ -311,6 +311,7 @@ private RemotingCommand handleGetControllerConfig(ChannelHandlerContext ctx, Rem String content = this.controllerManager.getConfiguration().getAllConfigsFormatString(); if (content != null && content.length() > 0) { try { + content = MixAll.adjustConfigForPlatform(content); response.setBody(content.getBytes(MixAll.DEFAULT_CHARSET)); } catch (UnsupportedEncodingException e) { log.error("getConfig error, ", e); 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 deb51e4fc11..fa996e99525 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 @@ -658,6 +658,7 @@ private RemotingCommand getConfig(ChannelHandlerContext ctx, RemotingCommand req String content = this.namesrvController.getConfiguration().getAllConfigsFormatString(); if (StringUtils.isNotBlank(content)) { try { + content = MixAll.adjustConfigForPlatform(content); response.setBody(content.getBytes(MixAll.DEFAULT_CHARSET)); } catch (UnsupportedEncodingException e) { log.error("getConfig error, ", e);