mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-25 00:30:00 +08:00
Address review comments: Update TraceEvents and an assert in versionstampkey check
This commit is contained in:
parent
d013ff7457
commit
ed0732a012
@ -265,7 +265,7 @@ ErrorOr<Optional<TenantMapEntry>> getTenantEntry(ProxyCommitData* commitData,
|
|||||||
return Optional<TenantMapEntry>();
|
return Optional<TenantMapEntry>();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool verifyPrefix(ProxyCommitData* const commitData, const CommitTransactionRequest& req) {
|
bool verifyTenantPrefix(ProxyCommitData* const commitData, const CommitTransactionRequest& req) {
|
||||||
ErrorOr<Optional<TenantMapEntry>> tenantEntry =
|
ErrorOr<Optional<TenantMapEntry>> tenantEntry =
|
||||||
getTenantEntry(commitData, req.tenantInfo.name.castTo<TenantNameRef>(), req.tenantInfo.tenantId, true);
|
getTenantEntry(commitData, req.tenantInfo.name.castTo<TenantNameRef>(), req.tenantInfo.tenantId, true);
|
||||||
|
|
||||||
@ -281,27 +281,26 @@ bool verifyPrefix(ProxyCommitData* const commitData, const CommitTransactionRequ
|
|||||||
TraceEvent(SevWarnAlways, "TenantPrefixMismatch")
|
TraceEvent(SevWarnAlways, "TenantPrefixMismatch")
|
||||||
.suppressFor(60)
|
.suppressFor(60)
|
||||||
.detail("Prefix", tenantPrefix.toHexString())
|
.detail("Prefix", tenantPrefix.toHexString())
|
||||||
.detail("Key", m.param1.toHexString())
|
.detail("Key", m.param1.toHexString());
|
||||||
.detail("KeyType", "Key");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m.type == MutationRef::ClearRange && !m.param2.startsWith(tenantPrefix)) {
|
if (m.type == MutationRef::ClearRange && !m.param2.startsWith(tenantPrefix)) {
|
||||||
TraceEvent(SevWarnAlways, "TenantPrefixMismatch")
|
TraceEvent(SevWarnAlways, "TenantClearRangePrefixMismatch")
|
||||||
.suppressFor(60)
|
.suppressFor(60)
|
||||||
.detail("Prefix", tenantPrefix.toHexString())
|
.detail("Prefix", tenantPrefix.toHexString())
|
||||||
.detail("Key", m.param2.toHexString())
|
.detail("Key", m.param2.toHexString());
|
||||||
.detail("KeyType", "ClearRangeKey");
|
|
||||||
return false;
|
return false;
|
||||||
} else if (m.type == MutationRef::SetVersionstampedKey) {
|
} else if (m.type == MutationRef::SetVersionstampedKey) {
|
||||||
|
ASSERT(m.param1.size() >= 4);
|
||||||
uint8_t* key = const_cast<uint8_t*>(m.param1.begin());
|
uint8_t* key = const_cast<uint8_t*>(m.param1.begin());
|
||||||
int* offset = reinterpret_cast<int*>(&key[m.param1.size() - 4]);
|
int* offset = reinterpret_cast<int*>(&key[m.param1.size() - 4]);
|
||||||
if (*offset <= tenantPrefix.size()) {
|
if (*offset < tenantPrefix.size()) {
|
||||||
TraceEvent(SevWarnAlways, "TenantPrefixMismatch")
|
TraceEvent(SevWarnAlways, "TenantVersionstampInvalidOffset")
|
||||||
.suppressFor(60)
|
.suppressFor(60)
|
||||||
.detail("Prefix", tenantPrefix.toHexString())
|
.detail("Prefix", tenantPrefix.toHexString())
|
||||||
.detail("Key", m.param1.toHexString())
|
.detail("Key", m.param1.toHexString())
|
||||||
.detail("KeyType", "VersionstampedKey");
|
.detail("Offset", *offset);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -311,7 +310,7 @@ bool verifyPrefix(ProxyCommitData* const commitData, const CommitTransactionRequ
|
|||||||
for (auto& rc : req.transaction.read_conflict_ranges) {
|
for (auto& rc : req.transaction.read_conflict_ranges) {
|
||||||
if (rc.begin != metadataVersionKey &&
|
if (rc.begin != metadataVersionKey &&
|
||||||
(!rc.begin.startsWith(tenantPrefix) || !rc.end.startsWith(tenantPrefix))) {
|
(!rc.begin.startsWith(tenantPrefix) || !rc.end.startsWith(tenantPrefix))) {
|
||||||
TraceEvent(SevWarnAlways, "TenantPrefixMismatch")
|
TraceEvent(SevWarnAlways, "TenantReadConflictPrefixMismatch")
|
||||||
.suppressFor(60)
|
.suppressFor(60)
|
||||||
.detail("Prefix", tenantPrefix.toHexString())
|
.detail("Prefix", tenantPrefix.toHexString())
|
||||||
.detail("BeginKey", rc.begin.toHexString())
|
.detail("BeginKey", rc.begin.toHexString())
|
||||||
@ -323,7 +322,7 @@ bool verifyPrefix(ProxyCommitData* const commitData, const CommitTransactionRequ
|
|||||||
for (auto& wc : req.transaction.write_conflict_ranges) {
|
for (auto& wc : req.transaction.write_conflict_ranges) {
|
||||||
if (wc.begin != metadataVersionKey &&
|
if (wc.begin != metadataVersionKey &&
|
||||||
(!wc.begin.startsWith(tenantPrefix) || !wc.end.startsWith(tenantPrefix))) {
|
(!wc.begin.startsWith(tenantPrefix) || !wc.end.startsWith(tenantPrefix))) {
|
||||||
TraceEvent(SevWarnAlways, "TenantPrefixMismatch")
|
TraceEvent(SevWarnAlways, "TenantWriteConflictPrefixMismatch")
|
||||||
.suppressFor(60)
|
.suppressFor(60)
|
||||||
.detail("Prefix", tenantPrefix.toHexString())
|
.detail("Prefix", tenantPrefix.toHexString())
|
||||||
.detail("BeginKey", wc.begin.toHexString())
|
.detail("BeginKey", wc.begin.toHexString())
|
||||||
@ -383,7 +382,7 @@ ACTOR Future<Void> commitBatcher(ProxyCommitData* commitData,
|
|||||||
.detail("Client", req.reply.getEndpoint().getPrimaryAddress());
|
.detail("Client", req.reply.getEndpoint().getPrimaryAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!verifyPrefix(commitData, req)) {
|
if (!verifyTenantPrefix(commitData, req)) {
|
||||||
++commitData->stats.txnCommitErrors;
|
++commitData->stats.txnCommitErrors;
|
||||||
req.reply.sendError(illegal_tenant_access());
|
req.reply.sendError(illegal_tenant_access());
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user