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

Function autoConfig

fdbclient/include/fdbclient/GenericManagementAPI.actor.h:563–664  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

561}
562
563ACTOR template <class DB>
564Future<ConfigurationResult> autoConfig(Reference<DB> db, ConfigureAutoResult conf) {
565 state Reference<typename DB::TransactionT> tr = db->createTransaction();
566 state Key versionKey = BinaryWriter::toValue(deterministicRandom()->randomUniqueID(), Unversioned());
567
568 if (!conf.address_class.size())
569 return ConfigurationResult::INCOMPLETE_CONFIGURATION; // FIXME: correct return type
570
571 loop {
572 try {
573 tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS);
574 tr->setOption(FDBTransactionOptions::PRIORITY_SYSTEM_IMMEDIATE);
575 tr->setOption(FDBTransactionOptions::LOCK_AWARE);
576 tr->setOption(FDBTransactionOptions::USE_PROVISIONAL_PROXIES);
577
578 state typename DB::TransactionT::template FutureT<RangeResult> processClassesF;
579 state typename DB::TransactionT::template FutureT<RangeResult> processDataF;
580 std::vector<ProcessData> workers = wait(getWorkers(tr, processClassesF, processDataF));
581 std::map<NetworkAddress, Optional<Standalone<StringRef>>> address_processId;
582 for (auto& w : workers) {
583 address_processId[w.address] = w.locality.processId();
584 }
585
586 for (auto& it : conf.address_class) {
587 if (it.second.classSource() == ProcessClass::CommandLineSource) {
588 tr->clear(processClassKeyFor(address_processId[it.first].get()));
589 } else {
590 tr->set(processClassKeyFor(address_processId[it.first].get()), processClassValue(it.second));
591 }
592 }
593
594 if (conf.address_class.size())
595 tr->set(processClassChangeKey, deterministicRandom()->randomUniqueID().toString());
596
597 if (conf.auto_logs != conf.old_logs)
598 tr->set(configKeysPrefix.toString() + "auto_logs", format("%d", conf.auto_logs));
599
600 if (conf.auto_commit_proxies != conf.old_commit_proxies)
601 tr->set(configKeysPrefix.toString() + "auto_commit_proxies", format("%d", conf.auto_commit_proxies));
602
603 if (conf.auto_grv_proxies != conf.old_grv_proxies)
604 tr->set(configKeysPrefix.toString() + "auto_grv_proxies", format("%d", conf.auto_grv_proxies));
605
606 if (conf.auto_resolvers != conf.old_resolvers)
607 tr->set(configKeysPrefix.toString() + "auto_resolvers", format("%d", conf.auto_resolvers));
608
609 if (conf.auto_replication != conf.old_replication) {
610 std::vector<StringRef> modes;
611 modes.push_back(conf.auto_replication);
612 std::map<std::string, std::string> m;
613 auto r = buildConfiguration(modes, m);
614 if (r != ConfigurationResult::SUCCESS)
615 return r;
616
617 for (auto& kv : m)
618 tr->set(kv.first, kv.second);
619 }
620

Callers 1

changeConfigFunction · 0.85

Calls 15

deterministicRandomFunction · 0.85
UnversionedFunction · 0.85
forFunction · 0.85
ifFunction · 0.85
processClassKeyForFunction · 0.85
processClassValueFunction · 0.85
buildConfigurationFunction · 0.85
singleKeyRangeFunction · 0.85
safeThreadFutureToFutureFunction · 0.85
changeConfigFunction · 0.85
TraceEventClass · 0.85
randomUniqueIDMethod · 0.80

Tested by

no test coverage detected