Merge pull request #6324 from sfc-gh-ajbeamon/high-contention-allocator

Rename high contention allocator implementation in fdbclient
This commit is contained in:
A.J. Beamon 2022-01-31 15:51:03 -08:00 committed by GitHub
commit 8c00ba6716
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 29 deletions

View File

@ -63,7 +63,7 @@ set(FDBCLIENT_SRCS
GlobalConfig.actor.h
GlobalConfig.actor.cpp
GrvProxyInterface.h
HighContentionAllocator.actor.h
HighContentionPrefixAllocator.actor.h
HTTP.actor.cpp
IClientApi.h
IConfigTransaction.cpp

View File

@ -1,5 +1,5 @@
/*
* HighContentionAllocator.actor.h
* HighContentionPrefixAllocator.actor.h
*
* This source file is part of the FoundationDB open source project
*
@ -22,11 +22,11 @@
// When actually compiled (NO_INTELLISENSE), include the generated version of this file. In intellisense use the source
// version.
#if defined(NO_INTELLISENSE) && !defined(FDBCLIENT_HIGHCONTENTIONALLOCATOR_ACTOR_G_H)
#define FDBCLIENT_HIGHCONTENTIONALLOCATOR_ACTOR_G_H
#include "fdbclient/HighContentionAllocator.actor.g.h"
#elif !defined(FDBCLIENT_HIGHCONTENTIONALLOCATOR_ACTOR_H)
#define FDBCLIENT_HIGHCONTENTIONALLOCATOR_ACTOR_H
#if defined(NO_INTELLISENSE) && !defined(FDBCLIENT_HIGHCONTENTIONPREFIXALLOCATOR_ACTOR_G_H)
#define FDBCLIENT_HIGHCONTENTIONPREFIXALLOCATOR_ACTOR_G_H
#include "fdbclient/HighContentionPrefixAllocator.actor.g.h"
#elif !defined(FDBCLIENT_HIGHCONTENTIONPREFIXALLOCATOR_ACTOR_H)
#define FDBCLIENT_HIGHCONTENTIONPREFIXALLOCATOR_ACTOR_H
#include "fdbclient/ClientBooleanParams.h"
#include "fdbclient/CommitTransaction.h"
@ -35,9 +35,9 @@
#include "flow/UnitTest.h"
#include "flow/actorcompiler.h" // This must be the last #include.
class HighContentionAllocator {
class HighContentionPrefixAllocator {
public:
HighContentionAllocator(Subspace subspace) : counters(subspace.get(0)), recent(subspace.get(1)) {}
HighContentionPrefixAllocator(Subspace subspace) : counters(subspace.get(0)), recent(subspace.get(1)) {}
template <class TransactionT>
Future<Standalone<StringRef>> allocate(Reference<TransactionT> tr) {
@ -60,7 +60,7 @@ private:
Subspace recent;
ACTOR template <class TransactionT>
Future<Standalone<StringRef>> allocate(HighContentionAllocator* self, Reference<TransactionT> tr) {
Future<Standalone<StringRef>> allocate(HighContentionPrefixAllocator* self, Reference<TransactionT> tr) {
state int64_t start = 0;
state int64_t window = 0;
@ -97,7 +97,7 @@ private:
count = *(int64_t*)countValue.get().begin();
}
window = HighContentionAllocator::windowSize(start);
window = HighContentionPrefixAllocator::windowSize(start);
if (count * 2 < window) {
break;
}

View File

@ -197,7 +197,7 @@ set(FDBSERVER_SRCS
workloads/FuzzApiCorrectness.actor.cpp
workloads/GetRangeStream.actor.cpp
workloads/HealthMetricsApi.actor.cpp
workloads/HighContentionAllocatorWorkload.actor.cpp
workloads/HighContentionPrefixAllocatorWorkload.actor.cpp
workloads/IncrementalBackup.actor.cpp
workloads/Increment.actor.cpp
workloads/IndexScan.actor.cpp

View File

@ -1,5 +1,5 @@
/*
* HighContentionAllocatorWorkload.actor.cpp
* HighContentionPrefixAllocatorWorkload.actor.cpp
*
* This source file is part of the FoundationDB open source project
*
@ -18,17 +18,17 @@
* limitations under the License.
*/
#include "fdbclient/HighContentionAllocator.actor.h"
#include "fdbclient/HighContentionPrefixAllocator.actor.h"
#include "fdbserver/TesterInterface.actor.h"
#include "fdbserver/workloads/workloads.actor.h"
#include "flow/actorcompiler.h" // This must be the last #include.
// This workload tests the basic contract of the high contention allocator
struct HighContentionAllocatorWorkload : TestWorkload {
static constexpr const char* NAME = "HighContentionAllocator";
struct HighContentionPrefixAllocatorWorkload : TestWorkload {
static constexpr const char* NAME = "HighContentionPrefixAllocator";
Subspace allocatorSubspace;
HighContentionAllocator allocator;
HighContentionPrefixAllocator allocator;
int numRounds;
int maxTransactionsPerRound;
int maxAllocationsPerTransaction;
@ -36,18 +36,18 @@ struct HighContentionAllocatorWorkload : TestWorkload {
int expectedPrefixes = 0;
std::set<Key> allocatedPrefixes;
HighContentionAllocatorWorkload(WorkloadContext const& wcx)
HighContentionPrefixAllocatorWorkload(WorkloadContext const& wcx)
: TestWorkload(wcx), allocatorSubspace("test_subspace"_sr), allocator(allocatorSubspace) {
numRounds = getOption(options, LiteralStringRef("numRounds"), 500);
maxTransactionsPerRound = getOption(options, LiteralStringRef("maxTransactionsPerRound"), 20);
maxAllocationsPerTransaction = getOption(options, LiteralStringRef("maxAllocationsPerTransaction"), 20);
}
std::string description() const override { return HighContentionAllocatorWorkload::NAME; }
std::string description() const override { return HighContentionPrefixAllocatorWorkload::NAME; }
Future<Void> setup(Database const& cx) override { return Void(); }
ACTOR static Future<Void> runAllocationTransaction(Database cx, HighContentionAllocatorWorkload* self) {
ACTOR static Future<Void> runAllocationTransaction(Database cx, HighContentionPrefixAllocatorWorkload* self) {
state Reference<ReadYourWritesTransaction> tr = cx->createTransaction();
state int numAllocations = deterministicRandom()->randomInt(1, self->maxAllocationsPerTransaction + 1);
@ -104,7 +104,7 @@ struct HighContentionAllocatorWorkload : TestWorkload {
return Void();
}
ACTOR static Future<Void> runTest(Database cx, HighContentionAllocatorWorkload* self) {
ACTOR static Future<Void> runTest(Database cx, HighContentionPrefixAllocatorWorkload* self) {
state int roundNum = 0;
for (; roundNum < self->numRounds; ++roundNum) {
std::vector<Future<Void>> futures;
@ -121,7 +121,7 @@ struct HighContentionAllocatorWorkload : TestWorkload {
Future<Void> start(Database const& cx) override { return runTest(cx, this); }
ACTOR static Future<bool> _check(Database cx, HighContentionAllocatorWorkload* self) {
ACTOR static Future<bool> _check(Database cx, HighContentionPrefixAllocatorWorkload* self) {
if (self->expectedPrefixes != self->allocatedPrefixes.size()) {
TraceEvent(SevError, "HighContentionAllocationWorkloadFailure")
.detail("Reason", "Incorrect Number of Prefixes Allocated")
@ -156,4 +156,5 @@ struct HighContentionAllocatorWorkload : TestWorkload {
void getMetrics(std::vector<PerfMetric>& m) override {}
};
WorkloadFactory<HighContentionAllocatorWorkload> HighContentionAllocatorWorkload(HighContentionAllocatorWorkload::NAME);
WorkloadFactory<HighContentionPrefixAllocatorWorkload> HighContentionPrefixAllocatorWorkload(
HighContentionPrefixAllocatorWorkload::NAME);

View File

@ -186,7 +186,7 @@ if(WITH_PYTHON)
add_fdb_test(TEST_FILES rare/CycleRollbackClogged.toml)
add_fdb_test(TEST_FILES rare/CycleWithKills.toml)
add_fdb_test(TEST_FILES rare/FuzzTest.toml)
add_fdb_test(TEST_FILES rare/HighContentionAllocator.toml)
add_fdb_test(TEST_FILES rare/HighContentionPrefixAllocator.toml)
add_fdb_test(TEST_FILES rare/InventoryTestHeavyWrites.toml)
add_fdb_test(TEST_FILES rare/LargeApiCorrectness.toml)
add_fdb_test(TEST_FILES rare/LargeApiCorrectnessStatus.toml)

View File

@ -1,5 +0,0 @@
[[test]]
testTitle = 'HighContentionAllocator'
[[test.workload]]
testName = 'HighContentionAllocator'

View File

@ -0,0 +1,5 @@
[[test]]
testTitle = 'HighContentionPrefixAllocator'
[[test.workload]]
testName = 'HighContentionPrefixAllocator'