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