一句话:提出 CrashFuzz,按运行时反馈变异并优先节点崩溃/重启组合,以覆盖率引导方式高效测试云系统的崩溃恢复行为。
现代云系统需要能从节点崩溃与重启中优雅恢复,但在特殊时序下发生的崩溃/重启会触发崩溃恢复协议及其实现中的缺陷。现有故障注入方法在缺乏开发者知识的情况下难以有效探索庞大的崩溃场景空间。本文提出 CrashFuzz,一种故障注入测试方法:它根据运行时反馈对可能的节点崩溃与重启组合进行变异,并优先探索那些易于提升代码覆盖率、触发崩溃恢复缺陷的组合,从而实现智能探索。作者实现了 CrashFuzz,并在 ZooKeeper、HDFS 与 HBase 三个主流开源云系统上进行评估。结果表明,CrashFuzz 共发现 4 个未知缺陷与 1 个已知缺陷;与其他故障注入方法相比,它能检测到更多崩溃恢复缺陷并获得更高的代码覆盖率。
To support high reliability and availability, modern cloud systems are designed to be resilient to node crashes and reboots. That is, a cloud system should gracefully recover from node crashes/reboots and continue to function. However, node crashes/reboots that occur under special timing can trigger crash recovery bugs that lie in incorrect crash recovery protocols and their implementations. To ensure that a cloud system is free from crash recovery bugs, some fault injection approaches have been proposed to test whether a cloud system can correctly recover from various crash scenarios. These approaches are not effective in exploring the huge crash scenario space without developers' knowledge. In this paper, we propose Crash Fuzz, a fault injection testing approach that can effectively test crash recovery behaviors and reveal crash recovery bugs in cloud systems. CrashFuzz mutates the combinations of possible node crashes and reboots according to runtime feedbacks, and prioritizes the combinations that are prone to increase code coverage and trigger crash recovery bugs for smart exploration. We have implemented CrashFuzz and evaluated it on three popular open-source cloud systems, i.e., ZooKeeper, HDFS and HBase. CrashFuzz has detected 4 unknown bugs and 1 known bug. Compared with other fault injection approaches, CrashFuzz can detect more crash recovery bugs and achieve higher code coverage.