mtr0mtr.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:11k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Mini-transaction buffer
  3. (c) 1995 Innobase Oy
  4. Created 11/26/1995 Heikki Tuuri
  5. *******************************************************/
  6. #ifndef mtr0mtr_h
  7. #define mtr0mtr_h
  8. #include "univ.i"
  9. #include "mem0mem.h"
  10. #include "dyn0dyn.h"
  11. #include "buf0types.h"
  12. #include "sync0rw.h"
  13. #include "ut0byte.h"
  14. #include "mtr0types.h"
  15. #include "page0types.h"
  16. /* Logging modes for a mini-transaction */
  17. #define MTR_LOG_ALL 21 /* default mode: log all operations
  18. modifying disk-based data */
  19. #define MTR_LOG_NONE 22 /* log no operations */
  20. /*#define MTR_LOG_SPACE 23 */ /* log only operations modifying
  21. file space page allocation data
  22. (operations in fsp0fsp.* ) */
  23. #define MTR_LOG_SHORT_INSERTS 24 /* inserts are logged in a shorter
  24. form */
  25. /* Types for the mlock objects to store in the mtr memo; NOTE that the
  26. first 3 values must be RW_S_LATCH, RW_X_LATCH, RW_NO_LATCH */
  27. #define MTR_MEMO_PAGE_S_FIX RW_S_LATCH
  28. #define MTR_MEMO_PAGE_X_FIX RW_X_LATCH
  29. #define MTR_MEMO_BUF_FIX RW_NO_LATCH
  30. #define MTR_MEMO_MODIFY 54
  31. #define MTR_MEMO_S_LOCK 55
  32. #define MTR_MEMO_X_LOCK 56
  33. /* Log item types: we have made them to be of the type 'byte'
  34. for the compiler to warn if val and type parameters are switched
  35. in a call to mlog_write_ulint. NOTE! For 1 - 8 bytes, the
  36. flag value must give the length also! */
  37. #define MLOG_SINGLE_REC_FLAG 128 /* if the mtr contains only
  38. one log record for one page,
  39. i.e., write_initial_log_record
  40. has been called only once,
  41. this flag is ORed to the type
  42. of that first log record */
  43. #define MLOG_1BYTE ((byte)1)  /* one byte is written */
  44. #define MLOG_2BYTES ((byte)2) /* 2 bytes ... */
  45. #define MLOG_4BYTES ((byte)4) /* 4 bytes ... */
  46. #define MLOG_8BYTES ((byte)8) /* 8 bytes ... */
  47. #define MLOG_REC_INSERT ((byte)9) /* record insert */
  48. #define MLOG_REC_CLUST_DELETE_MARK ((byte)10)  /* mark clustered index record
  49. deleted */
  50. #define MLOG_REC_SEC_DELETE_MARK ((byte)11)  /* mark secondary index record
  51. deleted */
  52. #define MLOG_REC_UPDATE_IN_PLACE ((byte)13) /* update of a record,
  53. preserves record field sizes */
  54. #define MLOG_REC_DELETE ((byte)14) /* delete a record from a
  55. page */
  56. #define MLOG_LIST_END_DELETE  ((byte)15) /* delete record list end on
  57. index page */
  58. #define MLOG_LIST_START_DELETE  ((byte)16)  /* delete record list start on
  59. index page */
  60. #define MLOG_LIST_END_COPY_CREATED ((byte)17)  /* copy record list end to a
  61. new created index page */
  62. #define MLOG_PAGE_REORGANIZE  ((byte)18) /* reorganize an index page */
  63. #define MLOG_PAGE_CREATE  ((byte)19) /* create an index page */
  64. #define MLOG_UNDO_INSERT  ((byte)20) /* insert entry in an undo
  65. log */
  66. #define MLOG_UNDO_ERASE_END ((byte)21) /* erase an undo log page end */
  67. #define MLOG_UNDO_INIT  ((byte)22) /* initialize a page in an
  68. undo log */
  69. #define MLOG_UNDO_HDR_DISCARD ((byte)23) /* discard an update undo log
  70. header */
  71. #define MLOG_UNDO_HDR_REUSE ((byte)24) /* reuse an insert undo log
  72. header */
  73. #define MLOG_UNDO_HDR_CREATE ((byte)25) /* create an undo log header */
  74. #define MLOG_REC_MIN_MARK ((byte)26) /* mark an index record as the
  75. predefined minimum record */
  76. #define MLOG_IBUF_BITMAP_INIT ((byte)27) /* initialize an ibuf bitmap
  77. page */
  78. /*#define MLOG_FULL_PAGE ((byte)28) full contents of a page */
  79. #define MLOG_INIT_FILE_PAGE ((byte)29) /* this means that a file page
  80. is taken into use and the prior
  81. contents of the page should be
  82. ignored: in recovery we must
  83. not trust the lsn values stored
  84. to the file page */
  85. #define MLOG_WRITE_STRING ((byte)30) /* write a string to a page */
  86. #define MLOG_MULTI_REC_END ((byte)31) /* if a single mtr writes
  87. log records for several pages,
  88. this log record ends the
  89. sequence of these records */
  90. #define MLOG_DUMMY_RECORD ((byte)32) /* dummy log record used to
  91. pad a log block full */
  92. #define MLOG_FILE_CREATE ((byte)33) /* log record about an .ibd
  93. file creation */
  94. #define MLOG_FILE_RENAME ((byte)34) /* log record about an .ibd
  95. file rename */
  96. #define MLOG_FILE_DELETE ((byte)35) /* log record about an .ibd
  97. file deletion */
  98. #define MLOG_BIGGEST_TYPE ((byte)35)  /* biggest value (used in
  99. asserts) */
  100. /*******************************************************************
  101. Starts a mini-transaction and creates a mini-transaction handle 
  102. and buffer in the memory buffer given by the caller. */
  103. UNIV_INLINE
  104. mtr_t*
  105. mtr_start(
  106. /*======*/
  107. /* out: mtr buffer which also acts as
  108. the mtr handle */
  109. mtr_t* mtr); /* in: memory buffer for the mtr buffer */
  110. /*******************************************************************
  111. Starts a mini-transaction and creates a mini-transaction handle 
  112. and buffer in the memory buffer given by the caller. */
  113. mtr_t*
  114. mtr_start_noninline(
  115. /*================*/
  116. /* out: mtr buffer which also acts as
  117. the mtr handle */
  118. mtr_t* mtr); /* in: memory buffer for the mtr buffer */
  119. /*******************************************************************
  120. Commits a mini-transaction. */
  121. void
  122. mtr_commit(
  123. /*=======*/
  124. mtr_t* mtr); /* in: mini-transaction */
  125. /**************************************************************
  126. Sets and returns a savepoint in mtr. */
  127. UNIV_INLINE
  128. ulint
  129. mtr_set_savepoint(
  130. /*==============*/
  131. /* out: savepoint */
  132. mtr_t* mtr); /* in: mtr */
  133. /**************************************************************
  134. Releases the latches stored in an mtr memo down to a savepoint.
  135. NOTE! The mtr must not have made changes to buffer pages after the
  136. savepoint, as these can be handled only by mtr_commit. */
  137. void
  138. mtr_rollback_to_savepoint(
  139. /*======================*/
  140. mtr_t* mtr, /* in: mtr */
  141. ulint savepoint); /* in: savepoint */
  142. /**************************************************************
  143. Releases the (index tree) s-latch stored in an mtr memo after a
  144. savepoint. */
  145. UNIV_INLINE
  146. void
  147. mtr_release_s_latch_at_savepoint(
  148. /*=============================*/
  149. mtr_t* mtr, /* in: mtr */
  150. ulint savepoint, /* in: savepoint */
  151. rw_lock_t*  lock); /* in: latch to release */
  152. /*******************************************************************
  153. Gets the logging mode of a mini-transaction. */
  154. UNIV_INLINE
  155. ulint
  156. mtr_get_log_mode(
  157. /*=============*/
  158. /* out: logging mode: MTR_LOG_NONE, ... */
  159. mtr_t* mtr); /* in: mtr */
  160. /*******************************************************************
  161. Changes the logging mode of a mini-transaction. */
  162. UNIV_INLINE
  163. ulint
  164. mtr_set_log_mode(
  165. /*=============*/
  166. /* out: old mode */
  167. mtr_t* mtr, /* in: mtr */
  168. ulint mode); /* in: logging mode: MTR_LOG_NONE, ... */
  169. /************************************************************
  170. Reads 1 - 4 bytes from a file page buffered in the buffer pool. */
  171. ulint
  172. mtr_read_ulint(
  173. /*===========*/
  174. /* out: value read */
  175. byte* ptr, /* in: pointer from where to read */
  176. ulint type, /* in: MLOG_1BYTE, MLOG_2BYTES, MLOG_4BYTES */
  177. mtr_t* mtr); /* in: mini-transaction handle */
  178. /************************************************************
  179. Reads 8 bytes from a file page buffered in the buffer pool. */
  180. dulint
  181. mtr_read_dulint(
  182. /*===========*/
  183. /* out: value read */
  184. byte* ptr, /* in: pointer from where to read */
  185. mtr_t* mtr); /* in: mini-transaction handle */
  186. /*************************************************************************
  187. This macro locks an rw-lock in s-mode. */
  188. #define mtr_s_lock(B, MTR) mtr_s_lock_func((B), __FILE__, __LINE__,
  189. (MTR))
  190. /*************************************************************************
  191. This macro locks an rw-lock in x-mode. */
  192. #define mtr_x_lock(B, MTR) mtr_x_lock_func((B), __FILE__, __LINE__,
  193. (MTR))
  194. /*************************************************************************
  195. NOTE! Use the macro above!
  196. Locks a lock in s-mode. */
  197. UNIV_INLINE
  198. void
  199. mtr_s_lock_func(
  200. /*============*/
  201. rw_lock_t* lock, /* in: rw-lock */
  202. const char* file, /* in: file name */
  203. ulint line, /* in: line number */
  204. mtr_t* mtr); /* in: mtr */
  205. /*************************************************************************
  206. NOTE! Use the macro above!
  207. Locks a lock in x-mode. */
  208. UNIV_INLINE
  209. void
  210. mtr_x_lock_func(
  211. /*============*/
  212. rw_lock_t* lock, /* in: rw-lock */
  213. const char* file, /* in: file name */
  214. ulint line, /* in: line number */
  215. mtr_t* mtr); /* in: mtr */
  216. /*******************************************************
  217. Releases an object in the memo stack. */
  218. void
  219. mtr_memo_release(
  220. /*=============*/
  221. mtr_t* mtr, /* in: mtr */
  222. void* object, /* in: object */
  223. ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */
  224. /**************************************************************
  225. Checks if memo contains the given item. */
  226. UNIV_INLINE
  227. ibool
  228. mtr_memo_contains(
  229. /*==============*/
  230. /* out: TRUE if contains */
  231. mtr_t* mtr, /* in: mtr */
  232. void* object, /* in: object to search */
  233. ulint type); /* in: type of object */
  234. /*************************************************************
  235. Prints info of an mtr handle. */
  236. void
  237. mtr_print(
  238. /*======*/
  239. mtr_t* mtr); /* in: mtr */
  240. /*######################################################################*/
  241. #define MTR_BUF_MEMO_SIZE 200 /* number of slots in memo */
  242. /*******************************************************************
  243. Returns the log object of a mini-transaction buffer. */
  244. UNIV_INLINE
  245. dyn_array_t*
  246. mtr_get_log(
  247. /*========*/
  248. /* out: log */
  249. mtr_t* mtr); /* in: mini-transaction */
  250. /*******************************************************
  251. Pushes an object to an mtr memo stack. */
  252. UNIV_INLINE
  253. void
  254. mtr_memo_push(
  255. /*==========*/
  256. mtr_t* mtr, /* in: mtr */
  257. void* object, /* in: object */
  258. ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */
  259. /* Type definition of a mini-transaction memo stack slot. */
  260. typedef struct mtr_memo_slot_struct mtr_memo_slot_t;
  261. struct mtr_memo_slot_struct{
  262. ulint type; /* type of the stored object (MTR_MEMO_S_LOCK, ...) */
  263. void* object; /* pointer to the object */
  264. };
  265. /* Mini-transaction handle and buffer */
  266. struct mtr_struct{
  267. ulint state; /* MTR_ACTIVE, MTR_COMMITTING, MTR_COMMITTED */
  268. dyn_array_t memo; /* memo stack for locks etc. */
  269. dyn_array_t log; /* mini-transaction log */
  270. ibool modifications;
  271. /* TRUE if the mtr made modifications to
  272. buffer pool pages */
  273. ulint n_log_recs;
  274. /* count of how many page initial log records
  275. have been written to the mtr log */
  276. ulint log_mode; /* specifies which operations should be
  277. logged; default value MTR_LOG_ALL */
  278. dulint start_lsn;/* start lsn of the possible log entry for
  279. this mtr */
  280. dulint end_lsn;/* end lsn of the possible log entry for
  281. this mtr */
  282. ulint magic_n;
  283. };
  284. #define MTR_MAGIC_N 54551
  285. #define MTR_ACTIVE 12231
  286. #define MTR_COMMITTING 56456
  287. #define MTR_COMMITTED 34676
  288. #ifndef UNIV_NONINL
  289. #include "mtr0mtr.ic"
  290. #endif
  291. #endif