This is an automated email from the ASF dual-hosted git repository.
liebing pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fluss.git
The following commit(s) were added to refs/heads/main by this push:
new bcf8b6452 [server] Register ConfigException in Errors to fix
misleading UnknownServerException from alterClusterConfigs (#2857)
bcf8b6452 is described below
commit bcf8b6452099292db91a4cd755f00a3e4172ed66
Author: Liebing <[email protected]>
AuthorDate: Mon Mar 16 09:50:02 2026 +0800
[server] Register ConfigException in Errors to fix misleading
UnknownServerException from alterClusterConfigs (#2857)
---
.../org/apache/fluss/client/admin/FlussAdminITCase.java | 15 +++++++++++++++
.../main/java/org/apache/fluss/rpc/protocol/Errors.java | 4 +++-
.../fluss/server/coordinator/CoordinatorService.java | 6 +++++-
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git
a/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
b/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
index 2ae715fe0..a923679dc 100644
---
a/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
+++
b/fluss-client/src/test/java/org/apache/fluss/client/admin/FlussAdminITCase.java
@@ -32,6 +32,7 @@ import org.apache.fluss.config.Configuration;
import org.apache.fluss.config.cluster.AlterConfig;
import org.apache.fluss.config.cluster.AlterConfigOpType;
import org.apache.fluss.config.cluster.ConfigEntry;
+import org.apache.fluss.exception.ConfigException;
import org.apache.fluss.exception.DatabaseAlreadyExistException;
import org.apache.fluss.exception.DatabaseNotEmptyException;
import org.apache.fluss.exception.DatabaseNotExistException;
@@ -1366,6 +1367,20 @@ class FlussAdminITCase extends ClientToServerITCaseBase {
},
Duration.ofMinutes(1),
"Get lakehouse info");
+
+ // Test alter invalid config
+ assertThatThrownBy(
+ () ->
+ admin.alterClusterConfigs(
+ Collections.singletonList(
+ new AlterConfig(
+
"not.exist.key",
+ "value",
+
AlterConfigOpType.SET)))
+ .get())
+ .cause()
+ .isInstanceOf(ConfigException.class)
+ .hasMessageContaining("not.exist.key");
}
private void assertConfigEntry(
diff --git a/fluss-rpc/src/main/java/org/apache/fluss/rpc/protocol/Errors.java
b/fluss-rpc/src/main/java/org/apache/fluss/rpc/protocol/Errors.java
index 36ecd819f..dd16d10e2 100644
--- a/fluss-rpc/src/main/java/org/apache/fluss/rpc/protocol/Errors.java
+++ b/fluss-rpc/src/main/java/org/apache/fluss/rpc/protocol/Errors.java
@@ -20,6 +20,7 @@ package org.apache.fluss.rpc.protocol;
import org.apache.fluss.exception.ApiException;
import org.apache.fluss.exception.AuthenticationException;
import org.apache.fluss.exception.AuthorizationException;
+import org.apache.fluss.exception.ConfigException;
import org.apache.fluss.exception.CorruptMessageException;
import org.apache.fluss.exception.CorruptRecordException;
import org.apache.fluss.exception.DatabaseAlreadyExistException;
@@ -245,7 +246,8 @@ public enum Errors {
INVALID_PRODUCER_ID_EXCEPTION(
63,
"The client has attempted to perform an operation with an invalid
producer ID.",
- InvalidProducerIdException::new);
+ InvalidProducerIdException::new),
+ CONFIG_EXCEPTION(64, "A configuration error occurred.",
ConfigException::new);
private static final Logger LOG = LoggerFactory.getLogger(Errors.class);
diff --git
a/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorService.java
b/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorService.java
index 17b6d934c..7c6040d8c 100644
---
a/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorService.java
+++
b/fluss-server/src/main/java/org/apache/fluss/server/coordinator/CoordinatorService.java
@@ -1040,8 +1040,12 @@ public final class CoordinatorService extends
RpcServiceBase implements Coordina
try {
dynamicConfigManager.alterConfigs(serverConfigChanges);
future.complete(new
AlterClusterConfigsResponse());
- } catch (Exception e) {
+ } catch (ApiException e) {
future.completeExceptionally(e);
+ } catch (Exception e) {
+ future.completeExceptionally(
+ new UnknownServerException(
+ "Failed to alter cluster
configs", e));
}
return null;
});