Resolve merge issue by renaming namespace (combining with existing TenantAPI namespace)

This commit is contained in:
A.J. Beamon 2022-12-05 15:47:58 -08:00
parent 4dbf4d6206
commit b1fb8e8c7b
9 changed files with 74 additions and 66 deletions

View File

@ -710,11 +710,11 @@ struct EncryptedRangeFileWriter : public IRangeFileWriter {
if (isSystemKey(key)) {
return SYSTEM_KEYSPACE_ENCRYPT_DOMAIN_ID;
}
if (key.size() < Tenant::PREFIX_SIZE) {
if (key.size() < TenantAPI::PREFIX_SIZE) {
return FDB_DEFAULT_ENCRYPT_DOMAIN_ID;
}
KeyRef tenantPrefix = KeyRef(key.begin(), Tenant::PREFIX_SIZE);
state int64_t tenantId = Tenant::prefixToId(tenantPrefix);
KeyRef tenantPrefix = KeyRef(key.begin(), TenantAPI::PREFIX_SIZE);
state int64_t tenantId = TenantAPI::prefixToId(tenantPrefix);
Optional<TenantEntryCachePayload<Void>> payload = wait(tenantCache->getById(tenantId));
if (payload.present()) {
return tenantId;
@ -813,7 +813,7 @@ struct EncryptedRangeFileWriter : public IRangeFileWriter {
state KeyRef endKey = k;
// If we are crossing a boundary with a key that has a tenant prefix then truncate it
if (curKeyDomainId != SYSTEM_KEYSPACE_ENCRYPT_DOMAIN_ID && curKeyDomainId != FDB_DEFAULT_ENCRYPT_DOMAIN_ID) {
endKey = StringRef(k.begin(), Tenant::PREFIX_SIZE);
endKey = StringRef(k.begin(), TenantAPI::PREFIX_SIZE);
}
state ValueRef newValue = StringRef();
@ -1075,7 +1075,7 @@ ACTOR static Future<Void> decodeKVPairs(StringRefReader* reader,
if (!curKey.empty() && !prevKey.empty() && prevDomainId.get() != curDomainId) {
ASSERT(!done);
if (curDomainId != SYSTEM_KEYSPACE_ENCRYPT_DOMAIN_ID && curDomainId != FDB_DEFAULT_ENCRYPT_DOMAIN_ID) {
ASSERT(curKey.size() == Tenant::PREFIX_SIZE);
ASSERT(curKey.size() == TenantAPI::PREFIX_SIZE);
}
done = true;
}

View File

@ -11033,7 +11033,7 @@ int64_t getMaxReadKeySize(KeyRef const& key) {
}
int64_t getMaxWriteKeySize(KeyRef const& key, bool hasRawAccess) {
int64_t tenantSize = hasRawAccess ? Tenant::PREFIX_SIZE : 0;
int64_t tenantSize = hasRawAccess ? TenantAPI::PREFIX_SIZE : 0;
return key.startsWith(systemKeys.begin) ? CLIENT_KNOBS->SYSTEM_KEY_SIZE_LIMIT
: CLIENT_KNOBS->KEY_SIZE_LIMIT + tenantSize;
}

View File

@ -31,14 +31,14 @@
FDB_DEFINE_BOOLEAN_PARAM(EnforceValidTenantId);
namespace Tenant {
namespace TenantAPI {
Key idToPrefix(int64_t id) {
int64_t swapped = bigEndian64(id);
return StringRef(reinterpret_cast<const uint8_t*>(&swapped), Tenant::PREFIX_SIZE);
return StringRef(reinterpret_cast<const uint8_t*>(&swapped), TenantAPI::PREFIX_SIZE);
}
int64_t prefixToId(KeyRef prefix, EnforceValidTenantId enforceValidTenantId) {
ASSERT(prefix.size() == Tenant::PREFIX_SIZE);
ASSERT(prefix.size() == TenantAPI::PREFIX_SIZE);
int64_t id = *reinterpret_cast<const int64_t*>(prefix.begin());
id = bigEndian64(id);
if (enforceValidTenantId) {
@ -48,7 +48,7 @@ int64_t prefixToId(KeyRef prefix, EnforceValidTenantId enforceValidTenantId) {
}
return id;
}
}; // namespace Tenant
}; // namespace TenantAPI
std::string TenantMapEntry::tenantStateToString(TenantState tenantState) {
switch (tenantState) {
@ -134,7 +134,7 @@ TenantMapEntry::TenantMapEntry(int64_t id,
void TenantMapEntry::setId(int64_t id) {
ASSERT(id >= 0);
this->id = id;
prefix = Tenant::idToPrefix(id);
prefix = TenantAPI::idToPrefix(id);
}
std::string TenantMapEntry::toJson() const {

View File

@ -32,12 +32,12 @@
FDB_DECLARE_BOOLEAN_PARAM(EnforceValidTenantId);
namespace Tenant {
namespace TenantAPI {
Key idToPrefix(int64_t id);
int64_t prefixToId(KeyRef prefix, EnforceValidTenantId = EnforceValidTenantId::True);
constexpr static int PREFIX_SIZE = sizeof(int64_t);
} // namespace Tenant
} // namespace TenantAPI
// Represents the various states that a tenant could be in.
// In a standalone cluster, a tenant should only ever be in the READY state.
@ -118,7 +118,7 @@ struct TenantMapEntry {
error);
if constexpr (Ar::isDeserializing) {
if (id >= 0) {
prefix = Tenant::idToPrefix(id);
prefix = TenantAPI::idToPrefix(id);
}
ASSERT(tenantState >= TenantState::REGISTERING && tenantState <= TenantState::ERROR);
}

View File

@ -398,7 +398,7 @@ private:
ASSERT(tenantId.present() != tenantPrefix.present());
ASSERT(!tenantName.present());
int64_t tId = tenantId.present() ? tenantId.get() : Tenant::prefixToId(tenantPrefix.get());
int64_t tId = tenantId.present() ? tenantId.get() : TenantAPI::prefixToId(tenantPrefix.get());
TraceEvent("TenantEntryCacheRemoveEntry").detail("Id", tId);
itrId = mapByTenantId.find(tId);
if (itrId == mapByTenantId.end()) {
@ -578,7 +578,7 @@ public:
Future<Optional<TenantEntryCachePayload<T>>> getById(int64_t tenantId) { return getByIdImpl(this, tenantId); }
Future<Optional<TenantEntryCachePayload<T>>> getByPrefix(KeyRef prefix) {
int64_t id = Tenant::prefixToId(prefix);
int64_t id = TenantAPI::prefixToId(prefix);
return getByIdImpl(this, id);
}
Future<Optional<TenantEntryCachePayload<T>>> getByName(TenantName name) { return getByNameImpl(this, name); }

View File

@ -925,10 +925,10 @@ EncryptCipherDomainId getEncryptDetailsFromMutationRef(ProxyCommitData* commitDa
} else if (isSingleKeyMutation((MutationRef::Type)m.type)) {
ASSERT_NE((MutationRef::Type)m.type, MutationRef::Type::ClearRange);
if (m.param1.size() >= Tenant::PREFIX_SIZE) {
if (m.param1.size() >= TenantAPI::PREFIX_SIZE) {
// Parse mutation key to determine mutation encryption domain
StringRef prefix = m.param1.substr(0, Tenant::PREFIX_SIZE);
int64_t tenantId = Tenant::prefixToId(prefix, EnforceValidTenantId::False);
StringRef prefix = m.param1.substr(0, TenantAPI::PREFIX_SIZE);
int64_t tenantId = TenantAPI::prefixToId(prefix, EnforceValidTenantId::False);
if (tenantId != TenantInfo::INVALID_TENANT) {
Optional<TenantName> tenantName = getTenantName(commitData, tenantId);
if (tenantName.present()) {

View File

@ -367,7 +367,7 @@ public:
for (int i = 0; i < tenantLimit; i++) {
Key k(format("%d", i));
ASSERT(tenantCache.isTenantKey(k.withPrefix(Tenant::idToPrefix(tenantNumber + (i % tenantCount)))));
ASSERT(tenantCache.isTenantKey(k.withPrefix(TenantAPI::idToPrefix(tenantNumber + (i % tenantCount)))));
ASSERT(!tenantCache.isTenantKey(k.withPrefix(allKeys.begin)));
ASSERT(!tenantCache.isTenantKey(k));
}
@ -418,10 +418,10 @@ public:
uint16_t tenantOrdinal = tenantNumber + i;
Key k(format("%d", i));
if (tenantOrdinal % staleTenantFraction != 0) {
ASSERT(tenantCache.isTenantKey(k.withPrefix(Tenant::idToPrefix(tenantOrdinal))));
ASSERT(tenantCache.isTenantKey(k.withPrefix(TenantAPI::idToPrefix(tenantOrdinal))));
keptCount++;
} else {
ASSERT(!tenantCache.isTenantKey(k.withPrefix(Tenant::idToPrefix(tenantOrdinal))));
ASSERT(!tenantCache.isTenantKey(k.withPrefix(TenantAPI::idToPrefix(tenantOrdinal))));
removedCount++;
}
}

View File

@ -335,16 +335,16 @@ public:
return { SYSTEM_KEYSPACE_ENCRYPT_DOMAIN_ID, systemKeysPrefix.size() };
}
// Key smaller than tenant prefix in size belongs to the default domain.
if (key.size() < Tenant::PREFIX_SIZE) {
if (key.size() < TenantAPI::PREFIX_SIZE) {
return { FDB_DEFAULT_ENCRYPT_DOMAIN_ID, 0 };
}
StringRef prefix = key.substr(0, Tenant::PREFIX_SIZE);
int64_t tenantId = Tenant::prefixToId(prefix, EnforceValidTenantId::False);
StringRef prefix = key.substr(0, TenantAPI::PREFIX_SIZE);
int64_t tenantId = TenantAPI::prefixToId(prefix, EnforceValidTenantId::False);
// Tenant id must be non-negative.
if (tenantId < 0) {
return { FDB_DEFAULT_ENCRYPT_DOMAIN_ID, 0 };
}
return { tenantId, Tenant::PREFIX_SIZE };
return { tenantId, TenantAPI::PREFIX_SIZE };
}
int64_t getEncryptionDomainIdFromHeader(const void* encodingHeader) override {

View File

@ -4911,19 +4911,19 @@ bool rangeIntersectsAnyTenant(VersionedMap<int64_t, TenantName>& tenantMap, KeyR
int64_t endId;
if (range.begin.size() >= 8) {
beginId = Tenant::prefixToId(range.begin.substr(0, 8));
beginId = TenantAPI::prefixToId(range.begin.substr(0, 8));
} else {
Key prefix = makeString(8);
uint8_t* bytes = mutateString(prefix);
range.begin.copyTo(bytes);
memset(bytes + range.begin.size(), 0, 8 - range.begin.size());
beginId = Tenant::prefixToId(prefix);
beginId = TenantAPI::prefixToId(prefix);
}
if (range.end >= "\x80"_sr) {
endId = std::numeric_limits<int64_t>::max();
} else if (range.end.size() >= 8) {
endId = Tenant::prefixToId(range.end.substr(0, 8));
endId = TenantAPI::prefixToId(range.end.substr(0, 8));
if (range.end.size() == 8) {
// Don't include the end prefix in the tenant search if our range doesn't extend into that prefix
--endId;
@ -4933,7 +4933,7 @@ bool rangeIntersectsAnyTenant(VersionedMap<int64_t, TenantName>& tenantMap, KeyR
uint8_t* bytes = mutateString(prefix);
range.end.copyTo(bytes);
memset(bytes + range.end.size(), 0, 8 - range.end.size());
endId = Tenant::prefixToId(prefix) - 1;
endId = TenantAPI::prefixToId(prefix) - 1;
}
auto beginItr = view.lower_bound(beginId);
@ -4958,68 +4958,76 @@ TEST_CASE("/fdbserver/storageserver/rangeIntersectsAnyTenant") {
ASSERT(!rangeIntersectsAnyTenant(tenantMap, KeyRangeRef("\xfe"_sr, "\xff"_sr), tenantMap.getLatestVersion()));
// In between tenants
ASSERT(!rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(1), Tenant::idToPrefix(1).withSuffix("\xff"_sr)),
tenantMap.getLatestVersion()));
ASSERT(
!rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(1), TenantAPI::idToPrefix(1).withSuffix("\xff"_sr)),
tenantMap.getLatestVersion()));
// In between tenants with end intersecting tenant start
ASSERT(!rangeIntersectsAnyTenant(
tenantMap, KeyRangeRef(Tenant::idToPrefix(5), Tenant::idToPrefix(6)), tenantMap.getLatestVersion()));
tenantMap, KeyRangeRef(TenantAPI::idToPrefix(5), TenantAPI::idToPrefix(6)), tenantMap.getLatestVersion()));
// Entire tenants
ASSERT(rangeIntersectsAnyTenant(
tenantMap, KeyRangeRef(Tenant::idToPrefix(0), Tenant::idToPrefix(1)), tenantMap.getLatestVersion()));
tenantMap, KeyRangeRef(TenantAPI::idToPrefix(0), TenantAPI::idToPrefix(1)), tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(
tenantMap, KeyRangeRef(Tenant::idToPrefix(2), Tenant::idToPrefix(3)), tenantMap.getLatestVersion()));
tenantMap, KeyRangeRef(TenantAPI::idToPrefix(2), TenantAPI::idToPrefix(3)), tenantMap.getLatestVersion()));
// Partial tenants
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(0), Tenant::idToPrefix(0).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(3).withSuffix("foo"_sr), Tenant::idToPrefix(4)),
tenantMap.getLatestVersion()));
ASSERT(
rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(0), TenantAPI::idToPrefix(0).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(
rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(3).withSuffix("foo"_sr), TenantAPI::idToPrefix(4)),
tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(
tenantMap,
KeyRangeRef(Tenant::idToPrefix(4).withSuffix("bar"_sr), Tenant::idToPrefix(4).withSuffix("foo"_sr)),
KeyRangeRef(TenantAPI::idToPrefix(4).withSuffix("bar"_sr), TenantAPI::idToPrefix(4).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
// Begin outside, end inside tenant
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(1), Tenant::idToPrefix(2).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(1), Tenant::idToPrefix(3).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(
rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(1), TenantAPI::idToPrefix(2).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(
rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(1), TenantAPI::idToPrefix(3).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
// Begin inside, end outside tenant
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(3).withSuffix("foo"_sr), Tenant::idToPrefix(5)),
tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(Tenant::idToPrefix(4).withSuffix("foo"_sr), Tenant::idToPrefix(5)),
tenantMap.getLatestVersion()));
ASSERT(
rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(3).withSuffix("foo"_sr), TenantAPI::idToPrefix(5)),
tenantMap.getLatestVersion()));
ASSERT(
rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(4).withSuffix("foo"_sr), TenantAPI::idToPrefix(5)),
tenantMap.getLatestVersion()));
// Both inside different tenants
ASSERT(rangeIntersectsAnyTenant(
tenantMap,
KeyRangeRef(Tenant::idToPrefix(0).withSuffix("foo"_sr), Tenant::idToPrefix(2).withSuffix("foo"_sr)),
KeyRangeRef(TenantAPI::idToPrefix(0).withSuffix("foo"_sr), TenantAPI::idToPrefix(2).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(
tenantMap,
KeyRangeRef(Tenant::idToPrefix(0).withSuffix("foo"_sr), Tenant::idToPrefix(3).withSuffix("foo"_sr)),
KeyRangeRef(TenantAPI::idToPrefix(0).withSuffix("foo"_sr), TenantAPI::idToPrefix(3).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(
tenantMap,
KeyRangeRef(Tenant::idToPrefix(2).withSuffix("foo"_sr), Tenant::idToPrefix(6).withSuffix("foo"_sr)),
KeyRangeRef(TenantAPI::idToPrefix(2).withSuffix("foo"_sr), TenantAPI::idToPrefix(6).withSuffix("foo"_sr)),
tenantMap.getLatestVersion()));
// Both outside tenants with tenant in the middle
ASSERT(rangeIntersectsAnyTenant(
tenantMap, KeyRangeRef(""_sr, Tenant::idToPrefix(1).withSuffix("foo"_sr)), tenantMap.getLatestVersion()));
tenantMap, KeyRangeRef(""_sr, TenantAPI::idToPrefix(1).withSuffix("foo"_sr)), tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(tenantMap, KeyRangeRef(""_sr, "\xff"_sr), tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(
tenantMap, KeyRangeRef(Tenant::idToPrefix(5).withSuffix("foo"_sr), "\xff"_sr), tenantMap.getLatestVersion()));
ASSERT(rangeIntersectsAnyTenant(tenantMap,
KeyRangeRef(TenantAPI::idToPrefix(5).withSuffix("foo"_sr), "\xff"_sr),
tenantMap.getLatestVersion()));
return Void();
}
@ -5032,7 +5040,7 @@ TEST_CASE("/fdbserver/storageserver/randomRangeIntersectsAnyTenant") {
for (int i = 0; i < numEntries; ++i) {
int64_t tenantId = deterministicRandom()->randomInt64(0, std::numeric_limits<int64_t>::max());
tenantMap.insert(tenantId, ""_sr);
tenantPrefixes.insert(Tenant::idToPrefix(tenantId));
tenantPrefixes.insert(TenantAPI::idToPrefix(tenantId));
}
for (int i = 0; i < 1000; ++i) {
@ -8643,7 +8651,7 @@ private:
void StorageServer::insertTenant(StringRef tenantPrefix, TenantName tenantName, Version version, bool persist) {
if (version >= tenantMap.getLatestVersion()) {
int64_t tenantId = Tenant::prefixToId(tenantPrefix);
int64_t tenantId = TenantAPI::prefixToId(tenantPrefix);
tenantMap.createNewVersion(version);
tenantMap.insert(tenantId, tenantName);
@ -8668,7 +8676,7 @@ void StorageServer::clearTenants(StringRef startTenant, StringRef endTenant, Ver
for (auto itr = view.begin(); itr != view.end(); ++itr) {
if (*itr >= startTenant && *itr < endTenant) {
// Trigger any watches on the prefix associated with the tenant.
Key tenantPrefix = Tenant::idToPrefix(itr.key());
Key tenantPrefix = TenantAPI::idToPrefix(itr.key());
watches.triggerRange(tenantPrefix, strinc(tenantPrefix));
TraceEvent("EraseTenant", thisServerID).detail("Tenant", itr.key()).detail("Version", version);
tenantsToClear.insert(itr.key());
@ -9675,7 +9683,7 @@ void StorageServerDisk::makeNewStorageServerDurable(const bool shardAware) {
auto view = data->tenantMap.atLatest();
for (auto itr = view.begin(); itr != view.end(); ++itr) {
storage->set(KeyValueRef(Tenant::idToPrefix(itr.key()).withPrefix(persistTenantMapKeys.begin), *itr));
storage->set(KeyValueRef(TenantAPI::idToPrefix(itr.key()).withPrefix(persistTenantMapKeys.begin), *itr));
}
}
@ -10168,7 +10176,7 @@ ACTOR Future<bool> restoreDurableState(StorageServer* data, IKeyValueStore* stor
state int tenantMapLoc;
for (tenantMapLoc = 0; tenantMapLoc < tenantMap.size(); tenantMapLoc++) {
auto const& result = tenantMap[tenantMapLoc];
int64_t tenantId = Tenant::prefixToId(result.key.substr(persistTenantMapKeys.begin.size()));
int64_t tenantId = TenantAPI::prefixToId(result.key.substr(persistTenantMapKeys.begin.size()));
data->tenantMap.insert(tenantId, result.value);