/** {@inheritDoc} */
  @Override
  public boolean onNodeLeft(UUID nodeId) {
    for (GridFuture<?> fut : futures())
      if (isMini(fut)) {
        MiniFuture f = (MiniFuture) fut;

        if (f.nodeId().equals(nodeId)) {
          f.onNodeLeft();

          return true;
        }
      }

    return false;
  }
  /**
   * @param nodeId Node ID.
   * @param res Response.
   */
  public void onResult(UUID nodeId, GridCachePessimisticCheckCommittedTxResponse<K, V> res) {
    if (!isDone()) {
      for (GridFuture<GridCacheCommittedTxInfo<K, V>> fut : pending()) {
        if (isMini(fut)) {
          MiniFuture f = (MiniFuture) fut;

          if (f.futureId().equals(res.miniId())) {
            assert f.nodeId().equals(nodeId);

            f.onResult(res);

            break;
          }
        }
      }
    }
  }