1/*
2 * $Id: b_txn.c,v 1.11 2007/12/21 13:58:30 bostic Exp $
3 */
4#include "bench.h"
5
6static int usage(void);
7
8int
9b_txn(int argc, char *argv[])
10{
11	extern char *optarg;
12	extern int optind;
13	DB_ENV *dbenv;
14	DB_TXN *txn;
15	int tabort, ch, i, count;
16
17	count = 1000;
18	tabort = 0;
19	while ((ch = getopt(argc, argv, "ac:")) != EOF)
20		switch (ch) {
21		case 'a':
22			tabort = 1;
23			break;
24		case 'c':
25			count = atoi(optarg);
26			break;
27		case '?':
28		default:
29			return (usage());
30		}
31	argc -= optind;
32	argv += optind;
33	if (argc != 0)
34		return (usage());
35
36	/* Create the environment. */
37	DB_BENCH_ASSERT(db_env_create(&dbenv, 0) == 0);
38	dbenv->set_errfile(dbenv, stderr);
39#if DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR < 1
40	DB_BENCH_ASSERT(dbenv->open(dbenv, TESTDIR,
41	    NULL, DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
42	    DB_INIT_MPOOL | DB_INIT_TXN | DB_PRIVATE, 0666) == 0);
43#else
44	DB_BENCH_ASSERT(dbenv->open(dbenv, TESTDIR,
45	    DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
46	    DB_INIT_MPOOL | DB_INIT_TXN | DB_PRIVATE, 0666) == 0);
47#endif
48
49	/* Start and commit/abort a transaction count times. */
50	TIMER_START;
51	if (tabort)
52		for (i = 0; i < count; ++i) {
53#if DB_VERSION_MAJOR < 4
54			DB_BENCH_ASSERT(txn_begin(dbenv, NULL, &txn, 0) == 0);
55			DB_BENCH_ASSERT(txn_abort(txn) == 0);
56#else
57			DB_BENCH_ASSERT(
58			    dbenv->txn_begin(dbenv, NULL, &txn, 0) == 0);
59			DB_BENCH_ASSERT(txn->abort(txn) == 0);
60#endif
61		}
62	else
63		for (i = 0; i < count; ++i) {
64#if DB_VERSION_MAJOR < 4
65			DB_BENCH_ASSERT(txn_begin(dbenv, NULL, &txn, 0) == 0);
66			DB_BENCH_ASSERT(txn_commit(txn, 0) == 0);
67#else
68			DB_BENCH_ASSERT(
69			    dbenv->txn_begin(dbenv, NULL, &txn, 0) == 0);
70			DB_BENCH_ASSERT(txn->commit(txn, 0) == 0);
71#endif
72		}
73	TIMER_STOP;
74
75	printf("# %d empty transaction start/%s pairs\n",
76	    count, tabort ? "abort" : "commit");
77	TIMER_DISPLAY(count);
78
79	DB_BENCH_ASSERT(dbenv->close(dbenv, 0) == 0);
80
81	return (0);
82}
83
84static int
85usage()
86{
87	(void)fprintf(stderr, "usage: b_txn [-a] [-c count]\n");
88	return (EXIT_FAILURE);
89}
90