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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1996-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  *
  7.  * $Id: txn.h,v 11.43 2002/08/29 14:22:19 margo Exp $
  8.  */
  9. #ifndef _TXN_H_
  10. #define _TXN_H_
  11. #include "dbinc/xa.h"
  12. /* Operation parameters to the delayed commit processing code. */
  13. typedef enum {
  14. TXN_REMOVE, /* Remove a file. */
  15. TXN_TRADE, /* Trade lockers. */
  16. TXN_TRADED /* Already traded; downgrade lock. */
  17. } TXN_EVENT_T;
  18. struct __db_txnregion; typedef struct __db_txnregion DB_TXNREGION;
  19. /*
  20.  * !!!
  21.  * TXN_MINIMUM = (DB_LOCK_MAXID + 1) but this makes compilers complain.
  22.  */
  23. #define TXN_MINIMUM 0x80000000
  24. #define TXN_MAXIMUM 0xffffffff /* Maximum number of txn ids. */
  25. #define TXN_INVALID 0 /* Invalid transaction ID. */
  26. #define DEF_MAX_TXNS 20 /* Default max transactions. */
  27. /*
  28.  * Internal data maintained in shared memory for each transaction.
  29.  */
  30. typedef struct __txn_detail {
  31. u_int32_t txnid; /* current transaction id
  32.    used to link free list also */
  33. DB_LSN last_lsn; /* last lsn written for this txn */
  34. DB_LSN begin_lsn; /* lsn of begin record */
  35. roff_t parent; /* Offset of transaction's parent. */
  36. #define TXN_RUNNING 1
  37. #define TXN_ABORTED 2
  38. #define TXN_PREPARED 3
  39. #define TXN_COMMITTED 4
  40. u_int32_t status; /* status of the transaction */
  41. #define TXN_COLLECTED 0x1
  42. #define TXN_RESTORED 0x2
  43. u_int32_t flags; /* collected during txn_recover */
  44. SH_TAILQ_ENTRY links; /* free/active list */
  45. #define TXN_XA_ABORTED 1
  46. #define TXN_XA_DEADLOCKED 2
  47. #define TXN_XA_ENDED 3
  48. #define TXN_XA_PREPARED 4
  49. #define TXN_XA_STARTED 5
  50. #define TXN_XA_SUSPENDED 6
  51. u_int32_t xa_status; /* XA status */
  52. /*
  53.  * XID (xid_t) structure: because these fields are logged, the
  54.  * sizes have to be explicit.
  55.  */
  56. u_int8_t xid[XIDDATASIZE]; /* XA global transaction id */
  57. u_int32_t bqual; /* bqual_length from XID */
  58. u_int32_t gtrid; /* gtrid_length from XID */
  59. int32_t format; /* XA format */
  60. } TXN_DETAIL;
  61. /*
  62.  * DB_TXNMGR --
  63.  * The transaction manager encapsulates the transaction system.
  64.  */
  65. struct __db_txnmgr {
  66. /*
  67.  * These fields need to be protected for multi-threaded support.
  68.  *
  69.  * !!!
  70.  * As this structure is allocated in per-process memory, the mutex may need
  71.  * to be stored elsewhere on architectures unable to support mutexes in heap
  72.  * memory, e.g., HP/UX 9.
  73.  */
  74. DB_MUTEX *mutexp; /* Lock list of active transactions
  75.  * (including the content of each
  76.  * TXN_DETAIL structure on the list).
  77.  */
  78. /* List of active transactions. */
  79. TAILQ_HEAD(_chain, __db_txn) txn_chain;
  80. u_int32_t  n_discards; /* Number of txns discarded. */
  81. /* These fields are never updated after creation, and so not protected. */
  82. DB_ENV *dbenv; /* Environment. */
  83. REGINFO  reginfo; /* Region information. */
  84. };
  85. /*
  86.  * DB_TXNREGION --
  87.  * The primary transaction data structure in the shared memory region.
  88.  */
  89. struct __db_txnregion {
  90. u_int32_t maxtxns; /* maximum number of active TXNs */
  91. u_int32_t last_txnid; /* last transaction id given out */
  92. u_int32_t cur_maxid; /* current max unused id. */
  93. DB_LSN last_ckp; /* lsn of the last checkpoint */
  94. time_t time_ckp; /* time of last checkpoint */
  95. u_int32_t logtype; /* type of logging */
  96. u_int32_t locktype; /* lock type */
  97. DB_TXN_STAT stat; /* Statistics for txns. */
  98. #define TXN_IN_RECOVERY  0x01 /* environment is being recovered */
  99. u_int32_t flags;
  100. /* active TXN list */
  101. SH_TAILQ_HEAD(__active) active_txn;
  102. #ifdef HAVE_MUTEX_SYSTEM_RESOURCES
  103. #define TXN_MAINT_SIZE (sizeof(roff_t) * DB_MAX_HANDLES)
  104. roff_t maint_off; /* offset of region maintenance info */
  105. #endif
  106. };
  107. /*
  108.  * Log record types.  Note that these are *not* alphabetical.  This is
  109.  * intentional so that we don't change the meaning of values between
  110.  * software upgrades. EXPECTED, UNEXPECTED, IGNORE, NOTFOUND and OK
  111.  * are used in the
  112.  * txnlist functions.
  113.  */
  114. #define TXN_OK 0
  115. #define TXN_COMMIT 1
  116. #define TXN_PREPARE 2
  117. #define TXN_ABORT 3
  118. #define TXN_NOTFOUND 4
  119. #define TXN_IGNORE 5
  120. #define TXN_EXPECTED 6
  121. #define TXN_UNEXPECTED 7
  122. #include "dbinc_auto/txn_auto.h"
  123. #include "dbinc_auto/txn_ext.h"
  124. #include "dbinc_auto/xa_ext.h"
  125. #endif /* !_TXN_H_ */