You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Ruixuan Zhang (Jira)" <ji...@apache.org> on 2023/02/17 07:29:00 UTC

[jira] [Created] (KYLIN-5455) After the multi-level partition model is modified to a full build model, the build job fails

Ruixuan Zhang created KYLIN-5455:
------------------------------------

             Summary: After the multi-level partition model is modified to a full build model, the build job fails
                 Key: KYLIN-5455
                 URL: https://issues.apache.org/jira/browse/KYLIN-5455
             Project: Kylin
          Issue Type: Bug
          Components: Job Engine
    Affects Versions: 5.0-alpha
            Reporter: Ruixuan Zhang
            Assignee: Ruixuan Zhang
             Fix For: 5.0-alpha
         Attachments: 1.png, 2.png, 3.png, 4.png, 5.png, 6.png, 7.png, 8.png, 截屏2022-12-26 14.43.25.png

行为1:
 # 创建多级分区模型,并构建segment成功
 # 编辑多级分区模型--将增量构建修改为全量构建 --修改成功
 # 在模型页面直接点击构建,选择全量构建

!1.png!
!截屏2022-12-26 14.43.25.png!

在模型保存页面将增量模型更改为全量模型,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”,点击保存后,可以观察到调用了/api/models/semantic接口,如图1所示,向接口传递的数据只把PartitionDesc置为了null,而多级子分区multi_partition_desc 并没有置为null,故而对该模型发起全量构建的过程中会判定为该模型为MultiPartitionJob

!2.png! 

同时,通过追踪全量构建调用链路可以发现,在constructFullBuild方法中new的jobParam并没有传递setTargetPartitions

!3.png!
 !4.png! 

所以在后续的computeJobBucket方法中爆出了无法添加任务,子分区值为空。请检查后重试。异常,导致无法正常构建。

 !5.png! 

行为2:
 # 创建多级分区模型,并构建segment成功
 # 在模型页面直接点击构建,选择全量构建

在模型页面直接点击构建,选择全量构建后,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”点击保存后会调用[api/models/\{model_id}/partition|http://localhost:8080/kylin/api/models/6803d786-9437-f980-da49-85ca1ec5d0f1/partition] 接口更新模型分区数据,接口内数据为:

{"project":"caixukun","partition_desc":null}

 !6.png! 
 

Sheng Huang 
December 26, 2022 at 3:56 PM
Edited

与产品和测试讨论的最终结论:两处行为不一致,需要纠正行为1,对齐行为2
行为1:在模型编辑页面从增量改成全量后,需要把分区设为无分区后,再点击构建才能正常构建。

行为2:直接在模型列表处,点击构建,然后选择全量构建,可以构建成功

 

行为不一致的Root Cause:
行为1:

创建多级分区模型,并构建segment成功

编辑多级分区模型--将增量构建修改为全量构建 --修改成功

在模型页面直接点击构建,选择全量构建



在模型保存页面将增量模型更改为全量模型,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”,点击保存后,可以观察到调用了/api/models/semantic接口,如图1所示,向接口传递的数据只把PartitionDesc置为了null,而多级子分区multi_partition_desc 并没有置为null,故而对该模型发起全量构建的过程中会判定为该模型为MultiPartitionJob


同时,通过追踪全量构建调用链路可以发现,在constructFullBuild方法中new的jobParam并没有传递setTargetPartitions



所以在后续的computeJobBucket方法中爆出了无法添加任务,子分区值为空。请检查后重试。异常,导致无法正常构建。


行为2:

创建多级分区模型,并构建segment成功

在模型页面直接点击构建,选择全量构建

 

在模型页面直接点击构建,选择全量构建后,弹框提示“修改模型分区设置后,系统将删除所有 Segment 及数据,模型将无法服务于业务查询。同时正在执行的构建任务将被终止。是否要继续保存?”点击保存后会调用api/models/{model_id}/partition 接口更新模型分区数据,接口内数据为:

{"project":"caixukun","partition_desc":null}

 !6.png! 

由于没有传递MultiPartitionDesc参数,所以request中的MultiPartitionDesc为null,所以updatePartitionColumn的时候也会把MultiPartitionDesc置为null。所以当执行到computeJobBucket的时候会因为不是MultiPartitionJob而直接return。所以可以成功发起构建

 !7.png! 

h2. Fix Design:

前端改动:如果一个模型的PartitionDesc被置为了null,那么这个模型的multi_partition_desc必定为null。

故而,基于此逻辑,可以在/api/models/semantic接口中,对multi_partition_desc做检查,如果传递过来的PartitionDesc为null,那么也把multi_partition_desc置为null。

后端改动:在下面判断逻辑中新增对时间分区列的判断,只有时间分区列不为null且子分区不为空才能判定为多级分区模型。

 !8.png! 






--
This message was sent by Atlassian Jira
(v8.20.10#820010)