code: public void startFlush(FlushComplete complete)
      throws FlushAlreadyInProgressException, SIRollbackException, SIConnectionLostException, SIResourceException, SIErrorException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "startFlush", new Object[] { complete });
  
      // Synchronize here to get a consistent view of "flushInProgress"
      synchronized (this)
      {
        if (flushInProgress != null)
        {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
            SibTr.exit(tc, "startFlush", "FlushAlreadyInProgressException");
          // Somebody already called us so bail
          throw new FlushAlreadyInProgressException();
        }
  
        // Otherwise, update flush in progress and
        // flush immediately if possible.  Note that
        // this means the caller may receive the callback
        // on their own thread.
        flushInProgress = complete;
      }
  
      attemptFlush();
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "startFlush");
    }
docs: Wait for the current stream to quiesce, remove it
  from storage, then create a replacement stream ID.
  We assume that all production has already been
  stopped and that no new production will occur until
  after the flush has been completed.  The reference
  passed to this method contains the callback for
  signalling when the flush has completed.
  
  @param complete An instance of the FlushComplete interface
  which we'll invoke when the flush of the current stream
  has completed.
  @throws FlushAlreadyInProgressException if someone calls
  this method but a flush is already in progress.