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

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


The following commit(s) were added to refs/heads/master by this push:
     new 197965e9ae9 Skip the file timestamp check of tsfiles generated by 
repair task (#13581)
197965e9ae9 is described below

commit 197965e9ae998b5a0a19a7a366c06eb31d6671d5
Author: shuwenwei <[email protected]>
AuthorDate: Tue Sep 24 15:50:08 2024 +0800

    Skip the file timestamp check of tsfiles generated by repair task (#13581)
    
    * skip the check of tsfiles generated by repair task
    
    * add more compaction logs for debug
---
 .../apache/iotdb/db/storageengine/dataregion/DataRegion.java   |  6 +++++-
 .../compaction/execute/task/AbstractCompactionTask.java        |  2 +-
 .../execute/task/InsertionCrossSpaceCompactionTask.java        |  2 ++
 .../execute/task/RepairUnsortedFileCompactionTask.java         |  4 ++++
 .../dataregion/compaction/repair/RepairDataFileScanUtil.java   | 10 +++++++++-
 .../compaction/repair/RepairTimePartitionScanTask.java         |  2 +-
 .../db/storageengine/dataregion/tsfile/TsFileResource.java     |  2 +-
 7 files changed, 23 insertions(+), 5 deletions(-)

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 53da04da2cc..dd599218612 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
@@ -779,7 +779,11 @@ public class DataRegion implements IDataRegionForQuery {
   private void checkTsFileTime(File tsFile, long currentTime) throws 
DataRegionException {
     String[] items = tsFile.getName().replace(TSFILE_SUFFIX, 
"").split(FILE_NAME_SEPARATOR);
     long fileTime = Long.parseLong(items[0]);
-    if (fileTime > currentTime) {
+    // skip files generated by repair compaction task
+    long version = Long.parseLong(items[1]);
+    if (version > 0
+        && fileTime > currentTime
+        && fileTime < 
RepairUnsortedFileCompactionTask.getInitialAllocatedFileTimestamp()) {
       throw new DataRegionException(
           String.format(
               "data region %s[%s] is down, because the time of tsfile %s is 
larger than system current time, "
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
index 75556001fd6..7173167541f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
@@ -474,7 +474,7 @@ public abstract class AbstractCompactionTask {
                 : timeDiff;
           });
       List<TsFileResource> overlapFilesInTimePartition =
-          
RepairDataFileScanUtil.checkTimePartitionHasOverlap(timePartitionSeqFiles);
+          
RepairDataFileScanUtil.checkTimePartitionHasOverlap(timePartitionSeqFiles, 
true);
       if (!overlapFilesInTimePartition.isEmpty()) {
         LOGGER.error(
             "Failed to pass compaction validation, source seq files: {}, 
source unseq files: {}, target files: {}",
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
index e2f31a28ffa..1f7e2b9c018 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
@@ -121,11 +121,13 @@ public class InsertionCrossSpaceCompactionTask extends 
AbstractCompactionTask {
     recoverMemoryStatus = true;
     LOGGER.info(
         "{}-{} [Compaction] InsertionCrossSpaceCompaction task starts with 
unseq file {}, "
+            + "nearest seq files are {}, "
             + "target file name timestamp is {}, "
             + "file size is {} MB.",
         storageGroupName,
         dataRegionId,
         unseqFileToInsert,
+        selectedSeqFiles,
         timestamp,
         unseqFileToInsert.getTsFileSize() / 1024 / 1024);
     boolean isSuccess = true;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
index e2ac24b0dba..d9ec119bea3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
@@ -54,6 +54,10 @@ public class RepairUnsortedFileCompactionTask extends 
InnerSpaceCompactionTask {
     }
   }
 
+  public static long getInitialAllocatedFileTimestamp() {
+    return Long.MAX_VALUE / 2;
+  }
+
   private final TsFileResource sourceFile;
   private final boolean rewriteFile;
   private CountDownLatch latch;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairDataFileScanUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairDataFileScanUtil.java
index 64439887ae8..d977ec01b5c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairDataFileScanUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairDataFileScanUtil.java
@@ -242,7 +242,8 @@ public class RepairDataFileScanUtil {
     return isBrokenFile;
   }
 
-  public static List<TsFileResource> 
checkTimePartitionHasOverlap(List<TsFileResource> resources) {
+  public static List<TsFileResource> checkTimePartitionHasOverlap(
+      List<TsFileResource> resources, boolean printOverlappedDevices) {
     List<TsFileResource> overlapResources = new ArrayList<>();
     Map<IDeviceID, Long> deviceEndTimeMap = new HashMap<>();
     for (TsFileResource resource : resources) {
@@ -270,6 +271,13 @@ public class RepairDataFileScanUtil {
         }
         long deviceEndTimeInPreviousFile = deviceEndTimeMap.get(device);
         if (deviceStartTimeInCurrentFile <= deviceEndTimeInPreviousFile) {
+          if (printOverlappedDevices) {
+            logger.error(
+                "Device {} has overlapped data, start time in current file is 
{}, end time in previous file is {}",
+                device,
+                deviceStartTimeInCurrentFile,
+                deviceEndTimeInPreviousFile);
+          }
           fileHasOverlap = true;
           overlapResources.add(resource);
           break;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairTimePartitionScanTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairTimePartitionScanTask.java
index 8bbae0af103..cba0fe26b0e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairTimePartitionScanTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/repair/RepairTimePartitionScanTask.java
@@ -143,7 +143,7 @@ public class RepairTimePartitionScanTask implements 
Callable<Void> {
     List<TsFileResource> seqList =
         
tsFileManager.getTsFileListSnapshot(timePartition.getTimePartitionId(), true);
     List<TsFileResource> overlapFiles =
-        RepairDataFileScanUtil.checkTimePartitionHasOverlap(seqList);
+        RepairDataFileScanUtil.checkTimePartitionHasOverlap(seqList, false);
     for (TsFileResource overlapFile : overlapFiles) {
       if (!timePartition.getTsFileManager().isAllowCompaction()) {
         LOGGER.info(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
index fd83f497301..27e81ac93eb 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
@@ -648,7 +648,7 @@ public class TsFileResource {
 
   @Override
   public String toString() {
-    return String.format("file is %s, status: %s", file.toString(), 
getStatus());
+    return String.format("{file: %s, status: %s}", file.toString(), 
getStatus());
   }
 
   @Override

Reply via email to