You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/03/10 07:23:26 UTC
[05/43] ignite git commit: IGNITE-4694 Add tests to check there are
no memory leaks in PageMemory
IGNITE-4694 Add tests to check there are no memory leaks in PageMemory
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e70d990f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e70d990f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e70d990f
Branch: refs/heads/ignite-4712
Commit: e70d990f14288cfc8fe211fa25631016d5708144
Parents: 8e12097
Author: Igor Seliverstov <gv...@gmail.com>
Authored: Wed Feb 15 18:04:38 2017 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Tue Feb 21 12:44:29 2017 +0300
----------------------------------------------------------------------
.../cache/IgniteCacheOffheapManagerImpl.java | 2 +-
.../database/IgniteDbAbstractTest.java | 6 +
.../IgniteDbMemoryLeakAbstractTest.java | 172 ++++++++++++++-----
.../database/IgniteDbMemoryLeakIndexedTest.java | 65 +------
.../IgniteDbMemoryLeakLargeObjectsTest.java | 64 ++-----
.../IgniteDbMemoryLeakLargePagesTest.java | 67 ++------
.../database/IgniteDbMemoryLeakTest.java | 63 ++-----
.../IgniteDbMemoryLeakWithExpirationTest.java | 58 +------
8 files changed, 182 insertions(+), 315 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index 5df99b6..9becc99 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -897,7 +897,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
*/
private boolean canUpdateOldRow(@Nullable CacheDataRow oldRow, DataRow dataRow)
throws IgniteCheckedException {
- if (oldRow == null || indexingEnabled)
+ if (oldRow == null || indexingEnabled || oldRow.expireTime() != dataRow.expireTime())
return false;
CacheObjectContext coCtx = cctx.cacheObjectContext();
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbAbstractTest.java
index 3bc7004..9297cec 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbAbstractTest.java
@@ -130,10 +130,16 @@ public abstract class IgniteDbAbstractTest extends GridCommonAbstractTest {
return cfg;
}
+ /**
+ * @param cfg IgniteConfiguration.
+ */
protected void configure(IgniteConfiguration cfg){
//NOP
}
+ /**
+ * @param mCfg MemoryConfiguration.
+ */
protected void configure(MemoryConfiguration mCfg){
//NOP
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakAbstractTest.java
index fc0e715..bca3af0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakAbstractTest.java
@@ -17,69 +17,157 @@
package org.apache.ignite.internal.processors.database;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCompute;
-import org.apache.ignite.compute.ComputeTaskFuture;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.lang.IgniteRunnable;
-import org.apache.ignite.resources.IgniteInstanceResource;
-
+import java.util.Random;
import java.util.concurrent.TimeUnit;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.MemoryConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.util.GridRandom;
+import org.jetbrains.annotations.NotNull;
/**
- * TODO: fix javadoc warnings, code style.
+ * Base class for memory leaks tests.
*/
public abstract class IgniteDbMemoryLeakAbstractTest extends IgniteDbAbstractTest {
- // TODO: take duration from system property.
- /** Test duration in seconds*/
- protected abstract int duration();
-
- @Override
- protected long getTestTimeout() {
- return duration() * 1200;
- }
/** */
- protected abstract void operation(IgniteEx ig);
+ private volatile Exception ex = null;
/** */
- public void testMemoryLeak() throws Exception {
- // TODO: take PageMemory max size is the same as we configured.
+ private static final ThreadLocal<Random> THREAD_LOCAL_RANDOM = new ThreadLocal<>();
- final long end = System.nanoTime() + TimeUnit.SECONDS.toNanos(duration());
+ /** {@inheritDoc} */
+ @Override protected void configure(IgniteConfiguration cfg) {
+ cfg.setMetricsLogFrequency(5000);
+ }
- // TODO: use threads instead of compute or make sure there are enough threads in pool.
- int tasksCnt = Runtime.getRuntime().availableProcessors() * 4;
+ /** {@inheritDoc} */
+ @Override protected void configure(MemoryConfiguration mCfg) {
+ int concLvl = Runtime.getRuntime().availableProcessors();
- IgniteCompute compute = grid(0).compute().withAsync();
+ mCfg.setConcurrencyLevel(concLvl);
+ mCfg.setPageCacheSize(1024 * 1024 * concLvl); //minimal possible value
+ }
- ComputeTaskFuture[] futs = new ComputeTaskFuture[tasksCnt];
+ /**
+ * @return Test duration in seconds.
+ */
+ protected int duration() {
+ return 300;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected int gridCount() {
+ return 1;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected boolean indexingEnabled() {
+ return false;
+ }
- for (int i = 0; i < tasksCnt; i++) {
- compute.run(new IgniteRunnable() {
- @IgniteInstanceResource
- private Ignite ig;
+ /** {@inheritDoc} */
+ @Override protected long getTestTimeout() {
+ return (duration() + 1) * 1000;
+ }
- @Override
- public void run() {
- int i = 0;
- while (System.nanoTime() < end) {
- operation((IgniteEx) ig);
+ /**
+ * @param ig Ignite instance.
+ * @return IgniteCache.
+ */
+ protected abstract IgniteCache<Object,Object> cache(IgniteEx ig);
+
+ /**
+ * @return Cache key to perform an operation.
+ */
+ protected abstract Object key();
+
+ /**
+ * @return Cache value to perform an operation.
+ * @param key Cache key to perform an operation.
+ */
+ protected abstract Object value(Object key);
+
+ /**
+ * @param cache IgniteCache.
+ */
+ protected void operation(IgniteCache<Object, Object> cache) {
+ Object key = key();
+ Object value = value(key);
+
+ switch (getRandom().nextInt(3)) {
+ case 0:
+ cache.getAndPut(key, value);
+ case 1:
+ cache.get(key);
+ break;
+ case 2:
+ cache.getAndRemove(key);
+ }
+ }
- if(i++ == 100) {
- check((IgniteEx) ig);
- i = 0;
- }
+ /**
+ * @return Random.
+ */
+ @NotNull protected static Random getRandom() {
+ Random rnd = THREAD_LOCAL_RANDOM.get();
+
+ if(rnd == null){
+ rnd = new GridRandom();
+ THREAD_LOCAL_RANDOM.set(rnd);
+ }
+
+ return rnd;
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testMemoryLeak() throws Exception {
+ final long end = System.nanoTime() + TimeUnit.SECONDS.toNanos(duration());
+
+ final IgniteEx ignite = grid(0);
+ final IgniteCache<Object, Object> cache = cache(ignite);
+
+ Runnable target = new Runnable() {
+ @Override public void run() {
+ while (ex == null && System.nanoTime() < end) {
+ try {
+ operation(cache);
+ check(ignite);
+ }
+ catch (Exception e) {
+ ex = e;
+
+ break;
}
}
- });
+ }
+ };
+
+ Thread[] threads = new Thread[Runtime.getRuntime().availableProcessors()];
- futs[i] = compute.future();
+ for (int i = 0; i < threads.length; i++) {
+ threads[i] = new Thread(target);
+ threads[i].start();
}
- for (ComputeTaskFuture fut : futs)
- fut.get();
+ for (Thread thread : threads) {
+ thread.join();
+ }
+
+ if(ex != null){
+ throw ex;
+ }
}
- protected void check(IgniteEx ig) {}
+ /**
+ * Callback to check the current state
+ *
+ * @param ig Ignite instance
+ * @throws Exception If failed.
+ */
+ protected void check(IgniteEx ig) throws Exception {
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakIndexedTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakIndexedTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakIndexedTest.java
index db77131..acc6c2f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakIndexedTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakIndexedTest.java
@@ -17,72 +17,13 @@
package org.apache.ignite.internal.processors.database;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.configuration.MemoryConfiguration;
-import org.apache.ignite.internal.IgniteEx;
-
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-
/**
*
*/
-public class IgniteDbMemoryLeakIndexedTest extends IgniteDbMemoryLeakAbstractTest {
-
- @Override
- protected int duration() {
- return 300;
- }
-
- @Override
- protected int gridCount() {
- return 1;
- }
-
- @Override
- protected void configure(IgniteConfiguration cfg) {
- cfg.setMetricsLogFrequency(5000);
- }
-
- @Override
- protected void configure(MemoryConfiguration mCfg) {
- mCfg.setPageCacheSize(1024 * 1024);
- }
+public class IgniteDbMemoryLeakIndexedTest extends IgniteDbMemoryLeakTest {
- @Override
- // TODO: move test to module ignite-indexing.
- protected boolean indexingEnabled() {
+ /** {@inheritDoc} */
+ @Override protected boolean indexingEnabled() {
return true;
}
-
- protected void operation(IgniteEx ig){
- IgniteCache<Object, Object> cache = ig.cache("non-primitive");
- Random rnd = ThreadLocalRandom.current();
-
- for (int i = 0; i < 1000; i++) {
- DbKey key = new DbKey(rnd.nextInt(200_000));
-
- DbValue v0 = new DbValue(key.val, "test-value-" + rnd.nextInt(200), rnd.nextInt(500));
-
- // TODO: also execute sql queries.
-
- switch (rnd.nextInt(3)) {
- case 0:
- cache.getAndPut(key, v0);
- case 1:
- cache.get(key);
- break;
- case 2:
- cache.getAndRemove(key);
- }
- }
- }
-
- @Override
- protected void check(IgniteEx ig) {
- long pages = ig.context().cache().context().database().pageMemory().loadedPages();
-
- assertTrue(pages < 19100);
- }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargeObjectsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargeObjectsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargeObjectsTest.java
index 2a6c8cd..8943743 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargeObjectsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargeObjectsTest.java
@@ -18,13 +18,8 @@
package org.apache.ignite.internal.processors.database;
import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.configuration.MemoryConfiguration;
import org.apache.ignite.internal.IgniteEx;
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-
/**
*
*/
@@ -35,62 +30,29 @@ public class IgniteDbMemoryLeakLargeObjectsTest extends IgniteDbMemoryLeakAbstra
static {
ARRAY = new int[1024];
- Random rnd = new Random();
-
for (int i = 0; i < ARRAY.length; i++)
- ARRAY[i] = rnd.nextInt();
- }
-
- @Override
- protected int duration() {
- return 300;
- }
-
- @Override
- protected int gridCount() {
- return 1;
+ ARRAY[i] = getRandom().nextInt();
}
- @Override
- protected void configure(IgniteConfiguration cfg) {
- cfg.setMetricsLogFrequency(5000);
+ /** {@inheritDoc} */
+ @Override protected IgniteCache<Object, Object> cache(IgniteEx ig) {
+ return ig.cache("non-primitive");
}
- @Override
- protected void configure(MemoryConfiguration mCfg) {
- mCfg.setPageCacheSize(60 * 1024 * 1024);
+ /** {@inheritDoc} */
+ @Override protected Object key() {
+ return new DbKey(getRandom().nextInt(200_000));
}
- @Override
- protected boolean indexingEnabled() {
- return false;
- }
-
- protected void operation(IgniteEx ig){
- IgniteCache<Object, Object> cache = ig.cache("large");
- Random rnd = ThreadLocalRandom.current();
-
- for (int i = 0; i < 1000; i++) {
- LargeDbKey key = new LargeDbKey(rnd.nextInt(10_000), 1024);
-
- LargeDbValue v0 = new LargeDbValue("test-value-1-" + rnd.nextInt(200), "test-value-2-" + rnd.nextInt(200), ARRAY);
-
- switch (rnd.nextInt(3)) {
- case 0:
- cache.getAndPut(key, v0);
- case 1:
- cache.get(key);
- break;
- case 2:
- cache.getAndRemove(key);
- }
- }
+ /** {@inheritDoc} */
+ @Override protected Object value(Object key) {
+ return new DbValue(((DbKey)key).val, "test-value-" + getRandom().nextInt(200), getRandom().nextInt(500));
}
- @Override
- protected void check(IgniteEx ig) {
+ /** {@inheritDoc} */
+ @Override protected void check(IgniteEx ig) {
long pages = ig.context().cache().context().database().pageMemory().loadedPages();
- assertTrue(pages < 50000);
+ assertTrue(pages < 20000);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargePagesTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargePagesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargePagesTest.java
index 91c96af..8e4d0b4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargePagesTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakLargePagesTest.java
@@ -17,76 +17,31 @@
package org.apache.ignite.internal.processors.database;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.MemoryConfiguration;
import org.apache.ignite.internal.IgniteEx;
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-
/**
*
*/
-public class IgniteDbMemoryLeakLargePagesTest extends IgniteDbMemoryLeakAbstractTest {
-
- @Override
- protected int duration() {
- return 300;
- }
+public class IgniteDbMemoryLeakLargePagesTest extends IgniteDbMemoryLeakTest {
- @Override
- protected int gridCount() {
- return 1;
- }
+ /** {@inheritDoc} */
+ @Override protected void configure(MemoryConfiguration mCfg) {
+ int concLvl = Runtime.getRuntime().availableProcessors();
+ mCfg.setConcurrencyLevel(concLvl);
+ mCfg.setPageCacheSize(1024 * 1024 * concLvl * 16);
- @Override
- protected void configure(IgniteConfiguration cfg) {
- cfg.setMetricsLogFrequency(5000);
}
- @Override
- protected void configure(MemoryConfiguration mCfg) {
- // TODO: understand why such overhead with large pages.
- mCfg.setPageCacheSize(100 * 1024 * 1024);
- }
-
- @Override
- protected boolean indexingEnabled() {
- return false;
- }
-
- @Override
- protected boolean isLargePage() {
+ /** {@inheritDoc} */
+ @Override protected boolean isLargePage() {
return true;
}
- // TODO: avoid copy/paste.
- protected void operation(IgniteEx ig){
- IgniteCache<Object, Object> cache = ig.cache("non-primitive");
- Random rnd = ThreadLocalRandom.current();
-
- for (int i = 0; i < 1000; i++) {
- DbKey key = new DbKey(rnd.nextInt(200_000));
-
- DbValue v0 = new DbValue(key.val, "test-value-" + rnd.nextInt(200), rnd.nextInt(500));
-
- switch (rnd.nextInt(3)) {
- case 0:
- cache.getAndPut(key, v0);
- case 1:
- cache.get(key);
- break;
- case 2:
- cache.getAndRemove(key);
- }
- }
- }
-
- @Override
- protected void check(IgniteEx ig) {
+ /** {@inheritDoc} */
+ @Override protected void check(IgniteEx ig) {
long pages = ig.context().cache().context().database().pageMemory().loadedPages();
- assertTrue(pages < 4600);
+ assertTrue(pages < 4000);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakTest.java
index 2b0ce1e..81d831b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakTest.java
@@ -18,72 +18,31 @@
package org.apache.ignite.internal.processors.database;
import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.configuration.MemoryConfiguration;
import org.apache.ignite.internal.IgniteEx;
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-
/**
*
*/
public class IgniteDbMemoryLeakTest extends IgniteDbMemoryLeakAbstractTest {
/** {@inheritDoc} */
- @Override protected int duration() {
- return 300;
- }
-
- @Override
- protected int gridCount() {
- return 1;
- }
-
- @Override
- protected void configure(IgniteConfiguration cfg) {
- cfg.setMetricsLogFrequency(5000);
- }
-
- @Override
- protected void configure(MemoryConfiguration mCfg) {
- mCfg.setPageCacheSize(1024 * 1024);
+ @Override protected IgniteCache<Object, Object> cache(IgniteEx ig) {
+ return ig.cache("non-primitive");
}
- @Override
- protected boolean indexingEnabled() {
- return false;
+ /** {@inheritDoc} */
+ @Override protected Object key() {
+ return new DbKey(getRandom().nextInt(200_000));
}
- protected void operation(IgniteEx ig){
- IgniteCache<Object, Object> cache = ig.cache("non-primitive");
- Random rnd = ThreadLocalRandom.current();
-
- for (int i = 0; i < 1000; i++) {
- DbKey key = new DbKey(rnd.nextInt(200_000));
-
- DbValue v0 = new DbValue(key.val, "test-value-" + rnd.nextInt(200), rnd.nextInt(500));
-
- // TODO: also execute scan query.
-
- switch (rnd.nextInt(3)) {
- case 0:
- cache.getAndPut(key, v0);
- break;
-
- case 1:
- cache.get(key);
- break;
-
- case 2:
- cache.getAndRemove(key);
- }
- }
+ /** {@inheritDoc} */
+ @Override protected Object value(Object key) {
+ return new DbValue(((DbKey)key).val, "test-value-" + getRandom().nextInt(200), getRandom().nextInt(500));
}
- @Override
- protected void check(IgniteEx ig) {
+ /** {@inheritDoc} */
+ @Override protected void check(IgniteEx ig) {
long pages = ig.context().cache().context().database().pageMemory().loadedPages();
- assertTrue(pages < 19100);
+ assertTrue(pages < 20000);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e70d990f/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakWithExpirationTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakWithExpirationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakWithExpirationTest.java
index 95fe8c8..a31ffb4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakWithExpirationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/IgniteDbMemoryLeakWithExpirationTest.java
@@ -18,75 +18,31 @@
package org.apache.ignite.internal.processors.database;
import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.MemoryConfiguration;
import org.apache.ignite.internal.IgniteEx;
import javax.cache.expiry.CreatedExpiryPolicy;
import javax.cache.expiry.Duration;
import javax.cache.expiry.ExpiryPolicy;
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
/**
*
*/
-public class IgniteDbMemoryLeakWithExpirationTest extends IgniteDbMemoryLeakAbstractTest {
+public class IgniteDbMemoryLeakWithExpirationTest extends IgniteDbMemoryLeakTest {
/** */
private static final ExpiryPolicy EXPIRY = new CreatedExpiryPolicy(new Duration(MILLISECONDS, 10L));
- @Override
- protected int duration() {
- return 300;
+ /** {@inheritDoc} */
+ @Override protected IgniteCache<Object, Object> cache(IgniteEx ig) {
+ return ig.cache("non-primitive").withExpiryPolicy(EXPIRY);
}
- @Override
- protected int gridCount() {
- return 1;
- }
-
- @Override
- protected void configure(IgniteConfiguration cfg) {
- cfg.setMetricsLogFrequency(5000);
- }
-
- @Override
- protected void configure(MemoryConfiguration mCfg) {
- mCfg.setPageCacheSize(1024 * 1024);
- }
-
- @Override
- protected boolean indexingEnabled() {
- return false;
- }
-
- protected void operation(IgniteEx ig) {
- IgniteCache<Object, Object> cache = ig.cache("non-primitive").withExpiryPolicy(EXPIRY);
- Random rnd = ThreadLocalRandom.current();
-
- for (int i = 0; i < 1000; i++) {
- DbKey key = new DbKey(rnd.nextInt(200_000));
-
- DbValue v0 = new DbValue(key.val, "test-value-" + rnd.nextInt(200), rnd.nextInt(500));
-
- switch (rnd.nextInt(3)) {
- case 0:
- cache.getAndPut(key, v0);
- case 1:
- cache.get(key);
- break;
- case 2:
- cache.getAndRemove(key);
- }
- }
- }
-
- @Override
- protected void check(IgniteEx ig) {
+ /** {@inheritDoc} */
+ @Override protected void check(IgniteEx ig) {
long pages = ig.context().cache().context().database().pageMemory().loadedPages();
- assertTrue(pages < 10000);
+ assertTrue(pages < 7000);
}
}