You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@amoro.apache.org by yu...@apache.org on 2025/12/08 07:56:07 UTC
(amoro) branch master updated: [AMORO-3981][FOLLOWUP] Refine the duration to string format (#3987)
This is an automated email from the ASF dual-hosted git repository.
yuanfeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git
The following commit(s) were added to refs/heads/master by this push:
new 1bc8a941a [AMORO-3981][FOLLOWUP] Refine the duration to string format (#3987)
1bc8a941a is described below
commit 1bc8a941a457e7c9cdb8be7481e466dc717b4024
Author: Fei Wang <fw...@ebay.com>
AuthorDate: Sun Dec 7 23:56:03 2025 -0800
[AMORO-3981][FOLLOWUP] Refine the duration to string format (#3987)
* [AMORO-3981][FOLLOWUP] Refine duration type parse and convert to string
* Revert "[AMORO-3981][FOLLOWUP] Refine duration type parse and convert to string"
This reverts commit 877bcb9a71f12173a6ee6961b4e3a61091c76140.
* format duration with TimeUtils.formatWithHighestUnit
* largest unit
---
.../org/apache/amoro/config/ConfigHelpers.java | 6 ++--
.../org/apache/amoro/config/ConfigHelpersTest.java | 37 ++++++++++++++++++++++
docs/configuration/ams-config.md | 34 ++++++++++----------
3 files changed, 57 insertions(+), 20 deletions(-)
diff --git a/amoro-common/src/main/java/org/apache/amoro/config/ConfigHelpers.java b/amoro-common/src/main/java/org/apache/amoro/config/ConfigHelpers.java
index 5020ef1c4..5310e439e 100644
--- a/amoro-common/src/main/java/org/apache/amoro/config/ConfigHelpers.java
+++ b/amoro-common/src/main/java/org/apache/amoro/config/ConfigHelpers.java
@@ -207,8 +207,7 @@ public class ConfigHelpers {
if (o.getClass() == String.class) {
return (String) o;
} else if (o.getClass() == Duration.class) {
- Duration duration = (Duration) o;
- return String.format("%d ns", duration.toNanos());
+ return TimeUtils.formatWithHighestUnit((Duration) o);
} else if (o instanceof List) {
return ((List<?>) o)
.stream()
@@ -440,7 +439,8 @@ public class ConfigHelpers {
return orderedUnits.get(idx - 1);
}
})
- .orElse(TimeUnit.MILLISECONDS);
+ // Use the largest unit if all divide evenly
+ .orElse(orderedUnits.get(orderedUnits.size() - 1));
return String.format(
"%d %s",
diff --git a/amoro-common/src/test/java/org/apache/amoro/config/ConfigHelpersTest.java b/amoro-common/src/test/java/org/apache/amoro/config/ConfigHelpersTest.java
new file mode 100644
index 000000000..7465a74b4
--- /dev/null
+++ b/amoro-common/src/test/java/org/apache/amoro/config/ConfigHelpersTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.amoro.config;
+
+import org.junit.jupiter.api.Test;
+
+import java.time.Duration;
+
+public class ConfigHelpersTest {
+ @Test
+ public void testTimeUtils() {
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofNanos(1)).equals("1 ns");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofNanos(1000)).equals("1 µs");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofMillis(1)).equals("1 ms");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofSeconds(1)).equals("1 s");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofMinutes(1)).equals("1 min");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofHours(1)).equals("1 h");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofDays(1)).equals("1 d");
+ assert ConfigHelpers.TimeUtils.formatWithHighestUnit(Duration.ofHours(25)).equals("25 h");
+ }
+}
diff --git a/docs/configuration/ams-config.md b/docs/configuration/ams-config.md
index 7a99924ef..a67ed282c 100644
--- a/docs/configuration/ams-config.md
+++ b/docs/configuration/ams-config.md
@@ -45,17 +45,17 @@ table td:last-child, table th:last-child { width: 40%; word-break: break-all; }
| admin-password | admin | The administrator password |
| admin-username | admin | The administrator account name. |
| auto-create-tags.enabled | true | Enable creating tags. |
-| auto-create-tags.interval | 60000000000 ns | Interval for creating tags. |
+| auto-create-tags.interval | 1 min | Interval for creating tags. |
| auto-create-tags.thread-count | 3 | The number of threads used for creating tags. |
-| blocker.timeout | 60000000000 ns | Session timeout. Default unit is milliseconds if not specified. |
-| catalog-meta-cache.expiration-interval | 60000000000 ns | TTL for catalog metadata. |
+| blocker.timeout | 1 min | Session timeout. Default unit is milliseconds if not specified. |
+| catalog-meta-cache.expiration-interval | 1 min | TTL for catalog metadata. |
| clean-dangling-delete-files.enabled | true | Enable dangling delete files cleaning. |
| clean-dangling-delete-files.thread-count | 10 | The number of threads used for dangling delete files cleaning. |
| clean-orphan-files.enabled | true | Enable orphan files cleaning. |
-| clean-orphan-files.interval | 86400000000000 ns | Interval for cleaning orphan files. |
+| clean-orphan-files.interval | 1 d | Interval for cleaning orphan files. |
| clean-orphan-files.thread-count | 10 | The number of threads used for orphan files cleaning. |
| data-expiration.enabled | true | Enable data expiration |
-| data-expiration.interval | 86400000000000 ns | Execute interval for data expiration |
+| data-expiration.interval | 1 d | Execute interval for data expiration |
| data-expiration.thread-count | 10 | The number of threads used for data expiring |
| database.auto-create-tables | true | Auto init table schema when started |
| database.connection-pool-max-idle | 16 | Max idle connect count of database connect pool. |
@@ -69,34 +69,34 @@ table td:last-child, table th:last-child { width: 40%; word-break: break-all; }
| expire-snapshots.enabled | true | Enable snapshots expiring. |
| expire-snapshots.thread-count | 10 | The number of threads used for snapshots expiring. |
| ha.cluster-name | default | Amoro management service cluster name. |
-| ha.connection-timeout | 300000000000 ns | The Zookeeper connection timeout in milliseconds. |
+| ha.connection-timeout | 5 min | The Zookeeper connection timeout in milliseconds. |
| ha.enabled | false | Whether to enable high availability mode. |
-| ha.session-timeout | 30000000000 ns | The Zookeeper session timeout in milliseconds. |
+| ha.session-timeout | 30 s | The Zookeeper session timeout in milliseconds. |
| ha.zookeeper-address | | The Zookeeper address used for high availability. |
| http-server.auth-basic-provider | org.apache.amoro.server.authentication.DefaultPasswdAuthenticationProvider | User-defined password authentication implementation of org.apache.amoro.authentication.PasswdAuthenticationProvider |
| http-server.auth-jwt-provider | <undefined> | User-defined JWT (JSON Web Token) authentication implementation of org.apache.amoro.authentication.TokenAuthenticationProvider |
| http-server.bind-port | 19090 | Port that the Http server is bound to. |
| http-server.proxy-client-ip-header | X-Real-IP | The HTTP header to record the real client IP address. If your server is behind a load balancer or other proxy, the server will see this load balancer or proxy IP address as the client IP address, to get around this common issue, most load balancers or proxies offer the ability to record the real remote IP address in an HTTP header that will be added to the request for other devices to use. |
| http-server.rest-auth-type | token | The authentication used by REST APIs, token (default), basic or jwt. |
-| http-server.session-timeout | 604800000000000 ns | Timeout for http session. |
-| optimizer.heart-beat-timeout | 60000000000 ns | Timeout duration for Optimizer heartbeat. |
+| http-server.session-timeout | 7 d | Timeout for http session. |
+| optimizer.heart-beat-timeout | 1 min | Timeout duration for Optimizer heartbeat. |
| optimizer.max-planning-parallelism | 1 | Max planning parallelism in one optimizer group. |
-| optimizer.polling-timeout | 3000000000 ns | Optimizer polling task timeout. |
-| optimizer.task-ack-timeout | 30000000000 ns | Timeout duration for task acknowledgment. |
-| optimizer.task-execute-timeout | 3600000000000 ns | Timeout duration for task execution, default to 1 hour. |
+| optimizer.polling-timeout | 3 s | Optimizer polling task timeout. |
+| optimizer.task-ack-timeout | 30 s | Timeout duration for task acknowledgment. |
+| optimizer.task-execute-timeout | 1 h | Timeout duration for task execution, default to 1 hour. |
| overview-cache.max-size | 3360 | Max size of overview cache. |
-| overview-cache.refresh-interval | 180000000000 ns | Interval for refreshing overview cache. |
-| refresh-external-catalogs.interval | 180000000000 ns | Interval to refresh the external catalog. |
+| overview-cache.refresh-interval | 3 min | Interval for refreshing overview cache. |
+| refresh-external-catalogs.interval | 3 min | Interval to refresh the external catalog. |
| refresh-external-catalogs.queue-size | 1000000 | The queue size of the executors of the external catalog explorer. |
| refresh-external-catalogs.thread-count | 10 | The number of threads used for discovering tables in external catalogs. |
-| refresh-tables.interval | 60000000000 ns | Interval for refreshing table metadata. |
+| refresh-tables.interval | 1 min | Interval for refreshing table metadata. |
| refresh-tables.max-pending-partition-count | 100 | Filters will not be used beyond that number of partitions. |
| refresh-tables.thread-count | 10 | The number of threads used for refreshing tables. |
| self-optimizing.break-quota-limit-enabled | true | Allow the table to break the quota limit when the resource is sufficient. |
| self-optimizing.commit-manifest-io-thread-count | 10 | Sets the size of the worker pool. The worker pool limits the number of tasks concurrently processing manifests in the base table implementation across all concurrent commit operations. |
| self-optimizing.commit-thread-count | 10 | The number of threads that self-optimizing uses to submit results. |
| self-optimizing.plan-manifest-io-thread-count | 10 | Sets the size of the worker pool. The worker pool limits the number of tasks concurrently processing manifests in the base table implementation across all concurrent planning operations. |
-| self-optimizing.refresh-group-interval | 30000000000 ns | Optimizer group refresh interval. |
+| self-optimizing.refresh-group-interval | 30 s | Optimizer group refresh interval. |
| self-optimizing.runtime-data-expire-interval-hours | 1 | The number of hours that self-optimizing runtime data expire interval. |
| self-optimizing.runtime-data-keep-days | 30 | The number of days that self-optimizing runtime data keeps the runtime. |
| server-bind-host | 0.0.0.0 | The host bound to the server. |
@@ -108,7 +108,7 @@ table td:last-child, table th:last-child { width: 40%; word-break: break-all; }
| terminal.factory | <undefined> | Session factory implement of terminal, `terminal.backend` must be `custom` if this is set. |
| terminal.result.limit | 1000 | Row limit of result-set |
| terminal.sensitive-conf-keys | | Comma-separated list of sensitive conf keys used to desensitize related value. |
-| terminal.session.timeout | 1800000000000 ns | Session timeout. Default unit is milliseconds if not specified (** Note: default units are minutes when version < 0.8). |
+| terminal.session.timeout | 30 min | Session timeout. Default unit is milliseconds if not specified (** Note: default units are minutes when version < 0.8). |
| terminal.stop-on-error | false | When a statement fails to execute, stop execution or continue executing the remaining statements. |
| thrift-server.max-message-size | 100 mb | Maximum message size that the Thrift server can accept. Default unit is bytes if not specified. |
| thrift-server.optimizing-service.bind-port | 1261 | Port that the optimizing service thrift server is bound to. |