public class AsyncMsgBB extends Blackboard {

  // Blackboard variables
  static String BB_NAME = "AsyncMsg_Blackboard";
  static String BB_TYPE = "RMI";

  private static AsyncMsgBB bbInstance = null;

  // Counter for the serial execution number for each task
  public static int RoundRobinNumber; // the current number of "rounds"
  public static int ExecutionNumber; // the current task number

  public static int OPLIST_READY_FOR_VALIDATION; // indicates putter done
  public static String OpListKey = "OpList_";

  public static String PrimeQDir = "PrimeQDir_";
  public static String PrimeQCount = "PrimeQCount_";
  public static String DestroyedRegionsKey = "DestroyedRegions";
  public static String RegDefForPIDKey = "RegionDefForPID_" + ProcessMgr.getProcessId();

  public static String conflationEnabled = "conflationEnabled";

  public static final String ErrorKey = "Error";
  public static final String SlowReceiverAlertKey = "SlowReceiverKey";
  public static final String SlowReceiverDetectedKey = "SlowReceiverDetectedKey";

  // sharedCounters: used by concurrent tests; concurrent threads run in a concurrent
  //                 "round"; all threads begin, pause, verify, end, then start again
  public static int ConcurrentLeader; // used to choose one thread to do once-per-round duties
  public static int ReadyToBegin; // used to sync all threads at the beginning of a task
  public static int Pausing; // used to sync all threads when pausing for verification
  public static int FinishedVerify; // used to sync all threads when verification is done
  public static int SnapshotWritten; // used to sync threads when one thread has written its state
  public static int NoMoreEvents; // used to sync threads when no more events are being invoked

  // sharedMap keys used by concurrent tests
  public static String RegionSnapshot = "RegionSnapshot";

  /** Convenience method for writing a list of operations for the current client thread. */
  public static void putOpList(OpList opList) {
    Object key = OpListKey + Thread.currentThread().getName();
    AsyncMsgBB.getBB().getSharedMap().put(key, opList);
    Log.getLogWriter().info("AsyncBB put into shared map key " + key + ", value " + opList);
  }

  /** Convenience method for reading the list of operations for the current client thread. */
  public static OpList getOpList() {
    Object key = OpListKey + Thread.currentThread().getName();
    OpList opList = (OpList) (AsyncMsgBB.getBB().getSharedMap().get(key));
    Log.getLogWriter().info("AsyncBB read from shared map key " + key + ", value " + opList);
    return opList;
  }

  /**
   * Convenience method for obtaining the key created for the opList serial tests may put this key
   * on the BB for other threads to use for opList access
   */
  public static String getOpListKey() {
    return OpListKey + Thread.currentThread().getName();
  }

  /** Get the instance of AsyncMsgBB */
  public static Blackboard getBB() {
    if (bbInstance == null) {
      synchronized (AsyncMsgBB.class) {
        if (bbInstance == null) bbInstance = new AsyncMsgBB(BB_NAME, BB_TYPE);
      }
    }
    return bbInstance;
  }

  /** Check if an error has been recorded in the blackboard. */
  public static void checkForError() {
    Object error = AsyncMsgBB.getBB().getSharedMap().get(AsyncMsgBB.ErrorKey);
    if (error != null) {
      throw new TestException(error.toString());
    }
  }

  /** Zero-arg constructor for remote method invocations. */
  public AsyncMsgBB() {}

  /** Creates a sample blackboard using the specified name and transport type. */
  public AsyncMsgBB(String name, String type) {
    super(name, type, AsyncMsgBB.class);
  }
}
Exemple #2
0
public class TxBB extends Blackboard {

  // Blackboard variables
  static String BB_NAME = "Tx_Blackboard";
  static String BB_TYPE = "RMI";

  private static TxBB bbInstance = null;

  // Counter for the serial execution number for each task
  public static int RoundRobinNumber; // the current number of "rounds"
  public static int ExecutionNumber; // the current task number

