Bitcoin Core 32.1.0
P2P Digital Currency
Loading...
Searching...
No Matches
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 398 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 380 of file dbwrapper.cpp.

◆ reserve() [1/2]

keys reserve ( num_entries )

◆ reserve() [2/2]

queries reserve ( num_queries )

◆ SeedRandomStateForTest()

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

◆ tasks()

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

◆ TestDbWrapper() [1/2]

TestDbWrapper ( provider ,
& det_env,
[&] { det_env.DrainWork();} ,
[&] { return det_env.RunOne();} ,
false  )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ TestDbWrapper() [2/2]

TestDbWrapper ( provider ,
memenv. get(),
[] {} ,
[] { return false;} ,
true  )
Here is the call graph for this function:

◆ while()

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

Definition at line 394 of file dbwrapper.cpp.

Variable Documentation

◆ db

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

Definition at line 371 of file dbwrapper.cpp.

◆ det_env

DeterministicEnv det_env {memenv.get()}

Definition at line 341 of file dbwrapper.cpp.

◆ futures

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

Definition at line 457 of file dbwrapper.cpp.

◆ keys

std::vector<uint16_t> keys

Definition at line 376 of file dbwrapper.cpp.

◆ memenv

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

Definition at line 340 of file dbwrapper.cpp.

◆ num_entries

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

Definition at line 375 of file dbwrapper.cpp.

◆ num_queries

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

Definition at line 397 of file dbwrapper.cpp.

◆ oracle

Oracle oracle

Definition at line 378 of file dbwrapper.cpp.

◆ provider

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

Definition at line 366 of file dbwrapper.cpp.

◆ queries

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

Definition at line 399 of file dbwrapper.cpp.

◆ rng

Definition at line 413 of file dbwrapper.cpp.

◆ SEED_BATCH_SIZE

size_t SEED_BATCH_SIZE {400}
constexpr

Definition at line 379 of file dbwrapper.cpp.

◆ start_latch

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

Definition at line 411 of file dbwrapper.cpp.