From 95c6043431c52912679efc81f3d656f47ba40abf Mon Sep 17 00:00:00 2001 From: Rory Date: Fri, 21 Feb 2025 20:09:11 +0800 Subject: [PATCH] [#6499] improvement(server): Support custom configuration options in the REST API `/configs` --- .../java/org/apache/gravitino/Configs.java | 8 +++++++ .../gravitino/config/ConfigConstants.java | 3 +++ .../gravitino/server/web/ConfigServlet.java | 10 +++++++++ .../server/web/TestConfigServlet.java | 21 +++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/core/src/main/java/org/apache/gravitino/Configs.java b/core/src/main/java/org/apache/gravitino/Configs.java index 1a94e47e392..e44e768ea3b 100644 --- a/core/src/main/java/org/apache/gravitino/Configs.java +++ b/core/src/main/java/org/apache/gravitino/Configs.java @@ -310,4 +310,12 @@ private Configs() {} .version(ConfigConstants.VERSION_0_7_0) .stringConf() .createWithDefault(SimpleFormatterV2.class.getName()); + + public static final ConfigEntry> VISIBLE_CONFIGS = + new ConfigBuilder("gravitino.visible.configs") + .doc("List of configs that are visible in the config servlet") + .version(ConfigConstants.VERSION_0_9_0) + .stringConf() + .toSequence() + .createWithDefault(Collections.emptyList()); } diff --git a/core/src/main/java/org/apache/gravitino/config/ConfigConstants.java b/core/src/main/java/org/apache/gravitino/config/ConfigConstants.java index c9be711f32e..7b63b3c8595 100644 --- a/core/src/main/java/org/apache/gravitino/config/ConfigConstants.java +++ b/core/src/main/java/org/apache/gravitino/config/ConfigConstants.java @@ -70,4 +70,7 @@ private ConfigConstants() {} /** The version number for the 0.8.0 release. */ public static final String VERSION_0_8_0 = "0.8.0"; + + /** The version number for the 0.9.0 release. */ + public static final String VERSION_0_9_0 = "0.9.0"; } diff --git a/server/src/main/java/org/apache/gravitino/server/web/ConfigServlet.java b/server/src/main/java/org/apache/gravitino/server/web/ConfigServlet.java index 345a555cd9e..933aec3ad9a 100644 --- a/server/src/main/java/org/apache/gravitino/server/web/ConfigServlet.java +++ b/server/src/main/java/org/apache/gravitino/server/web/ConfigServlet.java @@ -22,6 +22,7 @@ import com.google.common.collect.Maps; import java.io.IOException; import java.io.PrintWriter; +import java.util.List; import java.util.Map; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -58,6 +59,15 @@ public ConfigServlet(ServerConfig serverConfig) { configs.put(key.getKey(), serverConfig.get(key)); } } + + List visibleConfigs = serverConfig.get(Configs.VISIBLE_CONFIGS); + + for (String config : visibleConfigs) { + String configValue = serverConfig.getRawString(config); + if (configValue != null) { + configs.put(config, configValue); + } + } } @Override diff --git a/server/src/test/java/org/apache/gravitino/server/web/TestConfigServlet.java b/server/src/test/java/org/apache/gravitino/server/web/TestConfigServlet.java index c76587d0397..53d9e114f43 100644 --- a/server/src/test/java/org/apache/gravitino/server/web/TestConfigServlet.java +++ b/server/src/test/java/org/apache/gravitino/server/web/TestConfigServlet.java @@ -22,8 +22,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.google.common.collect.Lists; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; +import org.apache.gravitino.Configs; import org.apache.gravitino.server.ServerConfig; import org.junit.jupiter.api.Test; @@ -43,4 +45,23 @@ public void testConfigServlet() throws Exception { "{\"gravitino.authorization.enable\":false,\"gravitino.authenticators\":[\"simple\"]}"); configServlet.destroy(); } + + @Test + public void testConfigServletWithVisibleConfigs() throws Exception { + ServerConfig serverConfig = new ServerConfig(); + serverConfig.set( + Configs.VISIBLE_CONFIGS, + Lists.newArrayList(Configs.AUDIT_LOG_FORMATTER_CLASS_NAME.getKey())); + serverConfig.set(Configs.AUDIT_LOG_FORMATTER_CLASS_NAME, "test"); + ConfigServlet configServlet = new ConfigServlet(serverConfig); + configServlet.init(); + HttpServletResponse res = mock(HttpServletResponse.class); + PrintWriter writer = mock(PrintWriter.class); + when(res.getWriter()).thenReturn(writer); + configServlet.doGet(null, res); + verify(writer) + .write( + "{\"gravitino.audit.formatter.className\":\"test\",\"gravitino.authorization.enable\":false,\"gravitino.authenticators\":[\"simple\"]}"); + configServlet.destroy(); + } }