You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Shaofeng SHI (JIRA)" <ji...@apache.org> on 2017/06/01 10:44:04 UTC

[jira] [Commented] (KYLIN-2547) Fix multi-process concurrence bug in UpdateCubeInfoXXStep

    [ https://issues.apache.org/jira/browse/KYLIN-2547?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16032766#comment-16032766 ] 

Shaofeng SHI commented on KYLIN-2547:
-------------------------------------

kaisen, I checked the change. Here are some comments:
1) Adding lock in job steps is not a good implementation in my opinion; as by defaut Kylin only use a single job engine and no zk lock is used. I understand you have the need that building segments in parallel in multiple job engines, while that is what the framework (distributed scheduler) should handle, instead of making each step to sync by themselves.
2) Is the "getCubeFromStore()"  necessary? Is there the chance that the cache in CubeManager is out of date? 
3) Can we keep "keepCubeRetention()" and "mergeCubeSegment()" in CubeService (not move to UpdateCubeInfoStep)? so the logics can be reused from other places.  

Thanks!

> Fix multi-process concurrence bug in UpdateCubeInfoXXStep
> ---------------------------------------------------------
>
>                 Key: KYLIN-2547
>                 URL: https://issues.apache.org/jira/browse/KYLIN-2547
>             Project: Kylin
>          Issue Type: Bug
>          Components: Metadata
>    Affects Versions: v2.0.0
>            Reporter: kangkaisen
>            Assignee: kangkaisen
>            Priority: Minor
>
> There is a minor bug in  "Update Cube Info" step when build a cube in distributed env, which will make this job failed,  but the next auto merge job won't be affected and will succeed. So the cube data still is consistent and correct. 
> {code:java}
>    Caused by: java.lang.IllegalStateException: Segments overlap: waimai_dolphin_topic_flow_activity_expose_food_d_cube[20170405000000_20170412000000] and waimai_dolphin_topic_flow_activity_expose_food_d_cube[20170405000000_20170412000000]
>         at org.apache.kylin.cube.CubeValidator.validate(CubeValidator.java:85)
>         at org.apache.kylin.cube.CubeManager.updateCubeWithRetry(CubeManager.java:359)
>         at org.apache.kylin.cube.CubeManager.updateCubeWithRetry(CubeManager.java:386)
>         at org.apache.kylin.cube.CubeManager.updateCube(CubeManager.java:302)
>         at org.apache.kylin.cube.CubeManager.mergeSegments(CubeManager.java:533)
>         at org.apache.kylin.rest.service.CubeService.mergeCubeSegment(CubeService.java:635)
>         at org.apache.kylin.rest.service.CubeService.updateOnNewSegmentReady(CubeService.java:587)
>         at org.apache.kylin.rest.service.CubeServiceFastClassBySpringCGLIB17a07c0e.invoke()
>         at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
>         at org.springframework.aop.framework.CglibAopProxyDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:629)
>         at org.apache.kylin.rest.service.CubeServiceEnhancerBySpringCGLIB$$c6fabb3f.updateOnNewSegmentReady()
>         at org.apache.kylin.rest.service.CacheService.rebuildCubeCache(CacheService.java:237)
>         at org.apache.kylin.rest.service.CacheService.access$000(CacheService.java:62)
>         at org.apache.kylin.rest.service.CacheService$1.afterCubeUpdate(CacheService.java:86)
>         at org.apache.kylin.cube.CubeManager.updateCube(CubeManager.java:305)
>         at org.apache.kylin.cube.CubeManager.promoteNewlyBuiltSegments(CubeManager.java:735)
>         at org.apache.kylin.engine.mr.steps.UpdateCubeInfoAfterBuildStep.doWork(UpdateCubeInfoAfterBuildStep.java:62)
>         at org.apache.kylin.job.execution.AbstractExecutable.execute(AbstractExecutable.java:113)
>         ... 6 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)