  // SharedCounters
  public static int TX_NUMBER; // tracks current tx from begin/complete
  public static int PROCESS_EVENTS; // controls CacheListener event processing

  public static int TX_IN_PROGRESS; // in begin() block
  public static int TX_READY_FOR_VALIDATION; // indicates TX has begun
  public static int TX_COMPLETED; // indicates TX completed

  // shared counters to count commit success/failure
  public static int TX_SUCCESS;
  public static int TX_FAILURE;
  public static int TX_ROLLBACK;
  public static int NOT_IN_TRANS;

  // shared counters to count expected number of failed commits and rollbacks
  public static int NUM_EXPECTED_FAILED_COMMIT;
  public static int NUM_EXPECTED_ROLLBACK;

  // counter to divide VMs into using a unique key set
  public static int UniqueKeyCounter;

  public static int nextRepeatableRead;

  // SharedMap keys
  public static String TxWriterAction = "TxWriterAction"; // commit/abort
  public static String COMPLETION_ACTION = "CompletionAction"; // commit/rollback
  public static String TXACTION_COMMIT = "commit";
  public static String TXACTION_ROLLBACK = "rollback";
  public static String TXACTION_ABORT = "abort";
  public static String TXACTION_NONE = "none";
  public static String RoundRobinStartThread = "RoundRobinStartThread";
  public static String OpListKey = "OpList_";
  public static String OpListKey2 = "OpList2_";
  public static String CommitStatusKey = "CommitStatus_";
  public static String DestroyedRegionsKey = "DestroyedRegions";
  public static String FirstInRoundCommitStatus = "FirstInRoundCommitStatus";
  public static String SecondInRoundCommitStatus = "SecondInRoundCommitStatus";
  public static String TX_OPLIST_KEY = "txOpListKey";
  public static String TX_VM_PID = "txVmPid";
  public static String TX_VM_CLIENTNAME = "txVmClientName";
  public static String NON_TX_OPLIST = "nonTxOpList";
  public static String LocalListenerOpListPrefix = "LocalListenerOpList_";
  public static String RemoteListenerOpListPrefix = "RemoteListenerOpList_";
  public static String UpdateStrategy = "UpdateStrategy";
  public static String CommitStateTrigger = "CommitStateTrigger";
  public static String RegConfigForPIDBaseKey = "RegionsForPID_";
  public static String RegConfigForPIDKey = RegConfigForPIDBaseKey + ProcessMgr.getProcessId();
  public static String RepeatableRead = "RepeatableRead";
  // Key for DataPolicies for View Tests
  // Complete key has 'clientX' appended.
  public static String DataPolicyPrefix = "DATAPOLICY_";

  // SharedMap keys for PR TX (colocated) View tests
  public static final String keySet = "keySet_"; // for thread specific keySetResult

  // SharedMap key for killTarget (in client/server distIntegrity tests)
  // ClientVmInfo (to use with dynamic stop)
  public static final String delegate = "DelegateVmInfo";
  public static final String nonDelegateServer = "NonDelegateServerVmInfo";

  // SharedMap key for parRegIntegrityRemote
  // Signal to waitForDist method to signal local killSyncObj to give up waiting (we have
  // killCommittor threads on both non-tx VMs and only one will be killed by the test callbacks
  public static final String timeToStop = "timeToStop";

  // SharedMap key for ParRegViewTests (to know if the TxListener.afterCommit() was invoked in any
  // VM
  public static final String afterCommitProcessed = "afterCommitProcessed";

  public static final String VMOTION_TRIGGERED = "vMotionTriggerred";
  public static final String VMOTION_TRIGGERED_TIME = "vMotionTriggerredTime";

  // Counters for events expected in local cacheListener (only)
  public static int LOCAL_CREATE;
  public static int LOCAL_CREATE_ISLOAD;
  public static int LOCAL_UPDATE;
  public static int LOCAL_UPDATE_ISLOAD;
  public static int LOCAL_DESTROY;
  public static int LOCAL_INVALIDATE;
  public static int LOCAL_LOCAL_DESTROY;
  public static int LOCAL_LOCAL_INVALIDATE;

