class ConcurrentRowCallables {

  public void addCallable(RowCallable<R> callable) throws IOException {
    TableAndRow tableAndRow = callable.getTableAndRow();
    if (this.futureMaps.containsKey(tableAndRow) || this.exceptionMaps.containsKey(tableAndRow)) {
      throw new ThemisFatalException("add duplicated row callable, tableAndRow=" + tableAndRow);
    }
    try {
      Future<R> future = this.threadPool.submit(callable);
      this.futureMaps.put(tableAndRow, future);
    } catch (Throwable e) {
      exceptionMaps.put(tableAndRow, new IOException(e));
    }
  }

  public  ConcurrentRowCallables(ExecutorService threadPool);

}