/** * Do operations on the REGION_NAME's keys using keyIntervals to specify which keys get which * operations. This will return when all operations in all intervals have completed. * * @param availableOps - Bits which are true correspond to the operations that should be executed. */ public void doOps(BitSet availableOps) { boolean useTransactions = getInitialImage.InitImagePrms.useTransactions(); while (availableOps.cardinality() != 0) { int whichOp = getOp(availableOps, operations.length); boolean doneWithOps = false; if (useTransactions) { TxHelper.begin(); } switch (whichOp) { case ADD_NEW_KEY: doneWithOps = addNewKey(); break; case INVALIDATE: doneWithOps = invalidate(); break; case DESTROY: doneWithOps = destroy(); break; case UPDATE_EXISTING_KEY: doneWithOps = updateExistingKey(); break; case GET: doneWithOps = get(); break; case LOCAL_INVALIDATE: doneWithOps = localInvalidate(); break; case LOCAL_DESTROY: doneWithOps = localDestroy(); break; default: { throw new TestException("Unknown operation " + whichOp); } } if (useTransactions) { try { TxHelper.commit(); } catch (CommitConflictException e) { // currently not expecting any conflicts ... throw new TestException( "Unexpected CommitConflictException " + TestHelper.getStackTrace(e)); } } if (doneWithOps) { Log.getLogWriter().info("Done with operation " + whichOp); availableOps.clear(whichOp); } if (sleepBetweenOps) { Log.getLogWriter().info("Sleeping between ops for " + SLEEP_BETWEEN_OPS_MILLIS + " millis"); MasterController.sleepForMs(SLEEP_BETWEEN_OPS_MILLIS); } } }
/** Hydra task to execution ops, then stop scheduling. */ public static void HydraTask_doOps() { BitSet availableOps = new BitSet(operations.length); availableOps.flip(FIRST_OP, LAST_OP + 1); // don't do local ops in bridge configuration availableOps.clear(LOCAL_INVALIDATE); availableOps.clear(LOCAL_DESTROY); testInstance.doOps(availableOps); if (availableOps.cardinality() == 0) { CQUtilBB.getBB().getSharedCounters().increment(CQUtilBB.TimeToStop); throw new StopSchedulingTaskOnClientOrder("Finished with ops"); } }
/** * Get a random operation to perform. The set of operations available are in the BitSet. These * bits correspond to the operations defined in this class. * * @param bs True bits correspond to operations available to be chosen. * @param bsSize The number of bits to consider. * @return An operation as defined in this class. */ protected int getOp(BitSet bs, int bsSize) { int randInt; do { randInt = TestConfig.tab().getRandGen().nextInt(1, bsSize); } while (!bs.get(randInt)); return randInt; }