| 1318 | } |
| 1319 | |
| 1320 | void excludeServers(Transaction& tr, std::vector<AddressExclusion>& servers, bool failed) { |
| 1321 | tr.setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); |
| 1322 | tr.setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE); |
| 1323 | tr.setOption(FDBTransactionOptions::LOCK_AWARE); |
| 1324 | tr.setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES); |
| 1325 | std::string excludeVersionKey = deterministicRandom()->randomUniqueID().toString(); |
| 1326 | auto serversVersionKey = failed ? failedServersVersionKey : excludedServersVersionKey; |
| 1327 | tr.addReadConflictRange(singleKeyRange(serversVersionKey)); // To conflict with parallel includeServers |
| 1328 | tr.set(serversVersionKey, excludeVersionKey); |
| 1329 | for (auto& s : servers) { |
| 1330 | if (failed) { |
| 1331 | tr.set(encodeFailedServersKey(s), StringRef()); |
| 1332 | } else { |
| 1333 | tr.set(encodeExcludedServersKey(s), StringRef()); |
| 1334 | } |
| 1335 | } |
| 1336 | TraceEvent("ExcludeServersCommit").detail("Servers", describe(servers)).detail("ExcludeFailed", failed); |
| 1337 | } |
| 1338 | |
| 1339 | ACTOR Future<Void> excludeServers(Database cx, std::vector<AddressExclusion> servers, bool failed) { |
| 1340 | if (cx->apiVersionAtLeast(700)) { |