backup and DR would not share mutations if they were started on different versions of FDB
This commit is contained in:
parent
23b2fedde1
commit
9ec9f41d34
|
@ -1296,19 +1296,25 @@ namespace dbBackup {
|
|||
}
|
||||
|
||||
if (backupRanges.size() == 1) {
|
||||
state Key destUidLookupPath = BinaryWriter::toValue(backupRanges[0], IncludeVersion()).withPrefix(destUidLookupPrefix);
|
||||
Optional<Key> existingDestUidValue = wait(srcTr->get(destUidLookupPath));
|
||||
if (existingDestUidValue.present()) {
|
||||
if (destUidValue == existingDestUidValue.get()) {
|
||||
// due to unknown commit result
|
||||
break;
|
||||
} else {
|
||||
// existing backup/DR is running
|
||||
return Void();
|
||||
Standalone<RangeResultRef> existingDestUidValues = wait(srcTr->getRange(KeyRangeRef(destUidLookupPrefix, strinc(destUidLookupPrefix)), CLIENT_KNOBS->TOO_MANY));
|
||||
bool found = false;
|
||||
for(auto it : existingDestUidValues) {
|
||||
if( BinaryReader::fromStringRef<KeyRangeRef>(it.key.removePrefix(destUidLookupPrefix), IncludeVersion()) == backupRanges[0] ) {
|
||||
if(destUidValue != it.value) {
|
||||
// existing backup/DR is running
|
||||
return Void();
|
||||
} else {
|
||||
// due to unknown commit result
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
srcTr->set(destUidLookupPath, destUidValue);
|
||||
if(found) {
|
||||
break;
|
||||
}
|
||||
|
||||
srcTr->set(BinaryWriter::toValue(backupRanges[0], IncludeVersion(ProtocolVersion::withSharedMutations())).withPrefix(destUidLookupPrefix), destUidValue);
|
||||
}
|
||||
|
||||
Key versionKey = logUidValue.withPrefix(destUidValue).withPrefix(backupLatestVersionsPrefix);
|
||||
|
@ -1466,13 +1472,18 @@ namespace dbBackup {
|
|||
|
||||
// Initialize destUid
|
||||
if (backupRanges.size() == 1) {
|
||||
state Key destUidLookupPath = BinaryWriter::toValue(backupRanges[0], IncludeVersion()).withPrefix(destUidLookupPrefix);
|
||||
Optional<Key> existingDestUidValue = wait(srcTr->get(destUidLookupPath));
|
||||
if (existingDestUidValue.present()) {
|
||||
destUidValue = existingDestUidValue.get();
|
||||
} else {
|
||||
Standalone<RangeResultRef> existingDestUidValues = wait(srcTr->getRange(KeyRangeRef(destUidLookupPrefix, strinc(destUidLookupPrefix)), CLIENT_KNOBS->TOO_MANY));
|
||||
bool found = false;
|
||||
for(auto it : existingDestUidValues) {
|
||||
if( BinaryReader::fromStringRef<KeyRangeRef>(it.key.removePrefix(destUidLookupPrefix), IncludeVersion()) == backupRanges[0] ) {
|
||||
destUidValue = it.value;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( !found ) {
|
||||
destUidValue = BinaryWriter::toValue(deterministicRandom()->randomUniqueID(), Unversioned());
|
||||
srcTr->set(destUidLookupPath, destUidValue);
|
||||
srcTr->set(BinaryWriter::toValue(backupRanges[0], IncludeVersion(ProtocolVersion::withSharedMutations())).withPrefix(destUidLookupPrefix), destUidValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3619,13 +3619,18 @@ public:
|
|||
|
||||
state Key destUidValue(BinaryWriter::toValue(uid, Unversioned()));
|
||||
if (normalizedRanges.size() == 1) {
|
||||
state Key destUidLookupPath = BinaryWriter::toValue(normalizedRanges[0], IncludeVersion()).withPrefix(destUidLookupPrefix);
|
||||
Optional<Key> existingDestUidValue = wait(tr->get(destUidLookupPath));
|
||||
if (existingDestUidValue.present()) {
|
||||
destUidValue = existingDestUidValue.get();
|
||||
} else {
|
||||
Standalone<RangeResultRef> existingDestUidValues = wait(tr->getRange(KeyRangeRef(destUidLookupPrefix, strinc(destUidLookupPrefix)), CLIENT_KNOBS->TOO_MANY));
|
||||
bool found = false;
|
||||
for(auto it : existingDestUidValues) {
|
||||
if( BinaryReader::fromStringRef<KeyRangeRef>(it.key.removePrefix(destUidLookupPrefix), IncludeVersion()) == normalizedRanges[0] ) {
|
||||
destUidValue = it.value;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( !found ) {
|
||||
destUidValue = BinaryWriter::toValue(deterministicRandom()->randomUniqueID(), Unversioned());
|
||||
tr->set(destUidLookupPath, destUidValue);
|
||||
tr->set(BinaryWriter::toValue(normalizedRanges[0], IncludeVersion(ProtocolVersion::withSharedMutations())).withPrefix(destUidLookupPrefix), destUidValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,6 +79,7 @@ public: // introduced features
|
|||
PROTOCOL_VERSION_FEATURE(0x0FDB00A400040000LL, OpenDatabase);
|
||||
PROTOCOL_VERSION_FEATURE(0x0FDB00A446020000LL, Locality);
|
||||
PROTOCOL_VERSION_FEATURE(0x0FDB00A460010000LL, MultiGenerationTLog);
|
||||
PROTOCOL_VERSION_FEATURE(0x0FDB00A460010000LL, SharedMutations);
|
||||
PROTOCOL_VERSION_FEATURE(0x0FDB00A551000000LL, MultiVersionClient);
|
||||
PROTOCOL_VERSION_FEATURE(0x0FDB00A560010000LL, TagLocality);
|
||||
PROTOCOL_VERSION_FEATURE(0x0FDB00B060000000LL, Fearless);
|
||||
|
|
Loading…
Reference in New Issue