mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Use KeyMayExist for WriteBatch-Deletes
Summary: Introduced KeyMayExist checking during writebatch-delete and removed from Outer Delete API because it uses writebatch-delete. Added code to skip getting Table from disk if not already present in table_cache. Some renaming of variables. Introduced KeyMayExistImpl which allows checking since specified sequence number in GetImpl useful to check partially written writebatch. Changed KeyMayExist to not be pure virtual and provided a default implementation. Expanded unit-tests in db_test to check appropriately. Ran db_stress for 1 hour with ./db_stress --max_key=100000 --ops_per_thread=10000000 --delpercent=50 --filter_deletes=1 --statistics=1. Test Plan: db_stress;make check Reviewers: dhruba, haobo Reviewed By: dhruba CC: leveldb, xjin Differential Revision: https://reviews.facebook.net/D11745
This commit is contained in:
13
db/db_impl.h
13
db/db_impl.h
@@ -103,6 +103,15 @@ class DBImpl : public DB {
|
||||
// Trigger's a background call for testing.
|
||||
void TEST_PurgeObsoleteteWAL();
|
||||
|
||||
// KeyMayExist's internal function, but can be called internally from rocksdb
|
||||
// to check memtable from sequence_number=read_from_seq. This is useful to
|
||||
// check presence of key in db when key's existence is to be also checked in
|
||||
// an incompletely written WriteBatch in memtable. eg. Database doesn't have
|
||||
// key A and WriteBatch=[PutA,B; DelA]. A KeyMayExist called from DelA also
|
||||
// needs to check itself for any PutA to be sure to not drop the delete.
|
||||
bool KeyMayExistImpl(const Slice& key,
|
||||
const SequenceNumber read_from_seq);
|
||||
|
||||
protected:
|
||||
Env* const env_;
|
||||
const std::string dbname_;
|
||||
@@ -399,11 +408,11 @@ class DBImpl : public DB {
|
||||
std::vector<SequenceNumber>& snapshots,
|
||||
SequenceNumber* prev_snapshot);
|
||||
|
||||
// Function that Get and KeyMayExist call with no_IO true or false
|
||||
// Function that Get and KeyMayExistImpl call with no_io true or false
|
||||
Status GetImpl(const ReadOptions& options,
|
||||
const Slice& key,
|
||||
std::string* value,
|
||||
const bool no_IO = false);
|
||||
const bool no_io = false);
|
||||
};
|
||||
|
||||
// Sanitize db options. The caller should delete result.info_log if
|
||||
|
||||
Reference in New Issue
Block a user