private void unpackAllOverlappedTsFilesToTimeSeriesMetadata(long endpointTime)
      throws IOException {
    while (orderUtils.hasNextUnseqResource() && orderUtils.isCurUnSeqOverlappedWith(endpointTime)) {
      unpackUnseqTsFileResource();
    }
    while (orderUtils.hasNextSeqResource() && orderUtils.isCurSeqOverlappedWith(endpointTime)) {
      Optional<ITimeSeriesMetadata> timeSeriesMetadata = unpackSeqTsFileResource();
      // asc: if current seq tsfile's endTime >= endpointTime, we don't need to continue
      // desc: if current seq tsfile's startTime <= endpointTime, we don't need to continue
      if (timeSeriesMetadata.isPresent()
          && orderUtils.overlappedSeqResourceSearchingNeedStop(
              endpointTime, timeSeriesMetadata.get().getStatistics())) {
        break;
      }
    }
  }
unpack all overlapped seq/unseq files and find the first TimeSeriesMetadata

<p>Because there may be too many files in the scenario used by the user, we cannot open all the
chunks at once, which may cause OOM, so we can only unpack one file at a time when needed. This
approach is likely to be ubiquitous, but it keeps the system running smoothly

@throws IOException exception in unpacking
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java