added comments
This commit is contained in:
parent
dc17be093c
commit
56eaf1bc83
|
@ -284,6 +284,8 @@ ACTOR Future<vector<WorkerInterface>> getStorageWorkers(Database cx,
|
|||
return result;
|
||||
}
|
||||
|
||||
// Helper function to extract he maximum SQ size of all provided messages. All futures in the
|
||||
// messages vector have to be ready.
|
||||
int64_t extractMaxQueueSize(const std::vector<Future<TraceEventFields>>& messages,
|
||||
const std::vector<StorageServerInterface>& servers) {
|
||||
|
||||
|
@ -315,6 +317,7 @@ int64_t extractMaxQueueSize(const std::vector<Future<TraceEventFields>>& message
|
|||
return maxQueueSize;
|
||||
}
|
||||
|
||||
// Timeout wrapper when getting the storage metrics. This will do some additional tracing
|
||||
ACTOR Future<TraceEventFields> getStorageMetricsTimeout(UID storage, WorkerInterface wi) {
|
||||
state Future<TraceEventFields> result =
|
||||
wi.eventLogRequest.getReply(EventLogRequest(StringRef(storage.toString() + "/StorageMetrics")));
|
||||
|
@ -608,6 +611,8 @@ ACTOR Future<Void> reconfigureAfter(Database cx,
|
|||
return Void();
|
||||
}
|
||||
|
||||
// Waits until a database quiets down (no data in flight, small tlog queue, low SQ, no active data distribution). This
|
||||
// requires the database to be available and healthy in order to succeed.
|
||||
ACTOR Future<Void> waitForQuietDatabase(Database cx,
|
||||
Reference<AsyncVar<ServerDBInfo>> dbInfo,
|
||||
std::string phase,
|
||||
|
|
|
@ -53,17 +53,19 @@ const int MACHINE_REBOOT_TIME = 10;
|
|||
|
||||
bool destructed = false;
|
||||
|
||||
// given a std::variant T, this templated class will define type which will be a variant of all types in T plus Args...
|
||||
template <class T, class... Args>
|
||||
struct concatenate_variant_t;
|
||||
struct variant_add_t;
|
||||
|
||||
template <class... Args1, class... Args2>
|
||||
struct concatenate_variant_t<std::variant<Args1...>, Args2...> {
|
||||
struct variant_add_t<std::variant<Args1...>, Args2...> {
|
||||
using type = std::variant<Args1..., Args2...>;
|
||||
};
|
||||
|
||||
template <class T, class... Args>
|
||||
using concatenate_variant = typename concatenate_variant_t<T, Args...>::type;
|
||||
using variant_add = typename variant_add_t<T, Args...>::type;
|
||||
|
||||
// variant_with_optional_t::type will be a std::variant<Args..., Optional<Args>...>
|
||||
template <class... Args>
|
||||
struct variant_with_optional_t;
|
||||
|
||||
|
@ -74,12 +76,13 @@ struct variant_with_optional_t<Single> {
|
|||
|
||||
template <class Head, class... Tail>
|
||||
struct variant_with_optional_t<Head, Tail...> {
|
||||
using type = concatenate_variant<typename variant_with_optional_t<Tail...>::type, Head, Optional<Head>>;
|
||||
using type = variant_add<typename variant_with_optional_t<Tail...>::type, Head, Optional<Head>>;
|
||||
};
|
||||
|
||||
template <class... Args>
|
||||
using variant_with_optional = typename variant_with_optional_t<Args...>::type;
|
||||
|
||||
// Expects a std::variant and will make a pointer out of each argument
|
||||
template <class T>
|
||||
struct add_pointers_t;
|
||||
|
||||
|
|
|
@ -1536,6 +1536,12 @@ ACTOR Future<Void> workerServer(Reference<ClusterConnectionFile> connFile,
|
|||
activeSharedTLog->set(logData.uid);
|
||||
}
|
||||
when(InitializeStorageRequest req = waitNext(interf.storage.getFuture())) {
|
||||
// We want to prevent double recruiting on a worker unless we try to recruit something
|
||||
// with a different storage engine (otherwise storage migration won't work for certain
|
||||
// configuration). Additionally we also need to allow double recruitment for seed servers.
|
||||
// The reason for this is that a storage will only remove itself if after it was able
|
||||
// to read the system key space. But if recovery fails right after a `configure new ...`
|
||||
// was run it won't be able to do so.
|
||||
if (!storageCache.exists(req.reqId) &&
|
||||
(std::all_of(runningStorages.begin(),
|
||||
runningStorages.end(),
|
||||
|
|
Loading…
Reference in New Issue