db_stress_tool学习笔记


db_stress_tool/db_stress_driver.cc

概览

整体stress test的逻辑,有两个函数:

  • ThreadBody为每一个测试线程(client逻辑)执行的内容;
  • RunStressTest为具体的测试逻辑,初始化数据库、测试线程等;
测试线程逻辑——ThreadBody

流程:校验db -> 等待所有其他测试线程初始化完毕 -> 操作db(`OperateDb,包括每一次reopen之后的操作逻辑) -> 等待其他测试线程操作完毕 -> 校验Db -> 等待其他测试线程测试结束

校验db—— no_batched_ops_stress中的VerifyDb

整体上,VerifyDb会对每一个CF进行键值是否匹配的校验,一共四种校验模式,等概率地使用其中一种:

  • 使用prefix iterator获取CF中的每一个key,并对比是否与shared_state中的值相同,并调用VerifyOrSyncValue同步db与shared_state中的值(保持内存中与磁盘中的一致)

  • 直接使用Get获取CF中的每一个key,其余同上;

  • 使用MultiGet获取CF中的每一个key,其余同上;
  • 使用MergeOperand获取,其余同上