📄 tpcbexample.java
字号:
Dbc tcurs = null; DbTxn t = null; Defrec rec = new Defrec(); Histrec hrec = new Histrec(); int account, branch, teller; Dbt d_dbt = new Dbt(); Dbt d_histdbt = new Dbt(); Dbt k_dbt = new Dbt(); Dbt k_histdbt = new Dbt(); account = random_id(ACCOUNT, anum, bnum, tnum); branch = random_id(BRANCH, anum, bnum, tnum); teller = random_id(TELLER, anum, bnum, tnum); // The history key will not actually be retrieved, // but it does need to be set to something. byte hist_key[] = new byte[4]; k_histdbt.set_data(hist_key); k_histdbt.set_size(4 /* == sizeof(int)*/); byte key_bytes[] = new byte[4]; k_dbt.set_data(key_bytes); k_dbt.set_size(4 /* == sizeof(int)*/); d_dbt.set_flags(Db.DB_DBT_USERMEM); d_dbt.set_data(rec.data); d_dbt.set_ulen(rec.length()); hrec.set_aid(account); hrec.set_bid(branch); hrec.set_tid(teller); hrec.set_amount(10); // Request 0 bytes since we're just positioning. d_histdbt.set_flags(Db.DB_DBT_PARTIAL); // START TIMING try { t = txn_begin(null, 0); acurs = adb.cursor(t, 0); bcurs = bdb.cursor(t, 0); tcurs = tdb.cursor(t, 0); hcurs = hdb.cursor(t, 0); // Account record k_dbt.set_recno_key_data(account); if (acurs.get(k_dbt, d_dbt, Db.DB_SET) != 0) throw new TpcbException("acurs get failed"); rec.set_balance(rec.get_balance() + 10); acurs.put(k_dbt, d_dbt, Db.DB_CURRENT); // Branch record k_dbt.set_recno_key_data(branch); if (bcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0) throw new TpcbException("bcurs get failed"); rec.set_balance(rec.get_balance() + 10); bcurs.put(k_dbt, d_dbt, Db.DB_CURRENT); // Teller record k_dbt.set_recno_key_data(teller); if (tcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0) throw new TpcbException("ccurs get failed"); rec.set_balance(rec.get_balance() + 10); tcurs.put(k_dbt, d_dbt, Db.DB_CURRENT); // History record d_histdbt.set_flags(0); d_histdbt.set_data(hrec.data); d_histdbt.set_ulen(hrec.length()); if (hdb.put(t, k_histdbt, d_histdbt, Db.DB_APPEND) != 0) throw(new DbException("put failed")); acurs.close(); bcurs.close(); tcurs.close(); hcurs.close(); t.commit(0); // END TIMING return (0); } catch (Exception e) { try { if (acurs != null) acurs.close(); if (bcurs != null) bcurs.close(); if (tcurs != null) tcurs.close(); if (hcurs != null) hcurs.close(); if (t != null) t.abort(); } catch (DbException dbe) { // not much we can do here. } if (verbose) { System.out.println("Transaction A=" + String.valueOf(account) + " B=" + String.valueOf(branch) + " T=" + String.valueOf(teller) + " failed"); System.out.println("Reason: " + e.toString()); } return (-1); } } static void errExit(Exception err, String s) { System.err.print(progname + ": "); if (s != null) { System.err.print(s + ": "); } System.err.println(err.toString()); System.exit(1); } public static void main(String argv[]) { long seed; int accounts, branches, tellers, history; boolean iflag, txn_no_sync; int mpool, ntxns; String home, endarg; home = "TESTDIR"; accounts = branches = history = tellers = 0; txn_no_sync = false; mpool = ntxns = 0; verbose = false; iflag = false; seed = (new GregorianCalendar()).get(Calendar.SECOND); for (int i = 0; i < argv.length; ++i) { if (argv[i].equals("-a")) { // Number of account records if ((accounts = Integer.parseInt(argv[++i])) <= 0) invarg(argv[i]); } else if (argv[i].equals("-b")) { // Number of branch records if ((branches = Integer.parseInt(argv[++i])) <= 0) invarg(argv[i]); } else if (argv[i].equals("-c")) { // Cachesize in bytes if ((mpool = Integer.parseInt(argv[++i])) <= 0) invarg(argv[i]); } else if (argv[i].equals("-f")) { // Fast mode: no txn sync. txn_no_sync = true; } else if (argv[i].equals("-h")) { // DB home. home = argv[++i]; } else if (argv[i].equals("-i")) { // Initialize the test. iflag = true; } else if (argv[i].equals("-n")) { // Number of transactions if ((ntxns = Integer.parseInt(argv[++i])) <= 0) invarg(argv[i]); } else if (argv[i].equals("-S")) { // Random number seed. seed = Long.parseLong(argv[++i]); if (seed <= 0) invarg(argv[i]); } else if (argv[i].equals("-s")) { // Number of history records if ((history = Integer.parseInt(argv[++i])) <= 0) invarg(argv[i]); } else if (argv[i].equals("-t")) { // Number of teller records if ((tellers = Integer.parseInt(argv[++i])) <= 0) invarg(argv[i]); } else if (argv[i].equals("-v")) { // Verbose option. verbose = true; } else { usage(); } } rand.setSeed((int)seed); TpcbExample app = null; // Initialize the database environment. // Must be done in within a try block. // try { app = new TpcbExample(home, mpool, iflag, txn_no_sync ? Db.DB_TXN_NOSYNC : 0); } catch (Exception e1) { errExit(e1, "initializing environment failed"); } accounts = accounts == 0 ? ACCOUNTS : accounts; branches = branches == 0 ? BRANCHES : branches; tellers = tellers == 0 ? TELLERS : tellers; history = history == 0 ? HISTORY : history; if (verbose) System.out.println((long)accounts + " Accounts " + String.valueOf(branches) + " Branches " + String.valueOf(tellers) + " Tellers " + String.valueOf(history) + " History"); if (iflag) { if (ntxns != 0) usage(); app.populate(accounts, branches, history, tellers); } else { if (ntxns == 0) usage(); app.run(ntxns, accounts, branches, tellers); } // Shut down the application. try { app.close(0); } catch (DbException dbe2) { errExit(dbe2, "appexit failed"); } System.exit(0); } private static void invarg(String str) { System.err.println("TpcbExample: invalid argument: " + str); System.exit(1); } private static void usage() { System.err.println( "usage: TpcbExample [-fiv] [-a accounts] [-b branches]\n" + " [-c cachesize] [-h home] [-n transactions ]\n" + " [-S seed] [-s history] [-t tellers]"); System.exit(1); } // round 'd' to 'scale' digits, and return result as string private String showRounded(double d, int scale) { return new BigDecimal(d). setScale(scale, BigDecimal.ROUND_HALF_DOWN).toString(); } // The byte order is our choice. // static long get_int_in_array(byte[] array, int offset) { return ((0xff & array[offset+0]) << 0) | ((0xff & array[offset+1]) << 8) | ((0xff & array[offset+2]) << 16) | ((0xff & array[offset+3]) << 24); } // Note: Value needs to be long to avoid sign extension static void set_int_in_array(byte[] array, int offset, long value) { array[offset+0] = (byte)((value >> 0) & 0x0ff); array[offset+1] = (byte)((value >> 8) & 0x0ff); array[offset+2] = (byte)((value >> 16) & 0x0ff); array[offset+3] = (byte)((value >> 24) & 0x0ff); }};// Simulate the following C struct:// struct Defrec {// u_int32_t id;// u_int32_t balance;// u_int8_t pad[RECLEN - sizeof(int) - sizeof(int)];// };class Defrec{ public Defrec() { data = new byte[TpcbExample.RECLEN]; } public int length() { return TpcbExample.RECLEN; } public long get_id() { return TpcbExample.get_int_in_array(data, 0); } public void set_id(long value) { TpcbExample.set_int_in_array(data, 0, value); } public long get_balance() { return TpcbExample.get_int_in_array(data, 4); } public void set_balance(long value) { TpcbExample.set_int_in_array(data, 4, value); } static { Defrec d = new Defrec(); d.set_balance(500000); } public byte[] data;}// Simulate the following C struct:// struct Histrec {// u_int32_t aid;// u_int32_t bid;// u_int32_t tid;// u_int32_t amount;// u_int8_t pad[RECLEN - 4 * sizeof(u_int32_t)];// };class Histrec{ public Histrec() { data = new byte[TpcbExample.RECLEN]; } public int length() { return TpcbExample.RECLEN; } public long get_aid() { return TpcbExample.get_int_in_array(data, 0); } public void set_aid(long value) { TpcbExample.set_int_in_array(data, 0, value); } public long get_bid() { return TpcbExample.get_int_in_array(data, 4); } public void set_bid(long value) { TpcbExample.set_int_in_array(data, 4, value); } public long get_tid() { return TpcbExample.get_int_in_array(data, 8); } public void set_tid(long value) { TpcbExample.set_int_in_array(data, 8, value); } public long get_amount() { return TpcbExample.get_int_in_array(data, 12); } public void set_amount(long value) { TpcbExample.set_int_in_array(data, 12, value); } public byte[] data;}class TpcbException extends Exception{ TpcbException() { super(); } TpcbException(String s) { super(s); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -