[
https://issues.apache.org/jira/browse/KAFKA-6476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16364852#comment-16364852
]
ASF GitHub Bot commented on KAFKA-6476:
---
rajinisivaram closed pull request #4558: KAFKA-6476: Documentation for dynamic
broker configuration
URL: https://github.com/apache/kafka/pull/4558
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java
b/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java
index bb199dde202..a1c0e3be574 100644
--- a/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java
+++ b/clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java
@@ -1091,16 +1091,40 @@ protected String getConfigValue(ConfigKey key, String
headerName) {
}
public String toHtmlTable() {
+return toHtmlTable(Collections.emptyMap());
+}
+
+private void addHeader(StringBuilder builder, String headerName) {
+builder.append("");
+builder.append(headerName);
+builder.append("\n");
+}
+
+private void addColumnValue(StringBuilder builder, String value) {
+builder.append("");
+builder.append(value);
+builder.append("");
+}
+
+/**
+ * Converts this config into an HTML table that can be embedded into docs.
+ * If dynamicUpdateModes is non-empty, a "Dynamic Update
Mode" column
+ * will be included n the table with the value of the update mode. Default
+ * mode is "read-only".
+ * @param dynamicUpdateModes Config name -> update mode mapping
+ */
+public String toHtmlTable(Map dynamicUpdateModes) {
+boolean hasUpdateModes = !dynamicUpdateModes.isEmpty();
List configs = sortedConfigs();
StringBuilder b = new StringBuilder();
b.append("\n");
b.append("\n");
// print column headers
for (String headerName : headers()) {
-b.append("");
-b.append(headerName);
-b.append("\n");
+addHeader(b, headerName);
}
+if (hasUpdateModes)
+addHeader(b, "Dynamic Update Mode");
b.append("\n");
for (ConfigKey key : configs) {
if (key.internalConfig) {
@@ -1109,10 +1133,15 @@ public String toHtmlTable() {
b.append("\n");
// print column values
for (String headerName : headers()) {
-b.append("");
-b.append(getConfigValue(key, headerName));
+addColumnValue(b, getConfigValue(key, headerName));
b.append("");
}
+if (hasUpdateModes) {
+String updateMode = dynamicUpdateModes.get(key.name);
+if (updateMode == null)
+updateMode = "read-only";
+addColumnValue(b, updateMode);
+}
b.append("\n");
}
b.append("");
diff --git
a/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java
b/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java
index 339c51aa4b1..affa5dd4436 100644
--- a/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java
+++ b/clients/src/test/java/org/apache/kafka/common/config/ConfigDefTest.java
@@ -39,6 +39,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class ConfigDefTest {
@@ -367,6 +368,32 @@ public void testInternalConfigDoesntShowUpInDocs() throws
Exception {
assertFalse(configDef.toRst().contains("my.config"));
}
+@Test
+public void testDynamicUpdateModeInDocs() throws Exception {
+final ConfigDef configDef = new ConfigDef()
+.define("my.broker.config", Type.LONG, Importance.HIGH, "docs")
+.define("my.cluster.config", Type.LONG, Importance.HIGH,
"docs")
+.define("my.readonly.config", Type.LONG, Importance.HIGH,
"docs");
+final Map updateModes = new HashMap<>();
+updateModes.put("my.broker.config", "per-broker");
+updateModes.put("my.cluster.config", "cluster-wide");
+final String html = configDef.toHtmlTable(updateModes);
+Set configsInHtml = new HashSet();
+for (String line : html.split("\n")) {
+if (line.contains("my.broker.config")) {
+assertTrue(line.contains("per-broker"));
+configsInHtml.add("my.broker.config");
+} else if