![]() |
MySQL 26.10.0
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 enum enum_sql_cmd_type | sql_cmd_type () const |
| virtual bool | is_single_table_plan () const |
| virtual bool | accept (THD *, Select_lex_visitor *) |
| virtual const MYSQL_LEX_CSTRING * | eligible_secondary_storage_engine (THD *) const |
| Is this statement of a type and on a form that makes it eligible for execution in a secondary storage engine? More... | |
| virtual bool | is_bulk_load () const |
| virtual bool | are_dynamic_parameters_allowed () const |
| void | disable_secondary_storage_engine () |
| Disable use of secondary storage engines in this statement. More... | |
| void | enable_secondary_storage_engine () |
| 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 | register_xa_recover_finalization_action (THD *thd) const |
| Register an action that marks the transaction finalized for SQL XA RECOVER before the GTID for the second phase statement is externalized. More... | |
| void | register_xa_recover_finalization_action (THD *thd, Transaction_ctx *trx_context, bool need_clear_owned_gtid) const |
| Register an action that marks the transaction finalized for SQL XA RECOVER before the GTID for the second phase statement is externalized. 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, bool remove_from_cache) 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, true);
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. |
| remove_from_cache | Whether to remove the detached transaction context from the transaction cache. |
|
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 |
Register an action that marks the transaction finalized for SQL XA RECOVER before the GTID for the second phase statement is externalized.
The transaction remains cached as an XID reservation until normal cleanup removes the cache entry. Registration is conservative when a TC log may update GTID state. If no update runs, the command-scope fallback cancels the action.
| thd | The THD session object used to process the detached XA transaction. |
|
protected |
Register an action that marks the transaction finalized for SQL XA RECOVER before the GTID for the second phase statement is externalized.
The transaction remains cached as an XID reservation until normal cleanup removes the cache entry. Registration is conservative when a TC log may update GTID state. If no update runs, the command-scope fallback cancels the action.
| thd | The THD session object used to process the XA transaction. |
| trx_context | Transaction context to mark finalized for SQL XA RECOVER. |
| need_clear_owned_gtid | Whether GTID state needs to be finalized outside binlog group commit. |
|
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.