~drizzle-trunk/drizzle/development

« back to all changes in this revision

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

  • Committer: Elan Ruusamäe
  • Date: 2008-12-04 19:38:26 UTC
  • mfrom: (644 drizzle)
  • mto: (641.3.10 devel)
  • mto: This revision was merged to the branch mainline in revision 649.
  • Revision ID: glen@haarber.alkohol.ee-20081204193826-xxyhd45ag121pf3z
- pull from trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************************
 
2
Rollback segment
 
3
 
 
4
(c) 1996 Innobase Oy
 
5
 
 
6
Created 3/26/1996 Heikki Tuuri
 
7
*******************************************************/
 
8
 
 
9
#ifndef trx0rseg_h
 
10
#define trx0rseg_h
 
11
 
 
12
#include "univ.i"
 
13
#include "trx0types.h"
 
14
#include "trx0sys.h"
 
15
 
 
16
/**********************************************************************
 
17
Gets a rollback segment header. */
 
18
UNIV_INLINE
 
19
trx_rsegf_t*
 
20
trx_rsegf_get(
 
21
/*==========*/
 
22
                                /* out: rollback segment header, page
 
23
                                x-latched */
 
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. */
 
31
UNIV_INLINE
 
32
trx_rsegf_t*
 
33
trx_rsegf_get_new(
 
34
/*==============*/
 
35
                                /* out: rollback segment header, page
 
36
                                x-latched */
 
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. */
 
44
UNIV_INLINE
 
45
ulint
 
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. */
 
54
UNIV_INLINE
 
55
void
 
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. */
 
64
UNIV_INLINE
 
65
ulint
 
66
trx_rsegf_undo_find_free(
 
67
/*=====================*/
 
68
                                /* out: slot index or ULINT_UNDEFINED if not
 
69
                                found */
 
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. */
 
74
UNIV_INTERN
 
75
trx_rseg_t*
 
76
trx_rseg_get_on_id(
 
77
/*===============*/
 
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. */
 
83
UNIV_INTERN
 
84
ulint
 
85
trx_rseg_header_create(
 
86
/*===================*/
 
87
                                /* out: page number of the created segment,
 
88
                                FIL_NULL if fail */
 
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. */
 
98
UNIV_INTERN
 
99
void
 
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. */
 
106
UNIV_INTERN
 
107
trx_rseg_t*
 
108
trx_rseg_create(
 
109
/*============*/
 
110
                                /* out: the created segment object, NULL if
 
111
                                fail */
 
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 */
 
116
 
 
117
 
 
118
/* Number of undo log slots in a rollback segment file copy */
 
119
#define TRX_RSEG_N_SLOTS        (UNIV_PAGE_SIZE / 16)
 
120
 
 
121
/* Maximum number of transactions supported by a single rollback segment */
 
122
#define TRX_RSEG_MAX_N_TRXS     (TRX_RSEG_N_SLOTS / 2)
 
123
 
 
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 ->
 
132
                                rseg mutex */
 
133
        ulint           space;  /* space where the rollback segment is
 
134
                                header is placed */
 
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
 
138
                                header */
 
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
 
160
                                        purged log header */
 
161
        dulint          last_trx_no;    /* Transaction number of the last not
 
162
                                        yet purged log */
 
163
        ibool           last_del_marks; /* TRUE if the last not yet purged log
 
164
                                        needs purging */
 
165
        /*--------------------------------------------------------*/
 
166
        UT_LIST_NODE_T(trx_rseg_t) rseg_list;
 
167
                                        /* the list of the rollback segment
 
168
                                        memory objects */
 
169
};
 
170
 
 
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
/*-------------------------------------------------------------*/
 
176
/* Slot size */
 
177
#define TRX_RSEG_SLOT_SIZE      4
 
178
 
 
179
/* The offset of the rollback segment header on its page */
 
180
#define TRX_RSEG                FSEG_PAGE_DATA
 
181
 
 
182
/* Transaction rollback segment header */
 
183
/*-------------------------------------------------------------*/
 
184
#define TRX_RSEG_MAX_SIZE       0       /* Maximum allowed size for rollback
 
185
                                        segment in pages */
 
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
 
189
                                        transactions */
 
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
/*-------------------------------------------------------------*/
 
196
 
 
197
#ifndef UNIV_NONINL
 
198
#include "trx0rseg.ic"
 
199
#endif
 
200
 
 
201
#endif