/** * @param cached Entry. * @return {@code True} if locked. * @throws GridCacheEntryRemovedException If removed. */ private boolean locked(GridCacheEntryEx cached) throws GridCacheEntryRemovedException { // Reentry-aware check. return (cached.lockedLocally(lockVer) || (cached.lockedByThread(threadId))) && filter(cached); // If filter failed, lock is failed. }
/** {@inheritDoc} */ @Override public boolean isLockedByThread(K key) { A.notNull(key, "key"); if (keyCheck) validateCacheKey(key); try { KeyCacheObject cacheKey = ctx.toCacheKeyObject(key); GridCacheEntryEx e = entry0(cacheKey, ctx.shared().exchange().readyAffinityVersion(), false, false); if (e == null) return false; // Delegate to near if dht. if (e.isDht() && CU.isNearEnabled(ctx)) { IgniteInternalCache<K, V> near = ctx.isDht() ? ctx.dht().near() : ctx.near(); return near.isLockedByThread(key) || e.lockedByThread(); } return e.lockedByThread(); } catch (GridCacheEntryRemovedException ignore) { return false; } }
/** {@inheritDoc} */ @Override public boolean ownsLock(GridCacheEntryEx entry) throws GridCacheEntryRemovedException { GridCacheContext<?, ?> cacheCtx = entry.context(); IgniteTxEntry txEntry = entry(entry.txKey()); GridCacheVersion explicit = txEntry == null ? null : txEntry.explicitVersion(); return local() && !cacheCtx.isDht() ? entry.lockedByThread(threadId()) || (explicit != null && entry.lockedBy(explicit)) : // If candidate is not there, then lock was explicit. // Otherwise, check if entry is owned by version. !entry.hasLockCandidate(xidVersion()) || entry.lockedBy(xidVersion()); }
entry.lockedByThread(threadId, xidVer)) { throw new IgniteCheckedException("Cannot access key within transaction if lock is " + "externally held [key=" + CU.value(cacheKey, cacheCtx, false) +
assert cached.detached() || cached.lockedByThread(threadId) || isRollbackOnly() : "Transaction lock is not acquired [entry=" + cached + ", tx=" + this + ", nodeId=" + cctx.localNodeId() + ", threadId=" + threadId + ']';
/** * @param cached Entry. * @return {@code True} if locked. * @throws GridCacheEntryRemovedException If removed. */ private boolean locked(GridCacheEntryEx cached) throws GridCacheEntryRemovedException { // Reentry-aware check. return (cached.lockedLocally(lockVer) || (cached.lockedByThread(threadId))) && filter(cached); // If filter failed, lock is failed. }
/** {@inheritDoc} */ @Override public boolean isLockedByThread(K key) { A.notNull(key, "key"); if (keyCheck) validateCacheKey(key); try { KeyCacheObject cacheKey = ctx.toCacheKeyObject(key); GridCacheEntryEx e = entry0(cacheKey, ctx.shared().exchange().readyAffinityVersion(), false, false); if (e == null) return false; // Delegate to near if dht. if (e.isDht() && CU.isNearEnabled(ctx)) { IgniteInternalCache<K, V> near = ctx.isDht() ? ctx.dht().near() : ctx.near(); return near.isLockedByThread(key) || e.lockedByThread(); } return e.lockedByThread(); } catch (GridCacheEntryRemovedException ignore) { return false; } }
/** {@inheritDoc} */ @SuppressWarnings("SimplifiableIfStatement") @Override public boolean ownsLock(GridCacheEntryEx entry) throws GridCacheEntryRemovedException { GridCacheContext<?, ?> cacheCtx = entry.context(); IgniteTxEntry txEntry = entry(entry.txKey()); GridCacheVersion explicit = txEntry == null ? null : txEntry.explicitVersion(); return local() && !cacheCtx.isDht() ? entry.lockedByThread(threadId()) || (explicit != null && entry.lockedBy(explicit)) : // If candidate is not there, then lock was explicit. // Otherwise, check if entry is owned by version. !entry.hasLockCandidate(xidVersion()) || entry.lockedBy(xidVersion()); }
entry.lockedByThread(threadId, xidVer)) { throw new IgniteCheckedException("Cannot access key within transaction if lock is " + "externally held [key=" + CU.value(cacheKey, cacheCtx, false) +
assert cached.detached() || cached.lockedByThread(threadId) || isRollbackOnly() : "Transaction lock is not acquired [entry=" + cached + ", tx=" + this + ", nodeId=" + cctx.localNodeId() + ", threadId=" + threadId + ']';