1
/******************************************************
6
Created 3/26/1996 Heikki Tuuri
7
*******************************************************/
13
#include "trx0types.h"
16
/**********************************************************************
17
Gets a rollback segment header. */
22
/* out: rollback segment header, page
24
ulint space, /* in: space where placed */
25
ulint zip_size, /* in: compressed page size in bytes
26
or 0 for uncompressed pages */
27
ulint page_no, /* in: page number of the header */
28
mtr_t* mtr); /* in: mtr */
29
/**********************************************************************
30
Gets a newly created rollback segment header. */
35
/* out: rollback segment header, page
37
ulint space, /* in: space where placed */
38
ulint zip_size, /* in: compressed page size in bytes
39
or 0 for uncompressed pages */
40
ulint page_no, /* in: page number of the header */
41
mtr_t* mtr); /* in: mtr */
42
/*******************************************************************
43
Gets the file page number of the nth undo log slot. */
46
trx_rsegf_get_nth_undo(
47
/*===================*/
48
/* out: page number of the undo log segment */
49
trx_rsegf_t* rsegf, /* in: rollback segment header */
50
ulint n, /* in: index of slot */
51
mtr_t* mtr); /* in: mtr */
52
/*******************************************************************
53
Sets the file page number of the nth undo log slot. */
56
trx_rsegf_set_nth_undo(
57
/*===================*/
58
trx_rsegf_t* rsegf, /* in: rollback segment header */
59
ulint n, /* in: index of slot */
60
ulint page_no,/* in: page number of the undo log segment */
61
mtr_t* mtr); /* in: mtr */
62
/********************************************************************
63
Looks for a free slot for an undo log segment. */
66
trx_rsegf_undo_find_free(
67
/*=====================*/
68
/* out: slot index or ULINT_UNDEFINED if not
70
trx_rsegf_t* rsegf, /* in: rollback segment header */
71
mtr_t* mtr); /* in: mtr */
72
/**********************************************************************
73
Looks for a rollback segment, based on the rollback segment id. */
78
/* out: rollback segment */
79
ulint id); /* in: rollback segment id */
80
/********************************************************************
81
Creates a rollback segment header. This function is called only when
82
a new rollback segment is created in the database. */
85
trx_rseg_header_create(
86
/*===================*/
87
/* out: page number of the created segment,
89
ulint space, /* in: space id */
90
ulint zip_size, /* in: compressed page size in bytes
91
or 0 for uncompressed pages */
92
ulint max_size, /* in: max size in pages */
93
ulint* slot_no, /* out: rseg id == slot number in trx sys */
94
mtr_t* mtr); /* in: mtr */
95
/*************************************************************************
96
Creates the memory copies for rollback segments and initializes the
97
rseg list and array in trx_sys at a database startup. */
100
trx_rseg_list_and_array_init(
101
/*=========================*/
102
trx_sysf_t* sys_header, /* in: trx system header */
103
mtr_t* mtr); /* in: mtr */
104
/********************************************************************
105
Creates a new rollback segment to the database. */
110
/* out: the created segment object, NULL if
112
ulint space, /* in: space id */
113
ulint max_size, /* in: max size in pages */
114
ulint* id, /* out: rseg id */
115
mtr_t* mtr); /* in: mtr */
118
/* Number of undo log slots in a rollback segment file copy */
119
#define TRX_RSEG_N_SLOTS (UNIV_PAGE_SIZE / 16)
121
/* Maximum number of transactions supported by a single rollback segment */
122
#define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)
124
/* The rollback segment memory object */
125
struct trx_rseg_struct{
126
/*--------------------------------------------------------*/
127
ulint id; /* rollback segment id == the index of
128
its slot in the trx system file copy */
129
mutex_t mutex; /* mutex protecting the fields in this
130
struct except id; NOTE that the latching
131
order must always be kernel mutex ->
133
ulint space; /* space where the rollback segment is
135
ulint zip_size;/* in: compressed page size of space
136
in bytes, or 0 for uncompressed spaces */
137
ulint page_no;/* page number of the rollback segment
139
ulint max_size;/* maximum allowed size in pages */
140
ulint curr_size;/* current size in pages */
141
/*--------------------------------------------------------*/
142
/* Fields for update undo logs */
143
UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_list;
144
/* List of update undo logs */
145
UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_cached;
146
/* List of update undo log segments
147
cached for fast reuse */
148
/*--------------------------------------------------------*/
149
/* Fields for insert undo logs */
150
UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_list;
151
/* List of insert undo logs */
152
UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_cached;
153
/* List of insert undo log segments
154
cached for fast reuse */
155
/*--------------------------------------------------------*/
156
ulint last_page_no; /* Page number of the last not yet
157
purged log header in the history list;
158
FIL_NULL if all list purged */
159
ulint last_offset; /* Byte offset of the last not yet
161
dulint last_trx_no; /* Transaction number of the last not
163
ibool last_del_marks; /* TRUE if the last not yet purged log
165
/*--------------------------------------------------------*/
166
UT_LIST_NODE_T(trx_rseg_t) rseg_list;
167
/* the list of the rollback segment
171
/* Undo log segment slot in a rollback segment header */
172
/*-------------------------------------------------------------*/
173
#define TRX_RSEG_SLOT_PAGE_NO 0 /* Page number of the header page of
174
an undo log segment */
175
/*-------------------------------------------------------------*/
177
#define TRX_RSEG_SLOT_SIZE 4
179
/* The offset of the rollback segment header on its page */
180
#define TRX_RSEG FSEG_PAGE_DATA
182
/* Transaction rollback segment header */
183
/*-------------------------------------------------------------*/
184
#define TRX_RSEG_MAX_SIZE 0 /* Maximum allowed size for rollback
186
#define TRX_RSEG_HISTORY_SIZE 4 /* Number of file pages occupied
187
by the logs in the history list */
188
#define TRX_RSEG_HISTORY 8 /* The update undo logs for committed
190
#define TRX_RSEG_FSEG_HEADER (8 + FLST_BASE_NODE_SIZE)
191
/* Header for the file segment where
192
this page is placed */
193
#define TRX_RSEG_UNDO_SLOTS (8 + FLST_BASE_NODE_SIZE + FSEG_HEADER_SIZE)
194
/* Undo log segment slots */
195
/*-------------------------------------------------------------*/
198
#include "trx0rseg.ic"