/** * This method has poor performance, so use with care. It is currently only used by {@code DGC}. * * @return Remote candidates. */ public Collection<GridCacheMvccCandidate> remoteCandidates() { Collection<GridCacheMvccCandidate> rmtCands = new LinkedList<>(); for (GridDistributedCacheEntry entry : locked()) rmtCands.addAll(entry.remoteMvccSnapshot()); return rmtCands; }
/** * This method has poor performance, so use with care. It is currently only used by {@code DGC}. * * @return Local candidates. */ public Collection<GridCacheMvccCandidate> localCandidates() { Collection<GridCacheMvccCandidate> locCands = new LinkedList<>(); for (GridDistributedCacheEntry entry : locked()) { try { locCands.addAll(entry.localCandidates()); } catch (GridCacheEntryRemovedException ignore) { // No-op. } } return locCands; }
/** * @param leftNodeId Left node ID. * @param topVer Topology version. */ public void removeExplicitNodeLocks(UUID leftNodeId, AffinityTopologyVersion topVer) { for (GridDistributedCacheEntry entry : locked()) { try { entry.removeExplicitNodeLocks(leftNodeId); entry.context().evicts().touch(entry, topVer); } catch (GridCacheEntryRemovedException ignore) { if (log.isDebugEnabled()) log.debug( "Attempted to remove node locks from removed entry in mvcc manager " + "disco callback (will ignore): " + entry); } } }
/** * @param entries Entries. * @param dhtVer DHT version. * @param pendingVers Pending versions. * @param committedVers Committed versions. * @param rolledbackVers Rolled back versions. */ void readyNearLocks( Collection<IgniteTxEntry> entries, GridCacheVersion dhtVer, Collection<GridCacheVersion> pendingVers, Collection<GridCacheVersion> committedVers, Collection<GridCacheVersion> rolledbackVers) { for (IgniteTxEntry txEntry : entries) { while (true) { GridCacheContext cacheCtx = txEntry.cached().context(); assert cacheCtx.isNear(); GridDistributedCacheEntry entry = (GridDistributedCacheEntry) txEntry.cached(); try { // Handle explicit locks. GridCacheVersion explicit = txEntry.explicitVersion(); if (explicit == null) { entry.readyNearLock(xidVer, dhtVer, committedVers, rolledbackVers, pendingVers); } break; } catch (GridCacheEntryRemovedException ignored) { assert entry.obsoleteVersion() != null; if (log.isDebugEnabled()) log.debug( "Replacing obsolete entry in remote transaction [entry=" + entry + ", tx=" + this + ']'); // Replace the entry. txEntry.cached(txEntry.context().cache().entryEx(txEntry.key())); } } } }
/** {@inheritDoc} */ @Override public void onFreed(GridDistributedCacheEntry entry) { if (entry.isNear()) nearLocked.remove(entry.txKey()); else locked.remove(entry.txKey()); }
/** {@inheritDoc} */ @Override public void onLocked(GridDistributedCacheEntry entry) { if (entry.isNear()) nearLocked.put(entry.txKey(), entry); else locked.put(entry.txKey(), entry); }