MCPcopy Create free account
hub / github.com/apple/foundationdb / createCheckpointImpl

Function createCheckpointImpl

fdbclient/NativeAPI.actor.cpp:8441–8475  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8439
8440ACTOR template <class T>
8441static Future<Void> createCheckpointImpl(T tr, KeyRangeRef range, CheckpointFormat format) {
8442 ASSERT(!tr->getTenant().present());
8443 TraceEvent("CreateCheckpointTransactionBegin").detail("Range", range);
8444
8445 state RangeResult keyServers = wait(krmGetRanges(tr, keyServersPrefix, range));
8446 ASSERT(!keyServers.more);
8447
8448 state RangeResult UIDtoTagMap = wait(tr->getRange(serverTagKeys, CLIENT_KNOBS->TOO_MANY));
8449 ASSERT(!UIDtoTagMap.more && UIDtoTagMap.size() < CLIENT_KNOBS->TOO_MANY);
8450
8451 for (int i = 0; i < keyServers.size() - 1; ++i) {
8452 KeyRangeRef shard(keyServers[i].key, keyServers[i + 1].key);
8453 std::vector<UID> src;
8454 std::vector<UID> dest;
8455 decodeKeyServersValue(UIDtoTagMap, keyServers[i].value, src, dest);
8456
8457 // The checkpoint request is sent to all replicas, in case any of them is unhealthy.
8458 // An alternative is to choose a healthy replica.
8459 const UID checkpointID = deterministicRandom()->randomUniqueID();
8460 for (int idx = 0; idx < src.size(); ++idx) {
8461 CheckpointMetaData checkpoint(shard & range, format, src[idx], checkpointID);
8462 checkpoint.setState(CheckpointMetaData::Pending);
8463 tr->set(checkpointKeyFor(checkpointID), checkpointValue(checkpoint));
8464 }
8465
8466 TraceEvent("CreateCheckpointTransactionShard")
8467 .detail("Shard", shard)
8468 .detail("SrcServers", describe(src))
8469 .detail("ServerSelected", describe(src))
8470 .detail("CheckpointKey", checkpointKeyFor(checkpointID))
8471 .detail("ReadVersion", tr->getReadVersion().get());
8472 }
8473
8474 return Void();
8475}
8476
8477Future<Void> createCheckpoint(Reference<ReadYourWritesTransaction> tr, KeyRangeRef range, CheckpointFormat format) {
8478 return holdWhile(tr, createCheckpointImpl(tr, range, format));

Callers 1

createCheckpointFunction · 0.85

Calls 15

TraceEventClass · 0.85
decodeKeyServersValueFunction · 0.85
deterministicRandomFunction · 0.85
checkpointKeyForFunction · 0.85
checkpointValueFunction · 0.85
detailMethod · 0.80
randomUniqueIDMethod · 0.80
setStateMethod · 0.80
describeFunction · 0.70
getRangeMethod · 0.65
setMethod · 0.65
getMethod · 0.65

Tested by

no test coverage detected