MySQL 8.0.40
Source Code Documentation
|
This class abstracts some functionality used by XA statements involved in the second phase of the the XA two-phase commit, specifically, XA COMMIT
and XA ROLLBACK
SQL statements.
More...
#include <sql_xa_second_phase.h>
Public Member Functions | |
Sql_cmd_xa_second_phase (xid_t *xid_arg) | |
Class constructor. More... | |
virtual | ~Sql_cmd_xa_second_phase () override=default |
Public Member Functions inherited from Sql_cmd | |
virtual enum_sql_command | sql_command_code () const =0 |
Return the command code for this statement. More... | |
bool | needs_explicit_preparation () const |
bool | is_regular () const |
bool | is_prepared () const |
virtual bool | prepare (THD *) |
Prepare this SQL statement. More... | |
virtual bool | execute (THD *thd)=0 |
Execute this SQL statement. More... | |
virtual bool | reprepare_on_execute_required () const |
Some SQL commands currently require re-preparation on re-execution of a prepared statement or stored procedure. More... | |
virtual void | cleanup (THD *) |
Command-specific reinitialization before execution of prepared statement. More... | |
void | set_owner (Prepared_statement *stmt) |
Set the owning prepared statement. More... | |
Prepared_statement * | owner () const |
Get the owning prepared statement. More... | |
void | set_as_part_of_sp () |
Mark statement as part of procedure. More... | |
bool | is_part_of_sp () const |
virtual bool | is_dml () const |
virtual bool | is_single_table_plan () const |
virtual bool | accept (THD *, Select_lex_visitor *) |
virtual const MYSQL_LEX_CSTRING * | eligible_secondary_storage_engine () const |
Is this statement of a type and on a form that makes it eligible for execution in a secondary storage engine? More... | |
void | disable_secondary_storage_engine () |
Disable use of secondary storage engines in this statement. More... | |
bool | secondary_storage_engine_disabled () const |
Has use of secondary storage engines been disabled for this statement? More... | |
void | use_secondary_storage_engine (const handlerton *hton) |
Mark the current statement as using a secondary storage engine. More... | |
bool | using_secondary_storage_engine () const |
Is this statement using a secondary storage engine? More... | |
const handlerton * | secondary_engine () const |
Get the handlerton of the secondary engine that is used for executing this statement, or nullptr if a secondary engine is not used. More... | |
void | set_optional_transform_prepared (bool value) |
bool | is_optional_transform_prepared () |
Protected Member Functions | |
bool | find_and_initialize_xa_context (THD *thd) |
Tries to find and initialize the Transaction_ctx for the underlying detached XA transaction. More... | |
bool | acquire_locks (THD *thd) |
Tries to acquire the locks necessary to finalize the underlying detached XA transaction. More... | |
void | release_locks () const |
Release any locks acquires in acquire_locks still needing to be released. More... | |
void | setup_thd_context (THD *thd) |
Initializes the necessary parts of the thd parameter, transferring some of the detached XA transaction context to the active session. More... | |
bool | enter_commit_order (THD *thd) |
For replica applier threads, enters the wait on the commit order. More... | |
void | assign_xid_to_thd (THD *thd) const |
Sets the XID_STATE of the THD session object parameter as in detached state and copies into it the XID of the detached XA transaction. More... | |
void | exit_commit_order (THD *thd) const |
For replica applier threads, finishes the wait on the commit order and allows other threads to proceed. More... | |
void | cleanup_context (THD *thd) const |
Cleans up the THD context in order to prepare it for re-use. More... | |
void | dispose () |
Disposes of member variables that need it, because destructors for Sql_cmd classes aren't invoked (since they are created in the internal memory pool, memory is disposed as a all block). More... | |
Protected Member Functions inherited from Sql_cmd | |
Sql_cmd () | |
virtual | ~Sql_cmd () |
void | set_prepared () |
Set this statement as prepared. More... | |
Protected Attributes | |
xid_t * | m_xid {nullptr} |
The XID associated with the underlying XA transaction. More... | |
MDL_savepoint | m_mdl_savepoint |
The MDL savepoint used to rollback the MDL context when transient errors occur. More... | |
std::shared_ptr< Transaction_ctx > | m_detached_trx_context {nullptr} |
The detached transaction context, retrieved from the transaction cache. More... | |
bool | m_gtid_error {false} |
Whether or not the initialization of GTIDs returned an error. More... | |
bool | m_need_clear_owned_gtid {false} |
Whether or not the OWNED_GTID related structures need to be cleaned. More... | |
bool | m_result {false} |
The incremental success of the several initialization and deinitialization steps. More... | |
This class abstracts some functionality used by XA statements involved in the second phase of the the XA two-phase commit, specifically, XA COMMIT
and XA ROLLBACK
SQL statements.
Common usage of the available methods target the process of detached XA transactions, code pattern looks like:
bool Sql_cmd_xa_statement::process_detached_xa_statement(THD *thd) { DBUG_TRACE; if (this->find_and_initialize_xa_context(thd)) return true; if (this->acquire_locks(thd)) return true; raii::Sentry<> xa_lock_guard{ [this]() -> void { this->release_locks(); }}; this->setup_thd_context(thd); if (this->enter_commit_order(thd)) return true; this->assign_xid_to_thd(thd);
SPECIFIC STATEMENT EXECUTION HERE this->m_result = exec_statement(thd);
this->exit_commit_order(thd); this->cleanup_context(thd);
return this->m_result; }
Sql_cmd_xa_second_phase::Sql_cmd_xa_second_phase | ( | xid_t * | xid_arg | ) |
Class constructor.
xid_arg | XID of the XA transacation about to be committed |
|
overridevirtualdefault |
|
protected |
Tries to acquire the locks necessary to finalize the underlying detached XA transaction.
By function exit, all locks have been acquired or none.
Execution is as follows:
thd | The THD session object used to process the detached XA transaction. |
|
protected |
Sets the XID_STATE of the THD session object parameter as in detached state and copies into it the XID of the detached XA transaction.
thd | The THD session object used to process the detached XA transaction. |
|
protected |
Cleans up the THD context in order to prepare it for re-use.
Execution is as follows:
thd | The THD session object used to process the detached XA transaction. |
|
protected |
Disposes of member variables that need it, because destructors for Sql_cmd
classes aren't invoked (since they are created in the internal memory pool, memory is disposed as a all block).
|
protected |
For replica applier threads, enters the wait on the commit order.
Execution is as follows:
thd | The THD session object used to process the detached XA transaction. |
|
protected |
For replica applier threads, finishes the wait on the commit order and allows other threads to proceed.
thd | The THD session object used to process the detached XA transaction. |
|
protected |
Tries to find and initialize the Transaction_ctx
for the underlying detached XA transaction.
Execution is as follows:
thd | The THD session object used to process the detached XA transaction. |
|
protected |
Release any locks acquires in acquire_locks
still needing to be released.
|
protected |
Initializes the necessary parts of the thd
parameter, transferring some of the detached XA transaction context to the active session.
This is necessary to use other parts of the infra-structure that rely on having the active THD session properly initialized.
Execution is as follows:
thd | The THD session object used to process the detached XA transaction. |
|
protected |
The detached transaction context, retrieved from the transaction cache.
|
protected |
Whether or not the initialization of GTIDs returned an error.
|
protected |
The MDL savepoint used to rollback the MDL context when transient errors occur.
|
protected |
Whether or not the OWNED_GTID related structures need to be cleaned.
|
protected |
The incremental success of the several initialization and deinitialization steps.
Is mainly used to steer some of the deinitialization calls
The XID associated with the underlying XA transaction.