6767import java .util .Map ;
6868import java .util .Map .Entry ;
6969import java .util .Objects ;
70+ import java .util .Optional ;
7071import java .util .concurrent .atomic .AtomicLong ;
7172import java .util .stream .Collectors ;
7273
@@ -451,7 +452,8 @@ public void queryForSeriesRegionScan(
451452 long ttlLowerBound ,
452453 Map <String , List <IChunkMetadata >> chunkMetaDataMap ,
453454 Map <String , List <IChunkHandle >> memChunkHandleMap ,
454- List <Pair <Modification , IMemTable >> modsToMemTabled ) {
455+ List <Pair <Modification , IMemTable >> modsToMemTabled ,
456+ Filter globalTimeFilter ) {
455457
456458 IDeviceID deviceID = DeviceIDFactory .getInstance ().getDeviceID (fullPath .getDevicePath ());
457459
@@ -469,7 +471,12 @@ public void queryForSeriesRegionScan(
469471 (MeasurementPath ) fullPath , this , modsToMemTabled , ttlLowerBound );
470472 }
471473 getMemChunkHandleFromMemTable (
472- deviceID , measurementId , chunkMetaDataMap , memChunkHandleMap , deletionList );
474+ deviceID ,
475+ measurementId ,
476+ chunkMetaDataMap ,
477+ memChunkHandleMap ,
478+ deletionList ,
479+ globalTimeFilter );
473480 } else {
474481 if (!memTableMap .containsKey (deviceID )) {
475482 return ;
@@ -486,7 +493,8 @@ public void queryForSeriesRegionScan(
486493 ((AlignedPath ) fullPath ).getSchemaList (),
487494 chunkMetaDataMap ,
488495 memChunkHandleMap ,
489- deletionList );
496+ deletionList ,
497+ globalTimeFilter );
490498 }
491499 }
492500
@@ -497,7 +505,8 @@ public void queryForDeviceRegionScan(
497505 long ttlLowerBound ,
498506 Map <String , List <IChunkMetadata >> chunkMetadataMap ,
499507 Map <String , List <IChunkHandle >> memChunkHandleMap ,
500- List <Pair <Modification , IMemTable >> modsToMemTabled )
508+ List <Pair <Modification , IMemTable >> modsToMemTabled ,
509+ Filter globalTimeFilter )
501510 throws IllegalPathException {
502511
503512 Map <IDeviceID , IWritableMemChunkGroup > memTableMap = getMemTableMap ();
@@ -515,15 +524,17 @@ public void queryForDeviceRegionScan(
515524 chunkMetadataMap ,
516525 memChunkHandleMap ,
517526 ttlLowerBound ,
518- modsToMemTabled );
527+ modsToMemTabled ,
528+ globalTimeFilter );
519529 } else {
520530 getMemChunkHandleFromMemTable (
521531 deviceID ,
522532 (WritableMemChunkGroup ) writableMemChunkGroup ,
523533 chunkMetadataMap ,
524534 memChunkHandleMap ,
525535 ttlLowerBound ,
526- modsToMemTabled );
536+ modsToMemTabled ,
537+ globalTimeFilter );
527538 }
528539 }
529540
@@ -532,32 +543,39 @@ private void getMemChunkHandleFromMemTable(
532543 String measurementId ,
533544 Map <String , List <IChunkMetadata >> chunkMetadataMap ,
534545 Map <String , List <IChunkHandle >> memChunkHandleMap ,
535- List <TimeRange > deletionList ) {
546+ List <TimeRange > deletionList ,
547+ Filter globalTimeFilter ) {
536548
537549 WritableMemChunk memChunk =
538550 (WritableMemChunk ) memTableMap .get (deviceID ).getMemChunkMap ().get (measurementId );
539551
540- long [] timestamps = memChunk .getFilteredTimestamp (deletionList );
552+ if (memChunk == null ) {
553+ return ;
554+ }
555+ Optional <Long > anySatisfiedTimestamp =
556+ memChunk .getAnySatisfiedTimestamp (deletionList , globalTimeFilter );
557+ if (!anySatisfiedTimestamp .isPresent ()) {
558+ return ;
559+ }
560+ long satisfiedTimestamp = anySatisfiedTimestamp .get ();
541561
542562 chunkMetadataMap
543563 .computeIfAbsent (measurementId , k -> new ArrayList <>())
544564 .add (
545- buildChunkMetaDataForMemoryChunk (
546- measurementId ,
547- timestamps [0 ],
548- timestamps [timestamps .length - 1 ],
549- Collections .emptyList ()));
565+ buildFakeChunkMetaDataForFakeMemoryChunk (
566+ measurementId , satisfiedTimestamp , satisfiedTimestamp , Collections .emptyList ()));
550567 memChunkHandleMap
551568 .computeIfAbsent (measurementId , k -> new ArrayList <>())
552- .add (new MemChunkHandleImpl (deviceID , measurementId , timestamps ));
569+ .add (new MemChunkHandleImpl (deviceID , measurementId , new long [] { satisfiedTimestamp } ));
553570 }
554571
555572 private void getMemAlignedChunkHandleFromMemTable (
556573 IDeviceID deviceID ,
557574 List <IMeasurementSchema > schemaList ,
558575 Map <String , List <IChunkMetadata >> chunkMetadataList ,
559576 Map <String , List <IChunkHandle >> memChunkHandleMap ,
560- List <List <TimeRange >> deletionList ) {
577+ List <List <TimeRange >> deletionList ,
578+ Filter globalTimeFilter ) {
561579
562580 AlignedWritableMemChunk alignedMemChunk =
563581 ((AlignedWritableMemChunkGroup ) memTableMap .get (deviceID )).getAlignedMemChunk ();
@@ -574,7 +592,11 @@ private void getMemAlignedChunkHandleFromMemTable(
574592 }
575593
576594 List <BitMap > bitMaps = new ArrayList <>();
577- long [] timestamps = alignedMemChunk .getFilteredTimestamp (deletionList , bitMaps );
595+ long [] timestamps =
596+ alignedMemChunk .getAnySatisfiedTimestamp (deletionList , bitMaps , globalTimeFilter );
597+ if (timestamps .length == 0 ) {
598+ return ;
599+ }
578600
579601 buildAlignedMemChunkHandle (
580602 deviceID ,
@@ -592,7 +614,8 @@ private void getMemAlignedChunkHandleFromMemTable(
592614 Map <String , List <IChunkMetadata >> chunkMetadataList ,
593615 Map <String , List <IChunkHandle >> memChunkHandleMap ,
594616 long ttlLowerBound ,
595- List <Pair <Modification , IMemTable >> modsToMemTabled )
617+ List <Pair <Modification , IMemTable >> modsToMemTabled ,
618+ Filter globalTimeFilter )
596619 throws IllegalPathException {
597620
598621 AlignedWritableMemChunk memChunk = writableMemChunkGroup .getAlignedMemChunk ();
@@ -611,7 +634,10 @@ private void getMemAlignedChunkHandleFromMemTable(
611634 }
612635
613636 List <BitMap > bitMaps = new ArrayList <>();
614- long [] timestamps = memChunk .getFilteredTimestamp (deletionList , bitMaps );
637+ long [] timestamps = memChunk .getAnySatisfiedTimestamp (deletionList , bitMaps , globalTimeFilter );
638+ if (timestamps .length == 0 ) {
639+ return ;
640+ }
615641 buildAlignedMemChunkHandle (
616642 deviceID ,
617643 timestamps ,
@@ -628,7 +654,8 @@ private void getMemChunkHandleFromMemTable(
628654 Map <String , List <IChunkMetadata >> chunkMetadataMap ,
629655 Map <String , List <IChunkHandle >> memChunkHandleMap ,
630656 long ttlLowerBound ,
631- List <Pair <Modification , IMemTable >> modsToMemTabled )
657+ List <Pair <Modification , IMemTable >> modsToMemTabled ,
658+ Filter globalTimeFilter )
632659 throws IllegalPathException {
633660
634661 for (Entry <String , IWritableMemChunk > entry :
@@ -646,18 +673,20 @@ private void getMemChunkHandleFromMemTable(
646673 modsToMemTabled ,
647674 ttlLowerBound );
648675 }
649- long [] timestamps = writableMemChunk .getFilteredTimestamp (deletionList );
676+ Optional <Long > anySatisfiedTimestamp =
677+ writableMemChunk .getAnySatisfiedTimestamp (deletionList , globalTimeFilter );
678+ if (!anySatisfiedTimestamp .isPresent ()) {
679+ return ;
680+ }
681+ long satisfiedTimestamp = anySatisfiedTimestamp .get ();
650682 chunkMetadataMap
651683 .computeIfAbsent (measurementId , k -> new ArrayList <>())
652684 .add (
653- buildChunkMetaDataForMemoryChunk (
654- measurementId ,
655- timestamps [0 ],
656- timestamps [timestamps .length - 1 ],
657- Collections .emptyList ()));
685+ buildFakeChunkMetaDataForFakeMemoryChunk (
686+ measurementId , satisfiedTimestamp , satisfiedTimestamp , Collections .emptyList ()));
658687 memChunkHandleMap
659688 .computeIfAbsent (measurementId , k -> new ArrayList <>())
660- .add (new MemChunkHandleImpl (deviceID , measurementId , timestamps ));
689+ .add (new MemChunkHandleImpl (deviceID , measurementId , new long [] { satisfiedTimestamp } ));
661690 }
662691 }
663692
@@ -681,7 +710,7 @@ private void buildAlignedMemChunkHandle(
681710 chunkMetadataList
682711 .computeIfAbsent (measurement , k -> new ArrayList <>())
683712 .add (
684- buildChunkMetaDataForMemoryChunk (
713+ buildFakeChunkMetaDataForFakeMemoryChunk (
685714 measurement , startEndTime [0 ], startEndTime [1 ], deletion ));
686715 chunkHandleMap
687716 .computeIfAbsent (measurement , k -> new ArrayList <>())
@@ -712,7 +741,7 @@ private long[] calculateStartEndTime(long[] timestamps, List<BitMap> bitMaps, in
712741 return new long [] {startTime , endTime };
713742 }
714743
715- private IChunkMetadata buildChunkMetaDataForMemoryChunk (
744+ private IChunkMetadata buildFakeChunkMetaDataForFakeMemoryChunk (
716745 String measurement , long startTime , long endTime , List <TimeRange > deletionList ) {
717746 TimeStatistics timeStatistics = new TimeStatistics ();
718747 timeStatistics .setStartTime (startTime );
0 commit comments