docs: public void addData(int index, byte[] data) throws InternalLogException
    {
      if (tc.isEntryEnabled()) Tr.entry(tc, "addData",new java.lang.Object[] {new Integer(index), RLSUtils.toHexString(data,RLSUtils.MAX_DISPLAY_BYTES), this});
  
      // If the parent recovery log instance has experienced a serious internal error then prevent
      // this operation from executing.
      if (_recLog.failed())
      {
        if (tc.isEntryEnabled()) Tr.exit(tc, "addData",this);
        throw new InternalLogException(null);
      }
  
      // we use an index value of 0 to indicate that it is a singledata RUsection
      // so adjust now ... if (!_singleData) or if(index != 0)
      if (index > 0) index--;         
  
      // list items may be added in any order, so it may be necessary to (temporarily) pad the list
      final int currentSize = _writtenData.size();
      if (index == currentSize)
          _writtenData.add(/*index,*/ data);
      else if (index < currentSize)
      {
          if (tc.isDebugEnabled()) Tr.debug(tc, "NMTEST: Replacing item (expect trace 'null') at index: " + index, _writtenData.get(index));
          _writtenData.set(index, data);
      }
      else // index > currentSize
      {
          if (tc.isDebugEnabled()) Tr.debug(tc, "NMTEST: Adding null elements: " + (index-currentSize));
          while (index-- > currentSize)
              _writtenData.add(null);
  
          _writtenData.add(data);        
      }
  
      // set lastdata.  This method is called during recovery and we shouldn't get asked for
      // any data until all log records are read.  So set lastdata to be the item at the current size
      // of the array.  Items may be added in random order, so lastitem will be correct when
      // all items have been added
      _lastDataItem = (byte[]) _writtenData.get(_writtenData.size() -1);
  
      if (tc.isEntryEnabled()) Tr.exit(tc, "addData");
    }