trx0rseg.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

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