예제 #1
0
  /**
   * @param nodeId Sender.
   * @param res Result.
   */
  void onResult(UUID nodeId, GridNearLockResponse<K, V> res) {
    if (!isDone()) {
      if (log.isDebugEnabled())
        log.debug(
            "Received lock response from node [nodeId="
                + nodeId
                + ", res="
                + res
                + ", fut="
                + this
                + ']');

      for (GridFuture<Boolean> fut : pending()) {
        if (isMini(fut)) {
          MiniFuture mini = (MiniFuture) fut;

          if (mini.futureId().equals(res.miniId())) {
            assert mini.node().id().equals(nodeId);

            if (log.isDebugEnabled())
              log.debug("Found mini future for response [mini=" + mini + ", res=" + res + ']');

            mini.onResult(res);

            if (log.isDebugEnabled())
              log.debug(
                  "Future after processed lock response [fut="
                      + this
                      + ", mini="
                      + mini
                      + ", res="
                      + res
                      + ']');

            return;
          }
        }
      }

      U.warn(
          log,
          "Failed to find mini future for response (perhaps due to stale message) [res="
              + res
              + ", fut="
              + this
              + ']');
    } else if (log.isDebugEnabled())
      log.debug(
          "Ignoring lock response from node (future is done) [nodeId="
              + nodeId
              + ", res="
              + res
              + ", fut="
              + this
              + ']');
  }
  /**
   * @param nodeId Sender.
   * @param res Result.
   */
  void onResult(UUID nodeId, GridNearTxFinishResponse<K, V> res) {
    if (!isDone())
      for (GridFuture<GridCacheTx> fut : futures()) {
        if (isMini(fut)) {
          MiniFuture f = (MiniFuture) fut;

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

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

        if (f.node().id().equals(nodeId)) {
          // Remove previous mapping.
          mappings.remove(nodeId);

          f.onResult(new GridTopologyException("Remote node left grid (will fail): " + nodeId));

          return true;
        }
      }

    return false;
  }
예제 #4
0
  /**
   * @param nodeId Left node ID
   * @return {@code True} if node was in the list.
   */
  @SuppressWarnings({"ThrowableInstanceNeverThrown"})
  @Override
  public boolean onNodeLeft(UUID nodeId) {
    boolean found = false;

    for (GridFuture<?> fut : futures()) {
      if (isMini(fut)) {
        MiniFuture f = (MiniFuture) fut;

        if (f.node().id().equals(nodeId)) {
          if (log.isDebugEnabled())
            log.debug(
                "Found mini-future for left node [nodeId="
                    + nodeId
                    + ", mini="
                    + f
                    + ", fut="
                    + this
                    + ']');

          f.onResult(newTopologyException(null, nodeId));

          found = true;
        }
      }
    }

    if (!found) {
      if (log.isDebugEnabled())
        log.debug(
            "Near lock future does not have mapping for left node (ignoring) [nodeId="
                + nodeId
                + ", fut="
                + this
                + ']');
    }

    return found;
  }