• A
    Force a new manifest file if append to current one fails (#6331) · fb05b5a6
    anand76 提交于
    Summary:
    Fix for issue https://github.com/facebook/rocksdb/issues/6316
    
    When an append/sync of the manifest file fails due to an IO error such
    as NoSpace, we don't always put the DB in read-only mode. This is true
    for flush and compactions, as well as foreground operatons such as column family
    add/drop, CompactFiles etc. Subsequent changes to the DB will be
    recorded in the same manifest file, which would have a corrupted record
    in the middle due to the previous failure. On next DB::Open(), it will
    fail to process the full manifest and data will be lost.
    
    To fix this, we reset VersionSet::descriptor_log_ on append/sync
    failure, which will force a new manifest file to be written on the next
    append.
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/6331
    
    Test Plan: Add new unit tests in error_handler_test.cc
    
    Differential Revision: D19632951
    
    Pulled By: anand1976
    
    fbshipit-source-id: 68d527cb6e59a94cbbbf9f5a17a7f464381d51e3
    fb05b5a6
sst_file_manager_impl.cc 18.9 KB