Handoff checksum during WAL replay (#10212)
Summary:
Added checksum protection for write batch content read from WAL to when per key-value checksum is computed on the write batch. This gives full coverage on write batch integrity of WAL replay to memtable.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/10212
Test Plan:
- Added unit test and the existing tests (replay code path covers the change in this PR): `make -j32 check`
- Stress test: ran `db_stress` for 30min.
- Perf regression:
```
# setup
TEST_TMPDIR=/dev/shm/100MB_WAL_DB/ ./db_bench -benchmarks=fillrandom -write_buffer_size=1048576000
# benchmark db open time
TEST_TMPDIR=/dev/shm/100MB_WAL_DB/ /usr/bin/time ./db_bench -use_existing_db=true -benchmarks=overwrite -write_buffer_size=1048576000 -writes=1 -report_open_timing=true
For 20 runs, pre-PR avg: 3734.31ms, post-PR avg: 3790.06 ms (~1.5% regression).
Pre-PR
OpenDb: 3714.36 milliseconds
OpenDb: 3622.71 milliseconds
OpenDb: 3591.17 milliseconds
OpenDb: 3674.7 milliseconds
OpenDb: 3615.79 milliseconds
OpenDb: 3982.83 milliseconds
OpenDb: 3650.6 milliseconds
OpenDb: 3809.26 milliseconds
OpenDb: 3576.44 milliseconds
OpenDb: 3638.12 milliseconds
OpenDb: 3845.68 milliseconds
OpenDb: 3677.32 milliseconds
OpenDb: 3659.64 milliseconds
OpenDb: 3837.55 milliseconds
OpenDb: 3899.64 milliseconds
OpenDb: 3840.72 milliseconds
OpenDb: 3802.71 milliseconds
OpenDb: 3573.27 milliseconds
OpenDb: 3895.76 milliseconds
OpenDb: 3778.02 milliseconds
Post-PR:
OpenDb: 3880.46 milliseconds
OpenDb: 3709.02 milliseconds
OpenDb: 3954.67 milliseconds
OpenDb: 3955.64 milliseconds
OpenDb: 3958.64 milliseconds
OpenDb: 3631.28 milliseconds
OpenDb: 3721 milliseconds
OpenDb: 3729.89 milliseconds
OpenDb: 3730.55 milliseconds
OpenDb: 3966.32 milliseconds
OpenDb: 3685.54 milliseconds
OpenDb: 3573.17 milliseconds
OpenDb: 3703.75 milliseconds
OpenDb: 3873.62 milliseconds
OpenDb: 3704.4 milliseconds
OpenDb: 3820.98 milliseconds
OpenDb: 3721.62 milliseconds
OpenDb: 3770.86 milliseconds
OpenDb: 3949.78 milliseconds
OpenDb: 3760.07 milliseconds
```
Reviewed By: ajkr
Differential Revision: D37302092
Pulled By: cbi42
fbshipit-source-id: 7346e625f453ce4c0e5d708776cd1fb2af6b068b