Hi Lin,

Could you please describe the problem you found in detail? Thanks!

Best regards,

Shaofeng Shi 史少锋
Apache Kylin PMC
Work email: [email protected]
Kyligence Inc: https://kyligence.io/

Apache Kylin FAQ: https://kylin.apache.org/docs/gettingstarted/faq.html
Join Kylin user mail group: [email protected]
Join Kylin dev mail group: [email protected]




王林 <[email protected]> 于2019年1月31日周四 上午11:57写道:

> 你好:
>      通过查看kylin自动merge功能未起作用通过跟踪源码:
> 当自动merge时触发:
>     public void updateOnNewSegmentReady(String cubeName) {
>         final KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
>         String serverMode = kylinConfig.getServerMode();
>         if (Constant.SERVER_MODE_JOB.equals(serverMode.toLowerCase())
>                 ||
> Constant.SERVER_MODE_ALL.equals(serverMode.toLowerCase())) {
>             CubeInstance cube = getCubeManager().getCube(cubeName);
>             if (cube != null) {
>                 CubeSegment seg = cube.getLatestBuiltSegment();
>                 if (seg != null && seg.getStatus() ==
> SegmentStatusEnum.READY) {
>                     keepCubeRetention(cubeName);
>                     mergeCubeSegment(cubeName);
>                 }
>             }
>         }
>     }
>
>
>
>     private void mergeCubeSegment(String cubeName) {
>         CubeInstance cube = getCubeManager().getCube(cubeName);
>         if (!cube.needAutoMerge())
>             return;
>
>
>         synchronized (CubeService.class) {
>             try {
>                 cube = getCubeManager().getCube(cubeName);
>                 SegmentRange offsets = cube.autoMergeCubeSegments();
>                 if (offsets != null) {
>                     CubeSegment newSeg =
> getCubeManager().mergeSegments(cube, null, offsets,
> true);//这个触发是流式cube的merge。但是我的cube不是流式cube。报异常。
>                     logger.debug("Will submit merge job on " + newSeg);
>                     DefaultChainedExecutable job =
> EngineFactory.createBatchMergeJob(newSeg, "SYSTEM");
>                     getExecutableManager().addJob(job);
>                 } else {
>                     logger.debug("Not ready for merge on cube " +
> cubeName);
>                 }
>             } catch (IOException e) {
>                 logger.error("Failed to auto merge cube " + cubeName, e);
>             }
>         }
>     }
>
>
>
> public CubeSegment mergeSegments(CubeInstance cube, TSRange tsRange,
> SegmentRange segRange, boolean force)
>             throws IOException {
>         if (cube.getSegments().isEmpty())
>             throw new IllegalArgumentException("Cube " + cube + " has no
> segments");
>
>
>         checkInputRanges(tsRange, segRange);
>         checkBuildingSegment(cube);
>         checkCubeIsPartitioned(cube);
>
>
>         if (cube.getSegments().getFirstSegment().isOffsetCube()) {
>             // offset cube, merge by date range?
>             if (segRange == null && tsRange != null) {
>                 Pair<CubeSegment, CubeSegment> pair =
> cube.getSegments(SegmentStatusEnum.READY)
>                         .findMergeOffsetsByDateRange(tsRange,
> Long.MAX_VALUE);
>                 if (pair == null)
>                     throw new IllegalArgumentException("Find no segments
> to merge by " + tsRange + " for cube " + cube);
>                 segRange = new
> SegmentRange(pair.getFirst().getSegRange().start,
> pair.getSecond().getSegRange().end);
>             }
>             tsRange = null;
>             Preconditions.checkArgument(segRange != null);
>         } else {
>             segRange = null;
>             Preconditions.checkArgument(tsRange != null);//抛出异常
>         }
>
>
>
> 通过跟踪代码,自动合并有问题,我使用的是kylin2.2.x源码,是否存在问题?

Reply via email to