You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by mi...@apache.org on 2020/05/14 18:57:03 UTC
[kafka] branch trunk updated: KAFKA-9650: include human readable
units in ms and bytes configs (#8222)
This is an automated email from the ASF dual-hosted git repository.
mimaison pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 873e944 KAFKA-9650: include human readable units in ms and bytes configs (#8222)
873e944 is described below
commit 873e9446ef8426061e2f1b6cd21815b270e27f03
Author: Tom Bentley <to...@users.noreply.github.com>
AuthorDate: Thu May 14 19:56:13 2020 +0100
KAFKA-9650: include human readable units in ms and bytes configs (#8222)
Reviewers: Mickael Maison <mi...@gmail.com>
---
.../org/apache/kafka/common/config/ConfigDef.java | 55 +++++++++++++++++++++-
.../apache/kafka/common/config/ConfigDefTest.java | 40 ++++++++++++++++
2 files changed, 93 insertions(+), 2 deletions(-)
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 469476d..d33a3c4 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
@@ -1166,8 +1166,15 @@ public class ConfigDef {
String defaultValueStr = convertToString(key.defaultValue, key.type);
if (defaultValueStr.isEmpty())
return "\"\"";
- else
- return defaultValueStr;
+ else {
+ String suffix = "";
+ if (key.name.endsWith(".bytes")) {
+ suffix = niceMemoryUnits(((Number) key.defaultValue).longValue());
+ } else if (key.name.endsWith(".ms")) {
+ suffix = niceTimeUnits(((Number) key.defaultValue).longValue());
+ }
+ return defaultValueStr + suffix;
+ }
} else
return "";
case "Valid Values":
@@ -1179,6 +1186,50 @@ public class ConfigDef {
}
}
+ static String niceMemoryUnits(long bytes) {
+ long value = bytes;
+ int i = 0;
+ while (value != 0 && i < 4) {
+ if (value % 1024L == 0) {
+ value /= 1024L;
+ i++;
+ } else {
+ break;
+ }
+ }
+ switch (i) {
+ case 1:
+ return " (" + value + " kibibyte" + (value == 1 ? ")" : "s)");
+ case 2:
+ return " (" + value + " mebibyte" + (value == 1 ? ")" : "s)");
+ case 3:
+ return " (" + value + " gibibyte" + (value == 1 ? ")" : "s)");
+ case 4:
+ return " (" + value + " tebibyte" + (value == 1 ? ")" : "s)");
+ default:
+ return "";
+ }
+ }
+
+ static String niceTimeUnits(long millis) {
+ long value = millis;
+ long[] divisors = {1000, 60, 60, 24};
+ String[] units = {"second", "minute", "hour", "day"};
+ int i = 0;
+ while (value != 0 && i < 4) {
+ if (value % divisors[i] == 0) {
+ value /= divisors[i];
+ i++;
+ } else {
+ break;
+ }
+ }
+ if (i > 0) {
+ return " (" + value + " " + units[i - 1] + (value > 1 ? "s)" : ")");
+ }
+ return "";
+ }
+
public String toHtmlTable() {
return toHtmlTable(Collections.<String, String>emptyMap());
}
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 9751545..389ec7c 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
@@ -26,6 +26,7 @@ import org.apache.kafka.common.config.ConfigDef.Width;
import org.apache.kafka.common.config.types.Password;
import org.junit.Test;
+import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -667,4 +668,43 @@ public class ConfigDefTest {
private class NestedClass {
}
+
+ @Test
+ public void testNiceMemoryUnits() {
+ assertEquals("", ConfigDef.niceMemoryUnits(0L));
+ assertEquals("", ConfigDef.niceMemoryUnits(1023));
+ assertEquals(" (1 kibibyte)", ConfigDef.niceMemoryUnits(1024));
+ assertEquals("", ConfigDef.niceMemoryUnits(1025));
+ assertEquals(" (2 kibibytes)", ConfigDef.niceMemoryUnits(2 * 1024));
+ assertEquals(" (1 mebibyte)", ConfigDef.niceMemoryUnits(1024 * 1024));
+ assertEquals(" (2 mebibytes)", ConfigDef.niceMemoryUnits(2 * 1024 * 1024));
+ assertEquals(" (1 gibibyte)", ConfigDef.niceMemoryUnits(1024 * 1024 * 1024));
+ assertEquals(" (2 gibibytes)", ConfigDef.niceMemoryUnits(2L * 1024 * 1024 * 1024));
+ assertEquals(" (1 tebibyte)", ConfigDef.niceMemoryUnits(1024L * 1024 * 1024 * 1024));
+ assertEquals(" (2 tebibytes)", ConfigDef.niceMemoryUnits(2L * 1024 * 1024 * 1024 * 1024));
+ assertEquals(" (1024 tebibytes)", ConfigDef.niceMemoryUnits(1024L * 1024 * 1024 * 1024 * 1024));
+ assertEquals(" (2048 tebibytes)", ConfigDef.niceMemoryUnits(2L * 1024 * 1024 * 1024 * 1024 * 1024));
+ }
+
+ @Test
+ public void testNiceTimeUnits() {
+ assertEquals("", ConfigDef.niceTimeUnits(0));
+ assertEquals("", ConfigDef.niceTimeUnits(Duration.ofSeconds(1).toMillis() - 1));
+ assertEquals(" (1 second)", ConfigDef.niceTimeUnits(Duration.ofSeconds(1).toMillis()));
+ assertEquals("", ConfigDef.niceTimeUnits(Duration.ofSeconds(1).toMillis() + 1));
+ assertEquals(" (2 seconds)", ConfigDef.niceTimeUnits(Duration.ofSeconds(2).toMillis()));
+
+ assertEquals(" (1 minute)", ConfigDef.niceTimeUnits(Duration.ofMinutes(1).toMillis()));
+ assertEquals(" (2 minutes)", ConfigDef.niceTimeUnits(Duration.ofMinutes(2).toMillis()));
+
+ assertEquals(" (1 hour)", ConfigDef.niceTimeUnits(Duration.ofHours(1).toMillis()));
+ assertEquals(" (2 hours)", ConfigDef.niceTimeUnits(Duration.ofHours(2).toMillis()));
+
+ assertEquals(" (1 day)", ConfigDef.niceTimeUnits(Duration.ofDays(1).toMillis()));
+ assertEquals(" (2 days)", ConfigDef.niceTimeUnits(Duration.ofDays(2).toMillis()));
+
+ assertEquals(" (7 days)", ConfigDef.niceTimeUnits(Duration.ofDays(7).toMillis()));
+ assertEquals(" (365 days)", ConfigDef.niceTimeUnits(Duration.ofDays(365).toMillis()));
+ }
+
}