Bitcoin Core 31.99.0
P2P Digital Currency
Enumerations | Functions | Variables
dbwrapper.cpp File Reference
#include <dbwrapper.h>
#include <compat/byteswap.h>
#include <random.h>
#include <sync.h>
#include <test/fuzz/FuzzedDataProvider.h>
#include <test/fuzz/fuzz.h>
#include <test/fuzz/util.h>
#include <test/util/random.h>
#include <test/util/setup_common.h>
#include <util/byte_units.h>
#include <util/check.h>
#include <util/threadpool.h>
#include <leveldb/env.h>
#include <leveldb/helpers/memenv/memenv.h>
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <deque>
#include <functional>
#include <future>
#include <latch>
#include <map>
#include <memory>
#include <numeric>
#include <optional>
#include <set>
#include <span>
#include <string>
#include <tuple>
#include <vector>
Include dependency graph for dbwrapper.cpp:

Go to the source code of this file.

Enumerations

enum class  ReadOp { Read , Exists , IteratorSeek }
 

Functions

 TestDbWrapper (provider, &det_env, [&] { det_env.DrainWork();}, [&] { return det_env.RunOne();}, false)
 
 TestDbWrapper (provider, memenv.get(), [] {}, [] { return false;}, true)
 
 SeedRandomStateForTest (SeedRand::ZEROS)
 
keys reserve (num_entries)
 
 for (size_t start{0};start< num_entries;start+=SEED_BATCH_SIZE)
 
 while (provider.ConsumeBool() &&det_env.RunOne())
 
queries reserve (num_queries)
 
std::vector< std::function< void()> > tasks (MAX_READ_WORKERS)
 
start_latch arrive_and_wait ()
 
det_env DrainWork ()
 
 for (auto &fut :futures) fut.get()
 

Variables

const auto memenv {std::unique_ptr<leveldb::Env>{leveldb::NewMemEnv(leveldb::Env::Default())}}
 
DeterministicEnv det_env {memenv.get()}
 
FuzzedDataProvider provider {buffer.data(), buffer.size()}
 
CDBWrapper db {ConsumeDBParams(provider, &det_env, provider.ConsumeBool())}
 
const size_t num_entries {provider.ConsumeIntegralInRange<size_t>(100, 5'000)}
 
std::vector< uint16_t > keys
 
Oracle oracle
 
constexpr size_t SEED_BATCH_SIZE {400}
 
const size_t num_queries {provider.ConsumeIntegralInRange<size_t>(1, 2'000)}
 
std::vector< std::tuple< ReadOp, uint16_t > > queries
 
std::latch start_latch {static_cast<ptrdiff_t>(MAX_READ_WORKERS + 1)}
 
FastRandomContext rng {ConsumeUInt256(provider)}
 
auto futures {*Assert(g_read_pool.Submit(std::move(tasks)))}
 

Enumeration Type Documentation

◆ ReadOp

enum class ReadOp
strong
Enumerator
Read 
Exists 
IteratorSeek 

Definition at line 399 of file dbwrapper.cpp.

Function Documentation

◆ arrive_and_wait()

start_latch arrive_and_wait ( )

◆ DrainWork()

det_env DrainWork ( )

◆ for() [1/2]

for ( auto &fut :futures  )

◆ for() [2/2]

for ( )

Definition at line 381 of file dbwrapper.cpp.

Here is the caller graph for this function:

◆ reserve() [1/2]

keys reserve ( num_entries  )

◆ reserve() [2/2]

queries reserve ( num_queries  )

◆ SeedRandomStateForTest()

SeedRandomStateForTest ( SeedRand::ZEROS  )
Here is the caller graph for this function:

◆ tasks()

std::vector< std::function< void()> > tasks ( MAX_READ_WORKERS  )
Here is the caller graph for this function:

◆ TestDbWrapper() [1/2]

TestDbWrapper ( provider  ,
det_env,
[&] { det_env.DrainWork();}  ,
[&] { return det_env.RunOne();}  ,
false   
)

◆ TestDbWrapper() [2/2]

TestDbWrapper ( provider  ,
memenv.  get(),
[] {}  ,
[] { return false;}  ,
true   
)

◆ while()

while ( provider.  ConsumeBool) &&det_env.RunOne()

Definition at line 395 of file dbwrapper.cpp.

Variable Documentation

◆ db

CDBWrapper db {ConsumeDBParams(provider, &det_env, provider.ConsumeBool())}

Definition at line 372 of file dbwrapper.cpp.

◆ det_env

DeterministicEnv det_env {memenv.get()}

Definition at line 342 of file dbwrapper.cpp.

◆ futures

auto futures {*Assert(g_read_pool.Submit(std::move(tasks)))}

Definition at line 458 of file dbwrapper.cpp.

◆ keys

std::vector<uint16_t> keys

Definition at line 377 of file dbwrapper.cpp.

◆ memenv

const auto memenv {std::unique_ptr<leveldb::Env>{leveldb::NewMemEnv(leveldb::Env::Default())}}

Definition at line 341 of file dbwrapper.cpp.

◆ num_entries

const size_t num_entries {provider.ConsumeIntegralInRange<size_t>(100, 5'000)}

Definition at line 376 of file dbwrapper.cpp.

◆ num_queries

const size_t num_queries {provider.ConsumeIntegralInRange<size_t>(1, 2'000)}

Definition at line 398 of file dbwrapper.cpp.

◆ oracle

Oracle oracle

Definition at line 379 of file dbwrapper.cpp.

◆ provider

FuzzedDataProvider provider {buffer.data(), buffer.size()}

Definition at line 367 of file dbwrapper.cpp.

◆ queries

std::vector<std::tuple<ReadOp, uint16_t> > queries

Definition at line 400 of file dbwrapper.cpp.

◆ rng

Definition at line 414 of file dbwrapper.cpp.

◆ SEED_BATCH_SIZE

constexpr size_t SEED_BATCH_SIZE {400}
constexpr

Definition at line 380 of file dbwrapper.cpp.

◆ start_latch

std::latch start_latch {static_cast<ptrdiff_t>(MAX_READ_WORKERS + 1)}

Definition at line 412 of file dbwrapper.cpp.