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* slot_no, /*!< out: 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 */
126
/* Number of undo log slots in a rollback segment file copy */
127
#define TRX_RSEG_N_SLOTS (UNIV_PAGE_SIZE / 16)
129
/* Maximum number of transactions supported by a single rollback segment */
130
#define TRX_RSEG_MAX_N_TRXS (TRX_RSEG_N_SLOTS / 2)
132
/* The rollback segment memory object */
133
struct trx_rseg_struct{
134
/*--------------------------------------------------------*/
135
ulint id; /*!< rollback segment id == the index of
136
its slot in the trx system file copy */
137
mutex_t mutex; /*!< mutex protecting the fields in this
138
struct except id; NOTE that the latching
139
order must always be kernel mutex ->
141
ulint space; /*!< space where the rollback segment is
143
ulint zip_size;/* compressed page size of space
144
in bytes, or 0 for uncompressed spaces */
145
ulint page_no;/* page number of the rollback segment
147
ulint max_size;/* maximum allowed size in pages */
148
ulint curr_size;/* current size in pages */
149
/*--------------------------------------------------------*/
150
/* Fields for update undo logs */
151
UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_list;
152
/* List of update undo logs */
153
UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_cached;
154
/* List of update undo log segments
155
cached for fast reuse */
156
/*--------------------------------------------------------*/
157
/* Fields for insert undo logs */
158
UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_list;
159
/* List of insert undo logs */
160
UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_cached;
161
/* List of insert undo log segments
162
cached for fast reuse */
163
/*--------------------------------------------------------*/
164
ulint last_page_no; /*!< Page number of the last not yet
165
purged log header in the history list;
166
FIL_NULL if all list purged */
167
ulint last_offset; /*!< Byte offset of the last not yet
169
trx_id_t last_trx_no; /*!< Transaction number of the last not
171
ibool last_del_marks; /*!< TRUE if the last not yet purged log
173
/*--------------------------------------------------------*/
174
UT_LIST_NODE_T(trx_rseg_t) rseg_list;
175
/* the list of the rollback segment
179
/* Undo log segment slot in a rollback segment header */
180
/*-------------------------------------------------------------*/
181
#define TRX_RSEG_SLOT_PAGE_NO 0 /* Page number of the header page of
182
an undo log segment */
183
/*-------------------------------------------------------------*/
185
#define TRX_RSEG_SLOT_SIZE 4
187
/* The offset of the rollback segment header on its page */
188
#define TRX_RSEG FSEG_PAGE_DATA
190
/* Transaction rollback segment header */
191
/*-------------------------------------------------------------*/
192
#define TRX_RSEG_MAX_SIZE 0 /* Maximum allowed size for rollback
194
#define TRX_RSEG_HISTORY_SIZE 4 /* Number of file pages occupied
195
by the logs in the history list */
196
#define TRX_RSEG_HISTORY 8 /* The update undo logs for committed
198
#define TRX_RSEG_FSEG_HEADER (8 + FLST_BASE_NODE_SIZE)
199
/* Header for the file segment where
200
this page is placed */
201
#define TRX_RSEG_UNDO_SLOTS (8 + FLST_BASE_NODE_SIZE + FSEG_HEADER_SIZE)
202
/* Undo log segment slots */
203
/*-------------------------------------------------------------*/
206
#include "trx0rseg.ic"