49#define TRX_ID_FMT IB_ID_FMT
278 std::ostream &
print(std::ostream &out)
const {
279 out <<
"[trx_rseg_t: this=" << (
void *)
this <<
", id=" <<
id
287 return (rseg.
print(out));
290using Rsegs_Vector = std::vector<trx_rseg_t *, ut::allocator<trx_rseg_t *>>;
298#ifndef UNIV_HOTBACKUP
304#ifndef UNIV_HOTBACKUP
564 for (
size_t i = 0; i < append_from.
m_rsegs_n; ++i) {
591typedef std::priority_queue<
592 TrxUndoRsegs, std::vector<TrxUndoRsegs, ut::allocator<TrxUndoRsegs>>,
596typedef std::vector<trx_id_t, ut::allocator<trx_id_t>>
trx_ids_t;
605typedef std::vector<TrxVersion, ut::allocator<TrxVersion>>
hit_list_t;
uint32_t space_id_t
Tablespace identifier.
Definition: api0api.h:51
uint32_t page_no_t
Page number.
Definition: api0api.h:49
This is a wrapper for a std::vector of trx_rseg_t object pointers.
Definition: trx0types.h:294
~Rsegs()
Definition: trx0types.h:303
void set_empty()
Set the state of the undo tablespace to empty so that it can be dropped.
Definition: trx0types.h:413
void set_inactive_implicit()
Set the state of the rollback segments in this undo tablespace to inactive_implicit.
Definition: trx0types.h:401
rw_lock_t * m_latch
RW lock to protect m_rsegs vector, m_active, and each trx_rseg_t::trx_ref_count within it.
Definition: trx0types.h:429
trx_rseg_t * find(ulint rseg_id)
Find an rseg in the std::vector that uses the rseg_id given.
Definition: trx0rseg.cc:776
void clear()
Clear the vector of cached rollback segments leaving the reserved space allocated.
Definition: trx0rseg.cc:764
Rsegs_Vector m_rsegs
std::vector of rollback segments
Definition: trx0types.h:420
void push_back(trx_rseg_t *rseg)
Add rollback segment.
Definition: trx0types.h:321
void set_active()
Set the state of the rollback segments in this undo tablespace to ACTIVE for use by new transactions.
Definition: trx0types.h:394
void s_lock()
Acquire the shared lock on m_rsegs.
Definition: trx0types.h:358
bool is_empty()
Return whether the undo tablespace is empty and ready to be dropped.
Definition: trx0types.h:386
undo_space_states m_state
The current state of this undo tablespace.
Definition: trx0types.h:509
Rseg_Iterator end()
ending iterator
Definition: trx0types.h:333
Rsegs()
Default constructor.
Definition: trx0types.h:297
void sort()
Sort the vector on trx_rseg_t::id.
Definition: trx0types.h:347
bool is_init()
Return whether the undo tablespace is being initialized.
Definition: trx0types.h:390
bool is_inactive_implicit()
Return whether the undo tablespace is inactive due to implicit selection by the purge thread.
Definition: trx0types.h:376
bool is_inactive_explicit()
Return whether the undo tablespace was made inactive by ALTER TABLESPACE.
Definition: trx0types.h:381
ulint size()
Number of registered rsegs.
Definition: trx0types.h:325
void s_unlock()
Release the shared lock on m_rsegs.
Definition: trx0types.h:361
void set_inactive_explicit()
Make the undo tablespace inactive so that it will not be used for new transactions.
Definition: trx0types.h:409
bool is_active()
Return whether the undo tablespace is active.
Definition: trx0types.h:371
Rseg_Iterator begin()
beginning iterator
Definition: trx0types.h:329
void x_unlock()
Release the exclusive lock on m_rsegs.
Definition: trx0types.h:367
undo_space_states
Definition: trx0types.h:500
@ EMPTY
Definition: trx0types.h:505
@ INACTIVE_IMPLICIT
Definition: trx0types.h:503
@ INIT
Definition: trx0types.h:501
@ ACTIVE
Definition: trx0types.h:502
@ INACTIVE_EXPLICIT
Definition: trx0types.h:504
void deinit()
De-initialize.
Definition: trx0rseg.cc:754
void x_lock()
Acquire the exclusive lock on m_rsegs.
Definition: trx0types.h:364
trx_rseg_t * at(ulint slot)
Find the rseg at the given slot in this vector.
Definition: trx0types.h:338
void init()
Initialize.
Definition: trx0rseg.cc:744
Rollback segments from a given transaction with trx-no scheduled for purge.
Definition: trx0types.h:517
TrxUndoRsegs(trx_id_t trx_no)
Definition: trx0types.h:519
trx_id_t get_trx_no() const
Get transaction number.
Definition: trx0types.h:532
Rsegs_array< 2 > m_rsegs
Rollback segments of a transaction, scheduled for purge.
Definition: trx0types.h:588
size_t size() const
Number of registered rsegs.
Definition: trx0types.h:548
Rsegs_array< 2 >::iterator end()
Definition: trx0types.h:556
trx_id_t m_trx_no
Compiler defined copy-constructor/assignment operator should be fine given that there is no reference...
Definition: trx0types.h:583
size_t m_rsegs_n
Definition: trx0types.h:585
Rsegs_array< 2 >::iterator begin()
Definition: trx0types.h:552
bool operator()(const TrxUndoRsegs &lhs, const TrxUndoRsegs &rhs)
Compare two TrxUndoRsegs based on trx_no.
Definition: trx0types.h:573
void set_trx_no(trx_id_t trx_no)
Definition: trx0types.h:528
void insert(const TrxUndoRsegs &append_from)
Append rollback segments from referred instance to current instance.
Definition: trx0types.h:562
TrxUndoRsegs()
Default constructor.
Definition: trx0types.h:526
void insert(trx_rseg_t *rseg)
Add rollback segment.
Definition: trx0types.h:536
Page size descriptor.
Definition: page0size.h:50
constexpr uint32_t FSP_TRX_SYS_PAGE_NO
transaction system header, in tablespace 0
Definition: fsp0types.h:170
A class describing a page size.
Definition: trx0types.h:598
uint64_t m_version
Definition: trx0types.h:602
TrxVersion(trx_t *trx)
Constructor.
Definition: trx0trx.cc:97
trx_t * m_trx
Definition: trx0types.h:601
Commit command node in a query graph.
Definition: trx0trx.h:1346
Rollback command node in a query graph.
Definition: trx0roll.h:156
The structure used in the spin lock implementation of a read-write lock.
Definition: sync0rw.h:360
Latching protocol for trx_lock_t::que_state.
Definition: trx0trx.h:410
A savepoint set with SQL's "SAVEPOINT savepoint_id" command.
Definition: trx0roll.h:168
The control structure used in the purge operation.
Definition: trx0purge.h:986
The rollback segment memory object.
Definition: trx0types.h:177
std::ostream & print(std::ostream &out) const
Definition: trx0types.h:278
trx_id_t last_trx_no
Transaction number of the last not yet purged log.
Definition: trx0types.h:270
Undo_list insert_undo_list
List of insert undo logs.
Definition: trx0types.h:255
size_t last_offset
Byte offset of the last not yet purged log header.
Definition: trx0types.h:267
bool last_del_marks
true if the last not yet purged log needs purging
Definition: trx0types.h:273
page_no_t get_curr_size() const
Definition: trx0types.h:211
void set_curr_size(page_no_t npages)
Definition: trx0types.h:215
RsegMutex mutex
mutex protecting the fields in this struct except id,space,page_no which are constant
Definition: trx0types.h:224
space_id_t space_id
space ID where the rollback segment header is placed
Definition: trx0types.h:227
void decr_curr_size(page_no_t npages=1)
Decrement the current size of the rollback segment by the given number of pages.
Definition: trx0types.h:200
page_no_t curr_size
current size in pages
Definition: trx0types.h:240
page_no_t page_no
page number of the rollback segment header
Definition: trx0types.h:230
page_size_t page_size
page size of the relevant tablespace
Definition: trx0types.h:233
Undo_list update_undo_cached
List of update undo log segments cached for fast reuse.
Definition: trx0types.h:250
std::atomic< size_t > trx_ref_count
Reference counter to track rseg allocated transactions.
Definition: trx0types.h:276
page_no_t max_size
maximum allowed size in pages
Definition: trx0types.h:236
void incr_curr_size()
Increment the current size of the rollback segment by the given number of pages.
Definition: trx0types.h:207
bool validate_curr_size(bool take_mutex=true)
Validate the curr_size member by re-calculating it.
Definition: trx0rseg.cc:1171
page_no_t last_page_no
Page number of the last not yet purged log header in the history list; FIL_NULL if all list purged.
Definition: trx0types.h:264
UT_LIST_BASE_NODE_T_EXTERN(trx_undo_t, undo_list) Undo_list
Definition: trx0types.h:243
Undo_list update_undo_list
List of update undo logs.
Definition: trx0types.h:247
Undo_list insert_undo_cached
List of insert undo log segments cached for fast reuse.
Definition: trx0types.h:258
void unlatch()
Exit the rseg->mutex.
Definition: trx0types.h:192
void latch()
Enter the rseg->mutex.
Definition: trx0types.h:186
Transaction savepoint.
Definition: trx0types.h:148
undo_no_t least_undo_no
least undo number to undo
Definition: trx0types.h:149
The transaction system central memory data structure.
Definition: trx0sys.h:453
Definition: trx0trx.h:684
Transaction undo log memory object; this is protected by the undo_mutex in the corresponding transact...
Definition: trx0undo.h:339
The read-write lock (for threads, not for database transactions)
static void rw_lock_s_unlock(rw_lock_t *L)
Definition: sync0rw.h:792
static void rw_lock_x_lock(rw_lock_t *M, ut::Location L)
Definition: sync0rw.h:766
static void rw_lock_s_lock(rw_lock_t *M, ut::Location L)
Definition: sync0rw.h:715
static void rw_lock_x_unlock(rw_lock_t *L)
Definition: sync0rw.h:795
static const uint32_t TRX_FORCE_ROLLBACK_MASK
For masking out the above flags.
Definition: trx0types.h:68
ib_mutex_t TrxMutex
Definition: trx0types.h:171
std::vector< trx_rseg_t *, ut::allocator< trx_rseg_t * > > Rsegs_Vector
Definition: trx0types.h:290
byte trx_undo_rec_t
Undo log record.
Definition: trx0types.h:167
Rsegs_Vector::iterator Rseg_Iterator
Definition: trx0types.h:291
trx_state_t
Transaction states (trx_t::state)
Definition: trx0types.h:80
@ TRX_STATE_FORCED_ROLLBACK
Same as not started but with additional semantics that it was rolled back asynchronously the last tim...
Definition: trx0types.h:86
@ TRX_STATE_ACTIVE
Definition: trx0types.h:88
@ TRX_STATE_COMMITTED_IN_MEMORY
Definition: trx0types.h:93
@ TRX_STATE_NOT_STARTED
Definition: trx0types.h:82
@ TRX_STATE_PREPARED
Support for 2PC/XA.
Definition: trx0types.h:91
constexpr trx_id_t TRX_ID_MAX
Maximum transaction identifier.
Definition: trx0types.h:145
static const ulint TRX_MAGIC_N
Random value to check for corruption of trx_t.
Definition: trx0types.h:58
trx_que_t
Transaction execution states when trx->state == TRX_STATE_ACTIVE.
Definition: trx0types.h:71
@ TRX_QUE_LOCK_WAIT
transaction is waiting for a lock
Definition: trx0types.h:73
@ TRX_QUE_RUNNING
transaction is running
Definition: trx0types.h:72
@ TRX_QUE_COMMITTING
transaction is committing
Definition: trx0types.h:76
@ TRX_QUE_ROLLING_BACK
transaction is rolling back
Definition: trx0types.h:75
std::priority_queue< TrxUndoRsegs, std::vector< TrxUndoRsegs, ut::allocator< TrxUndoRsegs > >, TrxUndoRsegs > purge_pq_t
Definition: trx0types.h:594
std::vector< trx_id_t, ut::allocator< trx_id_t > > trx_ids_t
Definition: trx0types.h:596
ib_id_t row_id_t
Row identifier (DB_ROW_ID, DATA_ROW_ID)
Definition: trx0types.h:132
ib_id_t undo_no_t
Undo number.
Definition: trx0types.h:142
byte trx_upagef_t
Undo log page header.
Definition: trx0types.h:165
byte trx_usegf_t
Undo segment header.
Definition: trx0types.h:161
std::ostream & operator<<(std::ostream &out, const trx_rseg_t &rseg)
Definition: trx0types.h:286
byte trx_rsegsf_t
Rollback segment array header.
Definition: trx0types.h:157
static const uint32_t TRX_FORCE_ROLLBACK
Mark the transaction for forced rollback.
Definition: trx0types.h:65
byte trx_ulogf_t
Undo log header.
Definition: trx0types.h:163
std::array< trx_rseg_t *, N > Rsegs_array
Definition: trx0types.h:513
ib_mutex_t PQMutex
Definition: trx0types.h:173
byte trx_rsegf_t
Rollback segment header.
Definition: trx0types.h:159
ib_mutex_t RsegMutex
Definition: trx0types.h:170
ib_id_t trx_id_t
Transaction identifier (DB_TRX_ID, DATA_TRX_ID)
Definition: trx0types.h:138
constexpr uint32_t TRX_SYS_PAGE_NO
Page number of the transaction system page.
Definition: trx0types.h:55
byte trx_sysf_t
File objects.
Definition: trx0types.h:155
static const uint32_t TRX_FORCE_ROLLBACK_DISABLE
If this flag is set then the transaction cannot be rolled back asynchronously.
Definition: trx0types.h:62
ib_mutex_t UndoMutex
Definition: trx0types.h:172
std::vector< TrxVersion, ut::allocator< TrxVersion > > hit_list_t
Definition: trx0types.h:605
static const space_id_t TRX_SYS_SPACE
Space id of the transaction system page (the system tablespace)
Definition: trx0types.h:52
ib_id_t roll_ptr_t
Rollback pointer (DB_ROLL_PTR, DATA_ROLL_PTR)
Definition: trx0types.h:140
ib_mutex_t TrxSysMutex
Definition: trx0types.h:174
trx_dict_op_t
Type of data dictionary operation.
Definition: trx0types.h:97
@ TRX_DICT_OP_TABLE
The transaction is creating a table or an index, or dropping a table.
Definition: trx0types.h:104
@ TRX_DICT_OP_NONE
The transaction is not modifying the data dictionary.
Definition: trx0types.h:99
@ TRX_DICT_OP_INDEX
The transaction is creating or dropping an index in an existing table.
Definition: trx0types.h:108
uint64_t ib_id_t
The generic InnoDB system object identifier data type.
Definition: univ.i:443
unsigned long int ulint
Definition: univ.i:406
constexpr ib_id_t IB_ID_MAX
Definition: univ.i:444
Utilities for byte operations.
#define UT_LOCATION_HERE
Definition: ut0core.h:47
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:69
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:57
#define UT_LIST_BASE_NODE_T_EXTERN(t, m)
A variant of UT_LIST_BASE_NODE_T to be used in rare cases where the full definition of t is not yet i...
Definition: ut0lst.h:279
#define mutex_exit(M)
Definition: ut0mutex.h:123
#define mutex_enter(M)
Definition: ut0mutex.h:117
Dynamic memory allocation routines and custom allocators specifically crafted to support memory instr...