/** * Merges current node active queries with the given ones. * * @param nodeId Node ID. * @param nodeTrackers Active query trackers started on node. */ private void mergeToActiveQueries(UUID nodeId, GridLongList nodeTrackers) { if (nodeTrackers == null || nodeTrackers.isEmpty() || prevQueriesDone) return; Set<Long> currTrackers = activeQueries.get(nodeId); if (currTrackers == null) activeQueries.put(nodeId, currTrackers = addAll(nodeTrackers, null)); else addAll(nodeTrackers, currTrackers); // Check if there were any acks had been arrived before. Set<Long> currAcks = rcvdAcks.get(nodeId); if (!currTrackers.isEmpty() && currAcks != null && !currAcks.isEmpty()) { Collection<Long> intersection = new HashSet<>(currAcks); intersection.retainAll(currTrackers); currAcks.removeAll(intersection); currTrackers.removeAll(intersection); if (currTrackers.isEmpty()) activeQueries.remove(nodeId); if (currAcks.isEmpty()) rcvdAcks.remove(nodeId); } if (initDone && !prevQueriesDone) prevQueriesDone = activeQueries.isEmpty() && rcvdAcks.isEmpty(); }
/** * @param l List to add all elements of. */ public void addAll(GridLongList l) { assert l != null; if (l.isEmpty()) return; if (arr == null) arr = new long[4]; int len = arr.length; while (len < idx + l.size()) len <<= 1; arr = Arrays.copyOf(arr, len); System.arraycopy(l.arr, 0, arr, idx, l.size()); idx += l.size(); }
/** {@inheritDoc} */ @Override public Iterator<?> values() { assert !vals.isEmpty(); final ValueIterator valIter = new ValueIterator(vals.get(0), in.valReader); return new Iterator<Object>() { /** */ private int idx; @Override public boolean hasNext() { if (!valIter.hasNext()) { if (++idx == vals.size()) return false; valIter.head(vals.get(idx)); assert valIter.hasNext(); } return true; } @Override public Object next() { return valIter.next(); } @Override public void remove() { valIter.remove(); } }; }
/** {@inheritDoc} */ @Override public boolean next() { if (prevKey == null) { // First call. if (!in.next()) return false; prevKey = in.key(); assert prevKey != null; in.keyReader.resetReusedObject(null); // We need 2 instances of key object for comparison. vals.add(value(in.metaPtr)); } else { if (in.metaPtr == 0) // We reached the end of the input. return false; vals.clear(); vals.add(value(in.metaPtr)); in.keyReader.resetReusedObject(prevKey); // Switch key instances. prevKey = nextKey; } while (in.next()) { // Fill with head value pointers with equal keys. if (grpCmp.compare(prevKey, nextKey = in.key()) == 0) vals.add(value(in.metaPtr)); else break; } assert !vals.isEmpty(); return true; }
/** * @param nodeId Sender node ID. * @param res Deferred atomic update response. */ private void processDhtAtomicDeferredUpdateResponse(UUID nodeId, GridDhtAtomicDeferredUpdateResponse res) { GridLongList futIds = res.futureIds(); assert futIds != null && !futIds.isEmpty() : futIds; for (int i = 0; i < futIds.size(); i++) { long id = futIds.get(i); GridDhtAtomicAbstractUpdateFuture updateFut = (GridDhtAtomicAbstractUpdateFuture)ctx.mvcc().atomicFuture(id); if (updateFut != null) { if (msgLog.isDebugEnabled()) { msgLog.debug("Received DHT atomic deferred update response [futId=" + id + ", writeVer=" + res + ", node=" + nodeId + ']'); } updateFut.onDeferredResponse(nodeId); } else { U.warn(msgLog, "Failed to find DHT update future for deferred update response [futId=" + id + ", nodeId=" + nodeId + ", res=" + res + ']'); } } }
while (!collisions.isEmpty());
GridLongList list1 = map.removeIf(i, i + 1, pred); assertTrue(list1.isEmpty()); // clear should not be successful.
/** * @param futId Future ID. * @param txs Transactions to wait for. */ public MvccWaitTxsRequest(long futId, GridLongList txs) { assert txs != null && !txs.isEmpty() : txs; this.futId = futId; this.txs = txs; }
/** * Merges current node active queries with the given ones. * * @param nodeId Node ID. * @param nodeTrackers Active query trackers started on node. */ private void mergeToActiveQueries(UUID nodeId, GridLongList nodeTrackers) { if (nodeTrackers == null || nodeTrackers.isEmpty() || prevQueriesDone) return; Set<Long> currTrackers = activeQueries.get(nodeId); if (currTrackers == null) activeQueries.put(nodeId, currTrackers = addAll(nodeTrackers, null)); else addAll(nodeTrackers, currTrackers); // Check if there were any acks had been arrived before. Set<Long> currAcks = rcvdAcks.get(nodeId); if (!currTrackers.isEmpty() && currAcks != null && !currAcks.isEmpty()) { Collection<Long> intersection = new HashSet<>(currAcks); intersection.retainAll(currTrackers); currAcks.removeAll(intersection); currTrackers.removeAll(intersection); if (currTrackers.isEmpty()) activeQueries.remove(nodeId); if (currAcks.isEmpty()) rcvdAcks.remove(nodeId); } if (initDone && !prevQueriesDone) prevQueriesDone = activeQueries.isEmpty() && rcvdAcks.isEmpty(); }
/** * @param l List to add all elements of. */ public void addAll(GridLongList l) { assert l != null; if (l.isEmpty()) return; if (arr == null) arr = new long[4]; int len = arr.length; while (len < idx + l.size()) len <<= 1; arr = Arrays.copyOf(arr, len); System.arraycopy(l.arr, 0, arr, idx, l.size()); idx += l.size(); }
/** {@inheritDoc} */ @Override public IgniteInternalFuture<Void> waitTxsFuture(UUID crdId, GridLongList txs) { assert crdId != null; assert txs != null && !txs.isEmpty(); WaitAckFuture fut = new WaitAckFuture(futIdCntr.incrementAndGet(), crdId, false); ackFuts.put(fut.id, fut); try { sendMessage(crdId, new MvccWaitTxsRequest(fut.id, txs)); } catch (IgniteCheckedException e) { if (ackFuts.remove(fut.id) != null) { if (e instanceof ClusterTopologyCheckedException) fut.onDone(); // No need to wait, new coordinator will be assigned, finish without error. else fut.onDone(e); } } return fut; }
/** * @param nodeId Sender node ID. * @param res Deferred atomic update response. */ @SuppressWarnings("unchecked") private void processDhtAtomicDeferredUpdateResponse(UUID nodeId, GridDhtAtomicDeferredUpdateResponse res) { GridLongList futIds = res.futureIds(); assert futIds != null && !futIds.isEmpty() : futIds; for (int i = 0; i < futIds.size(); i++) { long id = futIds.get(i); GridDhtAtomicAbstractUpdateFuture updateFut = (GridDhtAtomicAbstractUpdateFuture)ctx.mvcc().atomicFuture(id); if (updateFut != null) { if (msgLog.isDebugEnabled()) { msgLog.debug("Received DHT atomic deferred update response [futId=" + id + ", writeVer=" + res + ", node=" + nodeId + ']'); } updateFut.onDeferredResponse(nodeId); } else { U.warn(msgLog, "Failed to find DHT update future for deferred update response [futId=" + id + ", nodeId=" + nodeId + ", res=" + res + ']'); } } }