源码疑问:ObSimpleTableSchemaV2::get_convert_size()中分区相关逻辑问题

【 使用环境 】
【 OB】
【 使用版本 】开源314
【问题描述】
阅读源码过程中,对ObSimpleTableSchemaV2::get_convert_size()函数内分区相关的逻辑产生疑问,详见函数中注释

int64_t ObSimpleTableSchemaV2::get_convert_size() const
{
...
  /* 【疑问1】: 
    partition_array_[i]->get_convert_size()中已经调用sizeof(*this)计算了partition指针的size,
    所以我理解当for循环结束后,convert_size 应当已经包含了所谓partition_array size。
    为什么后面还要执行convert_size += partition_num_ * sizeof(ObPartition*)再计算一遍partition_array size */
  // all part info size
  for (int64_t i = 0; i < partition_num_ && NULL != partition_array_[i]; ++i) {
    convert_size += partition_array_[i]->get_convert_size();
  }
  convert_size += partition_num_ * sizeof(ObPartition*);  // partition_array size

  // all dropped part info size
  for (int64_t i = 0; i < dropped_partition_num_ && NULL != dropped_partition_array_[i]; ++i) {
    convert_size += dropped_partition_array_[i]->get_convert_size();
  }
  /* 【疑问2】:
  根据前面的逻辑,这里是否应当为dropped_partition_num_ * sizeof(ObPartition*)
  */
  convert_size += partition_num_ * sizeof(ObPartition*);  // partition_array size
  /* 【疑问3】:
  bindling_为true是什么含义?
 */
  if (binding_) {
   /*【疑问4】:
  注释说这里是计算sorted_part_id_array size,首先sorted_part_id_array是int64_t数组,
  其次sorted_part_id_array可能包含包括dropped partition在内的所有分区id,
  所以,这里是否应当为:所有分区个数 * sizeof(int64_t)
  */
    convert_size += partition_num_ * sizeof(ObPartition*);  // sorted_part_id_array size;
  }

  // all sub part info size
  for (int64_t i = 0; i < def_subpartition_num_ && NULL != def_subpartition_array_[i]; ++i) {
    convert_size += def_subpartition_array_[i]->get_convert_size();
  }
  convert_size += def_subpartition_num_ * sizeof(ObSubPartition*);  // def subpart_parray size
  if (binding_) {
  /* 【疑问5】:
  这里是否应当为 def_subpartition_num_ * sizeof(ObSubPartition*) 
  */
    convert_size += partition_num_ * sizeof(ObSubPartition*);  // sorted_def_sub_part_id_array size
  }
...
}

期待OB的老师能帮忙看下是否存在问题,解答下疑惑,谢谢!

a1.
https://stackoverflow.com/questions/51870115/difference-between-sizeofp-and-sizeofp
a2.
这里确实不对。
a3.
老版本该字段为true时会额外维护(sub)part_id有序的partition_array,但实际上该字段涉及的相关功能因为有诸多问题,一直不建议外部使用。
a4.
不知道这个首先是从哪里来的。
a5.
这里确实不对。

1 个赞

谢谢老师 :+1: