fixing incorrect uses of ThreadSafeAsyncVar (#10086)
This commit is contained in:
parent
8b1fe728be
commit
d0c412b5e6
|
@ -2161,10 +2161,10 @@ ThreadFuture<int64_t> MultiVersionDatabase::rebootWorker(const StringRef& addres
|
|||
|
||||
template <class T, class... Args>
|
||||
ThreadFuture<T> MultiVersionDatabase::executeOperation(ThreadFuture<T> (IDatabase::*func)(Args...), Args&&... args) {
|
||||
auto db = dbState->db;
|
||||
if (db) {
|
||||
auto f = (db.getPtr()->*func)(std::forward<Args>(args)...);
|
||||
return abortableFuture(f, dbState->dbVar->get().onChange);
|
||||
auto db = dbState->dbVar->get();
|
||||
if (db.value) {
|
||||
auto f = (db.value.getPtr()->*func)(std::forward<Args>(args)...);
|
||||
return abortableFuture(f, db.onChange);
|
||||
}
|
||||
|
||||
// If database initialization failed, return the initialization error
|
||||
|
@ -2174,7 +2174,7 @@ ThreadFuture<T> MultiVersionDatabase::executeOperation(ThreadFuture<T> (IDatabas
|
|||
}
|
||||
|
||||
// Wait for the database to be initialized
|
||||
return abortableFuture(ThreadFuture<T>(Never()), dbState->dbVar->get().onChange);
|
||||
return abortableFuture(ThreadFuture<T>(Never()), db.onChange);
|
||||
}
|
||||
|
||||
ThreadFuture<Void> MultiVersionDatabase::forceRecoveryWithDataLoss(const StringRef& dcid) {
|
||||
|
@ -2257,16 +2257,16 @@ ThreadFuture<ProtocolVersion> MultiVersionDatabase::getServerProtocol(Optional<P
|
|||
|
||||
ThreadFuture<Standalone<StringRef>> MultiVersionDatabase::getClientStatus() {
|
||||
auto stateRef = dbState;
|
||||
auto db = stateRef->db;
|
||||
if (!db.isValid()) {
|
||||
db = stateRef->versionMonitorDb;
|
||||
auto db = stateRef->dbVar->get();
|
||||
if (!db.value.isValid()) {
|
||||
db.value = stateRef->versionMonitorDb;
|
||||
}
|
||||
if (!db.isValid()) {
|
||||
if (!db.value.isValid()) {
|
||||
return onMainThread([stateRef] { return Future<Standalone<StringRef>>(stateRef->getClientStatus(""_sr)); });
|
||||
} else {
|
||||
// If a database is created first retrieve its status
|
||||
auto f = db->getClientStatus();
|
||||
auto statusFuture = abortableFuture(f, dbState->dbVar->get().onChange);
|
||||
auto f = db.value->getClientStatus();
|
||||
auto statusFuture = abortableFuture(f, db.onChange);
|
||||
return flatMapThreadFuture<Standalone<StringRef>, Standalone<StringRef>>(
|
||||
statusFuture, [stateRef](ErrorOr<Standalone<StringRef>> dbContextStatus) {
|
||||
return onMainThread([stateRef, dbContextStatus] {
|
||||
|
|
Loading…
Reference in New Issue