1
/*****************************************************************************
3
Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved.
5
This program is free software; you can redistribute it and/or modify it under
6
the terms of the GNU General Public License as published by the Free Software
7
Foundation; version 2 of the License.
9
This program is distributed in the hope that it will be useful, but WITHOUT
10
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
You should have received a copy of the GNU General Public License along with
14
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15
St, Fifth Floor, Boston, MA 02110-1301 USA
17
*****************************************************************************/
19
/**************************************************//**
20
@file include/trx0rseg.h
23
Created 3/26/1996 Heikki Tuuri
24
*******************************************************/
30
#include "trx0types.h"
33
/******************************************************************//**
34
Gets a rollback segment header.
35
@return rollback segment header, page x-latched */
40
ulint space, /*!< in: space where placed */
41
ulint zip_size, /*!< in: compressed page size in bytes
42
or 0 for uncompressed pages */
43
ulint page_no, /*!< in: page number of the header */
44
mtr_t* mtr); /*!< in: mtr */
45
/******************************************************************//**
46
Gets a newly created rollback segment header.
47
@return rollback segment header, page x-latched */
52
ulint space, /*!< in: space where placed */
53
ulint zip_size, /*!< in: compressed page size in bytes
54
or 0 for uncompressed pages */
55
ulint page_no, /*!< in: page number of the header */
56
mtr_t* mtr); /*!< in: mtr */
57
/***************************************************************//**
58
Gets the file page number of the nth undo log slot.
59
@return page number of the undo log segment */
62
trx_rsegf_get_nth_undo(
63
/*===================*/
64
trx_rsegf_t* rsegf, /*!< in: rollback segment header */
65
ulint n, /*!< in: index of slot */
66
mtr_t* mtr); /*!< in: mtr */
67
/***************************************************************//**
68
Sets the file page number of the nth undo log slot. */
71
trx_rsegf_set_nth_undo(
72
/*===================*/
73
trx_rsegf_t* rsegf, /*!< in: rollback segment header */
74
ulint n, /*!< in: index of slot */
75
ulint page_no,/*!< in: page number of the undo log segment */
76
mtr_t* mtr); /*!< in: mtr */
77
/****************************************************************//**
78
Looks for a free slot for an undo log segment.
79
@return slot index or ULINT_UNDEFINED if not found */
82
trx_rsegf_undo_find_free(
83
/*=====================*/
84
trx_rsegf_t* rsegf, /*!< in: rollback segment header */
85
mtr_t* mtr); /*!< in: mtr */
86
/******************************************************************//**
87
Looks for a rollback segment, based on the rollback segment id.
88
@return rollback segment */
93
ulint id); /*!< in: rollback segment id */
94
/****************************************************************//**
95
Creates a rollback segment header. This function is called only when
96
a new rollback segment is created in the database.
97
@return page number of the created segment, FIL_NULL if fail */
100
trx_rseg_header_create(
101
/*===================*/
102
ulint space, /*!< in: space id */
103
ulint zip_size, /*!< in: compressed page size in bytes
104
or 0 for uncompressed pages */
105
ulint max_size, /*!< in: max size in pages */
106
ulint rseg_slot_no, /*!< in: rseg id == slot number in trx sys */
107
mtr_t* mtr); /*!< in: mtr */
108
/*********************************************************************//**
109
Creates the memory copies for rollback segments and initializes the
110
rseg list and array in trx_sys at a database startup. */
113
trx_rseg_list_and_array_init(
114
/*=========================*/
115
trx_sysf_t* sys_header, /*!< in: trx system header */
116
mtr_t* mtr); /*!< in: mtr */
117
/***************************************************************************
118
Free's an instance of the rollback segment in memory. */
123
trx_rseg_t* rseg); /* in, own: instance to free */
125
/*********************************************************************
126
Creates a rollback segment. */
129
trx_rseg_create(void);
130
/*==================*/
132
/* Number of undo log slots in a rollback segment file copy */
133
#define TRX_RSEG_N_SLOTS (UNIV_PAGE_SIZE / 16)
135
/* Maximum number of transactions supported by a single rollback segment */
136
#define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)
138
/* The rollback segment memory object */
139
struct trx_rseg_struct{
140
/*--------------------------------------------------------*/
141
ulint id; /*!< rollback segment id == the index of
142
its slot in the trx system file copy */
143
mutex_t mutex; /*!< mutex protecting the fields in this
144
struct except id; NOTE that the latching
145
order must always be kernel mutex ->
147
ulint space; /*!< space where the rollback segment is
149
ulint zip_size;/* compressed page size of space
150
in bytes, or 0 for uncompressed spaces */
151
ulint page_no;/* page number of the rollback segment
153
ulint max_size;/* maximum allowed size in pages */
154
ulint curr_size;/* current size in pages */
155
/*--------------------------------------------------------*/
156
/* Fields for update undo logs */
157
UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_list;
158
/* List of update undo logs */
159
UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_cached;
160
/* List of update undo log segments
161
cached for fast reuse */
162
/*--------------------------------------------------------*/
163
/* Fields for insert undo logs */
164
UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_list;
165
/* List of insert undo logs */
166
UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_cached;
167
/* List of insert undo log segments
168
cached for fast reuse */
169
/*--------------------------------------------------------*/
170
ulint last_page_no; /*!< Page number of the last not yet
171
purged log header in the history list;
172
FIL_NULL if all list purged */
173
ulint last_offset; /*!< Byte offset of the last not yet
175
trx_id_t last_trx_no; /*!< Transaction number of the last not
177
ibool last_del_marks; /*!< TRUE if the last not yet purged log
179
/*--------------------------------------------------------*/
180
UT_LIST_NODE_T(trx_rseg_t) rseg_list;
181
/* the list of the rollback segment
185
/* Undo log segment slot in a rollback segment header */
186
/*-------------------------------------------------------------*/
187
#define TRX_RSEG_SLOT_PAGE_NO 0 /* Page number of the header page of
188
an undo log segment */
189
/*-------------------------------------------------------------*/
191
#define TRX_RSEG_SLOT_SIZE 4
193
/* The offset of the rollback segment header on its page */
194
#define TRX_RSEG FSEG_PAGE_DATA
196
/* Transaction rollback segment header */
197
/*-------------------------------------------------------------*/
198
#define TRX_RSEG_MAX_SIZE 0 /* Maximum allowed size for rollback
200
#define TRX_RSEG_HISTORY_SIZE 4 /* Number of file pages occupied
201
by the logs in the history list */
202
#define TRX_RSEG_HISTORY 8 /* The update undo logs for committed
204
#define TRX_RSEG_FSEG_HEADER (8 + FLST_BASE_NODE_SIZE)
205
/* Header for the file segment where
206
this page is placed */
207
#define TRX_RSEG_UNDO_SLOTS (8 + FLST_BASE_NODE_SIZE + FSEG_HEADER_SIZE)
208
/* Undo log segment slots */
209
/*-------------------------------------------------------------*/
212
#include "trx0rseg.ic"