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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Transaction system
  3. (c) 1996 Innobase Oy
  4. Created 3/26/1996 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef trx0sys_h
  7. #define trx0sys_h
  8. #include "univ.i"
  9. #include "trx0types.h"
  10. #include "mtr0mtr.h"
  11. #include "mtr0log.h"
  12. #include "ut0byte.h"
  13. #include "mem0mem.h"
  14. #include "sync0sync.h"
  15. #include "ut0lst.h"
  16. #include "buf0buf.h"
  17. #include "fil0fil.h"
  18. #include "fut0lst.h"
  19. #include "fsp0fsp.h"
  20. #include "read0types.h"
  21. /* The transaction system */
  22. extern trx_sys_t* trx_sys;
  23. /*******************************************************************
  24. Checks if a page address is the trx sys header page. */
  25. UNIV_INLINE
  26. ibool
  27. trx_sys_hdr_page(
  28. /*=============*/
  29. /* out: TRUE if trx sys header page */
  30. ulint space, /* in: space */
  31. ulint page_no);/* in: page number */
  32. /*********************************************************************
  33. Creates and initializes the central memory structures for the transaction
  34. system. This is called when the database is started. */
  35. void
  36. trx_sys_init_at_db_start(void);
  37. /*==========================*/
  38. /*********************************************************************
  39. Creates and initializes the transaction system at the database creation. */
  40. void
  41. trx_sys_create(void);
  42. /*================*/
  43. /********************************************************************
  44. Looks for a free slot for a rollback segment in the trx system file copy. */
  45. ulint
  46. trx_sysf_rseg_find_free(
  47. /*====================*/
  48. /* out: slot index or ULINT_UNDEFINED
  49. if not found */
  50. mtr_t* mtr); /* in: mtr */
  51. /*******************************************************************
  52. Gets the pointer in the nth slot of the rseg array. */
  53. UNIV_INLINE
  54. trx_rseg_t*
  55. trx_sys_get_nth_rseg(
  56. /*=================*/
  57. /* out: pointer to rseg object, NULL if slot
  58. not in use */
  59. trx_sys_t* sys, /* in: trx system */
  60. ulint n); /* in: index of slot */
  61. /*******************************************************************
  62. Sets the pointer in the nth slot of the rseg array. */
  63. UNIV_INLINE
  64. void
  65. trx_sys_set_nth_rseg(
  66. /*=================*/
  67. trx_sys_t* sys, /* in: trx system */
  68. ulint n, /* in: index of slot */
  69. trx_rseg_t* rseg); /* in: pointer to rseg object, NULL if slot
  70. not in use */
  71. /**************************************************************************
  72. Gets a pointer to the transaction system file copy and x-locks its page. */
  73. UNIV_INLINE
  74. trx_sysf_t*
  75. trx_sysf_get(
  76. /*=========*/
  77. /* out: pointer to system file copy, page x-locked */
  78. mtr_t* mtr); /* in: mtr */
  79. /*********************************************************************
  80. Gets the space of the nth rollback segment slot in the trx system
  81. file copy. */
  82. UNIV_INLINE
  83. ulint
  84. trx_sysf_rseg_get_space(
  85. /*====================*/
  86. /* out: space id */
  87. trx_sysf_t* sys_header, /* in: trx sys file copy */
  88. ulint i, /* in: slot index == rseg id */
  89. mtr_t* mtr); /* in: mtr */
  90. /*********************************************************************
  91. Gets the page number of the nth rollback segment slot in the trx system
  92. file copy. */
  93. UNIV_INLINE
  94. ulint
  95. trx_sysf_rseg_get_page_no(
  96. /*======================*/
  97. /* out: page number, FIL_NULL
  98. if slot unused */
  99. trx_sysf_t* sys_header, /* in: trx sys file copy */
  100. ulint i, /* in: slot index == rseg id */
  101. mtr_t* mtr); /* in: mtr */
  102. /*********************************************************************
  103. Sets the space id of the nth rollback segment slot in the trx system
  104. file copy. */
  105. UNIV_INLINE
  106. void
  107. trx_sysf_rseg_set_space(
  108. /*====================*/
  109. trx_sysf_t* sys_header, /* in: trx sys file copy */
  110. ulint i, /* in: slot index == rseg id */
  111. ulint space, /* in: space id */
  112. mtr_t* mtr); /* in: mtr */
  113. /*********************************************************************
  114. Sets the page number of the nth rollback segment slot in the trx system
  115. file copy. */
  116. UNIV_INLINE
  117. void
  118. trx_sysf_rseg_set_page_no(
  119. /*======================*/
  120. trx_sysf_t* sys_header, /* in: trx sys file copy */
  121. ulint i, /* in: slot index == rseg id */
  122. ulint page_no, /* in: page number, FIL_NULL if
  123. the slot is reset to unused */
  124. mtr_t* mtr); /* in: mtr */
  125. /*********************************************************************
  126. Allocates a new transaction id. */
  127. UNIV_INLINE
  128. dulint
  129. trx_sys_get_new_trx_id(void);
  130. /*========================*/
  131. /* out: new, allocated trx id */
  132. /*********************************************************************
  133. Allocates a new transaction number. */
  134. UNIV_INLINE
  135. dulint
  136. trx_sys_get_new_trx_no(void);
  137. /*========================*/
  138. /* out: new, allocated trx number */
  139. /*********************************************************************
  140. Writes a trx id to an index page. In case that the id size changes in
  141. some future version, this function should be used instead of
  142. mach_write_... */
  143. UNIV_INLINE
  144. void
  145. trx_write_trx_id(
  146. /*=============*/
  147. byte* ptr, /* in: pointer to memory where written */
  148. dulint id); /* in: id */
  149. /*********************************************************************
  150. Reads a trx id from an index page. In case that the id size changes in
  151. some future version, this function should be used instead of
  152. mach_read_... */
  153. UNIV_INLINE
  154. dulint
  155. trx_read_trx_id(
  156. /*============*/
  157. /* out: id */
  158. byte* ptr); /* in: pointer to memory from where to read */
  159. /********************************************************************
  160. Looks for the trx handle with the given id in trx_list. */
  161. UNIV_INLINE
  162. trx_t*
  163. trx_get_on_id(
  164. /*==========*/
  165. /* out: the trx handle or NULL if not found */
  166. dulint trx_id); /* in: trx id to search for */
  167. /********************************************************************
  168. Returns the minumum trx id in trx list. This is the smallest id for which
  169. the trx can possibly be active. (But, you must look at the trx->conc_state to
  170. find out if the minimum trx id transaction itself is active, or already
  171. committed.) */
  172. UNIV_INLINE
  173. dulint
  174. trx_list_get_min_trx_id(void);
  175. /*=========================*/
  176. /* out: the minimum trx id, or trx_sys->max_trx_id
  177. if the trx list is empty */
  178. /********************************************************************
  179. Checks if a transaction with the given id is active. */
  180. UNIV_INLINE
  181. ibool
  182. trx_is_active(
  183. /*==========*/
  184. /* out: TRUE if active */
  185. dulint trx_id);/* in: trx id of the transaction */
  186. /********************************************************************
  187. Checks that trx is in the trx list. */
  188. ibool
  189. trx_in_trx_list(
  190. /*============*/
  191. /* out: TRUE if is in */
  192. trx_t* in_trx);/* in: trx */
  193. /* The automatically created system rollback segment has this id */
  194. #define TRX_SYS_SYSTEM_RSEG_ID 0
  195. /* Max number of rollback segments: the number of segment specification slots
  196. in the transaction system array; rollback segment id must fit in one byte,
  197. therefore 256 */
  198. #define TRX_SYS_N_RSEGS 256
  199. /* Space id and page no where the trx system file copy resides */
  200. #define TRX_SYS_SPACE 0 /* the SYSTEM tablespace */
  201. #define TRX_SYS_PAGE_NO FSP_TRX_SYS_PAGE_NO
  202. /* The offset of the transaction system header on the page */
  203. #define TRX_SYS FSEG_PAGE_DATA
  204. /* Transaction system header; protected by trx_sys->mutex */
  205. /*-------------------------------------------------------------*/
  206. #define TRX_SYS_TRX_ID_STORE 0 /* The maximum trx id or trx number
  207. modulo TRX_SYS_TRX_ID_UPDATE_MARGIN
  208. written to a file page by any
  209. transaction; the assignment of
  210. transaction ids continues from this
  211. number rounded up by .._MARGIN plus
  212. .._MARGIN when the database is
  213. started */
  214. #define TRX_SYS_FSEG_HEADER 8 /* segment header for the tablespace
  215. segment the trx system is created
  216. into */
  217. #define TRX_SYS_RSEGS (8 + FSEG_HEADER_SIZE)
  218. /* the start of the array of rollback
  219. segment specification slots */
  220. /*-------------------------------------------------------------*/
  221. /* The transaction system central memory data structure; protected by the
  222. kernel mutex */
  223. struct trx_sys_struct{
  224. dulint max_trx_id; /* The smallest number not yet
  225. assigned as a transaction id or
  226. transaction number */
  227. UT_LIST_BASE_NODE_T(trx_t) trx_list;
  228. /* List of active and committed in
  229. memory transactions, sorted on trx id,
  230. biggest first */
  231. UT_LIST_BASE_NODE_T(trx_rseg_t) rseg_list;
  232. /* List of rollback segment objects */
  233. trx_rseg_t* latest_rseg; /* Latest rollback segment in the
  234. round-robin assignment of rollback
  235. segments to transactions */
  236. trx_rseg_t* rseg_array[TRX_SYS_N_RSEGS];
  237. /* Pointer array to rollback segments;
  238. NULL if slot not in use */
  239. UT_LIST_BASE_NODE_T(read_view_t) view_list;
  240. /* List of read views sorted on trx no,
  241. biggest first */
  242. };
  243. /* When a trx id which is zero modulo this number (which must be a power of
  244. two) is assigned, the field TRX_SYS_TRX_ID_STORE on the transaction system
  245. page is updated */
  246. #define TRX_SYS_TRX_ID_WRITE_MARGIN 256
  247. #ifndef UNIV_NONINL
  248. #include "trx0sys.ic"
  249. #endif
  250. #endif