Trait FinalizationHandler

Source
pub trait FinalizationHandler:
    Send
    + Sync
    + 'static {
    // Required method
    fn finalize_all_groups<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
        &'life0 self,
        glm: &'life1 mut (dyn GroupLifecycleManager + Send),
        processor: &'life2 (dyn GroupDataProcessor + Send + Sync),
        completed_data_tx: &'life3 Sender<SuccessfulGroupData>,
        failed_data_tx: &'life4 Sender<FailedGroupDataTransmission>,
    ) -> Pin<Box<dyn Future<Output = FinalizeResult> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             'life3: 'async_trait,
             'life4: 'async_trait;
}
Expand description

处理 Manager Finalize 阶段的 Trait。

ManagerActor 收到 Finalize 请求或所有 ZeroCopyHandle 被 Drop 时, 会调用此 Trait 的实现来处理所有当前存在于 GroupLifecycleManager 中的分组。 目的是确保所有预留都有最终状态(成功或失败),并将结果(成功合并的数据或失败信息) 发送给相应的消费者通道,同时生成一份包含无法发送的失败信息的 FinalizeResult 报告。

Required Methods§

Source

fn finalize_all_groups<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>( &'life0 self, glm: &'life1 mut (dyn GroupLifecycleManager + Send), processor: &'life2 (dyn GroupDataProcessor + Send + Sync), completed_data_tx: &'life3 Sender<SuccessfulGroupData>, failed_data_tx: &'life4 Sender<FailedGroupDataTransmission>, ) -> Pin<Box<dyn Future<Output = FinalizeResult> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, 'life4: 'async_trait,

处理所有剩余的分组,执行清理和报告。

该方法会迭代 GroupLifecycleManager 中的所有分组 ID,并对每个分组执行以下操作:

  1. 强制密封: 确保分组处于密封状态,即使其大小未达到阈值。
  2. 处理未完成预留: 将分组状态中 reservations 集合内仍然存在的预留 ID 视为失败, 查找它们的元数据(偏移量和大小),创建 FailedReservationInfo 并添加到分组的 failed_infos 列表。
  3. 获取分组状态: 从 GroupLifecycleManagertake 出分组的状态 (GroupState)。
  4. 尝试处理: 调用共享的 try_process_taken_group_state 函数处理获取到的 GroupState
    • 如果成功处理(发送了成功数据或确定为空),则记录日志。
    • 如果处理失败(例如内部包含失败信息),则判定为失败分组。
  5. 处理失败分组: 如果步骤 4 判定为失败,再次 take 该分组的状态(因为 try_process... 失败时会放回), 提取其已提交的数据块 (committed_data) 和失败预留信息 (failed_infos), 构建 FailedGroupData 结构体。
  6. 发送失败数据: 尝试通过 failed_data_tx 通道发送构建好的 FailedGroupData
  7. 记录报告: 如果发送失败(例如通道已关闭或阻塞),则将 FailedGroupData 添加到最终的 FinalizeResult 报告中。
§Arguments
  • &self - FinalizationHandler 实例的引用 (通常无状态)。
  • glm - 对 GroupLifecycleManager 实现的可变引用,用于获取、修改和移除分组状态。
  • processor - 对 GroupDataProcessor 实现的引用,用于在处理成功分组时合并数据。
  • completed_data_tx - 对成功数据发送通道 (mpsc::Sender<SuccessfulGroupData>) 的引用。
  • failed_data_tx - 对失败数据发送通道 (mpsc::Sender<FailedGroupDataTransmission>) 的引用。
§Returns
  • FinalizeResult - 包含所有处理失败且 未能 通过 failed_data_tx 发送出去的失败分组信息 (FailedGroupData) 的集合。

Implementors§