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)