code: public void checkBlockableReadSequence(long readSequence) {
          if (isTooLargeSequence(readSequence)) {
              throw new IllegalArgumentException("sequence:" + readSequence
                      + " is too large. The current tailSequence is:" + tailSequence());
          }
          if (isStaleSequence(readSequence)) {
              throw new StaleSequenceException("sequence:" + readSequence
                      + " is too small and data store is disabled. "
                      + "The current headSequence is:" + headSequence()
                      + " tailSequence is:" + tailSequence(), headSequence());
          }
      }
docs: Check if the sequence is of an item that can be read immediately
  or is the sequence of the next item to be added into the ringbuffer.
  Since this method allows the sequence to be one larger than
  the {@link #tailSequence()}, the caller can use this method
  to check the sequence before performing a possibly blocking read.
  Also, the requested sequence can be smaller than the head sequence
  if the data store is enabled.
  
  @param readSequence the sequence wanting to be read
  @throws StaleSequenceException   if the requested sequence is smaller than the head sequence and the data store is
  not enabled
  @throws IllegalArgumentException if the requested sequence is greater than the tail sequence + 1 or