~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/include/trx0rseg.h

  • Committer: Vijay Samuel
  • Date: 2010-09-10 21:03:37 UTC
  • mto: (1757.1.2 build)
  • mto: This revision was merged to the branch mainline in revision 1758.
  • Revision ID: vijay@vijay-20100910210337-rf7c2ymawtqj6tkv
Merge added utf 8 tamil test case suite and test case for creating a database in tamil.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
 
3
 
Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved.
4
 
 
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.
8
 
 
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.
12
 
 
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
16
 
 
17
 
*****************************************************************************/
18
 
 
19
 
/**************************************************//**
20
 
@file include/trx0rseg.h
21
 
Rollback segment
22
 
 
23
 
Created 3/26/1996 Heikki Tuuri
24
 
*******************************************************/
25
 
 
26
 
#ifndef trx0rseg_h
27
 
#define trx0rseg_h
28
 
 
29
 
#include "univ.i"
30
 
#include "trx0types.h"
31
 
#include "trx0sys.h"
32
 
 
33
 
/******************************************************************//**
34
 
Gets a rollback segment header.
35
 
@return rollback segment header, page x-latched */
36
 
UNIV_INLINE
37
 
trx_rsegf_t*
38
 
trx_rsegf_get(
39
 
/*==========*/
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 */
48
 
UNIV_INLINE
49
 
trx_rsegf_t*
50
 
trx_rsegf_get_new(
51
 
/*==============*/
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 */
60
 
UNIV_INLINE
61
 
ulint
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. */
69
 
UNIV_INLINE
70
 
void
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 */
80
 
UNIV_INLINE
81
 
ulint
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 */
89
 
UNIV_INTERN
90
 
trx_rseg_t*
91
 
trx_rseg_get_on_id(
92
 
/*===============*/
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 */
98
 
UNIV_INTERN
99
 
ulint
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. */
111
 
UNIV_INTERN
112
 
void
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. */
119
 
UNIV_INTERN
120
 
void
121
 
trx_rseg_mem_free(
122
 
/*==============*/
123
 
        trx_rseg_t*     rseg);          /* in, own: instance to free */
124
 
 
125
 
 
126
 
/* Number of undo log slots in a rollback segment file copy */
127
 
#define TRX_RSEG_N_SLOTS        (UNIV_PAGE_SIZE / 16)
128
 
 
129
 
/* Maximum number of transactions supported by a single rollback segment */
130
 
#define TRX_RSEG_MAX_N_TRXS     (TRX_RSEG_N_SLOTS / 2)
131
 
 
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 ->
140
 
                                rseg mutex */
141
 
        ulint           space;  /*!< space where the rollback segment is
142
 
                                header is placed */
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
146
 
                                header */
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
168
 
                                        purged log header */
169
 
        trx_id_t        last_trx_no;    /*!< Transaction number of the last not
170
 
                                        yet purged log */
171
 
        ibool           last_del_marks; /*!< TRUE if the last not yet purged log
172
 
                                        needs purging */
173
 
        /*--------------------------------------------------------*/
174
 
        UT_LIST_NODE_T(trx_rseg_t) rseg_list;
175
 
                                        /* the list of the rollback segment
176
 
                                        memory objects */
177
 
};
178
 
 
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
 
/*-------------------------------------------------------------*/
184
 
/* Slot size */
185
 
#define TRX_RSEG_SLOT_SIZE      4
186
 
 
187
 
/* The offset of the rollback segment header on its page */
188
 
#define TRX_RSEG                FSEG_PAGE_DATA
189
 
 
190
 
/* Transaction rollback segment header */
191
 
/*-------------------------------------------------------------*/
192
 
#define TRX_RSEG_MAX_SIZE       0       /* Maximum allowed size for rollback
193
 
                                        segment in pages */
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
197
 
                                        transactions */
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
 
/*-------------------------------------------------------------*/
204
 
 
205
 
#ifndef UNIV_NONINL
206
 
#include "trx0rseg.ic"
207
 
#endif
208
 
 
209
 
#endif