/**
  * Destroy a key in region REGION_NAME. The keys to destroy are specified in keyIntervals.
  *
  * @return true if all keys to be destroyed have been completed.
  */
 protected boolean destroy() {
   SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
   long nextKey = sc.incrementAndRead(CQUtilBB.LASTKEY_DESTROY);
   if (!keyIntervals.keyInRange(KeyIntervals.DESTROY, nextKey)) {
     Log.getLogWriter().info("All destroys completed; returning from destroy");
     return true;
   }
   Object key = NameFactory.getObjectNameForCounter(nextKey);
   Log.getLogWriter().info("Destroying " + key);
   checkContainsValueForKey(key, true, "before destroy");
   try {
     aRegion.destroy(key);
     Log.getLogWriter()
         .info(
             "Done Destroying "
                 + key
                 + ", num remaining: "
                 + (keyIntervals.getLastKey(KeyIntervals.DESTROY) - nextKey));
   } catch (CacheWriterException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   } catch (TimeoutException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   } catch (EntryNotFoundException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   }
   return (nextKey >= keyIntervals.getLastKey(KeyIntervals.DESTROY));
 }
 /**
  * Do a get on a key in region REGION_NAME. Keys to get are specified in keyIntervals.
  *
  * @return true if all keys to have get performaed have been completed.
  */
 protected boolean get() {
   SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
   long nextKey = sc.incrementAndRead(CQUtilBB.LASTKEY_GET);
   if (!keyIntervals.keyInRange(KeyIntervals.GET, nextKey)) {
     Log.getLogWriter().info("All gets completed; returning from get");
     return true;
   }
   Object key = NameFactory.getObjectNameForCounter(nextKey);
   Log.getLogWriter().info("Getting " + key);
   try {
     Object existingValue = aRegion.get(key);
     Log.getLogWriter()
         .info(
             "Done getting "
                 + key
                 + ", num remaining: "
                 + (keyIntervals.getLastKey(KeyIntervals.GET) - nextKey));
     if (existingValue == null)
       throw new TestException("Get of key " + key + " returned unexpected " + existingValue);
   } catch (TimeoutException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   } catch (CacheLoaderException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   }
   return (nextKey >= keyIntervals.getLastKey(KeyIntervals.GET));
 }
 /**
  * Invalidate a key in region REGION_NAME. The keys to invalidate are specified in keyIntervals.
  *
  * @return true if all keys to be invalidated have been completed.
  */
 protected boolean invalidate() {
   SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
   long nextKey = sc.incrementAndRead(CQUtilBB.LASTKEY_INVALIDATE);
   if (!keyIntervals.keyInRange(KeyIntervals.INVALIDATE, nextKey)) {
     Log.getLogWriter().info("All existing keys invalidated; returning from invalidate");
     return true;
   }
   Object key = NameFactory.getObjectNameForCounter(nextKey);
   Log.getLogWriter().info("Invalidating " + key);
   checkContainsValueForKey(key, true, "before invalidate");
   try {
     aRegion.invalidate(key);
     Log.getLogWriter()
         .info(
             "Done invalidating "
                 + key
                 + ", num remaining: "
                 + (keyIntervals.getLastKey(KeyIntervals.INVALIDATE) - nextKey));
   } catch (TimeoutException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   } catch (EntryNotFoundException e) {
     throw new TestException(TestHelper.getStackTrace(e));
   }
   return (nextKey >= keyIntervals.getLastKey(KeyIntervals.INVALIDATE));
 }
  /**
   * Hydra start task to initialize key intervals, which are ranges of keys which are to have an
   * operation done on them (invalidate, destroy, etc)
   */
  public static synchronized void StartTask_initialize() {
    int numKeys = TestConfig.tab().intAt(CQUtilPrms.numKeys);
    KeyIntervals intervals =
        new KeyIntervals(
            new int[] {
              KeyIntervals.NONE, KeyIntervals.INVALIDATE,
              KeyIntervals.DESTROY, KeyIntervals.UPDATE_EXISTING_KEY,
              KeyIntervals.GET
            },
            numKeys);
    CQUtilBB.getBB().getSharedMap().put(CQUtilBB.KeyIntervals, intervals);
    Log.getLogWriter().info("Created keyIntervals: " + intervals);

    // Set the counters for the next keys to use for each operation
    hydra.blackboard.SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
    sc.setIfLarger(CQUtilBB.LASTKEY_INVALIDATE, intervals.getFirstKey(KeyIntervals.INVALIDATE) - 1);
    sc.setIfLarger(
        CQUtilBB.LASTKEY_LOCAL_INVALIDATE,
        intervals.getFirstKey(KeyIntervals.LOCAL_INVALIDATE) - 1);
    sc.setIfLarger(CQUtilBB.LASTKEY_DESTROY, intervals.getFirstKey(KeyIntervals.DESTROY) - 1);
    sc.setIfLarger(
        CQUtilBB.LASTKEY_LOCAL_DESTROY, intervals.getFirstKey(KeyIntervals.LOCAL_DESTROY) - 1);
    sc.setIfLarger(
        CQUtilBB.LASTKEY_UPDATE_EXISTING_KEY,
        intervals.getFirstKey(KeyIntervals.UPDATE_EXISTING_KEY) - 1);
    sc.setIfLarger(CQUtilBB.LASTKEY_GET, intervals.getFirstKey(KeyIntervals.GET) - 1);

    // show the blackboard
    CQUtilBB.getBB().printSharedMap();
    CQUtilBB.getBB().printSharedCounters();
  }
 /**
  * Load a region with keys and values. The number of keys and values is specified by the total
  * number of keys in keyIntervals. This can be invoked by several threads to accomplish the work.
  */
 public void loadRegion() {
   final long LOG_INTERVAL_MILLIS = 10000;
   int numKeysToCreate = keyIntervals.getNumKeys();
   long lastLogTime = System.currentTimeMillis();
   long startTime = System.currentTimeMillis();
   SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
   do {
     long shouldAddCount =
         CQUtilBB.getBB().getSharedCounters().incrementAndRead(CQUtilBB.SHOULD_ADD_COUNT);
     if (shouldAddCount > numKeysToCreate) {
       String aStr =
           "In loadRegion, shouldAddCount is "
               + shouldAddCount
               + ", numOriginalKeysCreated is "
               + sc.read(CQUtilBB.NUM_ORIGINAL_KEYS_CREATED)
               + ", numKeysToCreate is "
               + numKeysToCreate
               + ", region size is "
               + aRegion.size();
       Log.getLogWriter().info(aStr);
       NameBB.getBB().printSharedCounters();
       throw new StopSchedulingTaskOnClientOrder(aStr);
     }
     Object key = NameFactory.getNextPositiveObjectName();
     QueryObject value = getValueToAdd(key);
     value.extra = key;
     Log.getLogWriter().info("Creating with put, key " + key + ", value " + value.toStringFull());
     aRegion.put(key, value);
     sc.increment(CQUtilBB.NUM_ORIGINAL_KEYS_CREATED);
     if (System.currentTimeMillis() - lastLogTime > LOG_INTERVAL_MILLIS) {
       Log.getLogWriter()
           .info(
               "Added "
                   + NameFactory.getPositiveNameCounter()
                   + " out of "
                   + numKeysToCreate
                   + " entries into "
                   + TestHelper.regionToString(aRegion, false));
       lastLogTime = System.currentTimeMillis();
     }
   } while ((minTaskGranularitySec == -1)
       || (System.currentTimeMillis() - startTime < minTaskGranularityMS));
 }
 /**
  * Add a new key to REGION_NAME.
  *
  * @return true if all new keys have been added (specified by CQUtilPrms.numNewKeys)
  */
 protected boolean addNewKey() {
   SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
   long numNewKeysCreated = sc.incrementAndRead(CQUtilBB.NUM_NEW_KEYS_CREATED);
   if (numNewKeysCreated > numNewKeys) {
     Log.getLogWriter().info("All new keys created; returning from addNewKey");
     return true;
   }
   Object key = NameFactory.getNextPositiveObjectName();
   checkContainsValueForKey(key, false, "before addNewKey");
   QueryObject value =
       new QueryObject(
           NameFactory.getCounterForName(key), QueryObject.EQUAL_VALUES, -1, queryDepth);
   value.extra = key; // encode the key in the value for later validation
   Log.getLogWriter().info("Adding new key " + key + " with put");
   aRegion.put(key, value);
   Log.getLogWriter()
       .info(
           "Done adding new key "
               + key
               + " with put, "
               + "num remaining: "
               + (numNewKeys - numNewKeysCreated));
   return (numNewKeysCreated >= numNewKeys);
 }
 /** Log the number of ops that have completed. */
 protected void logNumOps() {
   SharedCounters sc = CQUtilBB.getBB().getSharedCounters();
   int totalOps =
       keyIntervals.getNumKeys() - keyIntervals.getNumKeys(KeyIntervals.NONE) + numNewKeys;
   long numOpsCompleted =
       sc.read(CQUtilBB.LASTKEY_INVALIDATE)
           - keyIntervals.getFirstKey(KeyIntervals.INVALIDATE)
           + sc.read(CQUtilBB.LASTKEY_DESTROY)
           - keyIntervals.getFirstKey(KeyIntervals.DESTROY)
           + sc.read(CQUtilBB.LASTKEY_UPDATE_EXISTING_KEY)
           - keyIntervals.getFirstKey(KeyIntervals.UPDATE_EXISTING_KEY)
           + sc.read(CQUtilBB.LASTKEY_GET)
           - keyIntervals.getFirstKey(KeyIntervals.GET)
           + sc.read(CQUtilBB.NUM_NEW_KEYS_CREATED);
   Log.getLogWriter()
       .info(
           "Total ops is " + totalOps + ", current number of ops completed is " + numOpsCompleted);
 }
