2828import org .apache .iotdb .commons .consensus .ConfigRegionId ;
2929import org .apache .iotdb .commons .exception .IllegalPathException ;
3030import org .apache .iotdb .commons .path .PartialPath ;
31+ import org .apache .iotdb .commons .path .PatternTreeMap ;
3132import org .apache .iotdb .commons .schema .SchemaConstant ;
3233import org .apache .iotdb .commons .service .metric .PerformanceOverviewMetrics ;
3334import org .apache .iotdb .commons .utils .RetryUtils ;
5859import org .apache .iotdb .db .queryengine .plan .statement .crud .LoadTsFileStatement ;
5960import org .apache .iotdb .db .queryengine .plan .statement .metadata .DatabaseSchemaStatement ;
6061import org .apache .iotdb .db .queryengine .plan .statement .metadata .ShowDatabaseStatement ;
61- import org .apache .iotdb .db .storageengine .dataregion .modification .Deletion ;
6262import org .apache .iotdb .db .storageengine .dataregion .modification .Modification ;
6363import org .apache .iotdb .db .storageengine .dataregion .tsfile .TsFileResource ;
6464import org .apache .iotdb .db .storageengine .dataregion .tsfile .TsFileResourceStatus ;
7272import org .apache .iotdb .db .utils .ModificationUtils ;
7373import org .apache .iotdb .db .utils .TimestampPrecisionUtils ;
7474import org .apache .iotdb .db .utils .constant .SqlConstant ;
75+ import org .apache .iotdb .db .utils .datastructure .PatternTreeMapFactory ;
7576import org .apache .iotdb .rpc .RpcUtils ;
7677import org .apache .iotdb .rpc .TSStatusCode ;
7778
9697import java .io .IOException ;
9798import java .util .ArrayList ;
9899import java .util .Arrays ;
99- import java .util .Collection ;
100100import java .util .Collections ;
101101import java .util .HashMap ;
102102import java .util .HashSet ;
@@ -582,10 +582,10 @@ public void setCurrentTimeIndex(final ITimeIndex timeIndex) {
582582
583583 public void autoCreateAndVerify (
584584 TsFileSequenceReader reader ,
585- Map <IDeviceID , List <TimeseriesMetadata >> device2TimeseriesMetadataList )
585+ Map <IDeviceID , List <TimeseriesMetadata >> device2TimeSeriesMetadataList )
586586 throws IOException , AuthException , LoadAnalyzeTypeMismatchException {
587587 for (final Map .Entry <IDeviceID , List <TimeseriesMetadata >> entry :
588- device2TimeseriesMetadataList .entrySet ()) {
588+ device2TimeSeriesMetadataList .entrySet ()) {
589589 final IDeviceID device = entry .getKey ();
590590
591591 try {
@@ -601,15 +601,15 @@ public void autoCreateAndVerify(
601601
602602 for (final TimeseriesMetadata timeseriesMetadata : entry .getValue ()) {
603603 try {
604- if (schemaCache .isTimeseriesDeletedByMods (device , timeseriesMetadata )) {
604+ if (schemaCache .isTimeSeriesDeletedByMods (device , timeseriesMetadata )) {
605605 continue ;
606606 }
607607 } catch (IllegalPathException e ) {
608608 // In aligned devices, there may be empty measurements which will cause
609609 // IllegalPathException.
610610 if (!timeseriesMetadata .getMeasurementId ().isEmpty ()) {
611611 LOGGER .warn (
612- "Failed to check if device {}, timeseries {} is deleted by mods. Will see it as not deleted." ,
612+ "Failed to check if device {}, timeSeries {} is deleted by mods. Will see it as not deleted." ,
613613 device ,
614614 timeseriesMetadata .getMeasurementId (),
615615 e );
@@ -974,7 +974,7 @@ private static class LoadTsFileAnalyzeSchemaCache {
974974 private Map <IDeviceID , Boolean > tsFileDevice2IsAligned ;
975975 private Set <PartialPath > alreadySetDatabases ;
976976
977- private Collection <Modification > currentModifications ;
977+ private PatternTreeMap <Modification , PatternTreeMapFactory . ModsSerializer > currentModifications ;
978978 private ITimeIndex currentTimeIndex ;
979979
980980 private long batchDevice2TimeSeriesSchemasMemoryUsageSizeInBytes = 0 ;
@@ -992,7 +992,7 @@ public LoadTsFileAnalyzeSchemaCache() throws LoadRuntimeOutOfMemoryException {
992992 this .currentBatchDevice2TimeSeriesSchemas = new HashMap <>();
993993 this .tsFileDevice2IsAligned = new HashMap <>();
994994 this .alreadySetDatabases = new HashSet <>();
995- this .currentModifications = new ArrayList <> ();
995+ this .currentModifications = PatternTreeMapFactory . getModsPatternTreeMap ();
996996 }
997997
998998 public Map <IDeviceID , Set <MeasurementSchema >> getDevice2TimeSeries () {
@@ -1051,10 +1051,13 @@ public void addIsAlignedCache(IDeviceID device, boolean isAligned, boolean addIf
10511051 public void setCurrentModificationsAndTimeIndex (TsFileResource resource ) throws IOException {
10521052 clearModificationsAndTimeIndex ();
10531053
1054- currentModifications = resource .getModFile ().getModifications ();
1055- for (final Modification modification : currentModifications ) {
1056- currentModificationsMemoryUsageSizeInBytes += ((Deletion ) modification ).getSerializedSize ();
1057- }
1054+ resource
1055+ .getModFile ()
1056+ .getModifications ()
1057+ .forEach (
1058+ modification -> currentModifications .append (modification .getPath (), modification ));
1059+
1060+ currentModificationsMemoryUsageSizeInBytes = currentModifications .ramBytesUsed ();
10581061 block .addMemoryUsage (currentModificationsMemoryUsageSizeInBytes );
10591062
10601063 if (resource .resourceFileExists ()) {
@@ -1076,9 +1079,9 @@ public boolean isDeviceDeletedByMods(IDeviceID device) throws IllegalPathExcepti
10761079 currentModifications , currentTimeIndex , device );
10771080 }
10781081
1079- public boolean isTimeseriesDeletedByMods (
1082+ public boolean isTimeSeriesDeletedByMods (
10801083 IDeviceID device , TimeseriesMetadata timeseriesMetadata ) throws IllegalPathException {
1081- return ModificationUtils .isTimeseriesDeletedByMods (
1084+ return ModificationUtils .isTimeSeriesDeletedByMods (
10821085 currentModifications ,
10831086 device ,
10841087 timeseriesMetadata .getMeasurementId (),
@@ -1116,7 +1119,7 @@ public void clearTimeSeries() {
11161119 }
11171120
11181121 public void clearModificationsAndTimeIndex () {
1119- currentModifications . clear ();
1122+ currentModifications = PatternTreeMapFactory . getModsPatternTreeMap ();
11201123 currentTimeIndex = null ;
11211124 block .reduceMemoryUsage (currentModificationsMemoryUsageSizeInBytes );
11221125 block .reduceMemoryUsage (currentTimeIndexMemoryUsageSizeInBytes );
0 commit comments