perpetual wiggle key functions
This commit is contained in:
parent
16d11143fa
commit
ccc494319c
|
@ -8631,7 +8631,7 @@ Future<Version> DatabaseContext::verifyBlobRange(const KeyRange& range,
|
|||
ACTOR Future<std::vector<std::pair<UID, StorageWiggleValue>>> readStorageWiggleValues(Database cx,
|
||||
bool primary,
|
||||
bool use_system_priority) {
|
||||
state const Key readKey = perpetualStorageWiggleIDPrefix.withSuffix(primary ? "primary/"_sr : "remote/"_sr);
|
||||
state const Key readKey = perpetualStorageWigglePrefixFor(primary, PerpetualWigglePrefixType::STORAGE_ID);
|
||||
state KeyBackedObjectMap<UID, StorageWiggleValue, decltype(IncludeVersion())> metadataMap(readKey,
|
||||
IncludeVersion());
|
||||
state Reference<ReadYourWritesTransaction> tr(new ReadYourWritesTransaction(cx));
|
||||
|
|
|
@ -868,8 +868,32 @@ const KeyRef configKeysPrefix = configKeys.begin;
|
|||
|
||||
const KeyRef perpetualStorageWiggleKey("\xff/conf/perpetual_storage_wiggle"_sr);
|
||||
const KeyRef perpetualStorageWiggleLocalityKey("\xff/conf/perpetual_storage_wiggle_locality"_sr);
|
||||
const KeyRef perpetualStorageWiggleIDPrefix("\xff/storageWiggleID/"_sr); // withSuffix /primary or /remote
|
||||
// The below two are there for compatible upgrade and downgrade. After 7.3, the perpetual wiggle related keys should use
|
||||
// format "\xff/storageWiggle/[primary | remote]/[fieldName]"
|
||||
const KeyRef perpetualStorageWiggleIDPrefix("\xff/storageWiggleID/"_sr); // withSuffix /primary/ or /remote/
|
||||
const KeyRef perpetualStorageWiggleStatsPrefix("\xff/storageWiggleStats/"_sr); // withSuffix /primary or /remote
|
||||
// "\xff/storageWiggle/[primary | remote]/[fieldName]"
|
||||
const KeyRef perpetualStorageWigglePrefix("\xff/storageWiggle/"_sr);
|
||||
|
||||
// the final char is "/"
|
||||
const Key perpetualStorageWigglePrefixFor(bool primaryDc, PerpetualWigglePrefixType type) {
|
||||
if (type == PerpetualWigglePrefixType::STORAGE_ID)
|
||||
return perpetualStorageWiggleIDPrefix.withSuffix(primaryDc ? "primary/"_sr : "remote/"_sr);
|
||||
ASSERT(false);
|
||||
return ""_sr;
|
||||
}
|
||||
|
||||
const Key perpetualStorageWiggleKeyFor(bool primaryDc, PerpetualWiggleKeyType type) {
|
||||
if (type == PerpetualWiggleKeyType::WIGGLE_STATS)
|
||||
return perpetualStorageWiggleStatsPrefix.withSuffix(primaryDc ? "primary"_sr : "remote"_sr);
|
||||
|
||||
Key result = perpetualStorageWigglePrefix.withSuffix(primaryDc ? "primary/"_sr : "remote/"_sr);
|
||||
if (type == PerpetualWiggleKeyType::WIGGLE_DELAY)
|
||||
return result.withSuffix("wiggleDelay"_sr);
|
||||
|
||||
ASSERT(false);
|
||||
return ""_sr;
|
||||
}
|
||||
|
||||
const KeyRef triggerDDTeamInfoPrintKey("\xff/triggerDDTeamInfoPrint"_sr);
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ ACTOR template <typename TxnType>
|
|||
Future<Optional<StorageWiggleMetrics>> loadStorageWiggleMetrics(TxnType tr, PrimaryRegion primary) {
|
||||
tr->setOption(FDBTransactionOptions::READ_SYSTEM_KEYS);
|
||||
tr->setOption(FDBTransactionOptions::READ_LOCK_AWARE);
|
||||
auto f = tr->get(perpetualStorageWiggleStatsPrefix.withSuffix(primary ? "primary"_sr : "remote"_sr));
|
||||
auto f = tr->get(perpetualStorageWiggleKeyFor(primary, PerpetualWiggleKeyType::WIGGLE_STATS));
|
||||
Optional<Value> value = wait(safeThreadFutureToFuture(f));
|
||||
if (!value.present()) {
|
||||
return Optional<StorageWiggleMetrics>();
|
||||
|
@ -124,7 +124,7 @@ Future<Void> updateStorageWiggleMetrics(TxnType tr, StorageWiggleMetrics metrics
|
|||
auto f = tr->get(perpetualStorageWiggleKey);
|
||||
Optional<Value> v = wait(safeThreadFutureToFuture(f));
|
||||
if (v.present() && v == "1"_sr) {
|
||||
tr->set(perpetualStorageWiggleStatsPrefix.withSuffix(primary ? "primary"_sr : "remote"_sr),
|
||||
tr->set(perpetualStorageWiggleKeyFor(primary, PerpetualWiggleKeyType::WIGGLE_STATS),
|
||||
ObjectWriter::toValue(metrics, IncludeVersion()));
|
||||
} else {
|
||||
CODE_PROBE(true, "Intend to update StorageWiggleMetrics after PW disabled");
|
||||
|
@ -147,7 +147,7 @@ Future<Void> resetStorageWiggleMetrics(TrType tr,
|
|||
|
||||
if (metrics.present()) {
|
||||
metrics.get().reset();
|
||||
tr->set(perpetualStorageWiggleStatsPrefix.withSuffix(primary ? "primary"_sr : "remote"_sr),
|
||||
tr->set(perpetualStorageWiggleKeyFor(primary, PerpetualWiggleKeyType::WIGGLE_STATS),
|
||||
ObjectWriter::toValue(metrics.get(), IncludeVersion()));
|
||||
}
|
||||
return Void();
|
||||
|
|
|
@ -277,6 +277,11 @@ extern const KeyRef perpetualStorageWiggleKey;
|
|||
extern const KeyRef perpetualStorageWiggleLocalityKey;
|
||||
extern const KeyRef perpetualStorageWiggleIDPrefix;
|
||||
extern const KeyRef perpetualStorageWiggleStatsPrefix;
|
||||
// the final char is "/"
|
||||
enum class PerpetualWigglePrefixType { STORAGE_ID };
|
||||
enum class PerpetualWiggleKeyType { WIGGLE_STATS, WIGGLE_DELAY };
|
||||
const Key perpetualStorageWigglePrefixFor(bool primaryDc, PerpetualWigglePrefixType type);
|
||||
const Key perpetualStorageWiggleKeyFor(bool primaryDc, PerpetualWiggleKeyType type);
|
||||
|
||||
// Change the value of this key to anything and that will trigger detailed data distribution team info log.
|
||||
extern const KeyRef triggerDDTeamInfoPrintKey;
|
||||
|
|
|
@ -1925,7 +1925,7 @@ public:
|
|||
}
|
||||
|
||||
ACTOR static Future<Void> updateNextWigglingStorageID(DDTeamCollection* self) {
|
||||
state Key writeKey = perpetualStorageWiggleIDPrefix.withSuffix(self->primary ? "primary/"_sr : "remote/"_sr);
|
||||
state Key writeKey = perpetualStorageWigglePrefixFor(self->primary, PerpetualWigglePrefixType::STORAGE_ID);
|
||||
state KeyBackedObjectMap<UID, StorageWiggleValue, decltype(IncludeVersion())> metadataMap(writeKey,
|
||||
IncludeVersion());
|
||||
state UID nextId = wait(self->getNextWigglingServerID());
|
||||
|
@ -1951,6 +1951,9 @@ public:
|
|||
return Void();
|
||||
}
|
||||
|
||||
// Persistent the total delay time to the database.
|
||||
ACTOR static Future<Void> perpetualStorageWiggleDelay(DDTeamCollection* self) { return Void(); }
|
||||
|
||||
ACTOR static Future<Void> perpetualStorageWiggleRest(DDTeamCollection* self) {
|
||||
state bool takeRest = true;
|
||||
state Promise<int64_t> avgShardBytes;
|
||||
|
@ -2035,7 +2038,7 @@ public:
|
|||
AsyncVar<bool>* stopSignal,
|
||||
PromiseStream<Void> finishStorageWiggleSignal) {
|
||||
state KeyBackedObjectMap<UID, StorageWiggleValue, decltype(IncludeVersion())> metadataMap(
|
||||
perpetualStorageWiggleIDPrefix.withSuffix(self->primary ? "primary/"_sr : "remote/"_sr), IncludeVersion());
|
||||
perpetualStorageWigglePrefixFor(self->primary, PerpetualWigglePrefixType::STORAGE_ID), IncludeVersion());
|
||||
|
||||
state Future<StorageWiggleValue> nextFuture = Never();
|
||||
state Future<Void> moveFinishFuture = Never();
|
||||
|
|
Loading…
Reference in New Issue