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;
   }
 

Reply via email to