@Override public void run() { CacheOperationContext old = operationContextPerCall(); operationContextPerCall(opCtx); try { r.run(); } finally { operationContextPerCall(old); } } };
@Override public T call() throws Exception { CacheOperationContext old = operationContextPerCall(); operationContextPerCall(opCtx); try { return r.call(); } finally { operationContextPerCall(old); } } };
/** * Set thread local operation context per call. * * @param opCtx Operation context to guard. * @return Previous operation context set on this thread. */ private CacheOperationContext setOperationContextPerCall(@Nullable CacheOperationContext opCtx) { CacheOperationContext prev = ctx.operationContextPerCall(); if (prev != null || opCtx != null) ctx.operationContextPerCall(opCtx); return prev; }
/** * Gets subject ID per call. * * @param subjId Optional already existing subject ID. * @return Subject ID per call. */ public UUID subjectIdPerCall(@Nullable UUID subjId) { if (subjId != null) return subjId; return subjectIdPerCall(subjId, operationContextPerCall()); }
/** * @return Keep binary flag. */ public boolean keepBinary() { CacheOperationContext opCtx = operationContextPerCall(); return opCtx != null && opCtx.isKeepBinary(); }
/** * @return Expiry policy. */ @Nullable private ExpiryPolicy expiryPerCall() { CacheOperationContext opCtx = ctx.operationContextPerCall(); ExpiryPolicy expiry = opCtx != null ? opCtx.expiry() : null; if (expiry == null) expiry = ctx.expiry(); return expiry; }
/** * @return Internal proxy. */ @Override public GridCacheProxyImpl<K, V> internalProxy() { GridCacheContext<K, V> ctx = getContextSafe(); IgniteInternalCache<K, V> delegate = getDelegateSafe(); return new GridCacheProxyImpl<>(ctx, delegate, ctx.operationContextPerCall()); }
/** {@inheritDoc} */ @Override protected V getAndPut0(K key, V val, @Nullable CacheEntryPredicate filter) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); return (V)updateAllInternal(UPDATE, Collections.singleton(key), Collections.singleton(val), null, expiryPerCall(), true, false, filter, ctx.writeThrough(), ctx.readThrough(), opCtx != null && opCtx.isKeepBinary()); }
/** {@inheritDoc} */ @Override protected void putAll0(Map<? extends K, ? extends V> m) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); updateAllInternal(UPDATE, m.keySet(), m.values(), null, expiryPerCall(), false, false, null, ctx.writeThrough(), ctx.readThrough(), opCtx != null && opCtx.isKeepBinary()); }
/** {@inheritDoc} */ @Override protected boolean put0(K key, V val, CacheEntryPredicate filter) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); Boolean res = (Boolean)updateAllInternal(UPDATE, Collections.singleton(key), Collections.singleton(val), null, expiryPerCall(), false, false, filter, ctx.writeThrough(), ctx.readThrough(), opCtx != null && opCtx.isKeepBinary()); assert res != null; return res; }
/** {@inheritDoc} */ @Override protected V getAndRemove0(K key) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); return (V)updateAllInternal(DELETE, Collections.singleton(key), null, null, expiryPerCall(), true, false, null, ctx.writeThrough(), ctx.readThrough(), opCtx != null && opCtx.isKeepBinary()); }
/** {@inheritDoc} */ @Override public boolean remove0(K key, final CacheEntryPredicate filter) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); Boolean rmv = (Boolean)updateAllInternal(DELETE, Collections.singleton(key), null, null, expiryPerCall(), false, false, filter, ctx.writeThrough(), ctx.readThrough(), opCtx != null && opCtx.isKeepBinary()); assert rmv != null; return rmv; }
/** * @param prev Previous. */ public void leaveNoLock(CacheOperationContext prev) { ctx.tm().resetContext(); ctx.mvcc().contextReset(); // Unwind eviction notifications. CU.unwindEvicts(ctx); // Return back previous thread local operation context per call. ctx.operationContextPerCall(prev); }
/** {@inheritDoc} */ @Override public Lock lockAll(final Collection<? extends K> keys) { IgniteInternalCache<K, V> delegate = getDelegateSafe(); GridCacheContext<K, V> ctx = getContextSafe(); //TODO: IGNITE-9324: add explicit locks support. MvccUtils.verifyMvccOperationSupport(ctx, "Lock"); return new CacheLockImpl<>(ctx.gate(), delegate, ctx.operationContextPerCall(), keys); }
/** {@inheritDoc} */ @Override public void registerCacheEntryListener(CacheEntryListenerConfiguration<K, V> lsnrCfg) { GridCacheContext<K, V> ctx = getContextSafe(); try { CacheOperationContext opCtx = ctx.operationContextPerCall(); ctx.continuousQueries().executeJCacheQuery(lsnrCfg, false, opCtx != null && opCtx.isKeepBinary()); } catch (IgniteCheckedException | IgniteException e) { throw cacheException(e); } }
/** {@inheritDoc} */ @Override public void removeAll0(Collection<? extends K> keys) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); updateAllInternal(DELETE, keys, null, null, expiryPerCall(), false, false, null, ctx.writeThrough(), ctx.readThrough(), opCtx != null && opCtx.isKeepBinary()); }
/** {@inheritDoc} */ @Override public final V getForcePrimary(K key) throws IgniteCheckedException { String taskName = ctx.kernalContext().job().currentTaskName(); CacheOperationContext opCtx = ctx.operationContextPerCall(); return getAllAsync( F.asList(key), /*force primary*/true, /*skip tx*/false, /*subject id*/null, taskName, /*deserialize cache objects*/true, opCtx != null && opCtx.recovery(), /*skip values*/false, /*need ver*/false).get().get(key); }
/** {@inheritDoc} */ @Override public IgniteInternalFuture<?> removeAllAsync() { GridFutureAdapter<Void> opFut = new GridFutureAdapter<>(); AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion(); CacheOperationContext opCtx = ctx.operationContextPerCall(); removeAllAsync(opFut, topVer, opCtx != null && opCtx.skipStore(), opCtx != null && opCtx.isKeepBinary()); return opFut; }
/** {@inheritDoc} */ @Override public final IgniteInternalFuture<Map<K, V>> getAllOutTxAsync(Set<? extends K> keys) { String taskName = ctx.kernalContext().job().currentTaskName(); CacheOperationContext opCtx = ctx.operationContextPerCall(); return getAllAsync(keys, !ctx.config().isReadFromBackup(), /*skip tx*/true, null, taskName, !(opCtx != null && opCtx.isKeepBinary()), opCtx != null && opCtx.recovery(), /*skip values*/false, /*need ver*/false); }
/** {@inheritDoc} */ @Override protected Map<K, V> getAll0(Collection<? extends K> keys, boolean deserializeBinary, boolean needVer) throws IgniteCheckedException { CacheOperationContext opCtx = ctx.operationContextPerCall(); return getAllAsyncInternal(keys, !ctx.config().isReadFromBackup(), null, ctx.kernalContext().job().currentTaskName(), deserializeBinary, opCtx != null && opCtx.recovery(), false, needVer, false).get(); }