This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch rc/2.0.2-hotfix in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c94db162b1f38b9c386c8d9694b42c5add18e06c Author: Caideyipi <[email protected]> AuthorDate: Tue May 6 12:08:53 2025 +0800 Fixed the cached TTL & time precision problem of PartitionTableAutoCleaner (#15455) * Update ClusterSchemaInfo.java * partial * Fix (cherry picked from commit 3288914e32690ea37add10be764db18d8150986f) --- .../org/apache/iotdb/confignode/manager/TTLManager.java | 9 +++++++-- .../plan/analyze/cache/schema/DataNodeTTLCache.java | 2 +- .../org/apache/iotdb/commons/schema/table/TsTable.java | 15 ++++++--------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TTLManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TTLManager.java index 110d68a02c6..e7ec400d0a9 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TTLManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/TTLManager.java @@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.conf.CommonDescriptor; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.utils.CommonDateTimeUtils; import org.apache.iotdb.commons.utils.PathUtils; import org.apache.iotdb.confignode.consensus.request.read.ttl.ShowTTLPlan; import org.apache.iotdb.confignode.consensus.request.write.database.DatabaseSchemaPlan; @@ -136,8 +137,12 @@ public class TTLManager { * @return the maximum ttl of the subtree of the corresponding database. return NULL_TTL if the * TTL is not set or the database does not exist. */ - public long getDatabaseMaxTTL(String database) { - return ttlInfo.getDatabaseMaxTTL(database); + public long getDatabaseMaxTTL(final String database) { + final long ttl = ttlInfo.getDatabaseMaxTTL(database); + return ttl == Long.MAX_VALUE || ttl < 0 + ? ttl + : CommonDateTimeUtils.convertMilliTimeWithPrecision( + ttl, CommonDescriptor.getInstance().getConfig().getTimestampPrecision()); } /** Only used for upgrading from old database-level ttl to device-level ttl. */ diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeTTLCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeTTLCache.java index a43c0a663ea..5e0f3f01a2b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeTTLCache.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/schema/DataNodeTTLCache.java @@ -87,7 +87,7 @@ public class DataNodeTTLCache { public long getTTLForTable(final String database, final String table) { final TsTable tsTable = DataNodeTableCache.getInstance().getTable(database, table); - return tsTable == null ? Long.MAX_VALUE : tsTable.getTableTTL(); + return tsTable == null ? Long.MAX_VALUE : tsTable.getCachedTableTTL(); } /** Get ttl with time precision conversion. */ diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java index 92fbd805bb2..15f0b26415a 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/TsTable.java @@ -209,23 +209,20 @@ public class TsTable { // This shall only be called on DataNode, where the tsTable is replaced completely thus an old // cache won't pollute the newest value - public long getTableTTL() { + public long getCachedTableTTL() { // Cache for performance if (ttlValue < 0) { - final long ttl = getTableTTLInMS(); - ttlValue = - ttl == Long.MAX_VALUE - ? ttl - : CommonDateTimeUtils.convertMilliTimeWithPrecision( - ttl, CommonDescriptor.getInstance().getConfig().getTimestampPrecision()); + ttlValue = getTableTTL(); } return ttlValue; } - private long getTableTTLInMS() { + public long getTableTTL() { final Optional<String> ttl = getPropValue(TTL_PROPERTY); return ttl.isPresent() && !ttl.get().equalsIgnoreCase(TTL_INFINITE) - ? Long.parseLong(ttl.get()) + ? CommonDateTimeUtils.convertMilliTimeWithPrecision( + Long.parseLong(ttl.get()), + CommonDescriptor.getInstance().getConfig().getTimestampPrecision()) : Long.MAX_VALUE; }