  // Counters for events expected in remote cache & tx listeners (collapsed)
  public static int REMOTE_CREATE;
  public static int REMOTE_CREATE_ISLOAD;
  public static int REMOTE_UPDATE;
  public static int REMOTE_UPDATE_ISLOAD;
  public static int REMOTE_DESTROY;
  public static int REMOTE_INVALIDATE;
  public static int REMOTE_LOCAL_DESTROY;
  public static int REMOTE_LOCAL_INVALIDATE;

  // Counter for TxEvent seen only in TX VM (when create/destroy conflated to destroy)
  public static int CONFLATED_CREATE_DESTROY;
  // Counter for TxEvent seen only in TX VM (CommitConflict/FailedCommit)
  // seen when an entry-create is followed by a region-destroy on the host region
  public static int CREATE_IN_DESTROYED_REGION;
  public static int CREATE_IN_DESTROYED_REGION_ISLOAD;

  /** Get the update strategy. */
  public static String getUpdateStrategy() {
    String strategy = (String) (TxBB.getBB().getSharedMap().get(UpdateStrategy));
    if (strategy == null) {
      strategy = TxPrms.getUpdateStrategy();
      TxBB.getBB().getSharedMap().put(UpdateStrategy, strategy);
      Log.getLogWriter().info("Update strategy is " + strategy);
    }
    return strategy;
  }

  /** Convenience method for writing a list of operations for the current client thread. */
  public static void putOpList(OpList opList) {
    Object key = OpListKey + Thread.currentThread().getName();
    TxBB.getBB().getSharedMap().put(key, opList);
    Log.getLogWriter().info("TxBB put into shared map key " + key + ", value " + opList);
  }

  /** Convenience method for reading the list of operations for the current client thread. */
  public static OpList getOpList() {
    Object key = OpListKey + Thread.currentThread().getName();
    OpList opList = (OpList) (TxBB.getBB().getSharedMap().get(key));
    Log.getLogWriter().info("TxBB read from shared map key " + key + ", value " + opList);
    return opList;
  }

  /**
   * Convenience method for obtaining the key created for the opList serial tests may put this key
   * on the BB for other threads to use for opList access
   */
  public static String getOpListKey() {
    return OpListKey + Thread.currentThread().getName();
  }

  /**
   * Write to the blackboard the expected commit success/failure for the current thread.
   *
   * @param expectCommitStatus True if we expect the current thread to successfully commit, false
   *     otherwise.
   */
  public static void recordCommitStatus(boolean expectCommitStatus) {
    Object key = TxBB.CommitStatusKey + Thread.currentThread().getName();
    TxBB.getBB().getSharedMap().put(key, new Boolean(expectCommitStatus));
    Log.getLogWriter().info("Written to TxBB: " + key + ", " + expectCommitStatus);
  }

  /**
   * Return the expected commit success/failure for the current thread.
   *
   * @returns true if the current thread should succeed in its commit, false otherwise.
   */
  public static boolean getCommitStatus() {
    Object key = TxBB.CommitStatusKey + Thread.currentThread().getName();
    Object result = TxBB.getBB().getSharedMap().get(key);
    if (result instanceof Boolean) return ((Boolean) result).booleanValue();
    else throw new TestException("Unknown value " + result + " for TxBB sharedMap key " + key);
  }

  /** Increment the given counter */
  public static void inc(int whichCounter) {
    TxBB.getBB().getSharedCounters().increment(whichCounter);
  }

  /** 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);
  }

  /** Get the instance of TxBB */
  public static TxBB getBB() {
    if (bbInstance == null) {
      synchronized (TxBB.class) {
        if (bbInstance == null) bbInstance = new TxBB(BB_NAME, BB_TYPE);
      }
    }
    return bbInstance;
  }

  /** Zero-arg constructor for remote method invocations. */
  public TxBB() {}

  /** Creates a sample blackboard using the specified name and transport type. */
  public TxBB(String name, String type) {
    super(name, type, TxBB.class);
  }
}