Add readonly range \xff\xff/configuration/process/class_source, and change \xff\xff/configuration/class/ to \xff\xff/configuration/process/class_type/
This commit is contained in:
parent
6d17e996fb
commit
a07b9f234d
|
@ -924,7 +924,12 @@ DatabaseContext::DatabaseContext(Reference<AsyncVar<Reference<ClusterConnectionF
|
|||
registerSpecialKeySpaceModule(
|
||||
SpecialKeySpace::MODULE::CONFIGURATION, SpecialKeySpace::IMPLTYPE::READWRITE,
|
||||
std::make_unique<ProcessClassRangeImpl>(
|
||||
KeyRangeRef(LiteralStringRef("class/"), LiteralStringRef("class0"))
|
||||
KeyRangeRef(LiteralStringRef("process/class_type/"), LiteralStringRef("process/class_type0"))
|
||||
.withPrefix(SpecialKeySpace::getModuleRange(SpecialKeySpace::MODULE::CONFIGURATION).begin)));
|
||||
registerSpecialKeySpaceModule(
|
||||
SpecialKeySpace::MODULE::CONFIGURATION, SpecialKeySpace::IMPLTYPE::READONLY,
|
||||
std::make_unique<ProcessClassSourceRangeImpl>(
|
||||
KeyRangeRef(LiteralStringRef("process/class_source/"), LiteralStringRef("process/class_source0"))
|
||||
.withPrefix(SpecialKeySpace::getModuleRange(SpecialKeySpace::MODULE::CONFIGURATION).begin)));
|
||||
}
|
||||
if (apiVersionAtLeast(630)) {
|
||||
|
|
|
@ -972,7 +972,7 @@ ACTOR Future<Standalone<RangeResultRef>> getProcessClassActor(ReadYourWritesTran
|
|||
KeyRangeRef kr) {
|
||||
vector<ProcessData> _workers = wait(getWorkers(&ryw->getTransaction()));
|
||||
auto workers = _workers; // strip const
|
||||
// TODO : the sort by string is anti intuition, ex. 1.1.1.1:11 < 1.1.1.1:5
|
||||
// Note : the sort by string is anti intuition, ex. 1.1.1.1:11 < 1.1.1.1:5
|
||||
std::sort(workers.begin(), workers.end(), [](const ProcessData& lhs, const ProcessData& rhs) {
|
||||
return formatIpPort(lhs.address.ip, lhs.address.port) < formatIpPort(rhs.address.ip, rhs.address.port);
|
||||
});
|
||||
|
@ -1087,3 +1087,32 @@ void ProcessClassRangeImpl::clear(ReadYourWritesTransaction* ryw, const KeyRange
|
|||
void ProcessClassRangeImpl::clear(ReadYourWritesTransaction* ryw, const KeyRef& key) {
|
||||
return throwNotAllowedError(ryw);
|
||||
}
|
||||
|
||||
ACTOR Future<Standalone<RangeResultRef>> getProcessClassSourceActor(ReadYourWritesTransaction* ryw, KeyRef prefix,
|
||||
KeyRangeRef kr) {
|
||||
vector<ProcessData> _workers = wait(getWorkers(&ryw->getTransaction()));
|
||||
auto workers = _workers; // strip const
|
||||
// Note : the sort by string is anti intuition, ex. 1.1.1.1:11 < 1.1.1.1:5
|
||||
std::sort(workers.begin(), workers.end(), [](const ProcessData& lhs, const ProcessData& rhs) {
|
||||
return formatIpPort(lhs.address.ip, lhs.address.port) < formatIpPort(rhs.address.ip, rhs.address.port);
|
||||
});
|
||||
Standalone<RangeResultRef> result;
|
||||
for (auto& w : workers) {
|
||||
// exclude :tls in keys even the network addresss is TLS
|
||||
Key k(prefix.withSuffix(formatIpPort(w.address.ip, w.address.port)));
|
||||
if (kr.contains(k)) {
|
||||
Value v(w.processClass.sourceString());
|
||||
result.push_back(result.arena(), KeyValueRef(k, v));
|
||||
result.arena().dependsOn(k.arena());
|
||||
result.arena().dependsOn(v.arena());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ProcessClassSourceRangeImpl::ProcessClassSourceRangeImpl(KeyRangeRef kr) : SpecialKeyRangeReadImpl(kr) {}
|
||||
|
||||
Future<Standalone<RangeResultRef>> ProcessClassSourceRangeImpl::getRange(ReadYourWritesTransaction* ryw,
|
||||
KeyRangeRef kr) const {
|
||||
return getProcessClassSourceActor(ryw, getKeyRange().begin, kr);
|
||||
}
|
|
@ -289,5 +289,11 @@ public:
|
|||
void clear(ReadYourWritesTransaction* ryw, const KeyRef& key) override;
|
||||
};
|
||||
|
||||
class ProcessClassSourceRangeImpl : public SpecialKeyRangeReadImpl {
|
||||
public:
|
||||
explicit ProcessClassSourceRangeImpl(KeyRangeRef kr);
|
||||
Future<Standalone<RangeResultRef>> getRange(ReadYourWritesTransaction* ryw, KeyRangeRef kr) const override;
|
||||
};
|
||||
|
||||
#include "flow/unactorcompiler.h"
|
||||
#endif
|
||||
|
|
|
@ -591,7 +591,7 @@ struct SpecialKeySpaceCorrectnessWorkload : TestWorkload {
|
|||
tx->setOption(FDBTransactionOptions::SPECIAL_KEY_SPACE_ENABLE_WRITES);
|
||||
// test getRange
|
||||
state Standalone<RangeResultRef> result = wait(tx->getRange(
|
||||
KeyRangeRef(LiteralStringRef("class/"), LiteralStringRef("class0"))
|
||||
KeyRangeRef(LiteralStringRef("process/class_type/"), LiteralStringRef("process/class_type0"))
|
||||
.withPrefix(SpecialKeySpace::getModuleRange(SpecialKeySpace::MODULE::CONFIGURATION).begin),
|
||||
CLIENT_KNOBS->TOO_MANY));
|
||||
ASSERT(!result.more && result.size() < CLIENT_KNOBS->TOO_MANY);
|
||||
|
@ -600,7 +600,7 @@ struct SpecialKeySpaceCorrectnessWorkload : TestWorkload {
|
|||
vector<ProcessData> workers = wait(getWorkers(&tx->getTransaction()));
|
||||
for (const auto& worker : workers) {
|
||||
Key addr =
|
||||
Key("class/" + formatIpPort(worker.address.ip, worker.address.port))
|
||||
Key("process/class_type/" + formatIpPort(worker.address.ip, worker.address.port))
|
||||
.withPrefix(SpecialKeySpace::getModuleRange(SpecialKeySpace::MODULE::CONFIGURATION).begin);
|
||||
bool found = false;
|
||||
for (const auto& kv : result) {
|
||||
|
@ -615,7 +615,7 @@ struct SpecialKeySpaceCorrectnessWorkload : TestWorkload {
|
|||
}
|
||||
state ProcessData worker = deterministicRandom()->randomChoice(workers);
|
||||
state Key addr =
|
||||
Key("class/" + formatIpPort(worker.address.ip, worker.address.port))
|
||||
Key("process/class_type/" + formatIpPort(worker.address.ip, worker.address.port))
|
||||
.withPrefix(SpecialKeySpace::getModuleRange(SpecialKeySpace::MODULE::CONFIGURATION).begin);
|
||||
tx->set(addr, LiteralStringRef("InvalidProcessType"));
|
||||
// test ryw
|
||||
|
|
Loading…
Reference in New Issue