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.,
15 51 Franklin 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, which is constant */
139 ulint space
; /*!< space where the rollback segment is
141 ulint zip_size
;/* compressed page size of space
142 in bytes, or 0 for uncompressed spaces */
143 ulint page_no
;/* page number of the rollback segment
145 ulint max_size
;/* maximum allowed size in pages */
146 ulint curr_size
;/* current size in pages */
147 /*--------------------------------------------------------*/
148 /* Fields for update undo logs */
149 UT_LIST_BASE_NODE_T(trx_undo_t
) update_undo_list
;
150 /* List of update undo logs */
151 UT_LIST_BASE_NODE_T(trx_undo_t
) update_undo_cached
;
152 /* List of update undo log segments
153 cached for fast reuse */
154 /*--------------------------------------------------------*/
155 /* Fields for insert undo logs */
156 UT_LIST_BASE_NODE_T(trx_undo_t
) insert_undo_list
;
157 /* List of insert undo logs */
158 UT_LIST_BASE_NODE_T(trx_undo_t
) insert_undo_cached
;
159 /* List of insert undo log segments
160 cached for fast reuse */
161 /*--------------------------------------------------------*/
162 ulint last_page_no
; /*!< Page number of the last not yet
163 purged log header in the history list;
164 FIL_NULL if all list purged */
165 ulint last_offset
; /*!< Byte offset of the last not yet
167 trx_id_t last_trx_no
; /*!< Transaction number of the last not
169 ibool last_del_marks
; /*!< TRUE if the last not yet purged log
171 /*--------------------------------------------------------*/
172 UT_LIST_NODE_T(trx_rseg_t
) rseg_list
;
173 /* the list of the rollback segment
177 /* Undo log segment slot in a rollback segment header */
178 /*-------------------------------------------------------------*/
179 #define TRX_RSEG_SLOT_PAGE_NO 0 /* Page number of the header page of
180 an undo log segment */
181 /*-------------------------------------------------------------*/
183 #define TRX_RSEG_SLOT_SIZE 4
185 /* The offset of the rollback segment header on its page */
186 #define TRX_RSEG FSEG_PAGE_DATA
188 /* Transaction rollback segment header */
189 /*-------------------------------------------------------------*/
190 #define TRX_RSEG_MAX_SIZE 0 /* Maximum allowed size for rollback
192 #define TRX_RSEG_HISTORY_SIZE 4 /* Number of file pages occupied
193 by the logs in the history list */
194 #define TRX_RSEG_HISTORY 8 /* The update undo logs for committed
196 #define TRX_RSEG_FSEG_HEADER (8 + FLST_BASE_NODE_SIZE)
197 /* Header for the file segment where
198 this page is placed */
199 #define TRX_RSEG_UNDO_SLOTS (8 + FLST_BASE_NODE_SIZE + FSEG_HEADER_SIZE)
200 /* Undo log segment slots */
201 /*-------------------------------------------------------------*/
204 #include "trx0rseg.ic"