docs: private void bufferCatchup(int messageSize) throws IOException {
          // If the current buffer has too many tasks logged, queue it and
          // create a new one.
          if (m_tail != null && m_tail.size() > 0 && messageSize > m_bufferHeadroom) {
              // compile the invocation buffer
              m_tail.compile();
  
              final RejoinTaskBuffer boundTail = m_tail;
              final Runnable r = new Runnable() {
                  @Override
                  public void run() {
                      try {
                          m_buffers.offer(boundTail.getContainer());
                          if (m_reader.sizeInBytes() > m_overflowLimit * 1024 * 1024) {
                              // we can never catch up, should break rejoin.
                              VoltDB.crashLocalVoltDB("On-disk task log is full. Please reduce " +
                                      "workload and try live rejoin again, or use blocking rejoin.");
                          }
                      } catch (Throwable t) {
                          VoltDB.crashLocalVoltDB("Error in task log buffering transactions", true, t);
                      }
                  }
              };
  
              m_es.execute(r);
  
              // Reset
              m_tail = null;
              m_tasksPendingInCurrentTail = 0;
          }
  
          // create a new buffer
          if (m_tail == null) {
              m_tail = new RejoinTaskBuffer(m_partitionId, messageSize);
              m_bufferHeadroom = RejoinTaskBuffer.DEFAULT_BUFFER_SIZE;
          }
      }