code: public synchronized void close() throws Exception {
          //Stop the periodic flush as we will flush laster
          if (m_flush != null) {
              m_flush.cancel(false);
          }
          m_ses.shutdown();
  
          // Remove this VoltBulkLoader from the active set.
          synchronized (m_vblGlobals) {
              drain();
  
              List<VoltBulkLoader> loaderList = m_vblGlobals.m_TableNameToLoader.get(m_tableName);
              if (loaderList.size() == 1) {
                  m_vblGlobals.m_TableNameToLoader.remove(m_tableName);
  
                  // We are the last loader for this table,
                  // shutdown the PerPartitionTable instances
                  for (PerPartitionTable ppt : m_partitionTable) {
                      if (ppt != null) {
                          try {
                              ppt.shutdown();
                          } catch (Exception e) {
                              loaderLog.error("Failed to close processor for partition " + ppt.m_partitionId, e);
                          }
                      }
                  }
              } else {
                  loaderList.remove(this);
              }
          }
  
          assert m_outstandingRowCount.get() == 0;
      }
docs: Waits for all pending inserts to be acknowledged and then closes this instance of the
  VoltBulkLoader. During and after the invocation of close(), calls to insertRow will get
  an Exception. All other instances of VoltBulkLoader will continue to function.
  @throws java.lang.InterruptedException