/** * Sets thread local cache operation context. * * @param opCtx Operation context. */ public void operationContextPerCall(@Nullable CacheOperationContext opCtx) { if (nearContext()) dht().near().context().opCtxPerCall.set(opCtx); else opCtxPerCall.set(opCtx); }
/** * @return DHT cache. */ private GridDhtCacheAdapter<K, V> dht() { return cache().dht(); }
/** * @param keys Keys. * @return If near entries for given keys are locked. */ public boolean isAllLockedNearOnly(Iterable<? extends K> keys) { A.notNull(keys, "keys"); for (K key : keys) if (!isLockedNearOnly(key)) return false; return true; }
/** {@inheritDoc} */ @Override public List<GridCacheClearAllRunnable<K, V>> splitClearLocally(boolean srv, boolean near, boolean readers) { assert configuration().getNearConfiguration() != null; if (ctx.affinityNode()) { GridCacheVersion obsoleteVer = ctx.versions().next(); List<GridCacheClearAllRunnable<K, V>> dhtJobs = dht().splitClearLocally(srv, near, readers); List<GridCacheClearAllRunnable<K, V>> res = new ArrayList<>(dhtJobs.size()); for (GridCacheClearAllRunnable<K, V> dhtJob : dhtJobs) res.add(new GridNearCacheClearAllRunnable<>(this, obsoleteVer, dhtJob)); return res; } else return super.splitClearLocally(srv, near, readers); }
/** * Safely performs {@code updateClojure} operation on near cache entry with given {@code entryKey}. * In case of {@link GridCacheEntryRemovedException} operation will be retried. * * @param cacheCtx Cache context. * @param entryKey Entry key. * @param updateClojure Near entry update clojure. * @throws IgniteCheckedException If update is failed. */ private void updateNearEntrySafely( GridCacheContext cacheCtx, KeyCacheObject entryKey, NearEntryUpdateClojure<GridCacheEntryEx> updateClojure ) throws IgniteCheckedException { while (true) { GridCacheEntryEx nearCached = cacheCtx.dht().near().peekEx(entryKey); if (nearCached == null) break; try { updateClojure.apply(nearCached); break; } catch (GridCacheEntryRemovedException ignored) { if (log.isDebugEnabled()) log.debug("Got removed entry during transaction commit (will retry): " + nearCached); cacheCtx.dht().near().removeEntry(nearCached); } } }
/** * @param key Key. * @return Entry. */ @Nullable public GridNearCacheEntry peekExx(KeyCacheObject key) { return (GridNearCacheEntry)peekEx(key); }
dht = near.dht(); GridCacheVersion obsoleteVer = ctx.versions().next(); for (GridCacheEntryEx e : near.allEntries()) { if (!e.valid(topVer) && e.markObsolete(obsoleteVer)) near.removeEntry(e);
(GridNearCacheAdapter<AffinityKey<String>, Object>)((IgniteKernal)g). <AffinityKey<String>, Object>internalCache(DEFAULT_CACHE_NAME); GridDhtCacheAdapter<AffinityKey<String>, Object> dht = near.dht(); GridNearCacheEntry nearEntry = (GridNearCacheEntry)near.peekEx(k); GridDhtCacheEntry dhtEntry = (GridDhtCacheEntry)dht.peekEx(k);
assertNull(near(pri).peekEx(CNTR_KEY)); near(g).context().tm().printMemoryStats(); assertEquals("Counter check failed on grid [igniteInstanceName=" + e.getKey() + ", dhtEntry=" + dht(G.ignite(e.getKey())).peekEx(CNTR_KEY) + ", nearEntry=" + near(G.ignite(e.getKey())).peekEx(CNTR_KEY) + ']', exp, e.getValue().intValue());
assertTrue("Invalid near entry: " + nearEntry3, nearEntry3.valid(topVer)); assertNotNull(near(0).peekEx(key)); assertNull(near(1).peekEx(key)); assertNull(near(0).peekEx(key)); assertNull(near(1).peekEx(key)); assertFalse(near(0).isLockedNearOnly(key)); assertFalse(cache.isLocalLocked(key, true));
entry = cache().entryExx(info.key(), topVer);
/** * @param key Key. * @param topVer Topology version. * @return Entry. */ public GridNearCacheEntry entryExx(KeyCacheObject key, AffinityTopologyVersion topVer) { return (GridNearCacheEntry)entryEx(key, topVer); }
/** @throws Exception If failed. */ @Test public void testRemove() throws Exception { IgniteCache<Object, Object> near = jcache(); assertEquals("DHT entries: " + dht().entries(), 0, dht().size()); assertEquals("Near entries: " + near().entries(), 0, near().size()); assertEquals(0, near.size()); for (int i = 0; i < 10; i++) near.put(i, Integer.toString(i)); assertEquals("DHT entries: " + dht().entries(), 10, dht().size()); assertEquals("Near entries: " + near().entries(), 10, near().size()); assertEquals(10, near.size()); near.remove(0); assertEquals("DHT entries: " + dht().entries(), 9, dht().size()); assertEquals("Near entries: " + near().entries(), 9, near().size()); assertEquals(9, near.size()); near.removeAll(); assertEquals("DHT entries: " + dht().entries(), 0, dht().size()); assertEquals("Near entries: " + near().entries(), 0, near().size()); assertEquals(0, near.size()); }
/** {@inheritDoc} */ @Override public void start() throws IgniteCheckedException { if (map == null) { map = new GridCacheLocalConcurrentMap( ctx, entryFactory(), ctx.config().getNearConfiguration().getNearStartSize()); } }
/** * @param idx Grid index. * @param key Key. * @return Near entry. */ @Nullable private GridNearCacheEntry nearEntry(int idx, int key) { return (GridNearCacheEntry)near(idx).peekEx(key); }