• L
    Fix a data race related to DB properties (#8206) · 0c6e4674
    Levi Tamasi 提交于
    Summary:
    Historically, the DB properties `rocksdb.cur-size-active-mem-table`,
    `rocksdb.cur-size-all-mem-tables`, and `rocksdb.size-all-mem-tables` called
    the method `MemTable::ApproximateMemoryUsage` for mutable memtables,
    which is not safe without synchronization. This resulted in data races with
    memtable inserts. The patch changes the code handling these properties
    to use `MemTable::ApproximateMemoryUsageFast` instead, which returns a
    cached value backed by an atomic variable. Two test cases had to be updated
    for this change. `MemoryTest.MemTableAndTableReadersTotal` was fixed by
    increasing the value size used so each value ends up in its own memtable,
    which was the original intention (note: the test has been broken in the sense
    that the test code didn't consider that memtable sizes below 64 KB get
    increased to 64 KB by `SanitizeOptions`, and has been passing only by
    accident). `DBTest.MemoryUsageWithMaxWriteBufferSizeToMaintain` relies on
    completely up-to-date values and thus was changed to use `ApproximateMemoryUsage`
    directly instead of going through the DB properties. Note: this should be safe in this case
    since there's only a single thread involved.
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/8206
    
    Test Plan: `make check`
    
    Reviewed By: riversand963
    
    Differential Revision: D27866811
    
    Pulled By: ltamasi
    
    fbshipit-source-id: 7bd754d0565e0a65f1f7f0e78ffc093beef79394
    0c6e4674
memory_test.cc 9.7 KB