fixing incorrect uses of ThreadSafeAsyncVar (#10086)

This commit is contained in:
Josh Slocum 2023-05-02 07:29:06 -05:00 committed by GitHub
parent 8b1fe728be
commit d0c412b5e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 11 deletions

View File

@ -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] {