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