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

Method validateFull

fdbrpc/ReplicationPolicy.cpp:33–74  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31}
32
33bool IReplicationPolicy::validateFull(bool solved,
34 std::vector<LocalityEntry> const& solutionSet,
35 std::vector<LocalityEntry> const& alsoServers,
36 Reference<LocalitySet> const& fromServers) {
37 bool valid = true;
38 std::vector<LocalityEntry> totalSolution(solutionSet);
39
40 // Append the also servers, if any
41 if (alsoServers.size()) {
42 totalSolution.reserve(totalSolution.size() + alsoServers.size());
43 totalSolution.insert(totalSolution.end(), alsoServers.begin(), alsoServers.end());
44 }
45
46 if (!solved) {
47 if (validate(totalSolution, fromServers)) {
48 valid = false;
49 } else if (validate(fromServers->getGroupEntries(), fromServers)) {
50 valid = false;
51 }
52 } else if (!validate(totalSolution, fromServers)) {
53 valid = false;
54 } else if (solutionSet.empty()) {
55 if (!validate(alsoServers, fromServers)) {
56 valid = false;
57 }
58 } else {
59 auto lastSolutionIndex = solutionSet.size() - 1;
60 auto missingEntry = totalSolution[lastSolutionIndex];
61 totalSolution[lastSolutionIndex] = totalSolution.back();
62 totalSolution.pop_back();
63 for (int index = 0; index < solutionSet.size() && index < totalSolution.size(); index++) {
64 if (validate(totalSolution, fromServers)) {
65 valid = false;
66 break;
67 }
68 auto tempMissing = totalSolution[index];
69 totalSolution[index] = missingEntry;
70 missingEntry = tempMissing;
71 }
72 }
73 return valid;
74}
75
76bool PolicyOne::selectReplicas(Reference<LocalitySet>& fromServers,
77 std::vector<LocalityEntry> const& alsoServers,

Callers 1

testPolicyFunction · 0.80

Calls 9

validateFunction · 0.50
sizeMethod · 0.45
reserveMethod · 0.45
insertMethod · 0.45
endMethod · 0.45
beginMethod · 0.45
emptyMethod · 0.45
backMethod · 0.45
pop_backMethod · 0.45

Tested by

no test coverage detected