Doris Alter Task 执行流程

好吧,在理解完compaction流程之后,发现问题还是没有解决,那么就一起来看下  一个 alter task提交到doris之后经历了什么吧! (rollup也是alter table)

背景知识:由AgentServer提供统一的接口,内部通过task pool方式来调度各种任务。

 

入口:olap/task/engine_alter_tablet_task.cpp :: execute() → process_alter_tablet_v2()

1、先来看下request的关键参数

  • base_tablet_id  
  • base_schema_hash
  • new_tablet_id
  • new_schema_hash
  • alter_version
  • alter_version_hash
    因为需要转换历史数据,所以需要base_tablet -> new_tablet,在此期间需要锁住base_talet meta信息,一直到历史数据转换完成。alter version是含义为:base tablet下小于等于rowset version的代表需要转换的历史数据。因为对于当日实时写入的分区
    在新的alter tablet下会同步写入。
    
    

2、do_process_alter_tablet_v2()   

 

   首先检查base tablet 和 new tablet 是否都存在,如果不存在说明execute之前没处理好。

   然后检查 new tablet的 state,这里的状态如果不是not ready 说明new tablet 已经转换完成。此时需要通过rowset version去check是否正确。检查new tablet下rowset meta信息,找到从0开始的最长连续version,如果max version小于 alter version的话,说明数据转换有问题。

   接着检查base tablet 的version是否改变,这里通过max version是否连通去判断version是否已经改变。 这里没看明白,因为不知道 _version_graph的逻辑

   检查base tablet 的max version要大于alter version,理由和上面检查new tablet时一样

   删除new tablet 中小于 base_talbet → max version的rowset。防止数据重复。

   对于物化视图的schema change,遍历物化视图的创建参数,转换其中的表达式 eg:bitmap or count(1) 

   

3、开始执行历史数据转化。

   首先根据schema change条件判断待转化的任务类型:需要重新排序 or 直接转化  (比如新加一个字段,这种就不需要重新排序  1 v 1直接load rowset即可)(这里的详细规则我没看)

   遍历base tablet下的需要转化的rowset(在上一个步骤生成) 生成rowsetWrite(用来写入rowset的),将原rowset属性copy过来。

   处理生成新的rowset (具体逻辑没看)

   处理完成后将new tablet状态置为 running

 

至此流程结束,tablet 的状态设置为running之后 compaction的动作就可以开始了!   好吧问题还是没有解决,talbet的调度顺序是怎样的呢?还要听下回分解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值