/** * @param ctx Cache context. */ public void init(GridCacheContext ctx) { this.ctx = ctx; filter = filterKeys(); }
/** * @return Shared cache iterator. */ @SuppressWarnings("unchecked") private WeakReferenceCloseableIterator<T> sharedCacheIterator() throws IgniteCheckedException { CacheQuery qry = new GridCacheQueryAdapter<>(ctx, SET, null, null, new GridSetQueryPredicate<>(id, collocated), collocated ? hdrPart : null, false, false, null); Collection<ClusterNode> nodes = dataNodes(ctx.affinity().affinityTopologyVersion()); qry.projection(ctx.grid().cluster().forNodes(nodes)); CacheQueryFuture<Map.Entry<T, ?>> fut = qry.execute(); return ctx.itHolder().iterator(fut, new CacheIteratorConverter<T, Map.Entry<T, ?>>() { @Override protected T convert(Map.Entry<T, ?> e) { return e.getKey(); } @Override protected void remove(T item) { GridCacheSetImpl.this.remove(item); } }); }
/** * @param qry Query. * @return Cache set items iterator. */ private GridCloseableIterator<IgniteBiTuple<K, V>> sharedCacheSetIterator(GridCacheQueryAdapter<?> qry) throws IgniteCheckedException { final GridSetQueryPredicate filter = (GridSetQueryPredicate)qry.scanFilter(); IgniteUuid id = filter.setId(); GridCacheQueryAdapter<CacheEntry<K, ?>> qry0 = new GridCacheQueryAdapter<>(cctx, SCAN, new IgniteBiPredicate<Object, Object>() { @Override public boolean apply(Object k, Object v) { return k instanceof SetItemKey && id.equals(((SetItemKey)k).setId()); } }, new IgniteClosure<Map.Entry, Object>() { @Override public Object apply(Map.Entry entry) { return new IgniteBiTuple<K, V>((K)((SetItemKey)entry.getKey()).item(), (V)Boolean.TRUE); } }, qry.partition(), false, true, qry.isDataPageScanEnabled()); return scanQueryLocal(qry0, false); }
/** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public int size() { try { onAccess(); if (separated) { // Non collocated IgniteSet uses a separate cache which contains additional header element. return cache.sizeAsync(new CachePeekMode[] {}).get() - 1; } CacheQuery qry = new GridCacheQueryAdapter<>(ctx, SET, null, null, new GridSetQueryPredicate<>(id, collocated), collocated ? hdrPart : null, false, false, null); Collection<ClusterNode> nodes = dataNodes(ctx.affinity().affinityTopologyVersion()); qry.projection(ctx.grid().cluster().forNodes(nodes)); CacheQueryFuture<Integer> qryFut = qry.execute(new SumReducer()); int sum = 0; Integer val; while((val = qryFut.next()) != null) sum += val; return sum; } catch (IgniteCheckedException e) { throw U.convertException(e); } }
/** * @param qry Query. * @return Cache set items iterator. */ private GridCloseableIterator<IgniteBiTuple<K, V>> sharedCacheSetIterator( GridCacheQueryAdapter<?> qry) throws IgniteCheckedException { final GridSetQueryPredicate filter = (GridSetQueryPredicate)qry.scanFilter(); IgniteUuid id = filter.setId(); GridCacheQueryAdapter<CacheEntry<K, ?>> qry0 = new GridCacheQueryAdapter<>(cctx, SCAN, new IgniteBiPredicate<Object, Object>() { @Override public boolean apply(Object k, Object v) { return k instanceof SetItemKey && id.equals(((SetItemKey)k).setId()); } }, new IgniteClosure<Map.Entry, Object>() { @Override public Object apply(Map.Entry entry) { return new IgniteBiTuple<K, V>((K)((SetItemKey)entry.getKey()).item(), (V)Boolean.TRUE); } }, qry.partition(), false, true); return scanQueryLocal(qry0, false); }
/** * @return Shared cache iterator. */ @SuppressWarnings("unchecked") private WeakReferenceCloseableIterator<T> sharedCacheIterator() throws IgniteCheckedException { CacheQuery qry = new GridCacheQueryAdapter<>(ctx, SET, null, null, new GridSetQueryPredicate<>(id, collocated), collocated ? hdrPart : null, false, false); Collection<ClusterNode> nodes = dataNodes(ctx.affinity().affinityTopologyVersion()); qry.projection(ctx.grid().cluster().forNodes(nodes)); CacheQueryFuture<Map.Entry<T, ?>> fut = qry.execute(); return ctx.itHolder().iterator(fut, new CacheIteratorConverter<T, Map.Entry<T, ?>>() { @Override protected T convert(Map.Entry<T, ?> e) { return e.getKey(); } @Override protected void remove(T item) { GridCacheSetImpl.this.remove(item); } }); }
/** * @param ctx Cache context. */ public void init(GridCacheContext ctx) { this.ctx = ctx; filter = filterKeys(); }
/** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public int size() { try { onAccess(); if (separated) { // Non collocated IgniteSet uses a separate cache which contains additional header element. return cache.sizeAsync(new CachePeekMode[] {}).get() - 1; } CacheQuery qry = new GridCacheQueryAdapter<>(ctx, SET, null, null, new GridSetQueryPredicate<>(id, collocated), collocated ? hdrPart : null, false, false); Collection<ClusterNode> nodes = dataNodes(ctx.affinity().affinityTopologyVersion()); qry.projection(ctx.grid().cluster().forNodes(nodes)); CacheQueryFuture<Integer> qryFut = qry.execute(new SumReducer()); int sum = 0; Integer val; while((val = qryFut.next()) != null) sum += val; return sum; } catch (IgniteCheckedException e) { throw U.convertException(e); } }