关于基数估计功能的源码理解问题

社区版3.1.4
函数ObOptEstCost::compute_partition_rowcount_and_size()计算对应分区的rowcount和size,请问这个函数是用于计算单一关键字的基数吗
如果我想使用其他的基数估计方法,是不是从函数ObOptEstCost::storage_estimate_rowcount()开始做修改,估计的基数存储于参数res中就可以了

compute_partition_rowcount_and_size函数用于分区表的估行,主要流程是选择一个最大的分区,然后发RPC到分区所在的机器估行。
目标机器收到rpc请求后,使用storage_estimate_rowcount函数估计本地数据的行数信息返回。

涉及RPC的好像是上层的函数ObJoinOrder::process_storage_rowcount_estimation(),这个函数调用4个参数的函数ObOptEstCost::storage_estimate_rowcount()进行本地数据的基数估计。但我看到在函数ObOptEstCost::storage_estimate_rowcount()中除了调用函数ObOptEstCost::compute_partition_rowcount_and_size()后,它又在ret = OB_SUCCESS的条件下通过一个for循环又使用5个参数的函数ObOptEstCost::storage_estimate_rowcount(),估计scan查询所涉及的基数。也就是说4个参数的函数ObOptEstCost::storage_estimate_rowcount()的主要流程是先通过函数ObOptEstCost::compute_partition_rowcount_and_size()确定一个查询任务中涉及的最大分区,然后通过5个参数的函数ObOptEstCost::storage_estimate_rowcount()进行真正的基数估计流程?