Merge branch 'ignite-5267' of https://git-wip-us.apache.org/repos/asf/ignite into ignite-gg-12163
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 2832fbd..d6015d7 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -615,6 +615,9 @@
*/
public static final String IGNITE_PDS_WAL_REBALANCE_THRESHOLD = "IGNITE_PDS_WAL_REBALANCE_THRESHOLD";
+ /** Ignite page memory concurrency level. */
+ public static final String IGNITE_OFFHEAP_LOCK_CONCURRENCY_LEVEL = "IGNITE_OFFHEAP_LOCK_CONCURRENCY_LEVEL";
+
/** Returns true for system properties only avoiding sending sensitive information. */
private static final IgnitePredicate<Map.Entry<String, String>> PROPS_FILTER = new IgnitePredicate<Map.Entry<String, String>>() {
@Override public boolean apply(final Map.Entry<String, String> entry) {
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
index e6324dc..2d71e99 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
@@ -102,7 +102,7 @@
private String dfltMemPlcName = DFLT_MEM_PLC_DEFAULT_NAME;
/** Size of memory (in bytes) to use for default MemoryPolicy. */
- private Long dfltMemPlcSize;
+ private long dfltMemPlcSize = DFLT_MEMORY_POLICY_MAX_SIZE;
/** Memory policies. */
private MemoryPolicyConfiguration[] memPlcs;
@@ -126,6 +126,8 @@
* @return {@code this} for chaining.
*/
public MemoryConfiguration setSystemCacheInitialSize(long sysCacheInitSize) {
+ A.ensure(sysCacheMaxSize > 0, "System cache initial size can not be less zero.");
+
this.sysCacheInitSize = sysCacheInitSize;
return this;
@@ -149,6 +151,8 @@
* @return {@code this} for chaining.
*/
public MemoryConfiguration setSystemCacheMaxSize(long sysCacheMaxSize) {
+ A.ensure(sysCacheMaxSize > 0, "System cache max size can not be less zero.");
+
this.sysCacheMaxSize = sysCacheMaxSize;
return this;
@@ -214,7 +218,7 @@
public MemoryPolicyConfiguration createDefaultPolicyConfig() {
MemoryPolicyConfiguration memPlc = new MemoryPolicyConfiguration();
- long maxSize = (dfltMemPlcSize != null) ? dfltMemPlcSize : DFLT_MEMORY_POLICY_MAX_SIZE;
+ long maxSize = dfltMemPlcSize;
if (maxSize < DFLT_MEMORY_POLICY_INITIAL_SIZE)
memPlc.setInitialSize(maxSize);
@@ -248,10 +252,10 @@
/**
* Gets a size for default memory policy overridden by user.
*
- * @return default memory policy size overridden by user or -1 if nothing was specified.
+ * @return default memory policy size overridden by user or {@link #DFLT_MEMORY_POLICY_MAX_SIZE} if nothing was specified.
*/
public long getDefaultMemoryPolicySize() {
- return (dfltMemPlcSize != null) ? dfltMemPlcSize : -1;
+ return dfltMemPlcSize;
}
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
index 7bc92d6..dc72482 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
@@ -26,6 +26,7 @@
import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.configuration.MemoryPolicyConfiguration;
import org.apache.ignite.internal.mem.DirectMemoryProvider;
import org.apache.ignite.internal.mem.DirectMemoryRegion;
@@ -36,10 +37,12 @@
import org.apache.ignite.internal.processors.cache.database.MemoryMetricsImpl;
import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO;
import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.internal.util.OffheapReadWriteLock;
import org.apache.ignite.internal.util.offheap.GridOffHeapOutOfMemoryException;
import org.apache.ignite.internal.util.typedef.internal.U;
+import static org.apache.ignite.IgniteSystemProperties.IGNITE_OFFHEAP_LOCK_CONCURRENCY_LEVEL;
import static org.apache.ignite.internal.util.GridUnsafe.wrapPointer;
/**
@@ -143,6 +146,12 @@
/** */
private OffheapReadWriteLock rwLock;
+ /** Concurrency lvl. */
+ private final int lockConcLvl = IgniteSystemProperties.getInteger(
+ IGNITE_OFFHEAP_LOCK_CONCURRENCY_LEVEL,
+ IgniteUtils.nearestPow2(Runtime.getRuntime().availableProcessors() * 4)
+ );
+
/** */
private final int totalPages;
@@ -182,8 +191,7 @@
totalPages = (int)(memPlcCfg.getMaxSize() / sysPageSize);
- // TODO configure concurrency level.
- rwLock = new OffheapReadWriteLock(128);
+ rwLock = new OffheapReadWriteLock(lockConcLvl);
}
/** {@inheritDoc} */
@@ -516,9 +524,8 @@
if (cmp < 0)
high = mid - 1;
- else if (cmp > 0) {
+ else if (cmp > 0)
low = mid + 1;
- }
else
return seg.pageIndex(seqNo);
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
index 0a906b2..098fa1e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
@@ -106,24 +106,21 @@
* @throws IgniteCheckedException If failed.
*/
public void init() throws IgniteCheckedException {
- if (memPlcMap == null) {
- MemoryConfiguration memCfg = cctx.kernalContext().config().getMemoryConfiguration();
+ MemoryConfiguration memCfg = cctx.kernalContext().config().getMemoryConfiguration();
- if (memCfg == null)
- memCfg = new MemoryConfiguration();
+ assert memCfg != null;
- validateConfiguration(memCfg);
+ validateConfiguration(memCfg);
- pageSize = memCfg.getPageSize();
+ pageSize = memCfg.getPageSize();
- initPageMemoryPolicies(memCfg);
+ initPageMemoryPolicies(memCfg);
- registerMetricsMBeans();
+ registerMetricsMBeans();
- startMemoryPolicies();
+ startMemoryPolicies();
- initPageMemoryDataStructures(memCfg);
- }
+ initPageMemoryDataStructures(memCfg);
}
/**
@@ -220,9 +217,11 @@
memPlcMap = U.newHashMap(2);
memMetricsMap = U.newHashMap(2);
- addMemoryPolicy(memCfg,
+ addMemoryPolicy(
+ memCfg,
memCfg.createDefaultPolicyConfig(),
- DFLT_MEM_PLC_DEFAULT_NAME);
+ DFLT_MEM_PLC_DEFAULT_NAME
+ );
U.warn(log, "No user-defined default MemoryPolicy found; system default of 1GB size will be used.");
}
@@ -234,9 +233,11 @@
memPlcMap = U.newHashMap(memPlcsCfgs.length + 2);
memMetricsMap = U.newHashMap(memPlcsCfgs.length + 2);
- addMemoryPolicy(memCfg,
+ addMemoryPolicy(
+ memCfg,
memCfg.createDefaultPolicyConfig(),
- DFLT_MEM_PLC_DEFAULT_NAME);
+ DFLT_MEM_PLC_DEFAULT_NAME
+ );
U.warn(log, "No user-defined default MemoryPolicy found; system default of 1GB size will be used.");
}
@@ -250,27 +251,34 @@
addMemoryPolicy(memCfg, memPlcCfg, memPlcCfg.getName());
}
- addMemoryPolicy(memCfg,
- createSystemMemoryPolicy(memCfg.getSystemCacheInitialSize(), memCfg.getSystemCacheMaxSize()),
- SYSTEM_MEMORY_POLICY_NAME);
+ addMemoryPolicy(
+ memCfg,
+ createSystemMemoryPolicy(
+ memCfg.getSystemCacheInitialSize(),
+ memCfg.getSystemCacheMaxSize()
+ ),
+ SYSTEM_MEMORY_POLICY_NAME
+ );
}
/**
- * @param dbCfg Database config.
+ * @param memCfg Database config.
* @param memPlcCfg Memory policy config.
* @param memPlcName Memory policy name.
*/
- private void addMemoryPolicy(MemoryConfiguration dbCfg,
- MemoryPolicyConfiguration memPlcCfg,
- String memPlcName) {
- String dfltMemPlcName = dbCfg.getDefaultMemoryPolicyName();
+ private void addMemoryPolicy(
+ MemoryConfiguration memCfg,
+ MemoryPolicyConfiguration memPlcCfg,
+ String memPlcName
+ ) {
+ String dfltMemPlcName = memCfg.getDefaultMemoryPolicyName();
if (dfltMemPlcName == null)
dfltMemPlcName = DFLT_MEM_PLC_DEFAULT_NAME;
MemoryMetricsImpl memMetrics = new MemoryMetricsImpl(memPlcCfg);
- MemoryPolicy memPlc = initMemory(dbCfg, memPlcCfg, memMetrics);
+ MemoryPolicy memPlc = initMemory(memCfg, memPlcCfg, memMetrics);
memPlcMap.put(memPlcName, memPlc);
@@ -328,8 +336,10 @@
Set<String> plcNames = (plcCfgs != null) ? U.<String>newHashSet(plcCfgs.length) : new HashSet<String>(0);
- checkSystemMemoryPolicySizeConfiguration(memCfg.getSystemCacheInitialSize(),
- memCfg.getSystemCacheMaxSize());
+ checkSystemMemoryPolicySizeConfiguration(
+ memCfg.getSystemCacheInitialSize(),
+ memCfg.getSystemCacheMaxSize()
+ );
if (plcCfgs != null) {
for (MemoryPolicyConfiguration plcCfg : plcCfgs) {
@@ -344,9 +354,10 @@
}
checkDefaultPolicyConfiguration(
- memCfg.getDefaultMemoryPolicyName(),
- memCfg.getDefaultMemoryPolicySize(),
- plcNames);
+ memCfg.getDefaultMemoryPolicyName(),
+ memCfg.getDefaultMemoryPolicySize(),
+ plcNames
+ );
}
/**
@@ -355,7 +366,10 @@
*
* @throws IgniteCheckedException In case of validation violation.
*/
- private void checkSystemMemoryPolicySizeConfiguration(long sysCacheInitSize, long sysCacheMaxSize) throws IgniteCheckedException {
+ private static void checkSystemMemoryPolicySizeConfiguration(
+ long sysCacheInitSize,
+ long sysCacheMaxSize
+ ) throws IgniteCheckedException {
if (sysCacheInitSize < MIN_PAGE_MEMORY_SIZE)
throw new IgniteCheckedException("Initial size for system cache must have size more than 10MB (use " +
"MemoryConfiguration.systemCacheInitialSize property to set correct size in bytes) " +
@@ -388,7 +402,7 @@
long dfltPlcSize,
Collection<String> plcNames
) throws IgniteCheckedException {
- if (dfltPlcSize != -1) {
+ if (dfltPlcSize != MemoryConfiguration.DFLT_MEMORY_POLICY_MAX_SIZE) {
if (!F.eq(dfltPlcName, MemoryConfiguration.DFLT_MEM_PLC_DEFAULT_NAME))
throw new IgniteCheckedException("User-defined MemoryPolicy configuration " +
"and defaultMemoryPolicySize properties are set at the same time. " +
@@ -843,7 +857,15 @@
MemoryPolicyConfiguration memPlcCfg,
MemoryMetricsImpl memMetrics
) {
- return new PageMemoryNoStoreImpl(log, memProvider, cctx, memCfg.getPageSize(), memPlcCfg, memMetrics, false);
+ return new PageMemoryNoStoreImpl(
+ log,
+ memProvider,
+ cctx,
+ memCfg.getPageSize(),
+ memPlcCfg,
+ memMetrics,
+ false
+ );
}
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetSingleFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetSingleFuture.java
index d93831d..9a7cfdc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetSingleFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtGetSingleFuture.java
@@ -265,23 +265,28 @@
* @return {@code True} if mapped.
*/
private boolean map(KeyCacheObject key) {
- GridDhtLocalPartition part = topVer.topologyVersion() > 0 ?
- cache().topology().localPartition(cctx.affinity().partition(key), topVer, true) :
- cache().topology().localPartition(key, false);
+ try {
+ GridDhtLocalPartition part = topVer.topologyVersion() > 0 ?
+ cache().topology().localPartition(cctx.affinity().partition(key), topVer, true) :
+ cache().topology().localPartition(key, false);
- if (part == null)
- return false;
+ if (part == null)
+ return false;
- assert this.part == -1;
+ assert this.part == -1;
- // By reserving, we make sure that partition won't be unloaded while processed.
- if (part.reserve()) {
- this.part = part.id();
+ // By reserving, we make sure that partition won't be unloaded while processed.
+ if (part.reserve()) {
+ this.part = part.id();
- return true;
+ return true;
+ }
+ else
+ return false;
}
- else
+ catch (GridDhtInvalidPartitionException ex) {
return false;
+ }
}
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index d57c0f1..ba4717a 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -10186,6 +10186,35 @@
}
/**
+ * @param x X.
+ */
+ public static int nearestPow2(int x) {
+ return nearestPow2(x, true);
+ }
+
+ /**
+ * @param x X.
+ * @param less Less.
+ */
+ public static int nearestPow2(int x, boolean less) {
+ assert x > 0 : "can not calculate for less zero";
+
+ long y = 1;
+
+ while (y < x){
+ if (y * 2 > Integer.MAX_VALUE)
+ return (int)y;
+
+ y *= 2;
+ }
+
+ if (less)
+ y /= 2;
+
+ return (int)y;
+ }
+
+ /**
* @param lock Lock.
*/
public static ReentrantReadWriteLockTracer lockTracer(ReadWriteLock lock) {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
index e4be824..35756a4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectExceptionSelfTest.java
@@ -45,6 +45,9 @@
/** */
private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
+ /** Cache name. */
+ private final String cacheName = "cache";
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(gridName);
@@ -52,7 +55,10 @@
cfg.setMarshaller(new BinaryMarshaller());
cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(IP_FINDER));
- cfg.setCacheConfiguration(new CacheConfiguration().setCopyOnRead(true));
+ cfg.setCacheConfiguration(
+ new CacheConfiguration(cacheName)
+ .setCopyOnRead(true)
+ );
BinaryConfiguration bcfg = new BinaryConfiguration();
@@ -84,7 +90,7 @@
public void testUnexpectedFieldType() throws Exception {
IgniteEx grid = grid(0);
- IgniteCache<String, Value> cache = grid.cache(null);
+ IgniteCache<String, Value> cache = grid.cache(cacheName);
cache.put(TEST_KEY, new Value());
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheExchangeMessageDuplicatedStateTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheExchangeMessageDuplicatedStateTest.java
index d8a2065..99e6afb 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheExchangeMessageDuplicatedStateTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheExchangeMessageDuplicatedStateTest.java
@@ -40,9 +40,10 @@
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import static org.apache.ignite.testframework.GridTestUtils.getFieldValue;
+
/**
*
*/
@@ -234,7 +235,7 @@
* @param msg Message.
*/
private void checkFullMessage(GridDhtPartitionsFullMessage msg) {
- Map<Integer, Integer> dupPartsData = GridTestUtils.getFieldValue(msg, "dupPartsData");
+ Map<Integer, Integer> dupPartsData = getFieldValue(msg, "dupPartsData");
assertNotNull(dupPartsData);
@@ -243,7 +244,8 @@
assertFalse(dupPartsData.containsKey(CU.cacheId(AFF3_CACHE1)));
- Map<Integer, Map<Integer, Long>> partCntrs = GridTestUtils.getFieldValue(msg, "partCntrs");
+ Map<Integer, Map<Integer, Long>> partCntrs =
+ getFieldValue(getFieldValue(msg, "partCntrs"), "map");
if (partCntrs != null) {
for (Map<Integer, Long> cntrs : partCntrs.values())
@@ -255,7 +257,7 @@
* @param msg Message.
*/
private void checkSingleMessage(GridDhtPartitionsSingleMessage msg) {
- Map<Integer, Integer> dupPartsData = GridTestUtils.getFieldValue(msg, "dupPartsData");
+ Map<Integer, Integer> dupPartsData = getFieldValue(msg, "dupPartsData");
assertNotNull(dupPartsData);
@@ -264,7 +266,7 @@
assertFalse(dupPartsData.containsKey(CU.cacheId(AFF3_CACHE1)));
- Map<Integer, Map<Integer, Long>> partCntrs = GridTestUtils.getFieldValue(msg, "partCntrs");
+ Map<Integer, Map<Integer, Long>> partCntrs = getFieldValue(msg, "partCntrs");
if (partCntrs != null) {
for (Map<Integer, Long> cntrs : partCntrs.values())
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java
index b98f429..5206472 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java
@@ -17,6 +17,12 @@
package org.apache.ignite.internal.processors.database;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.ignite.configuration.MemoryPolicyConfiguration;
import org.apache.ignite.internal.mem.DirectMemoryProvider;
import org.apache.ignite.internal.pagemem.FullPageId;
@@ -30,13 +36,6 @@
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-import java.util.concurrent.ThreadLocalRandom;
-import java.util.concurrent.atomic.AtomicLong;
-
/**
*
*/
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAbstractSelfTest.java
index 6f2201f..465b38d 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/TcpDiscoveryIpFinderAbstractSelfTest.java
@@ -54,6 +54,13 @@
injectLogger(finder);
}
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ super.afterTest();
+
+ stopAllGrids();
+ }
+
/**
* @throws Exception If any error occurs.
*/
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
index 25cb083..acc12c2 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/vm/TcpDiscoveryVmIpFinderSelfTest.java
@@ -223,6 +223,7 @@
Ignition.stop("client1", true);
Ignition.stop("client2", true);
+ Ignition.stop("client3", true);
assertEquals(3 * srvSize, IP_FINDER.getRegisteredAddresses().size());
@@ -237,12 +238,14 @@
Ignition.stop("server1", true);
Ignition.stop("server2", true);
- GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ boolean res = GridTestUtils.waitForCondition(new GridAbsPredicate() {
@Override public boolean apply() {
- return 0 == G.allGrids().size();
+ return G.allGrids().isEmpty();
}
}, 10000);
+ assertTrue(res);
+
assertTrue(3 * srvSize >= IP_FINDER.getRegisteredAddresses().size());
}
diff --git a/modules/pds/src/main/java/org/apache/ignite/internal/processors/cache/database/GridCacheDatabaseSharedManager.java b/modules/pds/src/main/java/org/apache/ignite/internal/processors/cache/database/GridCacheDatabaseSharedManager.java
index 45b5abf..a78ba27 100755
--- a/modules/pds/src/main/java/org/apache/ignite/internal/processors/cache/database/GridCacheDatabaseSharedManager.java
+++ b/modules/pds/src/main/java/org/apache/ignite/internal/processors/cache/database/GridCacheDatabaseSharedManager.java
@@ -150,7 +150,7 @@
IgniteSystemProperties.getLong(IGNITE_PDS_PARTITION_DESTROY_CHECKPOINT_DELAY, 30_000);
/** */
- private final int ggWalRebalanceThreshold = IgniteSystemProperties.getInteger(
+ private final int walRebalanceThreshold = IgniteSystemProperties.getInteger(
IGNITE_PDS_WAL_REBALANCE_THRESHOLD, 500_000);
/** Checkpoint lock hold count. */
@@ -355,15 +355,36 @@
);
// Intentionally use identity comparison to check if configuration default has changed.
- //noinspection NumberEquality
+ // Noinspection NumberEquality.
if (cpBufSize == PersistentStoreConfiguration.DFLT_CHECKPOINT_PAGE_BUFFER_SIZE) {
MemoryConfiguration memCfg = cctx.kernalContext().config().getMemoryConfiguration();
- // Limit the checkpoint page buffer size by 2GB.
- //TODO find max page cache and use it instead of memCfg.getPageCacheSize() (replaced with Long.MAX_VALUE now)
- long adjusted = Math.min(Long.MAX_VALUE / 4, 2 * 1024L * 1024L * 1024L);
+ assert memCfg != null;
- if (memCfg != null && cpBufSize < adjusted) {
+ long totalSize = memCfg.getSystemCacheMaxSize();
+
+ if (memCfg.getMemoryPolicies() == null)
+ totalSize += MemoryConfiguration.DFLT_MEMORY_POLICY_MAX_SIZE;
+ else {
+ for (MemoryPolicyConfiguration memPlc : memCfg.getMemoryPolicies()) {
+ if (Long.MAX_VALUE - memPlc.getMaxSize() > totalSize)
+ totalSize += memPlc.getMaxSize();
+ else {
+ totalSize = Long.MAX_VALUE;
+
+ break;
+ }
+ }
+
+ assert totalSize > 0;
+ }
+
+ // Limit the checkpoint page buffer size by 2GB.
+ long dfltSize = 2 * 1024L * 1024L * 1024L;
+
+ long adjusted = Math.min(totalSize / 4, dfltSize);
+
+ if (cpBufSize < adjusted) {
U.quietAndInfo(log,
"Default checkpoint page buffer size is too small, setting to an adjusted value: "
+ U.readableSize(adjusted, false)
@@ -555,7 +576,10 @@
) {
return new PageMemoryImpl(
memProvider,
- calculateFragmentSizes(memCfg.getConcurrencyLevel(), plcCfg.getMaxSize()),
+ calculateFragmentSizes(
+ memCfg.getConcurrencyLevel(),
+ plcCfg.getMaxSize()
+ ),
cctx,
memCfg.getPageSize(),
new GridInClosure3X<FullPageId, ByteBuffer, Integer>() {
@@ -880,7 +904,7 @@
continue;
for (GridDhtLocalPartition part : cacheCtx.topology().currentLocalPartitions()) {
- if (part.state() != GridDhtPartitionState.OWNING || part.dataStore().size() <= ggWalRebalanceThreshold)
+ if (part.state() != GridDhtPartitionState.OWNING || part.dataStore().size() <= walRebalanceThreshold)
continue;
CheckpointEntry cpEntry = searchCheckpointEntry(cacheCtx, part.id(), null);
diff --git a/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java b/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java
index ddaf368..9f64f1b 100644
--- a/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java
+++ b/modules/pds/src/test/java/org/apache/ignite/cache/database/IgnitePersistentStoreCacheRebalancingAbstractTest.java
@@ -315,6 +315,8 @@
* @throws Exception If fails.
*/
public void testPartitionLossAndRecover() throws Exception {
+ fail("IGNITE-5302");
+
Ignite ignite1 = startGrid(0);
Ignite ignite2 = startGrid(1);
Ignite ignite3 = startGrid(2);
@@ -362,6 +364,8 @@
* @throws Exception If failed.
*/
public void testTopologyChangesWithConstantLoad() throws Exception {
+ fail("only for one run, must be removed soon");
+
final int entriesCnt = 10_000;
int maxNodesCount = 4;
int topChanges = 20;
diff --git a/modules/pds/src/test/java/org/apache/ignite/cache/database/db/file/PageStoreEvictionSelfTest.java b/modules/pds/src/test/java/org/apache/ignite/cache/database/db/file/PageStoreEvictionSelfTest.java
index 4205756..2ef4524 100644
--- a/modules/pds/src/test/java/org/apache/ignite/cache/database/db/file/PageStoreEvictionSelfTest.java
+++ b/modules/pds/src/test/java/org/apache/ignite/cache/database/db/file/PageStoreEvictionSelfTest.java
@@ -59,6 +59,9 @@
/** */
private static final int PAGES_NUM = 128_000;
+ /** Cache name. */
+ private final String cacheName = "cache";
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
final IgniteConfiguration cfg = super.getConfiguration(gridName);
@@ -67,6 +70,8 @@
cfg.setMemoryConfiguration(createDbConfig());
+ cfg.setCacheConfiguration(new CacheConfiguration<>(cacheName));
+
return cfg;
}
@@ -74,19 +79,19 @@
* @return DB config.
*/
private MemoryConfiguration createDbConfig() {
- final MemoryConfiguration dbCfg = new MemoryConfiguration();
+ final MemoryConfiguration memCfg = new MemoryConfiguration();
MemoryPolicyConfiguration memPlcCfg = new MemoryPolicyConfiguration();
memPlcCfg.setInitialSize(MEMORY_LIMIT);
memPlcCfg.setMaxSize(MEMORY_LIMIT);
memPlcCfg.setName("dfltMemPlc");
- dbCfg.setPageSize(PAGE_SIZE);
- dbCfg.setConcurrencyLevel(NUMBER_OF_SEGMENTS);
- dbCfg.setMemoryPolicies(memPlcCfg);
- dbCfg.setDefaultMemoryPolicyName("dfltMemPlc");
+ memCfg.setPageSize(PAGE_SIZE);
+ memCfg.setConcurrencyLevel(NUMBER_OF_SEGMENTS);
+ memCfg.setMemoryPolicies(memPlcCfg);
+ memCfg.setDefaultMemoryPolicyName("dfltMemPlc");
- return dbCfg;
+ return memCfg;
}
@@ -111,11 +116,10 @@
*/
public void testPageEviction() throws Exception {
final IgniteEx ig = startGrid(0);
- ig.getOrCreateCache(new CacheConfiguration<>("partitioned"));
final PageMemory memory = getMemory(ig);
- writeData(ig, memory, CU.cacheId("partitioned"));
+ writeData(ig, memory, CU.cacheId(cacheName));
}
/**