Skip to content

Commit 319a2ad

Browse files
committed
[server] Skip datalake prefix validation when datalake format is not null
1 parent 3b95065 commit 319a2ad

4 files changed

Lines changed: 51 additions & 5 deletions

File tree

fluss-server/src/main/java/org/apache/fluss/server/DynamicServerConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ private void processDeletions(
210210
throws ConfigException {
211211
for (String configKey : dynamicConfigs.keySet()) {
212212
if (newDynamicConfigs.containsKey(configKey)) {
213+
effectiveChanges.put(configKey, newDynamicConfigs.get(configKey));
213214
continue; // Not deleted
214215
}
215216

fluss-server/src/main/java/org/apache/fluss/server/coordinator/LakeCatalogDynamicLoader.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ public void validate(Configuration newConfig) throws ConfigException {
6363
newConfig.getOptional(DATALAKE_FORMAT).isPresent()
6464
? newConfig.get(DATALAKE_FORMAT)
6565
: currentConfiguration.get(DATALAKE_FORMAT);
66+
// If datalake format is not set, skip prefix validation so that users can disable or enable
67+
// datalake format without re-supplying all datalake-prefixed properties.
68+
if (newDatalakeFormat == null) {
69+
return;
70+
}
71+
6672
Map<String, String> configMap = newConfig.toMap();
6773
String datalakePrefix = "datalake." + newDatalakeFormat + ".";
6874
configMap.forEach(

fluss-server/src/main/java/org/apache/fluss/server/utils/TableDescriptorValidation.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,9 @@ public static void validateAlterTableProperties(
130130
.collect(Collectors.toList());
131131
if (!unsupportedKeys.isEmpty()) {
132132
throw new InvalidAlterTableException(
133-
String.format(
134-
"The following options are not supported to alter yet: %s.",
135-
unsupportedKeys.stream()
136-
.map(k -> "'" + k + "'")
137-
.collect(Collectors.joining(", "))));
133+
unsupportedKeys.stream()
134+
.map(k -> "'" + k + "'")
135+
.collect(Collectors.joining(", ")));
138136
}
139137

140138
if (!currentConfig.getDataLakeFormat().isPresent()) {

fluss-server/src/test/java/org/apache/fluss/server/DynamicConfigChangeTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,47 @@ void testUnknownLakeHouse() throws Exception {
184184
}
185185
}
186186

187+
@Test
188+
void testDatalakePrefixValidationSkippedWhenFormatIsNull() throws Exception {
189+
Configuration configuration = new Configuration();
190+
try (LakeCatalogDynamicLoader lakeCatalogDynamicLoader =
191+
new LakeCatalogDynamicLoader(configuration, null, true)) {
192+
DynamicConfigManager dynamicConfigManager =
193+
new DynamicConfigManager(zookeeperClient, configuration, true);
194+
dynamicConfigManager.register(lakeCatalogDynamicLoader);
195+
dynamicConfigManager.startup();
196+
197+
// Setting `datalake.paimon.*` without setting `datalake.format` should pass because
198+
// prefix validation is skipped.
199+
assertThatCode(
200+
() ->
201+
dynamicConfigManager.alterConfigs(
202+
Collections.singletonList(
203+
new AlterConfig(
204+
"datalake.iceberg.type",
205+
"rest",
206+
AlterConfigOpType.SET))))
207+
.doesNotThrowAnyException();
208+
209+
assertThat(lakeCatalogDynamicLoader.getLakeCatalogContainer().getDataLakeFormat())
210+
.isNull();
211+
assertThatThrownBy(
212+
() ->
213+
dynamicConfigManager.alterConfigs(
214+
Arrays.asList(
215+
new AlterConfig(
216+
"datalake.iceberg.type",
217+
"rest",
218+
AlterConfigOpType.SET),
219+
new AlterConfig(
220+
"datalake.format",
221+
"paimon",
222+
AlterConfigOpType.SET))))
223+
.hasMessageContaining(
224+
"Invalid configuration 'datalake.iceberg.type' for 'paimon' datalake format");
225+
}
226+
}
227+
187228
@Test
188229
void testWrongLakeFormatPrefix() throws Exception {
189230
Configuration configuration = new Configuration();

0 commit comments

Comments
 (0)