Beispiel #8
0
  /** Clear the event counters (associated with number of operations performed */
  public void zeroEventCounters() {
    SharedCounters sc = getSharedCounters();
    sc.zero(LOCAL_CREATE);
    sc.zero(LOCAL_CREATE_ISLOAD);
    sc.zero(LOCAL_UPDATE);
    sc.zero(LOCAL_UPDATE_ISLOAD);
    sc.zero(LOCAL_DESTROY);
    sc.zero(LOCAL_INVALIDATE);
    sc.zero(LOCAL_LOCAL_DESTROY);
    sc.zero(LOCAL_LOCAL_INVALIDATE);

    sc.zero(CONFLATED_CREATE_DESTROY);
    sc.zero(CREATE_IN_DESTROYED_REGION);
    sc.zero(CREATE_IN_DESTROYED_REGION_ISLOAD);

    sc.zero(REMOTE_CREATE);
    sc.zero(REMOTE_CREATE_ISLOAD);
    sc.zero(REMOTE_UPDATE);
    sc.zero(REMOTE_UPDATE_ISLOAD);
    sc.zero(REMOTE_DESTROY);
    sc.zero(REMOTE_INVALIDATE);
    sc.zero(REMOTE_LOCAL_DESTROY);
    sc.zero(REMOTE_LOCAL_INVALIDATE);

    // TransactionListener callback counters
    sc.zero(TX_SUCCESS);
    sc.zero(TX_FAILURE);
    sc.zero(TX_ROLLBACK);
    sc.zero(NUM_EXPECTED_FAILED_COMMIT);
    sc.zero(NUM_EXPECTED_ROLLBACK);
  }
  /**
   * Check event counters. If numCloseIsExact is true, then the number of close events must be an
   * exact match, otherwise allow numClose events to be the minimum of the expected numClose
   * counter. This is useful in tests where the timing of shutting down the VMs/C clients may or may
   * not cause a close event.
   *
   * @param eventCountExact - True if the event counters must exactly match the expected value,
   *     false if the event counters must be no less than the expected counter.
   */
  protected void checkEventCounters(boolean eventCountExact) {

    SharedCounters counters = BridgeNotifyBB.getBB().getSharedCounters();
    long numCreate = counters.read(BridgeNotifyBB.NUM_CREATE);
    long numUpdate = counters.read(BridgeNotifyBB.NUM_UPDATE);
    long numPutAllCreate = counters.read(BridgeNotifyBB.NUM_PUTALL_CREATE);
    long numPutAllUpdate = counters.read(BridgeNotifyBB.NUM_PUTALL_UPDATE);
    long numDestroy = counters.read(BridgeNotifyBB.NUM_DESTROY);
    long numInval = counters.read(BridgeNotifyBB.NUM_INVALIDATE);
    long numRegionCreate = counters.read(BridgeNotifyBB.NUM_REGION_CREATE);
    long numRegionDestroy = counters.read(BridgeNotifyBB.NUM_REGION_DESTROY);
    long numRegionInval = counters.read(BridgeNotifyBB.NUM_REGION_INVALIDATE);
    long numLocalDestroy = counters.read(BridgeNotifyBB.NUM_LOCAL_DESTROY);
    long numLocalInval = counters.read(BridgeNotifyBB.NUM_LOCAL_INVALIDATE);
    long numLocalRegionDestroy = counters.read(BridgeNotifyBB.NUM_LOCAL_REGION_DESTROY);
    long numLocalRegionInval = counters.read(BridgeNotifyBB.NUM_LOCAL_REGION_INVALIDATE);
    long numClose = counters.read(BridgeNotifyBB.NUM_CLOSE);

    /* the ALL_KEYS client will always get events (including creates on new keys)
     * the ALL_KEYS and one of the KeyList (odd/even) clients will always get all events
     * on the original keySet
     * we'll get 3 events per operation if we happen to select the singleKey client's key
     * This is written to the BB by the VM performing the operation (it knows how many
     * clients should get the update)
     */
    // factor this out to separate lines to track down an NPE issue
    // 2006-08-29 jpenney
    BridgeNotifyBB bnbb = BridgeNotifyBB.getBB();
    SharedMap sm = bnbb.getSharedMap();
    Object nl = sm.get(BridgeNotifyBB.numListeners);
    int numVmsWithList = ((Integer) nl).intValue();
    Log.getLogWriter().info("num VMs with listener installed: " + numVmsWithList);

    // This mixedBridgeNotify test always uses notifyBySubscription/registerInterest
    // Note:  to some degree we have to know if this key was in the original keyList
    ArrayList al = new ArrayList();
    al.add(
        new ExpCounterValue(
            "numAfterCreateEvents_isNotExp",
            (numCreate * numVmsWithList + numPutAllCreate * numVmsWithList),
            eventCountExact));
    al.add(
        new ExpCounterValue(
            "numAfterDestroyEvents_isNotExp", (numDestroy * numVmsWithList), eventCountExact));
    al.add(
        new ExpCounterValue(
            "numAfterInvalidateEvents_isNotExp", (numInval * numVmsWithList), eventCountExact));
    al.add(
        new ExpCounterValue(
            "numAfterUpdateEvents_isNotExp",
            (numUpdate * numVmsWithList + numPutAllUpdate * numVmsWithList),
            eventCountExact));
    al.add(new ExpCounterValue("numAfterRegionDestroyEvents_isNotExp", 0, eventCountExact));
    al.add(new ExpCounterValue("numAfterRegionInvalidateEvents_isNotExp", 0, eventCountExact));
    al.add(new ExpCounterValue("numClose", numClose, eventCountExact));

    EventCountersBB.getBB().checkEventCounters(al);

    // This only works on a serial basis, since each operation performed has a different
    // number of listeners with registered interest, therefore, we must clean the
    // BridgeNotifyBB operation counters each time
    counters.zero(BridgeNotifyBB.NUM_CREATE);
    counters.zero(BridgeNotifyBB.NUM_UPDATE);
    counters.zero(BridgeNotifyBB.NUM_PUTALL_CREATE);
    counters.zero(BridgeNotifyBB.NUM_PUTALL_UPDATE);
    counters.zero(BridgeNotifyBB.NUM_DESTROY);
    counters.zero(BridgeNotifyBB.NUM_INVALIDATE);

    // clear EventCountersBB as well (for actual event counters recv'd)
    EventCountersBB.getBB().zeroAllCounters();
  }