public List getChunkOffsetList()

in tsfile-viewer-web/src/main/java/org/apache/iotdb/ui/service/TsfileViewerService.java [265:372]


  public List<ChunkOffsetInfo> getChunkOffsetList(
      Long offset, String filePath, OffsetType offsetType, QueryByTimeseriesIndexReq req)
      throws IOException, InterruptedException, TsfileViewerException {
    filePath = getFullPath(filePath);
    TsFileAnalyserV13 parse = tsfileViewerContainer.getTsfileParser(filePath);
    List<ChunkOffsetInfo> chunkOffsetInfoList = new ArrayList<>();
    AtomicInteger no = new AtomicInteger(1);
    switch (offsetType) {
      case CG:
        chunkOffsetInfoList = parse.fetchChunkOffsetListByChunkGroupOffset(offset);
        if (chunkOffsetInfoList.get(0).isAligned()) {
          chunkOffsetInfoList = chunkOffsetInfoList.subList(0, 1);
        }
        chunkOffsetInfoList =
            chunkOffsetInfoList.stream()
                .map(
                    chunkOffsetInfo -> {
                      if (chunkOffsetInfo.isAligned()) {
                        chunkOffsetInfo.setMeasurementId(
                            no + ". " + "AlignedChunk[" + chunkOffsetInfo.getOffset() + "]");
                      } else {
                        chunkOffsetInfo.setMeasurementId(
                            no
                                + ". "
                                + chunkOffsetInfo.getMeasurementId()
                                + "["
                                + chunkOffsetInfo.getOffset()
                                + "]");
                      }
                      no.incrementAndGet();
                      return chunkOffsetInfo;
                    })
                .collect(Collectors.toList());
        break;
      case TS_INDEX:
        Map<Long, Pair<Path, ITimeSeriesMetadata>> timeseriesMetadataMap =
            parse.getTimeseriesMetadataMap();
        Pair<Path, ITimeSeriesMetadata> pair = timeseriesMetadataMap.get(offset);
        if (pair.right instanceof AlignedTimeSeriesMetadata) {
          AlignedTimeSeriesMetadata timeSeriesMetadata = (AlignedTimeSeriesMetadata) pair.right;
          chunkOffsetInfoList =
              timeSeriesMetadata.getChunkMetadataList().stream()
                  .map(
                      alignedChunkMetadata -> {
                        ChunkOffsetInfo chunkOffsetInfo = new ChunkOffsetInfo();
                        chunkOffsetInfo.setMeasurementId(
                            "AlignedChunk[" + alignedChunkMetadata.getOffsetOfChunkHeader() + "]");
                        chunkOffsetInfo.setOffset(alignedChunkMetadata.getOffsetOfChunkHeader());
                        chunkOffsetInfo.setAligned(true);
                        chunkOffsetInfo.setStartTime(
                            alignedChunkMetadata.getStatistics().getStartTime());
                        chunkOffsetInfo.setEndTime(
                            alignedChunkMetadata.getStatistics().getEndTime());
                        return chunkOffsetInfo;
                      })
                  .collect(Collectors.toList());
        } else {
          TimeseriesMetadata timeSeriesMetadata = (TimeseriesMetadata) pair.right;
          chunkOffsetInfoList =
              timeSeriesMetadata.getChunkMetadataList().stream()
                  .map(
                      iChunkMetadata -> {
                        ChunkOffsetInfo chunkOffsetInfo = new ChunkOffsetInfo();
                        chunkOffsetInfo.setMeasurementId(
                            iChunkMetadata.getMeasurementUid()
                                + "["
                                + iChunkMetadata.getOffsetOfChunkHeader()
                                + "]");
                        chunkOffsetInfo.setOffset(iChunkMetadata.getOffsetOfChunkHeader());
                        chunkOffsetInfo.setAligned(false);
                        chunkOffsetInfo.setStartTime(iChunkMetadata.getStatistics().getStartTime());
                        chunkOffsetInfo.setEndTime(iChunkMetadata.getStatistics().getEndTime());
                        return chunkOffsetInfo;
                      })
                  .collect(Collectors.toList());
        }
        // 添加过滤条件
        chunkOffsetInfoList =
            chunkOffsetInfoList.stream()
                .filter(
                    chunkOffsetInfo -> {
                      if (req.getBeginDate() != null && req.getBeginDate() != 0) {
                        if (req.getBeginDate() > chunkOffsetInfo.getEndTime()) {
                          return false;
                        }
                      }
                      if (req.getEndDate() != null && req.getEndDate() != 0) {
                        if (req.getEndDate() < chunkOffsetInfo.getStartTime()) {
                          return false;
                        }
                      }
                      return true;
                    })
                .map(
                    (chunkOffsetInfo) -> {
                      chunkOffsetInfo.setMeasurementId(
                          no + ". " + chunkOffsetInfo.getMeasurementId());
                      no.incrementAndGet();
                      return chunkOffsetInfo;
                    })
                .collect(Collectors.toList());

        break;
      default:
        throw new TsfileViewerException(TsfileViewerException.UNSUPPORTED_OFFSETTYPE, "");
    }
    return chunkOffsetInfoList;
  }