This is an automated email from the ASF dual-hosted git repository.

shuwenwei pushed a commit to branch object_type
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/object_type by this push:
     new 763fd09e103 fix bug
763fd09e103 is described below

commit 763fd09e10318eec21f1a858d2b6a52dcd559959
Author: shuwenwei <[email protected]>
AuthorDate: Wed Jul 9 12:29:39 2025 +0800

    fix bug
---
 .../plan/planner/plan/node/write/ObjectNode.java   | 25 ++++++++++++++++
 .../node/write/RelationalInsertTabletNode.java     |  3 +-
 .../db/storageengine/dataregion/DataRegion.java    |  6 ++++
 .../tsfile/generator/TsFileNameGenerator.java      |  4 +--
 .../compaction/CompactionDeleteObjectFileTest.java | 35 +++++++++++++++++++---
 5 files changed, 66 insertions(+), 7 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
index 26897a126a4..a9d1ef456d0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/ObjectNode.java
@@ -64,6 +64,10 @@ public class ObjectNode extends SearchNode implements 
WALEntryValue {
 
   private boolean isGeneratedByRemoteConsensusLeader;
 
+  private Long time = null;
+
+  private String table = null;
+
   public ObjectNode(boolean isEOF, long offset, byte[] content, String 
filePath) {
     super(new PlanNodeId(""));
     this.isEOF = isEOF;
@@ -81,6 +85,27 @@ public class ObjectNode extends SearchNode implements 
WALEntryValue {
     this.contentLength = contentLength;
   }
 
+  public long getTimestamp() {
+    calculateTimeAndTableName();
+    return time;
+  }
+
+  public String getTable() {
+    calculateTimeAndTableName();
+    return table;
+  }
+
+  private void calculateTimeAndTableName() {
+    if (time != null && table != null) {
+      return;
+    }
+    File file = new File(filePath);
+    String fileName = new File(filePath).getName();
+    String timeStr = fileName.substring(0, fileName.length() - 
".bin".length());
+    time = Long.parseLong(timeStr);
+    table = 
file.getParentFile().getParentFile().getParentFile().getParentFile().getName();
+  }
+
   public boolean isEOF() {
     return isEOF;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
index 2e113c5c28f..58047ca5664 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/RelationalInsertTabletNode.java
@@ -410,7 +410,8 @@ public class RelationalInsertTabletNode extends 
InsertTabletNode {
               long offset = buffer.getLong();
               byte[] content = ReadWriteIOUtils.readBytes(buffer, 
buffer.remaining());
               String relativePath =
-                  TsFileNameGenerator.generateObjectFilePath(times[j], 
getDeviceID(j));
+                  TsFileNameGenerator.generateObjectFilePath(
+                      dataRegionReplicaSet.regionId.getId(), times[j], 
getDeviceID(j));
               ObjectNode objectNode = new ObjectNode(isEoF, offset, content, 
relativePath);
               objectNode.setDataRegionReplicaSet(entry.getKey());
               result.add(objectNode);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 7b378f6e58b..ddd56380a14 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -3030,6 +3030,12 @@ public class DataRegion implements IDataRegionForQuery {
   }
 
   public void writeObject(ObjectNode objectNode) throws Exception {
+    long ttl =
+        DataNodeTTLCache.getInstance().getTTLForTable(this.databaseName, 
objectNode.getTable());
+    long nodeTimestamp = objectNode.getTimestamp();
+    if (!CommonUtils.isAlive(nodeTimestamp, ttl)) {
+      throw new OutOfTTLException(nodeTimestamp, 
(CommonDateTimeUtils.currentTime() - ttl));
+    }
     writeLock("writeObject");
     try {
       String relativeTmpPathString = objectNode.getFilePath() + ".tmp";
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/generator/TsFileNameGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/generator/TsFileNameGenerator.java
index 4208d7f4092..4bcc46d1a01 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/generator/TsFileNameGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/generator/TsFileNameGenerator.java
@@ -168,10 +168,10 @@ public class TsFileNameGenerator {
     }
   }
 
-  public static String generateObjectFilePath(long time, IDeviceID iDeviceID) {
+  public static String generateObjectFilePath(int regionId, long time, 
IDeviceID iDeviceID) {
     String objectFileName = time + ".bin";
     Object[] segments = iDeviceID.getSegments();
-    StringBuilder relativePathString = new StringBuilder();
+    StringBuilder relativePathString = new StringBuilder(regionId + 
"").append(File.separator);
     for (Object segment : segments) {
       
relativePathString.append(segment.toString().toLowerCase()).append(File.separator);
     }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/CompactionDeleteObjectFileTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/CompactionDeleteObjectFileTest.java
index 2ff7b0b3ba4..a4b35c01da6 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/CompactionDeleteObjectFileTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/CompactionDeleteObjectFileTest.java
@@ -20,7 +20,11 @@
 package org.apache.iotdb.db.storageengine.dataregion.compaction;
 
 import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.schema.table.TsTable;
+import org.apache.iotdb.commons.schema.table.column.FieldColumnSchema;
+import org.apache.iotdb.commons.schema.table.column.TagColumnSchema;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
 import 
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
 import 
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.SettleCompactionTask;
 import 
org.apache.iotdb.db.storageengine.dataregion.modification.DeletionPredicate;
@@ -29,8 +33,11 @@ import 
org.apache.iotdb.db.storageengine.dataregion.modification.ModificationFil
 import 
org.apache.iotdb.db.storageengine.dataregion.modification.TableDeletionEntry;
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 
+import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.metadata.StringArrayDeviceID;
+import org.apache.tsfile.file.metadata.enums.CompressionType;
+import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.read.common.TimeRange;
 import org.junit.After;
 import org.junit.Before;
@@ -57,6 +64,7 @@ public class CompactionDeleteObjectFileTest extends 
AbstractCompactionTest {
 
   @Test
   public void test1() throws IOException {
+    createTable("tsfile_table", 100);
     File dir = new File("/Users/shuww/Downloads/0708/1_副本");
     List<TsFileResource> resources = new ArrayList<>();
     for (File file : dir.listFiles()) {
@@ -64,6 +72,7 @@ public class CompactionDeleteObjectFileTest extends 
AbstractCompactionTest {
         continue;
       }
       TsFileResource resource = new TsFileResource(file);
+
       try (ModificationFile modificationFile = resource.getExclusiveModFile()) 
{
         modificationFile.write(
             new TableDeletionEntry(
@@ -72,15 +81,23 @@ public class CompactionDeleteObjectFileTest extends 
AbstractCompactionTest {
                     new IDPredicate.FullExactMatch(
                         new StringArrayDeviceID(new String[] {"tsfile_table", 
"1", "5", "3"})),
                     Arrays.asList("file")),
-                new TimeRange(1, 20)));
+                new TimeRange(-1, 0)));
+        modificationFile.write(
+            new TableDeletionEntry(
+                new DeletionPredicate(
+                    "tsfile_table",
+                    new IDPredicate.FullExactMatch(
+                        new StringArrayDeviceID(new String[] {"tsfile_table", 
"1", "5", "3"})),
+                    Arrays.asList("file")),
+                new TimeRange(2, 2)));
       }
       resource.deserialize();
       resources.add(resource);
     }
 
-    //    InnerSpaceCompactionTask task =
-    //        new InnerSpaceCompactionTask(
-    //            0, tsFileManager, resources, true, new 
ReadChunkCompactionPerformer(), 0);
+    //        InnerSpaceCompactionTask task =
+    //            new InnerSpaceCompactionTask(
+    //                0, tsFileManager, resources, true, new 
ReadChunkCompactionPerformer(), 0);
     SettleCompactionTask task =
         new SettleCompactionTask(
             0,
@@ -92,4 +109,14 @@ public class CompactionDeleteObjectFileTest extends 
AbstractCompactionTest {
             0);
     task.start();
   }
+
+  public void createTable(String tableName, long ttl) {
+    TsTable tsTable = new TsTable(tableName);
+    tsTable.addColumnSchema(new TagColumnSchema("id_column", 
TSDataType.STRING));
+    tsTable.addColumnSchema(
+        new FieldColumnSchema("s1", TSDataType.STRING, TSEncoding.PLAIN, 
CompressionType.LZ4));
+    tsTable.addProp(TsTable.TTL_PROPERTY, ttl + "");
+    DataNodeTableCache.getInstance().preUpdateTable("Downloads", tsTable, 
null);
+    DataNodeTableCache.getInstance().commitUpdateTable("Downloads", tableName, 
null);
+  }
 }

Reply via email to