code: private void addRecoveryRecord(RecoveryAgent recoveryAgent, FailureScope failureScope) {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "addRecoveryRecord", new Object[] { recoveryAgent, failureScope, this });
  
          synchronized (_outstandingRecoveryRecords) {
              HashSet<RecoveryAgent> recoveryAgentSet = _outstandingRecoveryRecords.get(failureScope);
  
              if (recoveryAgentSet == null) {
                  recoveryAgentSet = new HashSet<RecoveryAgent>();
                  _outstandingRecoveryRecords.put(failureScope, recoveryAgentSet);
              }
  
              recoveryAgentSet.add(recoveryAgent);
          }
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "addRecoveryRecord");
      }
docs: <p>
  Internal method to record an outstanding 'initialRecoveryComplete' call that must
  be issued by the client service represented by the supplied RecoveryAgent for
  the given failure scope.
  </p>
  
  <p>
  Just prior to requesting a RecoveryAgent to "initiateRecovery" of a
  FailureScope, this method is driven to record the request. When the client
  service completes the initial portion of the recovery process and invokes
  RecoveryDirector.initialRecoveryComplete, the removeRecoveryRecord method is
  called to remove this record.
  </p>
  
  <p>
  This allows the RLS to track the "initial" portion of an ongoing recovery process.
  </p>
  
  <p>
  [ SERIAL PHASE ] [ INITIAL PHASE ] [ RETRY PHASE ]
  </p>
  
  @param recoveryAgent The RecoveryAgent that is about to be directed to process
  recovery of a FailureScope.
  @param failureScope The FailureScope.