1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-06-05 20:16:48 +03:00

Allow storage service implementation to run in client context

If the storage service implementation can operate in
client session context, avoid resetting/restoring globals
when changing to storage service scope in transaction.cpp.
This commit is contained in:
Teemu Ollakka 2023-09-19 14:03:41 +03:00
parent 3d998f9ad6
commit 13e9403eba
2 changed files with 19 additions and 3 deletions

View File

@ -92,6 +92,17 @@ namespace wsrep
virtual void store_globals() = 0; virtual void store_globals() = 0;
virtual void reset_globals() = 0; virtual void reset_globals() = 0;
/**
* Return true if the implementation requires storing
* and restoring global state. Return true by default
* since this is the original behavior. Stateless
* implementations may override.
*/
virtual bool requires_globals() const {
return true;
}
}; };
} }

View File

@ -63,8 +63,10 @@ namespace
{ {
throw wsrep::runtime_error("Null client_state provided"); throw wsrep::runtime_error("Null client_state provided");
} }
client_service_.reset_globals(); if (storage_service_->requires_globals()) {
storage_service_->store_globals(); client_service_.reset_globals();
storage_service_->store_globals();
}
} }
wsrep::storage_service& storage_service() wsrep::storage_service& storage_service()
@ -74,8 +76,11 @@ namespace
~scoped_storage_service() ~scoped_storage_service()
{ {
bool restore_globals = storage_service_->requires_globals();
deleter_(storage_service_); deleter_(storage_service_);
client_service_.store_globals(); if (restore_globals) {
client_service_.store_globals();
}
} }
private: private:
scoped_storage_service(const scoped_storage_service&); scoped_storage_service(const scoped_storage_service&);