~stewart/drizzle/embedded-innodb-create-select-transaction-arrgh

« back to all changes in this revision

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

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

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   page_no,        /* in: page number of the header */
 
26
        mtr_t*  mtr);           /* in: mtr */
 
27
/**********************************************************************
 
28
Gets a newly created rollback segment header. */
 
29
UNIV_INLINE
 
30
trx_rsegf_t*
 
31
trx_rsegf_get_new(
 
32
/*==============*/
 
33
                                /* out: rollback segment header, page
 
34
                                x-latched */
 
35
        ulint   space,          /* in: space where placed */
 
36
        ulint   page_no,        /* in: page number of the header */
 
37
        mtr_t*  mtr);           /* in: mtr */
 
38
/*******************************************************************
 
39
Gets the file page number of the nth undo log slot. */
 
40
UNIV_INLINE
 
41
ulint
 
42
trx_rsegf_get_nth_undo(
 
43
/*===================*/
 
44
                                /* out: page number of the undo log segment */
 
45
        trx_rsegf_t*    rsegf,  /* in: rollback segment header */
 
46
        ulint           n,      /* in: index of slot */
 
47
        mtr_t*          mtr);   /* in: mtr */
 
48
/*******************************************************************
 
49
Sets the file page number of the nth undo log slot. */
 
50
UNIV_INLINE
 
51
void
 
52
trx_rsegf_set_nth_undo(
 
53
/*===================*/
 
54
        trx_rsegf_t*    rsegf,  /* in: rollback segment header */
 
55
        ulint           n,      /* in: index of slot */
 
56
        ulint           page_no,/* in: page number of the undo log segment */
 
57
        mtr_t*          mtr);   /* in: mtr */
 
58
/********************************************************************
 
59
Looks for a free slot for an undo log segment. */
 
60
UNIV_INLINE
 
61
ulint
 
62
trx_rsegf_undo_find_free(
 
63
/*=====================*/
 
64
                                /* out: slot index or ULINT_UNDEFINED if not
 
65
                                found */
 
66
        trx_rsegf_t*    rsegf,  /* in: rollback segment header */
 
67
        mtr_t*          mtr);   /* in: mtr */
 
68
/**********************************************************************
 
69
Looks for a rollback segment, based on the rollback segment id. */
 
70
 
 
71
trx_rseg_t*
 
72
trx_rseg_get_on_id(
 
73
/*===============*/
 
74
                        /* out: rollback segment */
 
75
        ulint   id);    /* in: rollback segment id */
 
76
/********************************************************************
 
77
Creates a rollback segment header. This function is called only when
 
78
a new rollback segment is created in the database. */
 
79
 
 
80
ulint
 
81
trx_rseg_header_create(
 
82
/*===================*/
 
83
                                /* out: page number of the created segment,
 
84
                                FIL_NULL if fail */
 
85
        ulint   space,          /* in: space id */
 
86
        ulint   max_size,       /* in: max size in pages */
 
87
        ulint*  slot_no,        /* out: rseg id == slot number in trx sys */
 
88
        mtr_t*  mtr);           /* in: mtr */
 
89
/*************************************************************************
 
90
Creates the memory copies for rollback segments and initializes the
 
91
rseg list and array in trx_sys at a database startup. */
 
92
 
 
93
void
 
94
trx_rseg_list_and_array_init(
 
95
/*=========================*/
 
96
        trx_sysf_t*     sys_header,     /* in: trx system header */
 
97
        mtr_t*          mtr);           /* in: mtr */
 
98
/********************************************************************
 
99
Creates a new rollback segment to the database. */
 
100
 
 
101
trx_rseg_t*
 
102
trx_rseg_create(
 
103
/*============*/
 
104
                                /* out: the created segment object, NULL if
 
105
                                fail */
 
106
        ulint   space,          /* in: space id */
 
107
        ulint   max_size,       /* in: max size in pages */
 
108
        ulint*  id,             /* out: rseg id */
 
109
        mtr_t*  mtr);           /* in: mtr */
 
110
 
 
111
 
 
112
/* Number of undo log slots in a rollback segment file copy */
 
113
#define TRX_RSEG_N_SLOTS        1024
 
