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