MySQL 9.0.0
Source Code Documentation
trx0roll.h
Go to the documentation of this file.
1/*****************************************************************************
2
3Copyright (c) 1996, 2024, Oracle and/or its affiliates.
4
5This program is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License, version 2.0, as published by the
7Free Software Foundation.
8
9This program is designed to work with certain software (including
10but not limited to OpenSSL) that is licensed under separate terms,
11as designated in a particular file or component or in included license
12documentation. The authors of MySQL hereby grant you an additional
13permission to link the program and your derivative works with the
14separately licensed software that they have either included with
15the program or referenced in the documentation.
16
17This program is distributed in the hope that it will be useful, but WITHOUT
18ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
20for more details.
21
22You should have received a copy of the GNU General Public License along with
23this program; if not, write to the Free Software Foundation, Inc.,
2451 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
26*****************************************************************************/
27
28/** @file include/trx0roll.h
29 Transaction rollback
30
31 Created 3/26/1996 Heikki Tuuri
32 *******************************************************/
33
34#ifndef trx0roll_h
35#define trx0roll_h
36
37#include "mtr0mtr.h"
38#include "trx0sys.h"
39#include "trx0trx.h"
40#include "trx0types.h"
41#include "univ.i"
42
43#ifdef UNIV_HOTBACKUP
44#include "que0que.h"
45#endif /* UNIV_HOTBACKUP */
46
48
49/** Determines if this transaction is rolling back an incomplete transaction
50 in crash recovery.
51 @return true if trx is an incomplete transaction that is being rolled
52 back in crash recovery */
53bool trx_is_recv(const trx_t *trx); /*!< in: transaction */
54/** Returns a transaction savepoint taken at this point in time.
55 @return savepoint */
56trx_savept_t trx_savept_take(trx_t *trx); /*!< in: transaction */
57
58/** Get next undo log record from redo and noredo rollback segments.
59 @return undo log record copied to heap, NULL if none left, or if the
60 undo number of the top record would be less than the limit */
62 trx_t *trx, /*!< in: transaction */
63 undo_no_t limit, /*!< in: least undo number we need */
64 roll_ptr_t *roll_ptr, /*!< out: roll pointer to undo record */
65 mem_heap_t *heap); /*!< in: memory heap where copied */
66
67/** Rollback or clean up any incomplete transactions which were
68 encountered in crash recovery. If the transaction already was
69 committed, then we clean up a possible insert undo log. If the
70 transaction was not yet committed, then we roll it back. */
72 bool all); /*!< in: false=roll back dictionary transactions;
73 true=roll back all non-PREPARED transactions */
74
75/** Rollback or clean up any incomplete transactions which were
76encountered in crash recovery. If the transaction already was
77committed, then we clean up a possible insert undo log. If the
78transaction was not yet committed, then we roll it back.
79Note: this is done in a background thread. */
81
82/** Creates a rollback command node struct.
83 @return own: rollback node struct */
85 mem_heap_t *heap); /*!< in: mem heap where created */
86/** Performs an execution step for a rollback command node in a query graph.
87 @return query thread to run next, or NULL */
88que_thr_t *trx_rollback_step(que_thr_t *thr); /*!< in: query thread */
89/** Rollback a transaction used in MySQL.
90 @return error code or DB_SUCCESS */
91dberr_t trx_rollback_for_mysql(trx_t *trx); /*!< in/out: transaction */
92/** Rollback the latest SQL statement for MySQL.
93 @return error code or DB_SUCCESS */
95 trx_t *trx); /*!< in/out: transaction */
96/** Rollback a transaction to a given savepoint or do a complete rollback.
97 @return error code or DB_SUCCESS */
99 trx_t *trx, /*!< in: transaction handle */
100 trx_savept_t *savept); /*!< in: pointer to savepoint undo number, if
101 partial rollback requested, or NULL for
102 complete rollback */
103/** Rolls back a transaction back to a named savepoint. Modifications after the
104 savepoint are undone but InnoDB does NOT release the corresponding locks
105 which are stored in memory. If a lock is 'implicit', that is, a new inserted
106 row holds a lock where the lock information is carried by the trx id stored in
107 the row, these locks are naturally released in the rollback. Savepoints which
108 were set after this savepoint are deleted.
109 @return if no savepoint of the name found then DB_NO_SAVEPOINT,
110 otherwise DB_SUCCESS */
112 trx_t *trx, /*!< in: transaction handle */
113 const char *savepoint_name, /*!< in: savepoint name */
114 int64_t *mysql_binlog_cache_pos); /*!< out: the MySQL binlog cache
115 position corresponding to this
116 savepoint; MySQL needs this
117 information to remove the
118 binlog entries of the queries
119 executed after the savepoint */
120/** Creates a named savepoint. If the transaction is not yet started, starts it.
121 If there is already a savepoint of the same name, this call erases that old
122 savepoint and replaces it with a new. Savepoints are deleted in a transaction
123 commit or rollback.
124 @return always DB_SUCCESS */
126 trx_t *trx, /*!< in: transaction handle */
127 const char *savepoint_name, /*!< in: savepoint name */
128 int64_t binlog_cache_pos); /*!< in: MySQL binlog cache
129 position corresponding to this
130 connection at the time of the
131 savepoint */
132/** Releases a named savepoint. Savepoints which
133 were set after this savepoint are deleted.
134 @return if no savepoint of the name found then DB_NO_SAVEPOINT,
135 otherwise DB_SUCCESS */
137 trx_t *trx, /*!< in: transaction handle */
138 const char *savepoint_name); /*!< in: savepoint name */
139
140/** Frees savepoint structs starting from savep.
141@param[in] trx Transaction handle
142@param[in] savep Free all savepoints starting with this savepoint i, if savep is
143nullptr free all save points */
145
146/** Rollback node states */
148 ROLL_NODE_NONE = 0, /*!< Unknown state */
149 ROLL_NODE_SEND, /*!< about to send a rollback signal to
150 the transaction */
151 ROLL_NODE_WAIT /*!< rollback signal sent to the
152 transaction, waiting for completion */
154
155/** Rollback command node in a query graph */
157 que_common_t common; /*!< node type: QUE_NODE_ROLLBACK */
158 enum roll_node_state state; /*!< node execution state */
159 bool partial; /*!< true if we want a partial
160 rollback */
161 trx_savept_t savept; /*!< savepoint to which to
162 roll back, in the case of a
163 partial rollback */
164 que_thr_t *undo_thr; /*!< undo query graph */
165};
166
167/** A savepoint set with SQL's "SAVEPOINT savepoint_id" command */
169 char *name; /*!< savepoint name */
170 trx_savept_t savept; /*!< the undo number corresponding to
171 the savepoint */
173 /*!< the MySQL binlog cache position
174 corresponding to this savepoint, not
175 defined if the MySQL binlogging is not
176 enabled */
178 trx_savepoints; /*!< the list of savepoints of a
179 transaction */
180};
181
183
184#include "trx0roll.ic"
185
186#endif
dberr_t
Definition: db0err.h:39
Mini-transaction buffer.
Query graph.
The info structure stored at the beginning of a heap block.
Definition: mem0mem.h:302
InnoDB condition variable.
Definition: os0event.cc:63
Definition: que0types.h:51
Definition: que0que.h:242
Rollback command node in a query graph.
Definition: trx0roll.h:156
trx_savept_t savept
savepoint to which to roll back, in the case of a partial rollback
Definition: trx0roll.h:161
que_common_t common
node type: QUE_NODE_ROLLBACK
Definition: trx0roll.h:157
enum roll_node_state state
node execution state
Definition: trx0roll.h:158
que_thr_t * undo_thr
undo query graph
Definition: trx0roll.h:164
bool partial
true if we want a partial rollback
Definition: trx0roll.h:159
A savepoint set with SQL's "SAVEPOINT savepoint_id" command.
Definition: trx0roll.h:168
trx_savepoints
the list of savepoints of a transaction
Definition: trx0roll.h:178
char * name
savepoint name
Definition: trx0roll.h:169
int64_t mysql_binlog_cache_pos
the MySQL binlog cache position corresponding to this savepoint, not defined if the MySQL binlogging ...
Definition: trx0roll.h:172
trx_savept_t savept
the undo number corresponding to the savepoint
Definition: trx0roll.h:170
Transaction savepoint.
Definition: trx0types.h:148
Definition: trx0trx.h:684
trx_savept_t trx_savept_take(trx_t *trx)
Returns a transaction savepoint taken at this point in time.
Definition: trx0roll.cc:565
dberr_t trx_release_savepoint_for_mysql(trx_t *trx, const char *savepoint_name)
Releases a named savepoint.
Definition: trx0roll.cc:536
que_thr_t * trx_rollback_step(que_thr_t *thr)
Performs an execution step for a rollback command node in a query graph.
Definition: trx0roll.cc:1128
roll_node_state
Rollback node states.
Definition: trx0roll.h:147
@ ROLL_NODE_WAIT
rollback signal sent to the transaction, waiting for completion
Definition: trx0roll.h:151
@ ROLL_NODE_NONE
Unknown state.
Definition: trx0roll.h:148
@ ROLL_NODE_SEND
about to send a rollback signal to the transaction
Definition: trx0roll.h:149
dberr_t trx_rollback_to_savepoint(trx_t *trx, trx_savept_t *savept)
Rollback a transaction to a given savepoint or do a complete rollback.
Definition: trx0roll.cc:142
os_event_t recovery_lock_taken
Definition: ha_innodb.cc:300
void trx_roll_savepoints_free(trx_t *trx, trx_named_savept_t *savep)
Frees savepoint structs starting from savep.
Definition: trx0roll.cc:367
dberr_t trx_savepoint_for_mysql(trx_t *trx, const char *savepoint_name, int64_t binlog_cache_pos)
Creates a named savepoint.
Definition: trx0roll.cc:493
dberr_t trx_rollback_to_savepoint_for_mysql(trx_t *trx, const char *savepoint_name, int64_t *mysql_binlog_cache_pos)
Rolls back a transaction back to a named savepoint.
Definition: trx0roll.cc:432
void trx_rollback_or_clean_recovered(bool all)
Rollback or clean up any incomplete transactions which were encountered in crash recovery.
Definition: trx0roll.cc:712
dberr_t trx_rollback_last_sql_stat_for_mysql(trx_t *trx)
Rollback the latest SQL statement for MySQL.
Definition: trx0roll.cc:284
trx_undo_rec_t * trx_roll_pop_top_rec_of_trx(trx_t *trx, undo_no_t limit, roll_ptr_t *roll_ptr, mem_heap_t *heap)
Get next undo log record from redo and noredo rollback segments.
Definition: trx0roll.cc:1019
dberr_t trx_rollback_for_mysql(trx_t *trx)
Rollback a transaction used in MySQL.
Definition: trx0roll.cc:269
void trx_recovery_rollback_thread()
Rollback or clean up any incomplete transactions which were encountered in crash recovery.
Definition: trx0roll.cc:851
roll_node_t * roll_node_create(mem_heap_t *heap)
Creates a rollback command node struct.
Definition: trx0roll.cc:1112
bool trx_is_recv(const trx_t *trx)
Determines if this transaction is rolling back an incomplete transaction in crash recovery.
Definition: trx0roll.cc:558
Transaction system.
The transaction.
Transaction system global type definitions.
byte trx_undo_rec_t
Undo log record.
Definition: trx0types.h:167
ib_id_t undo_no_t
Undo number.
Definition: trx0types.h:142
ib_id_t roll_ptr_t
Rollback pointer (DB_ROLL_PTR, DATA_ROLL_PTR)
Definition: trx0types.h:140
Version control for database, common definitions, and include files.
#define UT_LIST_NODE_GETTER_DEFINITION(t, m)
A helper for the UT_LIST_BASE_NODE_T_EXTERN which declares a node getter struct which extracts member...
Definition: ut0lst.h:270
#define UT_LIST_NODE_T(t)
Macro used for legacy reasons.
Definition: ut0lst.h:64
static int all(site_def const *s, node_no node)
Definition: xcom_transport.cc:884