114
 
 
115
/* Maximum number of transactions supported by a single rollback segment */
 
116
#define TRX_RSEG_MAX_N_TRXS     (TRX_RSEG_N_SLOTS / 2)
 
117
 
 
118
/* The rollback segment memory object */
 
119
struct trx_rseg_struct{
 
120
        /*--------------------------------------------------------*/
 
121
        ulint           id;     /* rollback segment id == the index of
 
122
                                its slot in the trx system file copy */
 
123
        mutex_t         mutex;  /* mutex protecting the fields in this
 
124
                                struct except id; NOTE that the latching
 
125
                                order must always be kernel mutex ->
 
126
                                rseg mutex */
 
127
        ulint           space;  /* space where the rollback segment is
 
128
                                header is placed */
 
129
        ulint           page_no;/* page number of the rollback segment
 
130
                                header */
 
131
        ulint           max_size;/* maximum allowed size in pages */
 
132
        ulint           curr_size;/* current size in pages */
 
133
        /*--------------------------------------------------------*/
 
134
        /* Fields for update undo logs */
 
135
        UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_list;
 
136
                                        /* List of update undo logs */
 
137
        UT_LIST_BASE_NODE_T(trx_undo_t) update_undo_cached;
 
138
                                        /* List of update undo log segments
 
139
                                        cached for fast reuse */
 
140
        /*--------------------------------------------------------*/
 
141
        /* Fields for insert undo logs */
 
142
        UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_list;
 
143
                                        /* List of insert undo logs */
 
144
        UT_LIST_BASE_NODE_T(trx_undo_t) insert_undo_cached;
 
145
                                        /* List of insert undo log segments
 
146
                                        cached for fast reuse */
 
147
        /*--------------------------------------------------------*/
 
148
        ulint           last_page_no;   /* Page number of the last not yet
 
149
                                        purged log header in the history list;
 
150
                                        FIL_NULL if all list purged */
 
151
        ulint           last_offset;    /* Byte offset of the last not yet
 
152
                                        purged log header */
 
153
        dulint          last_trx_no;    /* Transaction number of the last not
 
154
                                        yet purged log */
 
155
        ibool           last_del_marks; /* TRUE if the last not yet purged log
 
156
                                        needs purging */
 
157
        /*--------------------------------------------------------*/
 
158
        UT_LIST_NODE_T(trx_rseg_t) rseg_list;
 
159
                                        /* the list of the rollback segment
 
160
                                        memory objects */
 
161
};
 
162
 
 
163
/* Undo log segment slot in a rollback segment header */
 
164
/*-------------------------------------------------------------*/
 
165
#define TRX_RSEG_SLOT_PAGE_NO   0       /* Page number of the header page of
 
166
                                        an undo log segment */
 
167
/*-------------------------------------------------------------*/
 
168
/* Slot size */
 
169
#define TRX_RSEG_SLOT_SIZE      4
 
170
 
 
171
/* The offset of the rollback segment header on its page */
 
172
#define TRX_RSEG                FSEG_PAGE_DATA
 
173
 
 
174
/* Transaction rollback segment header */
 
175
/*-------------------------------------------------------------*/
 
176
#define TRX_RSEG_MAX_SIZE       0       /* Maximum allowed size for rollback
 
177
                                        segment in pages */
 
178
#define TRX_RSEG_HISTORY_SIZE   4       /* Number of file pages occupied
 
179
                                        by the logs in the history list */
 
180
#define TRX_RSEG_HISTORY        8       /* The update undo logs for committed
 
181
                                        transactions */
 
182
#define TRX_RSEG_FSEG_HEADER    (8 + FLST_BASE_NODE_SIZE)
 
183
                                        /* Header for the file segment where
 
184
                                        this page is placed */
 
185
#define TRX_RSEG_UNDO_SLOTS     (8 + FLST_BASE_NODE_SIZE + FSEG_HEADER_SIZE)
 
186
                                        /* Undo log segment slots */
 
187
/*-------------------------------------------------------------*/
 
188
 
 
189
#ifndef UNIV_NONINL
 
190
#include "trx0rseg.ic"
 
191
#endif
 
192
 
 
193
#endif