From e943b665fe8db734c21efae28a89db70ad3044a1 Mon Sep 17 00:00:00 2001
From: Giuseppe Lillo
Date: Thu, 19 Feb 2026 08:35:11 +0100
Subject: [PATCH] fix(inkless): Fix error message when diskless.enable and
remote.storage.enable are set
---
.../kafka/server/DisklessAndRemoteStorageConfigsTest.java | 2 +-
core/src/test/scala/unit/kafka/log/LogConfigTest.scala | 4 ++--
.../org/apache/kafka/storage/internals/log/LogConfig.java | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/core/src/test/java/kafka/server/DisklessAndRemoteStorageConfigsTest.java b/core/src/test/java/kafka/server/DisklessAndRemoteStorageConfigsTest.java
index 7d1c778df85..8d9bd131d74 100644
--- a/core/src/test/java/kafka/server/DisklessAndRemoteStorageConfigsTest.java
+++ b/core/src/test/java/kafka/server/DisklessAndRemoteStorageConfigsTest.java
@@ -71,7 +71,7 @@ public class DisklessAndRemoteStorageConfigsTest {
private static final String ENABLE_DISKLESS_ERROR = "It is invalid to enable diskless on an already existing topic.";
private static final String DISABLE_DISKLESS_ERROR = "It is invalid to disable diskless.";
- private static final String DISKLESS_REMOTE_SET_ERROR = "remote.storage.enable cannot be set if diskless.enable is set to true.";
+ private static final String DISKLESS_REMOTE_SET_ERROR = "It is not valid to set a value for both diskless.enable and remote.storage.enable.";
private static final String DISABLE_REMOTE_WITHOUT_DELETE_ERROR = "It is invalid to disable remote storage without deleting remote data. "
+ "If you want to keep the remote data and turn to read only, please set `remote.storage.enable=true,remote.log.copy.disable=true`. "
+ "If you want to disable remote storage and delete all remote data, please set `remote.storage.enable=false,remote.log.delete.on.disable=true`.";
diff --git a/core/src/test/scala/unit/kafka/log/LogConfigTest.scala b/core/src/test/scala/unit/kafka/log/LogConfigTest.scala
index 21349722196..dac9beefe92 100644
--- a/core/src/test/scala/unit/kafka/log/LogConfigTest.scala
+++ b/core/src/test/scala/unit/kafka/log/LogConfigTest.scala
@@ -434,7 +434,7 @@ class LogConfigTest {
def testDisklessAndRemoteStorageAtCreation(): Unit = {
val kafkaConfig = KafkaConfig.fromProps(TestUtils.createDummyBrokerConfig())
val noExisting: util.Map[String, String] = util.Map.of()
- val mutualExclusionError = "remote.storage.enable cannot be set if diskless.enable is set to true."
+ val mutualExclusionError = "It is not valid to set a value for both diskless.enable and remote.storage.enable."
// Allowed to set diskless.enable=true at creation
assertValid(noExisting, topicProps(TopicConfig.DISKLESS_ENABLE_CONFIG -> "true"), kafkaConfig)
@@ -474,7 +474,7 @@ class LogConfigTest {
@Test
def testDisklessAndRemoteStorageAtUpdate(): Unit = {
val kafkaConfig = KafkaConfig.fromProps(TestUtils.createDummyBrokerConfig())
- val mutualExclusionError = "remote.storage.enable cannot be set if diskless.enable is set to true."
+ val mutualExclusionError = "It is not valid to set a value for both diskless.enable and remote.storage.enable."
val existingWithoutDisklessOrRemote = util.Map.of(TopicConfig.RETENTION_MS_CONFIG, "1000")
val existingWithDisklessFalse = util.Map.of(TopicConfig.DISKLESS_ENABLE_CONFIG, "false")
val existingWithDisklessTrue = util.Map.of(TopicConfig.DISKLESS_ENABLE_CONFIG, "true")
diff --git a/storage/src/main/java/org/apache/kafka/storage/internals/log/LogConfig.java b/storage/src/main/java/org/apache/kafka/storage/internals/log/LogConfig.java
index 697948184ea..ed5697574c9 100644
--- a/storage/src/main/java/org/apache/kafka/storage/internals/log/LogConfig.java
+++ b/storage/src/main/java/org/apache/kafka/storage/internals/log/LogConfig.java
@@ -528,7 +528,7 @@ private static void validateDiskless(Map existingConfigs,
final boolean hasExplicitRemoteStorage = isRemoteStorageExplicitlySet || wasRemoteStorageExplicitlySet;
if ((isDisklessExplicitlySet && hasExplicitRemoteStorage) ||
(isRemoteStorageExplicitlySet && hasExplicitDiskless)) {
- throw new InvalidConfigurationException("remote.storage.enable cannot be set if diskless.enable is set to true.");
+ throw new InvalidConfigurationException("It is not valid to set a value for both diskless.enable and remote.storage.enable.");
}
}