@@ -581,9 +581,10 @@ private void recover() throws DataRegionException {
581581 }
582582 }
583583 }
584- for (List <TsFileResource > value : partitionTmpUnseqTsFiles .values ()) {
584+ for (List <TsFileResource > unseqTsFiles : partitionTmpUnseqTsFiles .values ()) {
585+ List <TsFileResource > unsealedTsFiles = new ArrayList <>();
585586 // tsFiles without resource file are unsealed
586- for (TsFileResource resource : value ) {
587+ for (TsFileResource resource : unseqTsFiles ) {
587588 if (resource .resourceFileExists ()) {
588589 FileMetrics .getInstance ()
589590 .addTsFile (
@@ -592,6 +593,13 @@ private void recover() throws DataRegionException {
592593 resource .getTsFile ().length (),
593594 false ,
594595 resource .getTsFile ().getName ());
596+ } else {
597+ WALRecoverListener recoverListener =
598+ recoverUnsealedTsFile (resource , dataRegionRecoveryContext , false );
599+ if (recoverListener != null ) {
600+ recoverListeners .add (recoverListener );
601+ }
602+ unsealedTsFiles .add (resource );
595603 }
596604 if (ModificationFile .getExclusiveMods (resource .getTsFile ()).exists ()) {
597605 // update mods file metrics
@@ -600,19 +608,7 @@ private void recover() throws DataRegionException {
600608 resource .upgradeModFile (upgradeModFileThreadPool );
601609 }
602610 }
603- while (!value .isEmpty ()) {
604- TsFileResource tsFileResource = value .get (value .size () - 1 );
605- if (tsFileResource .resourceFileExists ()) {
606- break ;
607- } else {
608- value .remove (value .size () - 1 );
609- WALRecoverListener recoverListener =
610- recoverUnsealedTsFile (tsFileResource , dataRegionRecoveryContext , false );
611- if (recoverListener != null ) {
612- recoverListeners .add (recoverListener );
613- }
614- }
615- }
611+ unseqTsFiles .removeAll (unsealedTsFiles );
616612 }
617613 // signal wal recover manager to recover this region's files
618614 WALRecoverManager .getInstance ().getAllDataRegionScannedLatch ().countDown ();
@@ -964,7 +960,12 @@ private void recoverSealedTsFiles(
964960 new SealedTsFileRecoverPerformer (sealedTsFile )) {
965961 recoverPerformer .recover ();
966962 sealedTsFile .close ();
967- tsFileResourceManager .registerSealedTsFileResource (sealedTsFile );
963+ if (!TsFileValidator .getInstance ().validateTsFile (sealedTsFile )) {
964+ sealedTsFile .remove ();
965+ tsFileManager .remove (sealedTsFile , sealedTsFile .isSeq ());
966+ } else {
967+ tsFileResourceManager .registerSealedTsFileResource (sealedTsFile );
968+ }
968969 } catch (Throwable e ) {
969970 logger .error ("Fail to recover sealed TsFile {}, skip it." , sealedTsFile .getTsFilePath (), e );
970971 } finally {
@@ -1075,7 +1076,9 @@ private void syncRecoverFilesInPartition(
10751076 lastFlushTimeMap .getMemSize (partitionId )));
10761077 }
10771078 for (TsFileResource tsFileResource : resourceList ) {
1078- updateDeviceLastFlushTime (tsFileResource );
1079+ if (!tsFileResource .isDeleted ()) {
1080+ updateDeviceLastFlushTime (tsFileResource );
1081+ }
10791082 }
10801083 TimePartitionManager .getInstance ()
10811084 .updateAfterFlushing (
0 commit comments