code: private void handleNullRead() throws IOException {
      if (curStreamFinished && readNullAfterStreamFinished) {
        // If we read a null operation after the NameNode closed
        // the stream, then we surely reached the end of the file.
        curStreamConsumed = true;
      } else {
        try {
          // This affects how much we wait after we reached the end of the
          // current stream.
          Thread.sleep(100);
        } catch (InterruptedException e) {
          throw new IOException(e);
        }
      }
      
      if (curStreamFinished)
        readNullAfterStreamFinished = true;
      refreshStreamPosition();
    }
docs: Called after we read a null operation from the transaction log.
  @throws IOException when a fatal error occurred.