code: public Optional<Future<?>> writeAsync(T op, WriteBuilder at) throws AsyncException, InterruptedException {
          if (asyncException != null) {
              throw asyncException;
          }
  
          Batch<T> newBatch = cube.getWrites(at, op);
  
          return writeAsync(newBatch);
      }
docs: Do some writes into the in-memory batch, possibly flushing to the backing database, depending
  on the {@link SyncLevel}.
  
  @return If the operation did not cause a database flush, Optional.absent will be returned.
  Otherwise, if a batch flush is triggered, a Future will be returned. This Future's get()
  method will return null when the database flush is finished, and rethrow any exceptions as
  ExecutionExceptions (see {@link java.util.concurrent.Future}).