Pegasus项目中手动压缩任务进度检测问题分析
2025-07-05 04:10:18作者:裘旻烁
问题背景
在分布式存储系统Pegasus中,手动压缩(manual compact)是一个重要的维护操作,用于优化数据存储结构。然而,近期发现pegasus_manual_compact.sh脚本中的wait_manual_compact()函数无法正确检测手动压缩任务的执行进度,导致在封装手动压缩工具时出现超时失败的问题。
问题现象
当使用命令sh pegasus_manual_compact.sh -c {meta_server_list} -a {table_name} --bottommost_level_compaction force执行手动压缩时,wait_manual_compact()函数会持续输出类似日志:
[35s] 0 finished, 8 not finished (0 in queue, 0 in running), estimate remaining unknown seconds. table [**] manual compaction is running now.
即使手动压缩任务已经完成,该函数仍会持续输出上述信息,无法正确判断任务是否真正完成。
根本原因分析
经过深入调查,发现问题的根源在于wait_manual_compact()函数无法正确解析remote_command -t replica-server replica.query-compact ${app_id}命令的输出格式变化。
在Pegasus的早期版本中,该命令输出格式为:
CALL [replica-server] [10.1.132.36:8171] succeed: 8 processed, 0 not found
4.0@10.1.132.36:8171@P : last finish at [-]
4.1@10.1.132.36:8171@P : last finish at [-]
4.2@10.1.132.36:8171@P : last finish at [-]
...
而在最新版本中,输出格式已变更为更详细的JSON格式:
CALL [replica-server] [10.1.132.34:8171] succeed:
8 processed, 0 not found
4.0@10.1.132.34:8171@P : {"last_finish":"-","last_used_ms":"-","recent_enqueue_at":"-","recent_start_at":"-"}
4.1@10.1.132.34:8171@P : {"last_finish":"-","last_used_ms":"-","recent_enqueue_at":"-","recent_start_at":"-"}
...
技术影响
- 自动化流程中断:由于进度检测失败,依赖此功能的自动化运维流程会出现异常中断
- 运维效率降低:管理员需要手动确认任务状态,增加了运维复杂度
- 资源浪费:系统可能重复执行已完成的任务,造成不必要的资源消耗
解决方案建议
- 输出格式适配:更新
wait_manual_compact()函数,使其能够同时兼容新旧版本的输出格式 - JSON解析增强:对于新版输出,应增加JSON解析逻辑,准确提取关键状态信息
- 状态判断优化:基于更丰富的状态信息(如
recent_start_at等),实现更精确的任务状态判断 - 兼容性处理:在变更期间应保持对旧版本的支持,确保平滑过渡
总结
Pegasus作为分布式存储系统,其手动压缩功能对系统性能优化至关重要。此问题的解决不仅能够修复当前的功能缺陷,还能为后续类似的功能扩展提供参考。建议在修复此问题时,同时考虑增加更丰富的状态监控指标,为系统运维提供更全面的可视化支持。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0231
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
JoyAI-VL-Interaction-Preview京东开源首个开源、视觉驱动的实时交互模型——它能实时监控视频流,并自主决定何时发言、保持沉默或委托任务。Jinja00
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0150
kornia🐍 空间人工智能的几何计算机视觉库Python02
PaddleParallel Distributed Deep Learning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)C++02
项目优选
收起
暂无描述
Dockerfile
782
5.11 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
892
2.06 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
471
473
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
710
1.43 K
deepin linux kernel
C
32
16
Ascend Extension for PyTorch
Python
763
972
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
2.27 K
681
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.11 K
1.15 K
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
272
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
2.18 K
231