summary refs log tree commit diff
path: root/db2/include/txn.h
diff options
context:
space:
mode:
Diffstat (limited to 'db2/include/txn.h')
-rw-r--r--db2/include/txn.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/db2/include/txn.h b/db2/include/txn.h
new file mode 100644
index 0000000000..f4e0999b36
--- /dev/null
+++ b/db2/include/txn.h
@@ -0,0 +1,112 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996, 1997
+ *	Sleepycat Software.  All rights reserved.
+ *
+ *	@(#)txn.h	10.6 (Sleepycat) 7/29/97
+ */
+#ifndef	_TXN_H_
+#define	_TXN_H_
+
+/*
+ * The name of the transaction shared memory region is DEFAULT_TXN_FILE and
+ * the region is always created group RW of the group owning the directory.
+ */
+#define	DEFAULT_TXN_FILE	"__db_txn.share"
+#define	TXN_INVALID           	0xffffffff /* Maximum number of txn ids. */
+#define TXN_MINIMUM		0x80000000 /* First transaction id */
+
+/*
+ * Transaction type declarations.
+ */
+
+/*
+ * Internal data maintained in shared memory for each transaction.
+ */
+typedef struct __txn_detail {
+	u_int32_t txnid;		/* current transaction id
+					   used to link free list also */
+	DB_LSN	last_lsn;		/* last lsn written for this txn */
+	DB_LSN	begin_lsn;		/* lsn of begin record */
+	size_t	last_lock;		/* offset in lock region of last lock
+					   for this transaction. */
+#define	TXN_UNALLOC	0
+#define	TXN_RUNNING	1
+#define	TXN_ABORTED	2
+#define	TXN_PREPARED	3
+	u_int32_t status;		/* status of the transaction */
+} TXN_DETAIL;
+
+/*
+ * The transaction manager encapsulates the transaction system.  It contains
+ * references to the log and lock managers as well as the state that keeps
+ * track of the shared memory region.
+ */
+struct __db_txnmgr {
+/* These fields need to be protected for multi-threaded support. */
+	db_mutex_t	mutex;		/* Synchronization. */
+					/* list of active transactions */
+	TAILQ_HEAD(_chain, __db_txn)	txn_chain;
+
+/* These fields are not protected. */
+	DB_ENV		*dbenv;		/* Environment. */
+	int (*recover)			/* Recovery dispatch routine */
+	    __P((DB_LOG *, DBT *, DB_LSN *, int, void *));
+	int		 fd;		/* mapped file descriptor */
+	u_int		 flags;		/* DB_TXN_NOSYNC, DB_THREAD */
+	size_t		 reg_size;	/* how large we think the region is */
+	DB_TXNREGION	*region;	/* address of shared memory region */
+};
+
+/*
+ * Layout of the shared memory region.
+ *
+ */
+struct __db_txnregion {
+	RLAYOUT		hdr;		/* Shared memory region header. */
+	u_int32_t	magic;		/* transaction magic number */
+	u_int32_t	version;	/* version number */
+	u_int32_t	maxtxns;	/* maximum number of active txns */
+	u_int32_t	last_txnid;	/* last transaction id given out */
+	u_int32_t	free_txn;	/* head of transaction free list */
+	DB_LSN		pending_ckp;	/* last checkpoint did not finish */
+	DB_LSN		last_ckp;	/* lsn of the last checkpoint */
+	time_t		time_ckp;	/* time of last checkpoint */
+	u_int32_t	logtype;	/* type of logging */
+	u_int32_t	locktype;	/* lock type */
+	u_int32_t	naborts;	/* number of aborted transactions */
+	u_int32_t	ncommits;	/* number of committed transactions */
+	u_int32_t	nbegins;	/* number of begun transactions */
+	TXN_DETAIL	table[1];	/* array of TXN structures */
+};
+
+#define	TXN_REGION_SIZE(N)						\
+			(sizeof(DB_TXNREGION) + N * sizeof(DB_TXN))
+
+/* Macros to lock/unlock the region and threads. */
+#define	LOCK_TXNTHREAD(tmgrp)						\
+	if (F_ISSET(tmgrp, DB_THREAD))					\
+		(void)__db_mutex_lock(&(tmgrp)->mutex, -1,		\
+		    (tmgrp)->dbenv == NULL ? NULL : (tmgrp)->dbenv->db_yield)
+#define	UNLOCK_TXNTHREAD(tmgrp)						\
+	if (F_ISSET(tmgrp, DB_THREAD))					\
+		(void)__db_mutex_unlock(&(tmgrp)->mutex, -1)
+
+#define	LOCK_TXNREGION(tmgrp)						\
+	(void)__db_mutex_lock(&(tmgrp)->region->hdr.lock,(tmgrp)->fd,	\
+	    (tmgrp)->dbenv == NULL ? NULL : (tmgrp)->dbenv->db_yield)
+#define	UNLOCK_TXNREGION(tmgrp)						\
+	(void)__db_mutex_unlock(&(tmgrp)->region->hdr.lock, (tmgrp)->fd)
+
+/*
+ * Log record types.
+ */
+#define	TXN_BEGIN	1
+#define	TXN_COMMIT	2
+#define	TXN_PREPARE	3
+#define	TXN_CHECKPOINT	4
+
+#include "txn_auto.h"
+#include "txn_ext.h"
+#endif /* !_TXN_H_ */