~drizzle-trunk/drizzle/development

« back to all changes in this revision

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

  • Committer: Daniel Nichter
  • Date: 2011-10-23 16:01:37 UTC
  • mto: This revision was merged to the branch mainline in revision 2448.
  • Revision ID: daniel@percona.com-20111023160137-7ac3blgz8z4tf8za
Add Administration Getting Started and Logging.  Capitalize SQL clause keywords.

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
 
#include "srv0srv.h"
10
 
 
11
 
/**********************************************************************
12
 
Gets a rollback segment header. */
13
 
UNIV_INLINE
14
 
trx_rsegf_t*
15
 
trx_rsegf_get(
16
 
/*==========*/
17
 
                                /* out: rollback segment header, page
18
 
                                x-latched */
19
 
        ulint   space,          /* in: space where placed */
20
 
        ulint   zip_size,       /* in: compressed page size in bytes
21
 
                                or 0 for uncompressed pages */
22
 
        ulint   page_no,        /* in: page number of the header */
23
 
        mtr_t*  mtr)            /* in: mtr */
24
 
{
25
 
        buf_block_t*    block;
26
 
        trx_rsegf_t*    header;
27
 
 
28
 
        block = buf_page_get(space, zip_size, page_no, RW_X_LATCH, mtr);
29
 
#ifdef UNIV_SYNC_DEBUG
30
 
        buf_block_dbg_add_level(block, SYNC_RSEG_HEADER);
31
 
#endif /* UNIV_SYNC_DEBUG */
32
 
        header = TRX_RSEG + buf_block_get_frame(block);
33
 
 
34
 
        return(header);
35
 
}
36
 
 
37
 
/**********************************************************************
38
 
Gets a newly created rollback segment header. */
39
 
UNIV_INLINE
40
 
trx_rsegf_t*
41
 
trx_rsegf_get_new(
42
 
/*==============*/
43
 
                                /* out: rollback segment header, page
44
 
                                x-latched */
45
 
        ulint   space,          /* in: space where placed */
46
 
        ulint   zip_size,       /* in: compressed page size in bytes
47
 
                                or 0 for uncompressed pages */
48
 
        ulint   page_no,        /* in: page number of the header */
49
 
        mtr_t*  mtr)            /* in: mtr */
50
 
{
51
 
        buf_block_t*    block;
52
 
        trx_rsegf_t*    header;
53
 
 
54
 
        block = buf_page_get(space, zip_size, page_no, RW_X_LATCH, mtr);
55
 
#ifdef UNIV_SYNC_DEBUG
56
 
        buf_block_dbg_add_level(block, SYNC_RSEG_HEADER_NEW);
57
 
#endif /* UNIV_SYNC_DEBUG */
58
 
        header = TRX_RSEG + buf_block_get_frame(block);
59
 
 
60
 
        return(header);
61
 
}
62
 
 
63
 
/*******************************************************************
64
 
Gets the file page number of the nth undo log slot. */
65
 
UNIV_INLINE
66
 
ulint
67
 
trx_rsegf_get_nth_undo(
68
 
/*===================*/
69
 
                                /* out: page number of the undo log segment */
70
 
        trx_rsegf_t*    rsegf,  /* in: rollback segment header */
71
 
        ulint           n,      /* in: index of slot */
72
 
        mtr_t*          mtr)    /* in: mtr */
73
 
{
74
 
        if (UNIV_UNLIKELY(n >= TRX_RSEG_N_SLOTS)) {
75
 
                fprintf(stderr,
76
 
                        "InnoDB: Error: trying to get slot %lu of rseg\n",
77
 
                        (ulong) n);
78
 
                ut_error;
79
 
        }
80
 
 
81
 
        return(mtr_read_ulint(rsegf + TRX_RSEG_UNDO_SLOTS
82
 
                              + n * TRX_RSEG_SLOT_SIZE, MLOG_4BYTES, mtr));
83
 
}
84
 
 
85
 
/*******************************************************************
86
 
Sets the file page number of the nth undo log slot. */
87
 
UNIV_INLINE
88
 
void
89
 
trx_rsegf_set_nth_undo(
90
 
/*===================*/
91
 
        trx_rsegf_t*    rsegf,  /* in: rollback segment header */
92
 
        ulint           n,      /* in: index of slot */
93
 
        ulint           page_no,/* in: page number of the undo log segment */
94
 
        mtr_t*          mtr)    /* in: mtr */
95
 
{
96
 
        if (UNIV_UNLIKELY(n >= TRX_RSEG_N_SLOTS)) {
97
 
                fprintf(stderr,
98
 
                        "InnoDB: Error: trying to set slot %lu of rseg\n",
99
 
                        (ulong) n);
100
 
                ut_error;
101
 
        }
102
 
 
103
 
        mlog_write_ulint(rsegf + TRX_RSEG_UNDO_SLOTS + n * TRX_RSEG_SLOT_SIZE,
104
 
                         page_no, MLOG_4BYTES, mtr);
105
 
}
106
 
 
107
 
/********************************************************************
108
 
Looks for a free slot for an undo log segment. */
109
 
UNIV_INLINE
110
 
ulint
111
 
trx_rsegf_undo_find_free(
112
 
/*=====================*/
113
 
                                /* out: slot index or ULINT_UNDEFINED if not
114
 
                                found */
115
 
        trx_rsegf_t*    rsegf,  /* in: rollback segment header */
116
 
        mtr_t*          mtr)    /* in: mtr */
117
 
{
118
 
        ulint           i;
119
 
        ulint           page_no;
120
 
 
121
 
        for (i = 0; i < TRX_RSEG_N_SLOTS; i++) {
122
 
 
123
 
                page_no = trx_rsegf_get_nth_undo(rsegf, i, mtr);
124
 
 
125
 
                if (page_no == FIL_NULL) {
126
 
 
127
 
                        return(i);
128
 
                }
129
 
        }
130
 
 
131
 
        return(ULINT_UNDEFINED);
132
 
}