map(write, topVer, mappings, txMapping, remap, topLocked); map(read, topVer, mappings, txMapping, remap, topLocked); keyLockFut.onAllKeysAdded(); if (isDone()) { if (log.isDebugEnabled()) log.debug("Abandoning (re)map because future is done: " + this); checkOnePhase(txMapping); add((IgniteInternalFuture)fut); add((IgniteInternalFuture)new MiniFuture(this, m, ++miniId)); Collection<IgniteInternalFuture<?>> futs = (Collection)futures(); if (skipFuture(remap, fut0)) continue; IgniteCheckedException err = prepare(fut, txMapping.transactionNodes(), locNearEntriesFut); if (skipFuture(remap, fut0)) continue; markInitialized();
/** * Finds pending mini future by the given mini ID. * * @param miniId Mini ID to find. * @return Mini future. */ private MiniFuture miniFuture(int miniId) { // We iterate directly over the futs collection here to avoid copy. synchronized (GridNearOptimisticSerializableTxPrepareFuture.this) { int size = futuresCountNoLock(); // Avoid iterator creation. for (int i = 0; i < size; i++) { IgniteInternalFuture fut = future(i); if (!isMini(fut)) continue; MiniFuture mini = (MiniFuture)fut; if (mini.futureId() == miniId) { if (!mini.isDone()) return mini; else return null; } } } return null; }
/** {@inheritDoc} */ @Override public boolean onDone(IgniteInternalTx t, Throwable err) { if (isDone()) return false; if (err != null) { ERR_UPD.compareAndSet(this, null, err); if (keyLockFut != null) keyLockFut.onDone(err); } return onComplete(); }
/** {@inheritDoc} */ @Override public void onResult(UUID nodeId, GridNearTxPrepareResponse res) { if (!isDone()) { MiniFuture mini = miniFuture(res.miniId()); if (mini != null) mini.onResult(res, true); } }
/** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; for (IgniteInternalFuture<?> fut : futures()) { if (isMini(fut)) { MiniFuture f = (MiniFuture) fut; if (f.primary().id().equals(nodeId)) { ClusterTopologyCheckedException e = new ClusterTopologyCheckedException("Remote node left grid: " + nodeId); e.retryReadyFuture(cctx.nextAffinityReadyFuture(tx.topologyVersion())); f.onNodeLeft(e); found = true; } } } return found; }
boolean nearEntries = fut == locNearEntriesFut; GridNearTxPrepareRequest req = createRequest(txNodes, fut, timeout, nearEntries ? m.nearEntriesWrites() : m.colocatedEntriesWrites()); prepareLocal(req, fut, nearEntries); GridNearTxPrepareRequest req = createRequest(txNodes, fut, timeout, m.writes()); prepareLocal(req, fut, m.hasNearCacheEntries()); GridNearTxPrepareRequest req = createRequest(txNodes, fut, timeout,
Collection<IgniteInternalFuture<?>> futs = (Collection)parent.futures(); parent.onPrepareResponse(m, res, updateMapping);
onDone(new ClusterTopologyServerNotFoundException("Failed to map keys to nodes " + "(partition is not mapped to any node) [key=" + entry.key() + ", partition=" + cacheCtx.affinity().partition(entry.key()) + ", topVer=" + topVer + ']')); keyLockFut = new KeyLockFuture(); add((IgniteInternalFuture)keyLockFut);
/** * @param remap Remap flag. * @param fut Future. * @return {@code True} if skip future during remap. */ private boolean skipFuture(boolean remap, IgniteInternalFuture<?> fut) { return !(isMini(fut)) || (remap && (((MiniFuture)fut).rcvRes == 1)); }
/** {@inheritDoc} */ @Override public String toString() { Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() { @Override public String apply(IgniteInternalFuture<?> f) { if (isMini(f)) { return "[node=" + ((MiniFuture)f).primary().id() + ", loc=" + ((MiniFuture)f).primary().isLocal() + ", done=" + f.isDone() + ", err=" + f.error() + "]"; } else return f.toString(); } }); return S.toString(GridNearOptimisticSerializableTxPrepareFuture.class, this, "innerFuts", futs, "remap", remapFut != null, "tx", tx, "super", super.toString()); }
new GridNearOptimisticSerializableTxPrepareFuture(cctx, this) : new GridNearOptimisticTxPrepareFuture(cctx, this);
/** {@inheritDoc} */ @Override public void onResult(UUID nodeId, GridNearTxPrepareResponse res) { if (!isDone()) { MiniFuture mini = miniFuture(res.miniId()); if (mini != null) mini.onResult(res, true); } }
/** {@inheritDoc} */ @Override public boolean onDone(IgniteInternalTx t, Throwable err) { if (isDone()) return false; if (err != null) { ERR_UPD.compareAndSet(this, null, err); if (keyLockFut != null) keyLockFut.onDone(err); } return onComplete(); }
/** {@inheritDoc} */ @Override public boolean onNodeLeft(UUID nodeId) { boolean found = false; for (IgniteInternalFuture<?> fut : futures()) { if (isMini(fut)) { MiniFuture f = (MiniFuture) fut; if (f.primary().id().equals(nodeId)) { ClusterTopologyCheckedException e = new ClusterTopologyCheckedException("Remote node left grid: " + nodeId); e.retryReadyFuture(cctx.nextAffinityReadyFuture(tx.topologyVersion())); f.onNodeLeft(e); found = true; } } } return found; }
boolean nearEntries = fut == locNearEntriesFut; GridNearTxPrepareRequest req = createRequest(txNodes, fut, timeout, nearEntries ? m.nearEntriesWrites() : m.colocatedEntriesWrites()); prepareLocal(req, fut, nearEntries); GridNearTxPrepareRequest req = createRequest(txNodes, fut, timeout, m.writes()); prepareLocal(req, fut, m.hasNearCacheEntries()); GridNearTxPrepareRequest req = createRequest(txNodes, fut, timeout,
Collection<IgniteInternalFuture<?>> futs = (Collection)parent.futures(); parent.onPrepareResponse(m, res, updateMapping);
onDone(new ClusterTopologyServerNotFoundException("Failed to map keys to nodes " + "(partition is not mapped to any node) [key=" + entry.key() + ", partition=" + cacheCtx.affinity().partition(entry.key()) + ", topVer=" + topVer + ']')); keyLockFut = new KeyLockFuture(); add((IgniteInternalFuture)keyLockFut);
/** * @param remap Remap flag. * @param fut Future. * @return {@code True} if skip future during remap. */ private boolean skipFuture(boolean remap, IgniteInternalFuture<?> fut) { return !(isMini(fut)) || (remap && (((MiniFuture)fut).rcvRes == 1)); }
/** {@inheritDoc} */ @Override public String toString() { Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() { @Override public String apply(IgniteInternalFuture<?> f) { if (isMini(f)) { return "[node=" + ((MiniFuture)f).primary().id() + ", loc=" + ((MiniFuture)f).primary().isLocal() + ", done=" + f.isDone() + ", err=" + f.error() + "]"; } else return f.toString(); } }); return S.toString(GridNearOptimisticSerializableTxPrepareFuture.class, this, "innerFuts", futs, "remap", remapFut != null, "tx", tx, "super", super.toString()); }
new GridNearOptimisticSerializableTxPrepareFuture(cctx, this) : new GridNearOptimisticTxPrepareFuture(cctx, this);