ignite-916 Eviction policy should evict cache entries when memory size limit is reached
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/86ed8b82 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/86ed8b82 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/86ed8b82 Branch: refs/heads/ignite-916 Commit: 86ed8b82514152cd9e119e11498ff45d6e49be4e Parents: 9d89d9c Author: agura <ag...@gridgain.com> Authored: Tue May 19 21:32:29 2015 +0300 Committer: agura <ag...@gridgain.com> Committed: Tue May 19 21:32:29 2015 +0300 ---------------------------------------------------------------------- .../cache/eviction/fifo/FifoEvictionPolicy.java | 21 +- .../eviction/fifo/FifoEvictionPolicyMBean.java | 22 + .../cache/eviction/lru/LruEvictionPolicy.java | 106 ++++- .../eviction/lru/LruEvictionPolicyMBean.java | 38 ++ .../eviction/random/RandomEvictionPolicy.java | 2 +- .../eviction/sorted/SortedEvictionPolicy.java | 118 ++++-- .../sorted/SortedEvictionPolicyMBean.java | 22 + .../cache/CacheEvictableEntryImpl.java | 20 +- .../GridCacheEmptyEntriesAbstractSelfTest.java | 2 +- .../eviction/GridCacheEvictionAbstractTest.java | 145 +++++-- ...ridCacheFifoBatchEvictionPolicySelfTest.java | 84 ++-- .../GridCacheFifoEvictionPolicySelfTest.java | 89 ++-- ...idCacheFifoMemoryEvictionPolicySelfTest.java | 49 ++- .../lru/GridCacheLruEvictionPolicySelfTest.java | 82 ++-- .../GridCacheRandomEvictionPolicySelfTest.java | 2 +- ...dCacheSortedBatchEvictionPolicySelfTest.java | 120 +++--- ...acheSortedEvictionPolicyPerformanceTest.java | 4 - .../GridCacheSortedEvictionPolicySelfTest.java | 91 ++-- ...CacheSortedMemoryEvictionPolicySelfTest.java | 410 +++++++++++++++++++ .../IgniteCacheEvictionSelfTestSuite.java | 4 + 20 files changed, 1097 insertions(+), 334 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java index 06f67a2..b69d899 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java @@ -131,22 +131,25 @@ public class FifoEvictionPolicy<K, V> implements EvictionPolicy<K, V>, FifoEvict this.batchSize = batchSize; } - public long getMaxMemSize() { + /** {@inheritDoc} */ + @Override public int getCurrentSize() { + return queue.size(); + } + + /** {@inheritDoc} */ + @Override public long getMaxMemSize() { return maxMemSize; } - public void setMaxMemSize(long maxMemSize) { + /** {@inheritDoc} */ + @Override public void setMaxMemSize(long maxMemSize) { A.ensure(maxMemSize > 0, "maxMemSize > 0"); this.maxMemSize = maxMemSize; } /** {@inheritDoc} */ - @Override public int getCurrentSize() { - return queue.size(); - } - - public long getCurrentMemSize() { + @Override public long getCurrentMemSize() { return memSize.longValue(); } @@ -249,12 +252,10 @@ public class FifoEvictionPolicy<K, V> implements EvictionPolicy<K, V>, FifoEvict int max = this.max; if (max > 0) { - int batchSize = this.batchSize; - int startSize = queue.sizex(); // Shrink only if queue is full. - if (startSize >= max + batchSize) + if (startSize >= max + (maxMem > 0 ? 1 : this.batchSize)) for (int i = max; i < startSize && queue.sizex() > max; i++) if (shrink0() == -1) break; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.java index 63a413e..c9a09ec 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicyMBean.java @@ -63,4 +63,26 @@ public interface FifoEvictionPolicyMBean { */ @MXBeanDescription("Current FIFO queue size.") public int getCurrentSize(); + + /** + * Gets maximum allowed cache size in bytes. + * + * @return maximum allowed cache size in bytes. + */ + @MXBeanDescription("Maximum allowed cache size in bytes.") + public long getMaxMemSize(); + + /** + * Sets maximum allowed cache size in bytes. + */ + @MXBeanDescription("Set maximum allowed cache size in bytes.") + public void setMaxMemSize(long maxMemSize); + + /** + * Gets current queue size in bytes. + * + * @return current queue size in bytes. + */ + @MXBeanDescription("Current FIFO queue size in bytes.") + public long getCurrentMemSize(); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java index 309d577..bf4051d 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java @@ -39,6 +39,15 @@ public class LruEvictionPolicy<K, V> implements EvictionPolicy<K, V>, LruEvictio /** Maximum size. */ private volatile int max = CacheConfiguration.DFLT_CACHE_SIZE; + /** Batch size. */ + private volatile int batchSize = 1; + + /** Max memory size. */ + private volatile long maxMemSize; + + /** Memory size. */ + private final LongAdder8 memSize = new LongAdder8(); + /** Queue. */ private final ConcurrentLinkedDeque8<EvictableEntry<K, V>> queue = new ConcurrentLinkedDeque8<>(); @@ -82,10 +91,39 @@ public class LruEvictionPolicy<K, V> implements EvictionPolicy<K, V>, LruEvictio } /** {@inheritDoc} */ + @Override public int getBatchSize() { + return batchSize; + } + + /** {@inheritDoc} */ + @Override public void setBatchSize(int batchSize) { + A.ensure(batchSize > 0, "batchSize > 0"); + + this.batchSize = batchSize; + } + + /** {@inheritDoc} */ @Override public int getCurrentSize() { return queue.size(); } + /** {@inheritDoc} */ + @Override public long getMaxMemSize() { + return maxMemSize; + } + + /** {@inheritDoc} */ + @Override public void setMaxMemSize(long maxMemSize) { + A.ensure(maxMemSize > 0, "maxMemSize > 0"); + + this.maxMemSize = maxMemSize; + } + + /** {@inheritDoc} */ + @Override public long getCurrentMemSize() { + return memSize.longValue(); + } + /** * Gets read-only view on internal {@code FIFO} queue in proper order. * @@ -107,8 +145,11 @@ public class LruEvictionPolicy<K, V> implements EvictionPolicy<K, V>, LruEvictio else { Node<EvictableEntry<K, V>> node = entry.removeMeta(); - if (node != null) + if (node != null) { queue.unlinkx(node); + + memSize.add(-entry.size()); + } } } @@ -139,11 +180,18 @@ public class LruEvictionPolicy<K, V> implements EvictionPolicy<K, V>, LruEvictio return false; } + memSize.add(entry.size()); + return true; } // If node was unlinked by concurrent shrink() call, we must repeat the whole cycle. else if (!entry.removeMeta(node)) return false; + else { + memSize.add(-entry.size()); + + return true; + } } } else if (queue.unlinkx(node)) { @@ -163,31 +211,73 @@ public class LruEvictionPolicy<K, V> implements EvictionPolicy<K, V>, LruEvictio * Shrinks queue to maximum allowed size. */ private void shrink() { + long maxMem = this.maxMemSize; + + if (maxMem > 0) { + long startMemSize = memSize.longValue(); + + if (startMemSize >= maxMem) + for (long i = maxMem; i < startMemSize && memSize.longValue() > maxMem;) { + int size = shrink0(); + + if (size == -1) + break; + + i += size; + } + } + int max = this.max; - int startSize = queue.sizex(); + if (max > 0) { + int startSize = queue.sizex(); - for (int i = 0; i < startSize && queue.sizex() > max; i++) { - EvictableEntry<K, V> entry = queue.poll(); + if (startSize >= max + (maxMem > 0 ? 1 : this.batchSize)) + for (int i = max; i < startSize && queue.sizex() > max; i++) + if (shrink0() == -1) + break; + } + } + + /** + * Tries to remove one item from queue. + * + * @return number of bytes that was free. {@code -1} if queue is empty. + */ + private int shrink0() { + EvictableEntry<K, V> entry = queue.poll(); + + if (entry == null) + return -1; + + int size = 0; - if (entry == null) - break; + Node<EvictableEntry<K, V>> meta = entry.removeMeta(); - Node<EvictableEntry<K, V>> meta = entry.removeMeta(); + if (meta != null) { + size = entry.size(); - if (meta != null && !entry.evict()) + memSize.add(-size); + + if (!entry.evict()) touch(entry); } + + return size; } /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(max); + out.writeInt(batchSize); + out.writeLong(maxMemSize); } /** {@inheritDoc} */ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { max = in.readInt(); + batchSize = in.readInt(); + maxMemSize = in.readLong(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.java index c243374..69347ee 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicyMBean.java @@ -41,10 +41,48 @@ public interface LruEvictionPolicyMBean { public void setMaxSize(int max); /** + * Gets batch size. + * + * @return batch size. + */ + @MXBeanDescription("Batch size.") + public int getBatchSize(); + + /** + * Sets batch size. + * + * @param batchSize Batch size. + */ + @MXBeanDescription("Set batch size.") + public void setBatchSize(int batchSize); + + /** * Gets current queue size. * * @return Current queue size. */ @MXBeanDescription("Current queue size.") public int getCurrentSize(); + + /** + * Gets maximum allowed cache size in bytes. + * + * @return maximum allowed cache size in bytes. + */ + @MXBeanDescription("Maximum allowed cache size in bytes.") + public long getMaxMemSize(); + + /** + * Sets maximum allowed cache size in bytes. + */ + @MXBeanDescription("Set maximum allowed cache size in bytes.") + public void setMaxMemSize(long maxMemSize); + + /** + * Gets current queue size in bytes. + * + * @return current queue size in bytes. + */ + @MXBeanDescription("Current queue size in bytes.") + public long getCurrentMemSize(); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/random/RandomEvictionPolicy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/random/RandomEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/random/RandomEvictionPolicy.java index c88b31d..9c968dc 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/random/RandomEvictionPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/random/RandomEvictionPolicy.java @@ -31,7 +31,7 @@ import java.io.*; * extremely light weight, lock-free, and does not create any data structures to maintain * any order for eviction. * <p> - * Random eviction will provide the best performance over any key set in which every + * Random eviction will provide the best performance over any key queue in which every * key has the same probability of being accessed. */ public class RandomEvictionPolicy<K, V> implements EvictionPolicy<K, V>, RandomEvictionPolicyMBean, Externalizable { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java index 7965c97..ee3e857 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java @@ -18,6 +18,7 @@ package org.apache.ignite.cache.eviction.sorted; import org.apache.ignite.cache.eviction.*; +import org.apache.ignite.configuration.*; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.typedef.internal.*; @@ -48,18 +49,24 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE private static final long serialVersionUID = 0L; /** Maximum size. */ - private volatile int max; + private volatile int max = CacheConfiguration.DFLT_CACHE_SIZE; /** Batch size. */ private volatile int batchSize = 1; + /** Max memory size. */ + private volatile long maxMemSize; + + /** Memory size. */ + private final LongAdder8 memSize = new LongAdder8(); + /** Comparator. */ private Comparator<Holder<K, V>> comp; /** Order. */ private final AtomicLong orderCnt = new AtomicLong(); - /** Backed sorted set. */ + /** Backed sorted queue. */ private final GridConcurrentSkipListSetEx<K, V> set; /** @@ -142,12 +149,29 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE return set.sizex(); } + /** {@inheritDoc} */ + @Override public long getMaxMemSize() { + return maxMemSize; + } + + /** {@inheritDoc} */ + @Override public void setMaxMemSize(long maxMemSize) { + A.ensure(maxMemSize > 0, "maxMemSize > 0"); + + this.maxMemSize = maxMemSize; + } + + /** {@inheritDoc} */ + @Override public long getCurrentMemSize() { + return memSize.longValue(); + } + /** - * Gets read-only view of backed set in proper order. + * Gets read-only view of backed queue in proper order. * - * @return Read-only view of backed set. + * @return Read-only view of backed queue. */ - public Collection<EvictableEntry<K, V>> set() { + public Collection<EvictableEntry<K, V>> queue() { Set<EvictableEntry<K, V>> cp = new LinkedHashSet<>(); for (Holder<K, V> holder : set) @@ -168,19 +192,22 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE else { Holder<K, V> holder = entry.removeMeta(); - if (holder != null) + if (holder != null) { removeHolder(holder); + + memSize.add(-entry.size()); + } } } /** * @param entry Entry to touch. - * @return {@code True} if backed set has been changed by this call. + * @return {@code True} if backed queue has been changed by this call. */ private boolean touch(EvictableEntry<K, V> entry) { Holder<K, V> holder = entry.meta(); - // Entry has not been add yet to backed set.. + // Entry has not been add yet to backed queue.. if (holder == null) { while (true) { holder = new Holder<>(entry, orderCnt.incrementAndGet()); @@ -188,7 +215,7 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE set.add(holder); if (entry.putMetaIfAbsent(holder) != null) { - // Was concurrently added, need to remove it from set. + // Was concurrently added, need to remove it from queue. removeHolder(holder); // Set has not been changed. @@ -196,17 +223,24 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE } else if (holder.order > 0) { if (!entry.isCached()) { - // Was concurrently evicted, need to remove it from set. + // Was concurrently evicted, need to remove it from queue. removeHolder(holder); return false; } + memSize.add(entry.size()); + return true; } // If holder was removed by concurrent shrink() call, we must repeat the whole cycle. else if (!entry.removeMeta(holder)) return false; + else { + memSize.add(-entry.size()); + + return true; + } } } @@ -215,34 +249,71 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE } /** - * Shrinks backed set to maximum allowed size. + * Shrinks backed queue to maximum allowed size. */ private void shrink() { - int max = this.max; + long maxMem = this.maxMemSize; - int batchSize = this.batchSize; + if (maxMem > 0) { + long startMemSize = memSize.longValue(); - int startSize = set.sizex(); + if (startMemSize >= maxMem) + for (long i = maxMem; i < startMemSize && memSize.longValue() > maxMem;) { + int size = shrink0(); - if (startSize >= max + batchSize) { - for (int i = max; i < startSize && set.sizex() > max; i++) { - Holder<K, V> h = set.pollFirst(); + if (size == -1) + break; - if (h == null) - break; + i += size; + } + } - EvictableEntry<K, V> entry = h.entry; + int max = this.max; - if (h.order > 0 && entry.removeMeta(h) && !entry.evict()) - touch(entry); + if (max > 0) { + int startSize = set.sizex(); + + if (startSize >= max + (maxMem > 0 ? 1 : this.batchSize)) { + for (int i = max; i < startSize && set.sizex() > max; i++) { + if (shrink0() == -1) + break; + } } } } + /** + * Tries to remove one item from queue. + * + * @return number of bytes that was free. {@code -1} if queue is empty. + */ + private int shrink0() { + Holder<K, V> h = set.pollFirst(); + + if (h == null) + return -1; + + int size = 0; + + EvictableEntry<K, V> entry = h.entry; + + if (h.order > 0 && entry.removeMeta(h)) { + size = entry.size(); + + memSize.add(-size); + + if (!entry.evict()) + touch(entry); + } + + return size; + } + /** {@inheritDoc} */ @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(max); out.writeInt(batchSize); + out.writeLong(maxMemSize); out.writeObject(comp); } @@ -251,11 +322,12 @@ public class SortedEvictionPolicy<K, V> implements EvictionPolicy<K, V>, SortedE @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { max = in.readInt(); batchSize = in.readInt(); + maxMemSize = in.readLong(); comp = (Comparator<Holder<K, V>>)in.readObject(); } /** - * Removes holder from backed set and marks holder as removed. + * Removes holder from backed queue and marks holder as removed. * * @param holder Holder. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.java index bc696ff..aada1ce 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicyMBean.java @@ -63,4 +63,26 @@ public interface SortedEvictionPolicyMBean { */ @MXBeanDescription("Current sorted key set size.") public int getCurrentSize(); + + /** + * Gets maximum allowed cache size in bytes. + * + * @return maximum allowed cache size in bytes. + */ + @MXBeanDescription("Maximum allowed cache size in bytes.") + public long getMaxMemSize(); + + /** + * Sets maximum allowed cache size in bytes. + */ + @MXBeanDescription("Set maximum allowed cache size in bytes.") + public void setMaxMemSize(long maxMemSize); + + /** + * Gets current sorted entries queue size in bytes. + * + * @return current sorted entries queue size in bytes. + */ + @MXBeanDescription("Current sorted entries set size in bytes.") + public long getCurrentMemSize(); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java index 8b2aad8..7a3fbee 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java @@ -23,6 +23,7 @@ import org.apache.ignite.internal.processors.cache.transactions.*; import org.apache.ignite.internal.util.lang.*; import org.apache.ignite.internal.util.tostring.*; import org.apache.ignite.internal.util.typedef.internal.*; + import org.jetbrains.annotations.*; import java.util.*; @@ -93,11 +94,24 @@ public class CacheEvictableEntryImpl<K, V> implements EvictableEntry<K, V> { /** {@inheritDoc} */ public int size() { try { - int keySize = cached.key().valueBytes(cached.context().cacheObjectContext()).length; + GridCacheContext<Object, Object> cctx = cached.context(); - CacheObject val = cached.peek(true, false, false, null); + KeyCacheObject key = cached.key(); + + byte[] keyBytes = key.valueBytes(cctx.cacheObjectContext()); + + byte[] valBytes = null; + + if (cctx.useOffheapEntry()) + valBytes = cctx.offheap().get(cctx.swap().spaceName(), cached.partition(), key, keyBytes); + else { + CacheObject cacheObj = cached.valueBytes(); + + if (cacheObj != null) + valBytes = cacheObj.valueBytes(cctx.cacheObjectContext()); + } - return val == null ? keySize : keySize + val.valueBytes(cached.context().cacheObjectContext()).length; + return valBytes == null ? keyBytes.length : keyBytes.length + valBytes.length; } catch (GridCacheEntryRemovedException e) { return 0; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesAbstractSelfTest.java index 768bced..9239274 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesAbstractSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesAbstractSelfTest.java @@ -127,7 +127,7 @@ public abstract class GridCacheEmptyEntriesAbstractSelfTest extends GridCommonAb } /** - * Checks policy with and without store set. + * Checks policy with and without store queue. * * @throws Exception If failed. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionAbstractTest.java index bc17f14..f62c5c3 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionAbstractTest.java @@ -22,6 +22,7 @@ import org.apache.ignite.cache.*; import org.apache.ignite.cache.eviction.*; import org.apache.ignite.configuration.*; import org.apache.ignite.internal.*; +import org.apache.ignite.internal.processors.cache.distributed.dht.colocated.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.spi.discovery.tcp.*; @@ -29,9 +30,11 @@ import org.apache.ignite.spi.discovery.tcp.ipfinder.*; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; import org.apache.ignite.testframework.junits.common.*; import org.apache.ignite.transactions.*; + import org.jetbrains.annotations.*; import javax.cache.*; +import java.lang.reflect.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; @@ -40,6 +43,7 @@ import static org.apache.ignite.cache.CacheAtomicityMode.*; import static org.apache.ignite.cache.CacheMode.*; import static org.apache.ignite.cache.CacheWriteSynchronizationMode.*; import static org.apache.ignite.events.EventType.*; +import static org.apache.ignite.internal.processors.cache.eviction.GridCacheEvictionAbstractTest.EvictionPolicyProxy.*; import static org.apache.ignite.transactions.TransactionConcurrency.*; import static org.apache.ignite.transactions.TransactionIsolation.*; @@ -63,15 +67,15 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, /** Evict near sync. */ protected boolean evictNearSync = true; + /** Policy max. */ + protected int plcMax = 10; + /** Policy batch size. */ protected int plcBatchSize = 0; /** Policy max memory size. */ protected long plcMaxMemSize = 0; - /** Policy max. */ - protected int plcMax = 10; - /** Near policy max. */ protected int nearMax = 3; @@ -167,10 +171,23 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, * @param c1 Policy collection. * @param c2 Expected list. */ - protected void check(Collection<EvictableEntry<String, String>> c1, MockEntry... c2) { + protected static void check(Collection<EvictableEntry<String, String>> c1, MockEntry... c2) { check(c1, F.asList(c2)); } + protected void check(int expSize, int entrySize) { + EvictionPolicyProxy proxy = proxy(policy()); + + assertEquals(expSize, proxy.getCurrentSize()); + assertEquals(expSize * entrySize, proxy.getCurrentMemSize()); + } + + protected void check(int entrySize, Collection<EvictableEntry<String, String>> c1, MockEntry... c2) { + check(c2.length, entrySize); + + check(c1, c2); + } + /** @return Policy. */ @SuppressWarnings({"unchecked"}) protected T policy() { @@ -203,7 +220,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, * @param c1 Policy collection. * @param c2 Expected list. */ - protected void check(Collection<EvictableEntry<String, String>> c1, List<MockEntry> c2) { + protected static void check(Collection<EvictableEntry<String, String>> c1, List<MockEntry> c2) { assert c1.size() == c2.size() : "Mismatch [actual=" + string(c1) + ", expected=" + string(c2) + ']'; assert c1.containsAll(c2) : "Mismatch [actual=" + string(c1) + ", expected=" + string(c2) + ']'; @@ -220,7 +237,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, * @return String. */ @SuppressWarnings("unchecked") - protected String string(Iterable<? extends Cache.Entry> c) { + protected static String string(Iterable<? extends Cache.Entry> c) { return "[" + F.fold( c, @@ -242,7 +259,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, gridCnt = 2; - checkPartitioned(plcMax, plcMax, false); + checkPartitioned(); } /** @throws Exception If failed. */ @@ -256,7 +273,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, gridCnt = 2; - checkPartitioned(0, 0, true); // Near size is 0 because of backups present. + checkPartitioned(); // Near size is 0 because of backups present. } /** @throws Exception If failed. */ @@ -268,7 +285,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, gridCnt = 2; - checkPartitionedMultiThreaded(gridCnt); + checkPartitionedMultiThreaded(); } /** @throws Exception If failed. */ @@ -280,7 +297,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, gridCnt = 2; - checkPartitionedMultiThreaded(gridCnt); + checkPartitionedMultiThreaded(); } /** @throws Exception If failed. */ @@ -292,7 +309,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, gridCnt = 2; - checkPartitionedMultiThreaded(gridCnt); + checkPartitionedMultiThreaded(); } /** @throws Exception If failed. */ @@ -304,15 +321,18 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, gridCnt = 2; - checkPartitionedMultiThreaded(gridCnt); + checkPartitionedMultiThreaded(); } /** - * @param endSize Final near size. - * @param endPlcSize Final near policy size. * @throws Exception If failed. */ - private void checkPartitioned(int endSize, int endPlcSize, boolean near) throws Exception { + protected void checkPartitioned() throws Exception { + + int endSize = nearEnabled ? 0 : plcMax; + + int endPlcSize = nearEnabled ? 0 : plcMax; + startGridsMultiThreaded(gridCnt); try { @@ -332,7 +352,7 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, info("Stored cache object for key [key=" + key + ", idx=" + i + ']'); } - if (near) { + if (nearEnabled) { for (int i = 0; i < gridCnt; i++) assertEquals(endSize, near(i).nearSize()); @@ -340,14 +360,31 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, checkNearPolicies(endPlcSize); } else { - for (int i = 0; i < gridCnt; i++) { - int actual = colocated(i).size(); + if (plcMaxMemSize > 0) { + for (int i = 0; i < gridCnt; i++) { + GridDhtColocatedCache<Object, Object> cache = colocated(i); + + int memSize = 0; + + for (Cache.Entry<Object, Object> entry : cache.entrySet()) + memSize += entry.unwrap(EvictableEntry.class).size(); + + EvictionPolicyProxy plc = proxy(policy(i)); + + assertTrue(plc.getCurrentMemSize() <= memSize); + } + } - assertTrue("Cache size is greater then policy size [expected=" + endSize + ", actual=" + actual + ']', - actual <= endSize + plcBatchSize); + if (plcMax > 0) { + for (int i = 0; i < gridCnt; i++) { + int actual = colocated(i).size(); + + assertTrue("Cache size is greater then policy size [expected=" + endSize + ", actual=" + actual + ']', + actual <= endSize + (plcMaxMemSize > 0 ? 1 : plcBatchSize)); + } } - checkPolicies(endPlcSize); + checkPolicies(); } } finally { @@ -356,10 +393,9 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, } /** - * @param gridCnt Grid count. * @throws Exception If failed. */ - protected void checkPartitionedMultiThreaded(int gridCnt) throws Exception { + protected void checkPartitionedMultiThreaded() throws Exception { try { startGridsMultiThreaded(gridCnt); @@ -424,10 +460,8 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, /** * Performs after-test policy check. - * - * @param plcMax Maximum allowed size of ploicy. */ - protected abstract void checkPolicies(int plcMax); + protected abstract void checkPolicies(); /** * @@ -498,4 +532,63 @@ public abstract class GridCacheEvictionAbstractTest<T extends EvictionPolicy<?, return S.toString(MockEntry.class, this, super.toString()); } } + + /** + * Rvicition policy proxy. + */ + protected static class EvictionPolicyProxy<K, V> { + private final EvictionPolicy<K, V> plc; + + /** + * @param plc Policy. + */ + private EvictionPolicyProxy(EvictionPolicy<K, V> plc) { + this.plc = plc; + } + + /** + * @param plc Policy. + */ + public static EvictionPolicyProxy proxy(EvictionPolicy<?, ?> plc) { + return new EvictionPolicyProxy(plc); + } + + /** + * Get current size. + */ + public int getCurrentSize() { + try { + return (Integer)plc.getClass().getDeclaredMethod("getCurrentSize").invoke(plc); + } + catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + /** + * Current memory size. + */ + public long getCurrentMemSize() { + try { + return (Long)plc.getClass().getDeclaredMethod("getCurrentMemSize").invoke(plc); + } + catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + + /** + * Current queue. + */ + public Collection<EvictableEntry<K, V>> queue() { + try { + return (Collection<EvictableEntry<K, V>>)plc.getClass().getDeclaredMethod("queue").invoke(plc); + } + catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoBatchEvictionPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoBatchEvictionPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoBatchEvictionPolicySelfTest.java index d2dd3d2..d1cc2fa 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoBatchEvictionPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoBatchEvictionPolicySelfTest.java @@ -53,38 +53,29 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - check(p.queue(), e1); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1); p.onEntryAccessed(false, e2); - check(p.queue(), e1, e2); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2); p.onEntryAccessed(false, e3); - check(p.queue(), e1, e2, e3); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2, e3); p.onEntryAccessed(false, e4); - check(p.queue(), e1, e2, e3, e4); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2, e3, e4); assertFalse(e1.isEvicted()); assertFalse(e2.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); - assertEquals(4, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); - p.onEntryAccessed(false, e5); // Batch evicted. - check(p.queue(), e3, e4, e5); - - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5); assertTrue(e1.isEvicted()); assertTrue(e2.isEvicted()); @@ -94,10 +85,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e1 = new MockEntry("1", "1")); - check(p.queue(), e3, e4, e5, e1); - - assertEquals(4, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5, e1); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); @@ -106,9 +94,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e5); - check(p.queue(), e3, e4, e5, e1); - - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5, e1); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); @@ -117,10 +103,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - check(p.queue(), e3, e4, e5, e1); - - assertEquals(4, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5, e1); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); @@ -129,8 +112,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends p.onEntryAccessed(true, e1); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); @@ -138,23 +120,20 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends p.onEntryAccessed(true, e4); - assertEquals(2, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e5); assertFalse(e3.isEvicted()); assertFalse(e5.isEvicted()); p.onEntryAccessed(true, e5); - assertEquals(1, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3); assertFalse(e3.isEvicted()); p.onEntryAccessed(true, e3); - assertEquals(0, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue()); assertFalse(e3.isEvicted()); @@ -188,8 +167,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends info(p); - assertEquals(cnt - batchSize, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(cnt - batchSize, MockEntry.ENTRY_SIZE); } finally { stopAllGrids(); @@ -241,10 +219,8 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends int curSize = p.getCurrentSize(); - assert curSize < max + batchSize : - "curSize < max + batchSize [curSize=" + curSize + ", max=" + max + ", batchSize=" + batchSize + ']'; - - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + assertTrue(curSize < max + batchSize); + assertEquals(curSize * MockEntry.KEY_SIZE, p.getCurrentMemSize()); } finally { stopAllGrids(); @@ -272,21 +248,21 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends assertFalse(e1.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e2); assertFalse(e1.isEvicted()); assertFalse(e2.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e3); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e4); @@ -294,7 +270,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e5); @@ -302,7 +278,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends assertFalse(e3.isEvicted()); assertFalse(e5.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); } finally { stopAllGrids(); @@ -324,16 +300,13 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends GridCacheContext cctx = ((IgniteCacheProxy)cache).context(); - FifoEvictionPolicy plc = - (FifoEvictionPolicy)cctx.config().getEvictionPolicy(); - int cnt = 500; int min = Integer.MAX_VALUE; int minIdx = 0; - int memSize = 0; + int entrySize = 0; for (int i = 0; i < cnt; i++) { cache.put(i, i); @@ -345,17 +318,15 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends minIdx = i; } - if (i >= cnt - plcMax) { - memSize += cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length; - memSize += cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; - } + if (entrySize == 0) + entrySize = cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length + + cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; } // Batch evicted. assert min >= plcMax : "Min cache size is too small: " + min; - assertEquals(plcMax, plc.getCurrentSize()); - assertEquals(memSize, plc.getCurrentMemSize()); + check(plcMax, entrySize); info("Min cache size [min=" + min + ", idx=" + minIdx + ']'); info("Current cache size " + cache.size()); @@ -385,8 +356,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends // Batch evicted. assert min >= plcMax : "Min cache size is too small: " + min; - assertEquals(plcMax, plc.getCurrentSize()); - assertEquals(memSize, plc.getCurrentMemSize()); + check(plcMax, entrySize); } finally { stopAllGrids(); @@ -418,7 +388,7 @@ public class GridCacheFifoBatchEvictionPolicySelfTest extends } /** {@inheritDoc} */ - @Override protected void checkPolicies(int plcMax) { + @Override protected void checkPolicies() { for (int i = 0; i < gridCnt; i++) { assert policy(i).queue().size() <= plcMax + policy(i).getBatchSize(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoEvictionPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoEvictionPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoEvictionPolicySelfTest.java index 14b536b..e636174 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoEvictionPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoEvictionPolicySelfTest.java @@ -52,31 +52,23 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - check(p.queue(), e1); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1); p.onEntryAccessed(false, e2); - check(p.queue(), e1, e2); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2); p.onEntryAccessed(false, e3); - check(p.queue(), e1, e2, e3); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2, e3); assert !e1.isEvicted(); assert !e2.isEvicted(); assert !e3.isEvicted(); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); - p.onEntryAccessed(false, e4); - check(p.queue(), e2, e3, e4); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e2, e3, e4); assert e1.isEvicted(); assert !e2.isEvicted(); @@ -85,9 +77,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e5); - check(p.queue(), e3, e4, e5); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5); assert e2.isEvicted(); assert !e3.isEvicted(); @@ -96,9 +86,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e1 = new MockEntry("1", "1")); - check(p.queue(), e4, e5, e1); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5, e1); assert e3.isEvicted(); assert !e1.isEvicted(); @@ -107,8 +95,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e5); - check(p.queue(), e4, e5, e1); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5, e1); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -116,9 +103,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - check(p.queue(), e4, e5, e1); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5, e1); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -126,9 +111,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e5); - check(p.queue(), e4, e5, e1); - assertEquals(3, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5, e1); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -136,8 +119,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(true, e1); - assertEquals(2, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -145,16 +127,14 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(true, e4); - assertEquals(1, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e5); assert !e4.isEvicted(); assert !e5.isEvicted(); p.onEntryAccessed(true, e5); - assertEquals(0, p.getCurrentSize()); - assertEquals(p.queue().size() * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(MockEntry.ENTRY_SIZE, p.queue()); assert !e5.isEvicted(); @@ -185,8 +165,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends info(p); - assertEquals(max, p.getCurrentSize()); - assertEquals(max * MockEntry.ENTRY_SIZE, p.getCurrentMemSize()); + check(max, MockEntry.ENTRY_SIZE); } finally { stopAllGrids(); @@ -232,12 +211,8 @@ public class GridCacheFifoEvictionPolicySelfTest extends info(p); - int curSize = p.getCurrentSize(); - long curMemSize = p.getCurrentMemSize(); - - assert curSize <= max : "curSize <= max [curSize=" + curSize + ", max=" + max + ']'; - assert curMemSize <= max * MockEntry.ENTRY_SIZE : "curMemSize <= maxMemSize [curMemSize=" + curMemSize + - ", maxMemSize =" + max * MockEntry.ENTRY_SIZE + ']'; + assertTrue(p.getCurrentSize() <= max); + assertTrue(p.getCurrentMemSize() <= max * MockEntry.ENTRY_SIZE); } finally { stopAllGrids(); @@ -264,33 +239,33 @@ public class GridCacheFifoEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); assertFalse(e1.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e2); assertFalse(e1.isEvicted()); assertFalse(e2.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e3); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e4); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); p.onEntryAccessed(false, e5); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e5.isEvicted()); - assertEquals(p.queue().size() * MockEntry.KEY_SIZE, p.getCurrentMemSize()); + check(p.queue().size(), MockEntry.KEY_SIZE); } finally { stopAllGrids(); @@ -312,16 +287,13 @@ public class GridCacheFifoEvictionPolicySelfTest extends GridCacheContext cctx = ((IgniteCacheProxy)cache).context(); - FifoEvictionPolicy plc = - (FifoEvictionPolicy)cctx.config().getEvictionPolicy(); - int cnt = 500; int min = Integer.MAX_VALUE; int minIdx = 0; - int memSize = 0; + int entrySize = 0; for (int i = 0; i < cnt; i++) { cache.put(i, i); @@ -333,16 +305,14 @@ public class GridCacheFifoEvictionPolicySelfTest extends minIdx = i; } - if (i >= cnt - plcMax) { - memSize += cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length; - memSize += cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; - } + if (entrySize == 0) + entrySize = cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length + + cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; } - assert min >= plcMax : "Min cache size is too small: " + min; + assertTrue("Min cache size is too small: " + min, min >= plcMax); - assertEquals(plcMax, plc.getCurrentSize()); - assertEquals(memSize, plc.getCurrentMemSize()); + check(plcMax, entrySize); info("Min cache size [min=" + min + ", idx=" + minIdx + ']'); info("Current cache size " + cache.size()); @@ -369,10 +339,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends info("Current cache size " + cache.size()); info("Current cache key size " + cache.size()); - assert min >= plcMax : "Min cache size is too small: " + min; - - assertEquals(plcMax, plc.getCurrentSize()); - assertEquals(memSize, plc.getCurrentMemSize()); + check(plcMax, entrySize); } finally { stopAllGrids(); @@ -397,7 +364,7 @@ public class GridCacheFifoEvictionPolicySelfTest extends } /** {@inheritDoc} */ - @Override protected void checkPolicies(int plcMax) { + @Override protected void checkPolicies() { for (int i = 0; i < gridCnt; i++) { assert policy(i).queue().size() <= plcMax; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoMemoryEvictionPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoMemoryEvictionPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoMemoryEvictionPolicySelfTest.java index 610db1d..1e6e0be 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoMemoryEvictionPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/fifo/GridCacheFifoMemoryEvictionPolicySelfTest.java @@ -312,16 +312,13 @@ public class GridCacheFifoMemoryEvictionPolicySelfTest extends GridCacheContext cctx = ((IgniteCacheProxy)cache).context(); - FifoEvictionPolicy plc = - (FifoEvictionPolicy)cctx.config().getEvictionPolicy(); - int cnt = 500; int min = Integer.MAX_VALUE; int minIdx = 0; - int memSize = 0; + int entrySize = 0; for (int i = 0; i < cnt; i++) { cache.put(i, i); @@ -333,16 +330,14 @@ public class GridCacheFifoMemoryEvictionPolicySelfTest extends minIdx = i; } - if (i >= cnt - max) { - memSize += cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length; - memSize += cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; - } + if (entrySize == 0) + entrySize = cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length + + cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; } -// assert min >= max : "Min cache size is too small: " + min; + assert min >= max : "Min cache size is too small: " + min; - assertEquals(max, plc.getCurrentSize()); - assertEquals(memSize, plc.getCurrentMemSize()); + check(max, entrySize); info("Min cache size [min=" + min + ", idx=" + minIdx + ']'); info("Current cache size " + cache.size()); @@ -371,14 +366,26 @@ public class GridCacheFifoMemoryEvictionPolicySelfTest extends assert min >= max : "Min cache size is too small: " + min; - assertEquals(max, plc.getCurrentSize()); - assertEquals(memSize, plc.getCurrentMemSize()); + check(max, entrySize); } finally { stopAllGrids(); } } + /** @throws Exception If failed. */ + public void testPartitionedNearDisabled() throws Exception { + mode = PARTITIONED; + nearEnabled = false; + plcMax = 0; + plcMaxMemSize = 100; + syncCommit = true; + + gridCnt = 2; + + checkPartitioned(); + } + /** {@inheritDoc} */ @Override protected FifoEvictionPolicy<String, String> createPolicy(int plcMax) { return new FifoEvictionPolicy<>(1000L); @@ -397,16 +404,18 @@ public class GridCacheFifoMemoryEvictionPolicySelfTest extends } /** {@inheritDoc} */ - @Override protected void checkPolicies(int plcMax) { + @Override protected void checkPolicies() { for (int i = 0; i < gridCnt; i++) { - assert policy(i).queue().size() <= plcMax; + if (plcMaxMemSize > 0) { + int size = 0; - int size = 0; + for (EvictableEntry<String, String> entry : policy(i).queue()) + size += ((CacheEvictableEntryImpl)entry).size(); - for (EvictableEntry<String, String> entry : policy(i).queue()) - size += ((CacheEvictableEntryImpl)entry).size(); - - assertEquals(size, ((FifoEvictionPolicy)policy(i)).getCurrentMemSize()); + assertEquals(size, ((FifoEvictionPolicy)policy(i)).getCurrentMemSize()); + } + else + assert policy(i).queue().size() <= plcMax; } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/lru/GridCacheLruEvictionPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/lru/GridCacheLruEvictionPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/lru/GridCacheLruEvictionPolicySelfTest.java index c623b38..7194373 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/lru/GridCacheLruEvictionPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/lru/GridCacheLruEvictionPolicySelfTest.java @@ -21,6 +21,7 @@ import org.apache.ignite.*; import org.apache.ignite.cache.*; import org.apache.ignite.cache.eviction.*; import org.apache.ignite.cache.eviction.lru.*; +import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.processors.cache.eviction.*; import java.util.*; @@ -50,27 +51,24 @@ public class GridCacheLruEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - check(p.queue(), e1); + check(MockEntry.ENTRY_SIZE, p.queue(), e1); p.onEntryAccessed(false, e2); - check(p.queue(), e1, e2); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2); p.onEntryAccessed(false, e3); - check(p.queue(), e1, e2, e3); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2, e3); assert !e1.isEvicted(); assert !e2.isEvicted(); assert !e3.isEvicted(); - assertEquals(3, p.getCurrentSize()); - p.onEntryAccessed(false, e4); check(p.queue(), e2, e3, e4); - - assertEquals(3, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e2, e3, e4); assert e1.isEvicted(); assert !e2.isEvicted(); @@ -79,9 +77,7 @@ public class GridCacheLruEvictionPolicySelfTest extends p.onEntryAccessed(false, e5); - check(p.queue(), e3, e4, e5); - - assertEquals(3, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5); assert e2.isEvicted(); assert !e3.isEvicted(); @@ -90,9 +86,7 @@ public class GridCacheLruEvictionPolicySelfTest extends p.onEntryAccessed(false, e1 = new MockEntry("1", "1")); - check(p.queue(), e4, e5, e1); - - assertEquals(3, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5, e1); assert e3.isEvicted(); assert !e1.isEvicted(); @@ -103,7 +97,7 @@ public class GridCacheLruEvictionPolicySelfTest extends assertEquals(3, p.getCurrentSize()); - check(p.queue(), e4, e1, e5); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e1, e5); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -111,9 +105,7 @@ public class GridCacheLruEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - assertEquals(3, p.getCurrentSize()); - - check(p.queue(), e4, e5, e1); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5, e1); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -123,7 +115,7 @@ public class GridCacheLruEvictionPolicySelfTest extends assertEquals(3, p.getCurrentSize()); - check(p.queue(), e4, e1, e5); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e1, e5); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -131,7 +123,7 @@ public class GridCacheLruEvictionPolicySelfTest extends p.onEntryAccessed(true, e1); - assertEquals(2, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e4, e5); assert !e1.isEvicted(); assert !e4.isEvicted(); @@ -139,14 +131,14 @@ public class GridCacheLruEvictionPolicySelfTest extends p.onEntryAccessed(true, e4); - assertEquals(1, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e5); assert !e4.isEvicted(); assert !e5.isEvicted(); p.onEntryAccessed(true, e5); - assertEquals(0, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue()); assert !e5.isEvicted(); @@ -177,7 +169,7 @@ public class GridCacheLruEvictionPolicySelfTest extends info(p); - assertEquals(max, p.getCurrentSize()); + check(max, MockEntry.ENTRY_SIZE); } finally { stopGrid(); @@ -226,7 +218,7 @@ public class GridCacheLruEvictionPolicySelfTest extends info(p); - assertEquals(max, p.getCurrentSize()); + check(max, MockEntry.ENTRY_SIZE); } finally { stopGrid(); @@ -272,7 +264,8 @@ public class GridCacheLruEvictionPolicySelfTest extends info(p); - assert p.getCurrentSize() <= max; + assertTrue(p.getCurrentSize() <= max); + assertTrue(p.getCurrentMemSize() <= max * MockEntry.ENTRY_SIZE); } finally { stopGrid(); @@ -287,13 +280,9 @@ public class GridCacheLruEvictionPolicySelfTest extends startGrid(); MockEntry e1 = new MockEntry("1"); - MockEntry e2 = new MockEntry("2"); - MockEntry e3 = new MockEntry("3"); - MockEntry e4 = new MockEntry("4"); - MockEntry e5 = new MockEntry("5"); LruEvictionPolicy<String, String> p = policy(); @@ -304,27 +293,37 @@ public class GridCacheLruEvictionPolicySelfTest extends assertFalse(e1.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e2); assertFalse(e1.isEvicted()); assertFalse(e2.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e3); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e4); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e5); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e5.isEvicted()); + + check(p.queue().size(), MockEntry.KEY_SIZE); } finally { stopAllGrids(); @@ -344,12 +343,16 @@ public class GridCacheLruEvictionPolicySelfTest extends try { IgniteCache<Integer, Integer> cache = ignite.cache(null); + GridCacheContext cctx = ((IgniteCacheProxy)cache).context(); + int cnt = 500; int min = Integer.MAX_VALUE; int minIdx = 0; + int entrySize = 0; + for (int i = 0; i < cnt; i++) { cache.put(i, i); @@ -359,9 +362,15 @@ public class GridCacheLruEvictionPolicySelfTest extends min = cacheSize; minIdx = i; } + + if (entrySize == 0) + entrySize = cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length + + cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; } - assert min >= plcMax : "Min cache size is too small: " + min; + assertTrue("Min cache size is too small: " + min, min >= plcMax); + + check(plcMax, entrySize); info("Min cache size [min=" + min + ", idx=" + minIdx + ']'); info("Current cache size " + cache.size()); @@ -386,7 +395,7 @@ public class GridCacheLruEvictionPolicySelfTest extends info("Min cache size [min=" + min + ", idx=" + minIdx + ']'); info("Current cache size " + cache.size()); - assert min >= plcMax : "Min cache size is too small: " + min; + check(plcMax, entrySize); } finally { stopAllGrids(); @@ -398,6 +407,7 @@ public class GridCacheLruEvictionPolicySelfTest extends return new LruEvictionPolicy<>(plcMax); } + /** {@inheritDoc} */ @Override protected LruEvictionPolicy<String, String> createNearPolicy(int nearMax) { return new LruEvictionPolicy<>(nearMax); } @@ -410,8 +420,16 @@ public class GridCacheLruEvictionPolicySelfTest extends } /** {@inheritDoc} */ - @Override protected void checkPolicies(int plcMax) { - for (int i = 0; i < gridCnt; i++) + @Override protected void checkPolicies() { + for (int i = 0; i < gridCnt; i++) { assert policy(i).queue().size() <= plcMax; + + int size = 0; + + for (EvictableEntry<String, String> entry : policy(i).queue()) + size += ((CacheEvictableEntryImpl)entry).size(); + + assertEquals(size, ((LruEvictionPolicy)policy(i)).getCurrentMemSize()); + } } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java index 7088714..7ce7ee4 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/random/GridCacheRandomEvictionPolicySelfTest.java @@ -252,7 +252,7 @@ public class GridCacheRandomEvictionPolicySelfTest extends } /** {@inheritDoc} */ - @Override protected void checkPolicies(int plcMax) { + @Override protected void checkPolicies() { // No-op. } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedBatchEvictionPolicySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedBatchEvictionPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedBatchEvictionPolicySelfTest.java index 3cec217..b7cfeb2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedBatchEvictionPolicySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedBatchEvictionPolicySelfTest.java @@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.cache.eviction.sorted; import org.apache.ignite.*; import org.apache.ignite.cache.eviction.*; import org.apache.ignite.cache.eviction.sorted.*; +import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.processors.cache.eviction.*; import java.util.*; @@ -38,11 +39,11 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends try { startGrid(); - GridCacheEvictionAbstractTest.MockEntry e1 = new GridCacheEvictionAbstractTest.MockEntry("1", "1"); - GridCacheEvictionAbstractTest.MockEntry e2 = new GridCacheEvictionAbstractTest.MockEntry("2", "2"); - GridCacheEvictionAbstractTest.MockEntry e3 = new GridCacheEvictionAbstractTest.MockEntry("3", "3"); - GridCacheEvictionAbstractTest.MockEntry e4 = new GridCacheEvictionAbstractTest.MockEntry("4", "4"); - GridCacheEvictionAbstractTest.MockEntry e5 = new GridCacheEvictionAbstractTest.MockEntry("5", "5"); + MockEntry e1 = new MockEntry("1", "1"); + MockEntry e2 = new MockEntry("2", "2"); + MockEntry e3 = new MockEntry("3", "3"); + MockEntry e4 = new MockEntry("4", "4"); + MockEntry e5 = new MockEntry("5", "5"); SortedEvictionPolicy<String, String> p = policy(); @@ -52,33 +53,29 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - check(p.set(), e1); + check(MockEntry.ENTRY_SIZE, p.queue(), e1); p.onEntryAccessed(false, e2); - check(p.set(), e1, e2); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2); p.onEntryAccessed(false, e3); - check(p.set(), e1, e2, e3); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2, e3); p.onEntryAccessed(false, e4); - check(p.set(), e1, e2, e3, e4); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e2, e3, e4); assertFalse(e1.isEvicted()); assertFalse(e2.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); - assertEquals(4, p.getCurrentSize()); - p.onEntryAccessed(false, e5); // Batch evicted. - check(p.set(), e3, e4, e5); - - assertEquals(3, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5); assertTrue(e1.isEvicted()); assertTrue(e2.isEvicted()); @@ -86,11 +83,9 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends assertFalse(e4.isEvicted()); assertFalse(e5.isEvicted()); - p.onEntryAccessed(false, e1 = new GridCacheEvictionAbstractTest.MockEntry("1", "1")); - - check(p.set(), e1, e3, e4, e5); + p.onEntryAccessed(false, e1 = new MockEntry("1", "1")); - assertEquals(4, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e3, e4, e5); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); @@ -99,7 +94,7 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e5); - check(p.set(), e1, e3, e4, e5); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e3, e4, e5); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); @@ -108,9 +103,7 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends p.onEntryAccessed(false, e1); - assertEquals(4, p.getCurrentSize()); - - check(p.set(), e1, e3, e4, e5); + check(MockEntry.ENTRY_SIZE, p.queue(), e1, e3, e4, e5); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); @@ -119,7 +112,7 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends p.onEntryAccessed(true, e1); - assertEquals(3, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e4, e5); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); @@ -127,20 +120,20 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends p.onEntryAccessed(true, e4); - assertEquals(2, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3, e5); assertFalse(e3.isEvicted()); assertFalse(e5.isEvicted()); p.onEntryAccessed(true, e5); - assertEquals(1, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue(), e3); assertFalse(e3.isEvicted()); p.onEntryAccessed(true, e3); - assertEquals(0, p.getCurrentSize()); + check(MockEntry.ENTRY_SIZE, p.queue()); assertFalse(e3.isEvicted()); @@ -170,11 +163,11 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends int cnt = max + batchSize; for (int i = 0; i < cnt; i++) - p.onEntryAccessed(false, new GridCacheEvictionAbstractTest.MockEntry(Integer.toString(i), Integer.toString(i))); + p.onEntryAccessed(false, new MockEntry(Integer.toString(i), Integer.toString(i))); info(p); - assertEquals(cnt - batchSize, p.getCurrentSize()); + check(cnt - batchSize, MockEntry.ENTRY_SIZE); } finally { stopAllGrids(); @@ -202,22 +195,22 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends int keys = 31; - GridCacheEvictionAbstractTest.MockEntry[] fifos = new GridCacheEvictionAbstractTest.MockEntry[keys]; + MockEntry[] entries = new MockEntry[keys]; - for (int i = 0; i < fifos.length; i++) - fifos[i] = new GridCacheEvictionAbstractTest.MockEntry(Integer.toString(i)); + for (int i = 0; i < entries.length; i++) + entries[i] = new MockEntry(Integer.toString(i)); int runs = 5000000; for (int i = 0; i < runs; i++) { boolean rmv = rand.nextBoolean(); - int j = rand.nextInt(fifos.length); + int j = rand.nextInt(entries.length); - GridCacheEvictionAbstractTest.MockEntry e = entry(fifos, j); + MockEntry e = entry(entries, j); if (rmv) - fifos[j] = new GridCacheEvictionAbstractTest.MockEntry(Integer.toString(j)); + entries[j] = new MockEntry(Integer.toString(j)); p.onEntryAccessed(rmv, e); } @@ -226,8 +219,8 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends int curSize = p.getCurrentSize(); - assert curSize < max + batchSize : - "curSize < max + batchSize [curSize=" + curSize + ", max=" + max + ", batchSize=" + batchSize + ']'; + assertTrue(curSize < max + batchSize); + assertEquals(curSize * MockEntry.KEY_SIZE, p.getCurrentMemSize()); } finally { stopAllGrids(); @@ -241,15 +234,11 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends try { startGrid(); - GridCacheEvictionAbstractTest.MockEntry e1 = new GridCacheEvictionAbstractTest.MockEntry("1"); - - GridCacheEvictionAbstractTest.MockEntry e2 = new GridCacheEvictionAbstractTest.MockEntry("2"); - - GridCacheEvictionAbstractTest.MockEntry e3 = new GridCacheEvictionAbstractTest.MockEntry("3"); - - GridCacheEvictionAbstractTest.MockEntry e4 = new GridCacheEvictionAbstractTest.MockEntry("4"); - - GridCacheEvictionAbstractTest.MockEntry e5 = new GridCacheEvictionAbstractTest.MockEntry("5"); + MockEntry e1 = new MockEntry("1"); + MockEntry e2 = new MockEntry("2"); + MockEntry e3 = new MockEntry("3"); + MockEntry e4 = new MockEntry("4"); + MockEntry e5 = new MockEntry("5"); SortedEvictionPolicy<String, String> p = policy(); @@ -259,27 +248,37 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends assertFalse(e1.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e2); assertFalse(e1.isEvicted()); assertFalse(e2.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e3); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e4); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e4.isEvicted()); + check(p.queue().size(), MockEntry.KEY_SIZE); + p.onEntryAccessed(false, e5); assertFalse(e1.isEvicted()); assertFalse(e3.isEvicted()); assertFalse(e5.isEvicted()); + + check(p.queue().size(), MockEntry.KEY_SIZE); } finally { stopAllGrids(); @@ -299,12 +298,16 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends try { IgniteCache<Object, Object> cache = ignite.cache(null); + GridCacheContext cctx = ((IgniteCacheProxy)cache).context(); + int cnt = 500; int min = Integer.MAX_VALUE; int minIdx = 0; + int entrySize = 0; + for (int i = 0; i < cnt; i++) { cache.put(i, i); @@ -314,11 +317,17 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends min = cacheSize; minIdx = i; } + + if (entrySize == 0) + entrySize = cctx.toCacheKeyObject(i).valueBytes(cctx.cacheObjectContext()).length + + cctx.toCacheObject(i).valueBytes(cctx.cacheObjectContext()).length; } // Batch evicted. assert min >= plcMax : "Min cache size is too small: " + min; + check(plcMax, entrySize); + info("Min cache size [min=" + min + ", idx=" + minIdx + ']'); info("Current cache size " + cache.size()); info("Current cache key size " + cache.size()); @@ -346,6 +355,8 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends // Batch evicted. assert min >= plcMax : "Min cache size is too small: " + min; + + check(plcMax, entrySize); } finally { stopAllGrids(); @@ -372,14 +383,23 @@ public class GridCacheSortedBatchEvictionPolicySelfTest extends /** {@inheritDoc} */ @Override protected void checkNearPolicies(int endNearPlcSize) { for (int i = 0; i < gridCnt; i++) - for (EvictableEntry<String, String> e : nearPolicy(i).set()) - assert !e.isCached() : "Invalid near policy size: " + nearPolicy(i).set(); + for (EvictableEntry<String, String> e : nearPolicy(i).queue()) + assert !e.isCached() : "Invalid near policy size: " + nearPolicy(i).queue(); } /** {@inheritDoc} */ - @Override protected void checkPolicies(int plcMax) { - for (int i = 0; i < gridCnt; i++) - assert policy(i).set().size() <= plcMax + policy(i).getBatchSize(); + @Override protected void checkPolicies() { + for (int i = 0; i < gridCnt; i++) { + assert policy(i).queue().size() <= plcMax + policy(i).getBatchSize(); + + int size = 0; + + for (EvictableEntry<String, String> entry : policy(i).queue()) + size += ((CacheEvictableEntryImpl)entry).size(); + + assertEquals(size, ((SortedEvictionPolicy)policy(i)).getCurrentMemSize()); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/86ed8b82/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedEvictionPolicyPerformanceTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedEvictionPolicyPerformanceTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedEvictionPolicyPerformanceTest.java index 8d97a1e..449467a 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedEvictionPolicyPerformanceTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/sorted/GridCacheSortedEvictionPolicyPerformanceTest.java @@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.cache.eviction.sorted; import org.apache.ignite.*; import org.apache.ignite.cache.*; -import org.apache.ignite.cache.eviction.fifo.*; import org.apache.ignite.cache.eviction.sorted.*; import org.apache.ignite.configuration.*; import org.apache.ignite.internal.util.typedef.internal.*; @@ -49,9 +48,6 @@ public class GridCacheSortedEvictionPolicyPerformanceTest extends GridCommonAbst /** Get probability. */ private static final int P_GET = 30; - /** Measurement count. */ - private static final int MEASUREMENT_CNT = 100; - /** Rnd. */ private static final ThreadLocalRandom8 RND = ThreadLocalRandom8.current();