You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/04/26 09:31:50 UTC
[29/29] ignite git commit: Merge branch ignite-2.0 into ignite-5024
Merge branch ignite-2.0 into ignite-5024
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/eac6762b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/eac6762b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/eac6762b
Branch: refs/heads/ignite-5024
Commit: eac6762b2da884b3aca8094b8a13c670aaeac55a
Parents: 0c05145 4be320a
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Wed Apr 26 12:32:02 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Apr 26 12:32:02 2017 +0300
----------------------------------------------------------------------
.../examples/datagrid/CacheQueryExample.java | 54 +-
.../streaming/wordcount/QueryWords.java | 3 +-
.../examples/IndexingBridgeMethodTest.java | 93 ---
.../IgniteExamplesJ8SelfTestSuite.java | 2 -
.../cassandra/common/PropertyMappingHelper.java | 21 +-
.../persistence/KeyPersistenceSettings.java | 18 +-
.../store/cassandra/persistence/PojoField.java | 21 +-
.../cassandra/persistence/PojoKeyField.java | 7 -
.../cassandra/persistence/PojoValueField.java | 6 -
.../persistence/ValuePersistenceSettings.java | 12 +-
.../org/apache/ignite/tests/pojos/Person.java | 10 +-
.../org/apache/ignite/tests/pojos/Product.java | 7 -
.../apache/ignite/tests/pojos/ProductOrder.java | 8 -
.../internal/jdbc2/JdbcResultSetSelfTest.java | 2 +-
.../org/apache/ignite/cache/CacheMetrics.java | 1 -
.../org/apache/ignite/cache/QueryEntity.java | 43 +-
.../org/apache/ignite/cache/query/Query.java | 48 ++
.../ignite/cache/query/SqlFieldsQuery.java | 26 +
.../org/apache/ignite/cache/query/SqlQuery.java | 26 +
.../cache/query/annotations/QuerySqlField.java | 2 +-
.../cache/query/annotations/QueryTextField.java | 4 +-
.../configuration/CacheConfiguration.java | 83 +--
.../configuration/FileSystemConfiguration.java | 25 -
.../configuration/MemoryConfiguration.java | 13 +-
.../MemoryPolicyConfiguration.java | 6 +-
.../org/apache/ignite/igfs/IgfsMetrics.java | 5 +-
.../optimized/OptimizedMarshaller.java | 3 +-
.../processors/cache/GridCacheAdapter.java | 14 -
.../cache/GridCacheBatchSwapEntry.java | 76 ---
.../processors/cache/GridCacheEntryEx.java | 23 -
.../cache/GridCacheEvictionManager.java | 95 +--
.../processors/cache/GridCacheMapEntry.java | 73 ---
.../processors/cache/GridCacheProcessor.java | 9 +-
.../processors/cache/GridCacheProxyImpl.java | 12 -
.../processors/cache/GridCacheSwapEntry.java | 82 ---
.../cache/GridCacheSwapEntryImpl.java | 339 ----------
.../cache/IgniteCacheOffheapManager.java | 3 -
.../cache/IgniteCacheOffheapManagerImpl.java | 5 -
.../processors/cache/IgniteCacheProxy.java | 22 +-
.../processors/cache/IgniteInternalCache.java | 7 -
.../IgniteCacheDatabaseSharedManager.java | 115 ++--
.../dht/GridDhtTransactionalCacheAdapter.java | 1 -
.../dht/preloader/GridDhtPartitionDemander.java | 12 -
.../distributed/near/GridNearCacheAdapter.java | 5 -
.../GridCacheAtomicReferenceImpl.java | 2 +
.../processors/igfs/IgfsDataManager.java | 36 +-
.../processors/query/GridQueryProcessor.java | 4 +-
.../internal/processors/query/QuerySchema.java | 4 +-
.../internal/processors/query/QueryUtils.java | 79 ++-
.../ignite/internal/util/GridIntIterator.java | 33 +
.../ignite/internal/util/GridIntList.java | 21 +-
.../ignite/internal/util/IgniteUtils.java | 19 +
.../internal/visor/VisorDataTransferObject.java | 15 +-
.../visor/binary/VisorBinaryMetadata.java | 3 +-
.../visor/cache/VisorCacheConfiguration.java | 3 +-
.../internal/visor/igfs/VisorIgfsMetrics.java | 3 +-
.../visor/node/VisorIgfsConfiguration.java | 13 -
.../resources/META-INF/classnames.properties | 47 +-
.../IgniteClientReconnectAtomicsTest.java | 15 +-
.../processors/cache/GridCacheTestEntryEx.java | 15 -
.../cache/MemoryPolicyConfigValidationTest.java | 6 +-
.../MemoryPolicyInitializationTest.java | 307 +++++++++
...heClientMultiNodeUpdateTopologyLockTest.java | 28 +-
.../distributed/IgniteCacheGetRestartTest.java | 2 +-
.../processors/igfs/IgfsMaxSizeSelfTest.java | 121 ----
.../processors/igfs/IgfsSizeSelfTest.java | 50 +-
.../testsuites/IgniteCacheTestSuite2.java | 2 +
.../ignite/testsuites/IgniteIgfsTestSuite.java | 3 -
.../query/h2/H2IndexingAbstractGeoSelfTest.java | 4 +-
.../resources/META-INF/classnames.properties | 1 +
.../HadoopIgfs20FileSystemAbstractSelfTest.java | 1 -
.../cache/hibernate/HibernateCacheProxy.java | 5 -
.../cache/hibernate/HibernateCacheProxy.java | 5 -
.../processors/query/h2/IgniteH2Indexing.java | 16 +-
.../query/h2/twostep/GridMapQueryExecutor.java | 5 +-
.../h2/twostep/GridReduceQueryExecutor.java | 222 ++++++-
.../h2/twostep/msg/GridH2QueryRequest.java | 64 +-
.../cache/GridCacheQueryTestValue.java | 2 +-
.../IgniteCacheAbstractFieldsQuerySelfTest.java | 29 +-
.../cache/IgniteCacheDistributedJoinTest.java | 6 +-
...IgniteCacheJoinQueryWithAffinityKeyTest.java | 20 +-
.../cache/IgniteCrossCachesJoinsQueryTest.java | 77 +--
...stributedPartitionQueryAbstractSelfTest.java | 652 +++++++++++++++++++
...utedPartitionQueryConfigurationSelfTest.java | 92 +++
...butedPartitionQueryNodeRestartsSelfTest.java | 114 ++++
...eCacheDistributedPartitionQuerySelfTest.java | 90 +++
.../IgniteCacheQueryNodeRestartSelfTest2.java | 7 +-
.../DynamicIndexAbstractBasicSelfTest.java | 16 +-
.../index/QueryEntityValidationSelfTest.java | 162 +++++
.../query/IgniteSqlSplitterSelfTest.java | 46 +-
.../IgniteCacheQuerySelfTestSuite.java | 9 +
.../java/org/apache/ignite/ml/math/Algebra.java | 89 ++-
.../ignite/ml/math/IdentityValueMapper.java | 3 +-
.../java/org/apache/ignite/ml/math/Matrix.java | 32 +-
.../org/apache/ignite/ml/math/MurmurHash.java | 16 +-
.../java/org/apache/ignite/ml/math/Tracer.java | 4 +-
.../java/org/apache/ignite/ml/math/Vector.java | 3 +-
.../decompositions/CholeskyDecomposition.java | 8 +-
.../math/decompositions/EigenDecomposition.java | 4 +-
.../ml/math/decompositions/LUDecomposition.java | 8 +-
.../ignite/ml/math/functions/Functions.java | 21 +-
.../ml/math/impls/matrix/PivotedMatrixView.java | 2 +-
.../impls/matrix/SparseDistributedMatrix.java | 12 +-
.../storage/matrix/CacheMatrixStorage.java | 15 +-
.../matrix/DenseOffHeapMatrixStorage.java | 14 +-
.../storage/matrix/FunctionMatrixStorage.java | 16 +-
.../matrix/SparseLocalOnHeapMatrixStorage.java | 18 +-
.../storage/vector/CacheVectorStorage.java | 12 +-
.../storage/vector/ConstantVectorStorage.java | 9 +-
.../storage/vector/FunctionVectorStorage.java | 16 +-
.../storage/vector/MatrixVectorStorage.java | 18 +-
.../storage/vector/PivotedVectorStorage.java | 15 +-
.../SingleElementVectorDelegateStorage.java | 12 +-
.../vector/SingleElementVectorStorage.java | 10 +-
.../vector/SparseLocalOffHeapVectorStorage.java | 2 +
.../vector/SparseLocalOnHeapVectorStorage.java | 9 +-
.../ml/math/impls/vector/MatrixVectorView.java | 19 +-
.../ml/math/impls/vector/PivotedVectorView.java | 13 +-
.../ml/math/impls/vector/RandomVector.java | 5 +-
.../math/impls/vector/SingleElementVector.java | 103 +--
.../org/apache/ignite/ml/math/TracerTest.java | 11 +-
.../ml/math/impls/matrix/CacheMatrixTest.java | 10 +-
.../impls/matrix/MatrixKeyMapperForTests.java | 19 +-
.../storage/matrix/MatrixStorageFixtures.java | 18 +-
.../SparseLocalOffHeapVectorStorageTest.java | 3 +-
.../math/impls/vector/AbstractVectorTest.java | 41 +-
.../ml/math/impls/vector/CacheVectorTest.java | 4 +-
.../Apache.Ignite.Core.Tests.csproj | 1 +
.../Query/Continuous/ContinuousQueryTest.cs | 115 ++++
.../DataStructures/AtomicReferenceTest.cs | 2 -
.../Cache/Configuration/MemoryConfiguration.cs | 7 +
.../Configuration/MemoryPolicyConfiguration.cs | 3 +
modules/platforms/dotnet/build.ps1 | 12 +-
.../org/apache/ignite/spring/sprint-exclude.xml | 2 -
.../frontend/app/data/event-groups.json | 14 -
.../frontend/app/modules/cluster/Cache.js | 4 -
.../app/modules/cluster/CacheMetrics.js | 4 -
modules/web-console/web-agent/pom.xml | 2 +-
.../ignite/console/agent/AgentLauncher.java | 10 +-
139 files changed, 2812 insertions(+), 1896 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java
index c0eb98e,c0eb98e..e780f3e
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheMetrics.java
@@@ -109,7 -109,7 +109,6 @@@ public interface CacheMetrics
*/
public float getAverageRemoveTime();
--
/**
* The mean time to execute tx commit.
*
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
index d0c8688,f88a95a..cdbed94
--- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryConfiguration.java
@@@ -89,11 -84,8 +92,11 @@@ public class MemoryConfiguration implem
private int concLvl;
/** A name of the memory policy that defines the default memory region. */
- private String dfltMemPlcName;
+ private String dfltMemPlcName = DFLT_MEM_PLC_DEFAULT_NAME;
+ /** Size of memory (in bytes) to use for default MemoryPolicy. */
+ private Long dfltMemPlcSize;
+
/** Memory policies. */
private MemoryPolicyConfiguration[] memPlcs;
@@@ -175,14 -171,7 +182,12 @@@
public MemoryPolicyConfiguration createDefaultPolicyConfig() {
MemoryPolicyConfiguration memPlc = new MemoryPolicyConfiguration();
- memPlc.setSize(DFLT_MEMORY_POLICY_SIZE);
+ long maxSize = (dfltMemPlcSize != null) ? dfltMemPlcSize : DFLT_MEMORY_POLICY_MAX_SIZE;
+
- memPlc.setName(null);
-
+ if (maxSize < DFLT_MEMORY_POLICY_INITIAL_SIZE)
+ memPlc.setInitialSize(maxSize);
+
+ memPlc.setMaxSize(maxSize);
return memPlc;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java
index 2f52fe1,d0adcf9..dcfca37
--- a/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/MemoryPolicyConfiguration.java
@@@ -61,13 -63,10 +63,13 @@@ public final class MemoryPolicyConfigur
private static final long serialVersionUID = 0L;
/** Memory policy name. */
- private String name;
+ private String name = DFLT_MEM_PLC_DEFAULT_NAME;
+ /** Memory policy start size. */
+ private long initialSize = MemoryConfiguration.DFLT_MEMORY_POLICY_INITIAL_SIZE;
+
/** Memory policy maximum size. */
- private long size;
+ private long maxSize = MemoryConfiguration.DFLT_MEMORY_POLICY_MAX_SIZE;
/** An optional path to a memory mapped file for this memory policy. */
private String swapFilePath;
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
index fa5f751,ae594fa..58a641f
--- 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
@@@ -65,10 -64,10 +67,10 @@@ import static org.apache.ignite.configu
*/
public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdapter implements IgniteChangeGlobalStateSupport {
/** MemoryPolicyConfiguration name reserved for internal caches. */
- private static final String SYSTEM_MEMORY_POLICY_NAME = "sysMemPlc";
+ static final String SYSTEM_MEMORY_POLICY_NAME = "sysMemPlc";
/** Minimum size of memory chunk */
- private static final long MIN_PAGE_MEMORY_SIZE = 1024 * 1024;
+ private static final long MIN_PAGE_MEMORY_SIZE = 10 * 1024 * 1024;
/** */
protected Map<String, MemoryPolicy> memPlcMap;
@@@ -123,6 -120,34 +127,34 @@@
}
/**
+ * Registers MBeans for all MemoryMetrics configured in this instance.
+ */
+ private void registerMetricsMBeans() {
+ IgniteConfiguration cfg = cctx.gridConfig();
+
- for (MemoryMetrics memMetrics : memMetricsMap.values())
- registerMetricsMBean((MemoryMetricsImpl) memMetrics, cfg);
++ for (MemoryPolicy memPlc : memPlcMap.values())
++ registerMetricsMBean((MemoryMetricsMXBean)memPlc.memoryMetrics(), cfg);
+ }
+
+ /**
+ * @param memMetrics Memory metrics.
+ */
- private void registerMetricsMBean(MemoryMetricsImpl memMetrics, IgniteConfiguration cfg) {
++ private void registerMetricsMBean(MemoryMetricsMXBean memMetrics, IgniteConfiguration cfg) {
+ try {
+ U.registerMBean(
+ cfg.getMBeanServer(),
+ cfg.getIgniteInstanceName(),
+ "MemoryMetrics",
+ memMetrics.getName(),
+ memMetrics,
+ MemoryMetricsMXBean.class);
+ }
+ catch (JMException e) {
- log.warning("Failed to register MBean for MemoryMetrics with name: '" + memMetrics.getName() + "'");
++ U.error(log, "Failed to register MBean for MemoryMetrics with name: '" + memMetrics.getName() + "'", e);
+ }
+ }
+
+ /**
* @param dbCfg Database config.
*/
protected void initPageMemoryDataStructures(MemoryConfiguration dbCfg) throws IgniteCheckedException {
@@@ -179,58 -204,69 +211,63 @@@
if (memPlcsCfgs == null) {
//reserve place for default and system memory policies
memPlcMap = U.newHashMap(2);
- memMetricsMap = U.newHashMap(2);
- MemoryPolicyConfiguration dfltPlcCfg = memCfg.createDefaultPolicyConfig();
-
- dfltMemPlc = initMemoryPolicy(dfltPlcCfg, memCfg);
- addMemoryPolicy(dbCfg,
- dbCfg.createDefaultPolicyConfig(),
- DFLT_MEM_PLC_DEFAULT_NAME);
++ addMemoryPolicy(memCfg,
++ memCfg.createDefaultPolicyConfig(),
++ DFLT_MEM_PLC_DEFAULT_NAME);
- log.warning("No user-defined default MemoryPolicy found; system default of 1GB size will be used.");
+ U.warn(log, "No user-defined default MemoryPolicy found; system default of 1GB size will be used.");
}
else {
- String dfltMemPlcName = dbCfg.getDefaultMemoryPolicyName();
+ String dfltMemPlcName = memCfg.getDefaultMemoryPolicyName();
- if (dfltMemPlcName == null) {
+ if (DFLT_MEM_PLC_DEFAULT_NAME.equals(dfltMemPlcName) && !hasCustomDefaultMemoryPolicy(memPlcsCfgs)) {
//reserve additional place for default and system memory policies
memPlcMap = U.newHashMap(memPlcsCfgs.length + 2);
- memMetricsMap = U.newHashMap(memPlcsCfgs.length + 2);
- MemoryPolicyConfiguration dfltPlcCfg = memCfg.createDefaultPolicyConfig();
-
- dfltMemPlc = initMemoryPolicy(dfltPlcCfg, memCfg);
- addMemoryPolicy(dbCfg,
- dbCfg.createDefaultPolicyConfig(),
- DFLT_MEM_PLC_DEFAULT_NAME);
++ addMemoryPolicy(memCfg,
++ memCfg.createDefaultPolicyConfig(),
++ DFLT_MEM_PLC_DEFAULT_NAME);
- log.warning("No user-defined default MemoryPolicy found; system default will be allocated.");
+ U.warn(log, "No user-defined default MemoryPolicy found; system default of 1GB size will be used.");
}
- else {
+ else
- //reserve additional place for system memory policy only
+ //reserve additional space for system memory policy only
memPlcMap = U.newHashMap(memPlcsCfgs.length + 1);
- memMetricsMap = U.newHashMap(memPlcsCfgs.length + 1);
- }
- for (MemoryPolicyConfiguration memPlcCfg : memPlcsCfgs) {
- MemoryPolicy memPlc = initMemoryPolicy(memPlcCfg, memCfg);
-
- if (memPlcCfg.getName().equals(dfltMemPlcName))
- dfltMemPlc = memPlc;
- }
+ for (MemoryPolicyConfiguration memPlcCfg : memPlcsCfgs)
- addMemoryPolicy(dbCfg, memPlcCfg, memPlcCfg.getName());
++ addMemoryPolicy(memCfg, memPlcCfg, memPlcCfg.getName());
}
- MemoryPolicyConfiguration sysPlcCfg = createSystemMemoryPolicy(memCfg.getSystemCacheMemorySize());
-
- initMemoryPolicy(sysPlcCfg, memCfg);
- addMemoryPolicy(dbCfg,
- createSystemMemoryPolicy(dbCfg.getSystemCacheMemorySize()),
- SYSTEM_MEMORY_POLICY_NAME);
++ addMemoryPolicy(memCfg,
++ createSystemMemoryPolicy(memCfg.getSystemCacheMemorySize()),
++ SYSTEM_MEMORY_POLICY_NAME);
}
/**
- * @param plcCfg Policy configuration.
- * @param memCfg Memory configuration.
- * @return Initialized memory policy.
+ * @param dbCfg Database config.
+ * @param memPlcCfg Memory policy config.
+ * @param memPlcName Memory policy name.
*/
- private MemoryPolicy initMemoryPolicy(MemoryPolicyConfiguration plcCfg, MemoryConfiguration memCfg) {
- MemoryMetricsImpl sysMemMetrics = new MemoryMetricsImpl(plcCfg);
+ private void addMemoryPolicy(MemoryConfiguration dbCfg,
+ MemoryPolicyConfiguration memPlcCfg,
+ String memPlcName) {
+ String dfltMemPlcName = dbCfg.getDefaultMemoryPolicyName();
+
+ if (dfltMemPlcName == null)
+ dfltMemPlcName = DFLT_MEM_PLC_DEFAULT_NAME;
- MemoryPolicy plc = initMemory(memCfg, plcCfg, sysMemMetrics);
+ MemoryMetricsImpl memMetrics = new MemoryMetricsImpl(memPlcCfg);
- memPlcMap.put(plcCfg.getName(), plc);
+ MemoryPolicy memPlc = initMemory(dbCfg, memPlcCfg, memMetrics);
- registerMetricsMBean(sysMemMetrics);
+ memPlcMap.put(memPlcName, memPlc);
- return plc;
- memMetricsMap.put(memPlcName, memMetrics);
-
+ if (memPlcName.equals(dfltMemPlcName))
+ dfltMemPlc = memPlc;
+ else if (memPlcName.equals(DFLT_MEM_PLC_DEFAULT_NAME))
- log.warning("Memory Policy with name 'default' isn't used as a default. " +
++ U.warn(log, "Memory Policy with name 'default' isn't used as a default. " +
+ "Please check Memory Policies configuration.");
}
/**
@@@ -298,30 -330,12 +327,30 @@@
* @param plcNames All MemoryPolicy names.
* @throws IgniteCheckedException In case of validation violation.
*/
- private static void checkDefaultPolicyConfiguration(String dfltPlcName, Set<String> plcNames) throws IgniteCheckedException {
+ private static void checkDefaultPolicyConfiguration(
+ String dfltPlcName,
+ long dfltPlcSize,
+ Collection<String> plcNames
+ ) throws IgniteCheckedException {
+ if (dfltPlcSize != -1) {
+ if (dfltPlcName != null)
+ throw new IgniteCheckedException("User-defined MemoryPolicy configuration " +
+ "and defaultMemoryPolicySize properties are set at the same time. " +
+ "Delete either MemoryConfiguration.defaultMemoryPolicySize property " +
+ "or user-defined default MemoryPolicy configuration");
+
+ if (dfltPlcSize < MIN_PAGE_MEMORY_SIZE)
+ throw new IgniteCheckedException("User-defined default MemoryPolicy size is less than 1MB. " +
+ "Use MemoryConfiguration.defaultMemoryPolicySize property to set correct size.");
+ }
+
- if (dfltPlcName != null) {
+ if (!DFLT_MEM_PLC_DEFAULT_NAME.equals(dfltPlcName)) {
if (dfltPlcName.isEmpty())
throw new IgniteCheckedException("User-defined default MemoryPolicy name must be non-empty");
+
if (!plcNames.contains(dfltPlcName))
- throw new IgniteCheckedException("User-defined default MemoryPolicy name must be presented among configured MemoryPolices: " + dfltPlcName);
+ throw new IgniteCheckedException("User-defined default MemoryPolicy name " +
+ "must be presented among configured MemoryPolices: " + dfltPlcName);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
index acd0a1f,7fa2355..621b833
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
@@@ -242,7 -243,11 +243,11 @@@ public class IgfsDataManager extends Ig
* @return Maximum number of bytes for IGFS data cache.
*/
public long maxSpaceSize() {
- return (igfsCtx.configuration().getMaxSpaceSize() <= 0) ? 0 : dataCachePrj.igfsDataSpaceMax();
+ MemoryPolicy plc = dataCachePrj.context().memoryPolicy();
+
- long size = plc != null ? plc.config().getSize() : 0;
++ long size = plc != null ? plc.config().getMaxSize() : 0;
+
+ return (size <= 0) ? 0 : size ;
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index fde8cbf,59d334a..6f8728c
--- 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
@@@ -10114,4 -10094,23 +10114,23 @@@ public abstract class IgniteUtils
throw new IgniteCheckedException(e);
}
}
+
+ /**
+ * Returns {@link GridIntIterator} for range of primitive integers.
+ * @param start Start.
+ * @param cnt Count.
+ */
+ public static GridIntIterator forRange(final int start, final int cnt) {
+ return new GridIntIterator() {
+ int c = 0;
+
+ @Override public boolean hasNext() {
+ return c < cnt;
+ }
+
+ @Override public int next() {
+ return start + c++;
+ }
+ };
+ }
-}
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java
index 62278da,154e562..a1a05eb
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/MemoryPolicyConfigValidationTest.java
@@@ -305,10 -217,10 +305,10 @@@ public class MemoryPolicyConfigValidati
NAMES_CONFLICT("Two MemoryPolicies have the same name: "),
/** */
- RESERVED_MEMORY_POLICY_MISUSE("'sysMemPlc' policy name is reserved for internal use."),
+ SYSTEM_MEMORY_POLICY_NAME_MISUSE("'sysMemPlc' policy name is reserved for internal use."),
/** */
- TOO_SMALL_MEMORY_SIZE("MemoryPolicy must have size more than 1MB: "),
+ TOO_SMALL_MEMORY_SIZE("MemoryPolicy must have size more than 10MB "),
/** */
NULL_NAME_ON_USER_DEFINED_POLICY("User-defined MemoryPolicyConfiguration must have non-null and non-empty name."),
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicyInitializationTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicyInitializationTest.java
index 0000000,1e3f328..a1c9728
mode 000000,100644..100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicyInitializationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/MemoryPolicyInitializationTest.java
@@@ -1,0 -1,307 +1,307 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ package org.apache.ignite.internal.processors.cache.database;
+
+ import java.util.Collection;
+ import org.apache.ignite.IgniteCache;
+ import org.apache.ignite.configuration.CacheConfiguration;
+ import org.apache.ignite.configuration.IgniteConfiguration;
+ import org.apache.ignite.configuration.MemoryConfiguration;
+ import org.apache.ignite.configuration.MemoryPolicyConfiguration;
+ import org.apache.ignite.internal.IgniteEx;
+ import org.apache.ignite.internal.processors.cache.GridCacheContext;
+ import org.apache.ignite.internal.util.typedef.internal.U;
+ import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+ import static org.apache.ignite.configuration.MemoryConfiguration.DFLT_MEM_PLC_DEFAULT_NAME;
+
+ /**
+ *
+ */
+ public class MemoryPolicyInitializationTest extends GridCommonAbstractTest {
+ /** */
+ private static final String CUSTOM_NON_DEFAULT_MEM_PLC_NAME = "custom_mem_plc";
+
+ /** */
+ private static final long USER_CUSTOM_MEM_PLC_SIZE = 10 * 1024 * 1024;
+
+ /** */
+ private static final long USER_DEFAULT_MEM_PLC_SIZE = 99 * 1024 * 1024;
+
+ /** */
+ private MemoryConfiguration memCfg;
+
+ /** {@inheritDoc} */
+ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+ IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+ cfg.setMemoryConfiguration(memCfg);
+
+ return cfg;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void beforeTest() throws Exception {
+ memCfg = null;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ stopAllGrids();
+ }
+
+ /**
+ * Verifies that expected memory policies are allocated when used doesn't provide any MemoryPolicyConfiguration.
+ */
+ public void testNoConfigProvided() throws Exception {
+ memCfg = null;
+
+ IgniteEx ignite = startGrid(0);
+
+ Collection<MemoryPolicy> allMemPlcs = ignite.context().cache().context().database().memoryPolicies();
+
+ assertTrue(allMemPlcs.size() == 2);
+
+ verifyDefaultAndSystemMemoryPolicies(allMemPlcs);
+ }
+
+ /**
+ * Verifies that expected memory policies are allocated when used provides MemoryPolicyConfiguration
+ * with non-default custom MemoryPolicy.
+ */
+ public void testCustomConfigNoDefault() throws Exception {
+ prepareCustomNoDefaultConfig();
+
+ IgniteEx ignite = startGrid(0);
+
+ Collection<MemoryPolicy> allMemPlcs = ignite.context().cache().context().database().memoryPolicies();
+
+ assertTrue(allMemPlcs.size() == 3);
+
+ verifyDefaultAndSystemMemoryPolicies(allMemPlcs);
+
+ assertTrue("Custom non-default memory policy is not presented",
+ isMemoryPolicyPresented(allMemPlcs, CUSTOM_NON_DEFAULT_MEM_PLC_NAME));
+ }
+
+ /**
+ * User is allowed to configure memory policy with 'default' name,
+ * in that case Ignite instance will use this user-defined memory policy as a default one.
+ */
+ public void testCustomConfigOverridesDefault() throws Exception {
+ prepareCustomConfigWithOverridingDefault();
+
+ IgniteEx ignite = startGrid(0);
+
+ IgniteCacheDatabaseSharedManager dbMgr = ignite.context().cache().context().database();
+
+ Collection<MemoryPolicy> allMemPlcs = dbMgr.memoryPolicies();
+
+ assertTrue(allMemPlcs.size() == 2);
+
+ verifyDefaultAndSystemMemoryPolicies(allMemPlcs);
+
+ MemoryPolicy dfltMemPlc = U.field(dbMgr, "dfltMemPlc");
+
- assertTrue(dfltMemPlc.config().getSize() == USER_DEFAULT_MEM_PLC_SIZE);
++ assertTrue(dfltMemPlc.config().getMaxSize() == USER_DEFAULT_MEM_PLC_SIZE);
+ }
+
+ /**
+ * User is allowed to define fully custom memory policy and make it default by setting its name to memory config.
+ *
+ * At the same time user still can create a memory policy with name 'default'
+ * which although won't be used as default.
+ */
+ public void testCustomConfigOverridesDefaultNameAndDeclaresDefault() throws Exception {
+ prepareCustomConfigWithOverriddenDefaultName();
+
+ IgniteEx ignite = startGrid(0);
+
+ IgniteCacheDatabaseSharedManager dbMgr = ignite.context().cache().context().database();
+
+ Collection<MemoryPolicy> allMemPlcs = dbMgr.memoryPolicies();
+
+ assertTrue(allMemPlcs.size() == 3);
+
+ verifyDefaultAndSystemMemoryPolicies(allMemPlcs);
+
+ MemoryPolicy dfltMemPlc = U.field(dbMgr, "dfltMemPlc");
+
- assertTrue(dfltMemPlc.config().getSize() == USER_CUSTOM_MEM_PLC_SIZE);
++ assertTrue(dfltMemPlc.config().getMaxSize() == USER_CUSTOM_MEM_PLC_SIZE);
+ }
+
+ /**
+ * Test for verification that caches with not specified memory policy name,
+ * with specified default memory policy name and specified custom memory policy name
+ * all started with correct memory policy.
+ */
+ public void testCachesOnOverriddenMemoryPolicy() throws Exception {
+ prepareCustomConfigWithOverridingDefaultAndCustom();
+
+ IgniteEx ignite = startGrid(0);
+
+ CacheConfiguration cache1Cfg = new CacheConfiguration()
+ .setName("cache1");
+
+ IgniteCache cache1 = ignite.createCache(cache1Cfg);
+
+ verifyCacheMemoryPolicy(cache1, DFLT_MEM_PLC_DEFAULT_NAME);
+
+ CacheConfiguration cache2Cfg = new CacheConfiguration()
+ .setName("cache2")
+ .setMemoryPolicyName(CUSTOM_NON_DEFAULT_MEM_PLC_NAME);
+
+ IgniteCache cache2 = ignite.createCache(cache2Cfg);
+
+ verifyCacheMemoryPolicy(cache2, CUSTOM_NON_DEFAULT_MEM_PLC_NAME);
+
+ CacheConfiguration cache3Cfg = new CacheConfiguration()
+ .setName("cache3")
+ .setMemoryPolicyName(DFLT_MEM_PLC_DEFAULT_NAME);
+
+ IgniteCache cache3 = ignite.createCache(cache3Cfg);
+
+ verifyCacheMemoryPolicy(cache3, DFLT_MEM_PLC_DEFAULT_NAME);
+ }
+
+ /**
+ * Test for verification that caches with not specified memory policy name,
+ * with specified default memory policy name and specified custom memory policy name
+ * all started with correct memory policy.
+ */
+ public void testCachesOnUserDefinedDefaultMemoryPolicy() throws Exception {
+ prepareCustomConfigWithOverriddenDefaultName();
+
+ IgniteEx ignite = startGrid(0);
+
+ CacheConfiguration cache1Cfg = new CacheConfiguration()
+ .setName("cache1");
+
+ IgniteCache cache1 = ignite.createCache(cache1Cfg);
+
+ verifyCacheMemoryPolicy(cache1, CUSTOM_NON_DEFAULT_MEM_PLC_NAME);
+
+ CacheConfiguration cache2Cfg = new CacheConfiguration()
+ .setName("cache2")
+ .setMemoryPolicyName(CUSTOM_NON_DEFAULT_MEM_PLC_NAME);
+
+ IgniteCache cache2 = ignite.createCache(cache2Cfg);
+
+ verifyCacheMemoryPolicy(cache2, CUSTOM_NON_DEFAULT_MEM_PLC_NAME);
+
+ CacheConfiguration cache3Cfg = new CacheConfiguration()
+ .setName("cache3")
+ .setMemoryPolicyName(DFLT_MEM_PLC_DEFAULT_NAME);
+
+ IgniteCache cache3 = ignite.createCache(cache3Cfg);
+
+ verifyCacheMemoryPolicy(cache3, DFLT_MEM_PLC_DEFAULT_NAME);
+ }
+
+ /**
+ * @param cache Cache.
+ * @param plcName Policy name.
+ */
+ private void verifyCacheMemoryPolicy(IgniteCache cache, String plcName) {
+ GridCacheContext ctx = U.field(cache, "ctx");
+
+ assertEquals(plcName, ctx.memoryPolicy().config().getName());
+ }
+
+ /**
+ *
+ */
+ private void prepareCustomConfigWithOverriddenDefaultName() {
+ memCfg = new MemoryConfiguration();
+
+ memCfg.setDefaultMemoryPolicyName(CUSTOM_NON_DEFAULT_MEM_PLC_NAME);
+
+ memCfg.setMemoryPolicies(new MemoryPolicyConfiguration()
+ .setName(CUSTOM_NON_DEFAULT_MEM_PLC_NAME)
- .setSize(USER_CUSTOM_MEM_PLC_SIZE),
++ .setMaxSize(USER_CUSTOM_MEM_PLC_SIZE),
+
+ new MemoryPolicyConfiguration()
+ .setName(DFLT_MEM_PLC_DEFAULT_NAME)
- .setSize(USER_DEFAULT_MEM_PLC_SIZE)
++ .setMaxSize(USER_DEFAULT_MEM_PLC_SIZE)
+ );
+ }
+
+
+ /**
+ *
+ */
+ private void prepareCustomConfigWithOverridingDefault() {
+ memCfg = new MemoryConfiguration();
+
+ memCfg.setMemoryPolicies(new MemoryPolicyConfiguration()
+ .setName(DFLT_MEM_PLC_DEFAULT_NAME)
- .setSize(USER_DEFAULT_MEM_PLC_SIZE)
++ .setMaxSize(USER_DEFAULT_MEM_PLC_SIZE)
+ );
+ }
+
+ /**
+ *
+ */
+ private void prepareCustomConfigWithOverridingDefaultAndCustom() {
+ memCfg = new MemoryConfiguration();
+
+ memCfg.setMemoryPolicies(new MemoryPolicyConfiguration()
+ .setName(DFLT_MEM_PLC_DEFAULT_NAME)
- .setSize(USER_DEFAULT_MEM_PLC_SIZE),
++ .setMaxSize(USER_DEFAULT_MEM_PLC_SIZE),
+
+ new MemoryPolicyConfiguration()
+ .setName(CUSTOM_NON_DEFAULT_MEM_PLC_NAME)
- .setSize(USER_CUSTOM_MEM_PLC_SIZE)
++ .setMaxSize(USER_CUSTOM_MEM_PLC_SIZE)
+ );
+ }
+
+ /**
+ * @param allMemPlcs Collection of all memory policies.
+ */
+ private void verifyDefaultAndSystemMemoryPolicies(Collection<MemoryPolicy> allMemPlcs) {
+ assertTrue("Default memory policy is not presented",
+ isMemoryPolicyPresented(allMemPlcs, DFLT_MEM_PLC_DEFAULT_NAME));
+
+ assertTrue("System memory policy is not presented",
+ isMemoryPolicyPresented(allMemPlcs, IgniteCacheDatabaseSharedManager.SYSTEM_MEMORY_POLICY_NAME));
+ }
+
+ /**
+ *
+ */
+ private void prepareCustomNoDefaultConfig() {
+ memCfg = new MemoryConfiguration();
+
+ memCfg.setMemoryPolicies(new MemoryPolicyConfiguration()
+ .setName(CUSTOM_NON_DEFAULT_MEM_PLC_NAME)
- .setSize(USER_CUSTOM_MEM_PLC_SIZE)
++ .setMaxSize(USER_CUSTOM_MEM_PLC_SIZE)
+ );
+ }
+
+ /**
+ * @param memPlcs Collection of memory policies.
+ * @param nameToVerify Excepted name of memory policy.
+ */
+ private boolean isMemoryPolicyPresented(Collection<MemoryPolicy> memPlcs, String nameToVerify) {
+ for (MemoryPolicy memPlc : memPlcs) {
+ if (nameToVerify.equals(memPlc.config().getName()))
+ return true;
+ }
+
+ return false;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsSizeSelfTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsSizeSelfTest.java
index 645f341,fbe0872..456971a
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsSizeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsSizeSelfTest.java
@@@ -386,7 -390,22 +390,22 @@@ public class IgfsSizeSelfTest extends I
* @throws Exception If failed.
*/
private void checkOversize() throws Exception {
- igfsMaxData = BLOCK_SIZE;
+ final long maxSize = 32 * 1024 * 1024;
+
+ memIgfsdDataPlcSetter = new IgniteInClosure<IgniteConfiguration>() {
+ @Override public void apply(IgniteConfiguration cfg) {
+ String memPlcName = "igfsDataMemPlc";
+
+ cfg.setMemoryConfiguration(new MemoryConfiguration().setMemoryPolicies(
- new MemoryPolicyConfiguration().setSize(maxSize).setName(memPlcName)));
++ new MemoryPolicyConfiguration().setMaxSize(maxSize).setName(memPlcName)));
+
+ FileSystemConfiguration igfsCfg = cfg.getFileSystemConfiguration()[0];
+
+ igfsCfg.getDataCacheConfiguration().setMemoryPolicyName(memPlcName);
+
+ cfg.setCacheConfiguration(new CacheConfiguration().setName("QQQ").setMemoryPolicyName(memPlcName));
+ }
+ };
startUp();
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedPartitionQueryAbstractSelfTest.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedPartitionQueryAbstractSelfTest.java
index 0000000,708fb1d..0a0afb4
mode 000000,100644..100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedPartitionQueryAbstractSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedPartitionQueryAbstractSelfTest.java
@@@ -1,0 -1,655 +1,652 @@@
+ /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ package org.apache.ignite.internal.processors.cache.distributed.near;
+
+ import java.io.Serializable;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.Comparator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.NavigableMap;
+ import java.util.TreeMap;
+ import java.util.UUID;
+ import javax.cache.Cache;
+ import javax.cache.CacheException;
+ import org.apache.ignite.Ignite;
+ import org.apache.ignite.IgniteCache;
+ import org.apache.ignite.IgniteDataStreamer;
+ import org.apache.ignite.IgniteException;
+ import org.apache.ignite.binary.BinaryObject;
+ import org.apache.ignite.cache.CacheMode;
+ import org.apache.ignite.cache.affinity.AffinityFunction;
+ import org.apache.ignite.cache.affinity.AffinityFunctionContext;
+ import org.apache.ignite.cache.affinity.AffinityKeyMapped;
+ import org.apache.ignite.cache.query.SqlFieldsQuery;
+ import org.apache.ignite.cache.query.SqlQuery;
+ import org.apache.ignite.cache.query.annotations.QuerySqlField;
+ import org.apache.ignite.cluster.ClusterNode;
+ import org.apache.ignite.configuration.CacheConfiguration;
+ import org.apache.ignite.configuration.IgniteConfiguration;
+ import org.apache.ignite.configuration.MemoryConfiguration;
-import org.apache.ignite.configuration.MemoryPolicyConfiguration;
+ import org.apache.ignite.internal.IgniteInterruptedCheckedException;
+ import org.apache.ignite.internal.util.GridRandom;
+ import org.apache.ignite.internal.util.typedef.F;
+ import org.apache.ignite.internal.util.typedef.X;
+ import org.apache.ignite.internal.util.typedef.internal.U;
+ import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+ import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+ import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+ import org.apache.ignite.util.AttributeNodeFilter;
+ import org.jsr166.ThreadLocalRandom8;
+
+ import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+ import static org.apache.ignite.cache.CacheRebalanceMode.SYNC;
+ import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+
+ /**
+ * Abstract test for queries over explicit partitions.
+ */
+ public abstract class IgniteCacheDistributedPartitionQueryAbstractSelfTest extends GridCommonAbstractTest {
+ /** Join query for test. */
+ private static final String JOIN_QRY = "select cl._KEY, de.depositId, de.regionId from " +
+ "\"cl\".Client cl, \"de\".Deposit de, \"re\".Region re where cl.clientId=de.clientId and de.regionId=re._KEY";
+
+ /** Region node attribute name. */
+ private static final String REGION_ATTR_NAME = "reg";
+
+ /** Grids count. */
+ protected static final int GRIDS_COUNT = 10;
+
+ /** IP finder. */
+ private static final TcpDiscoveryVmIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
+
+ /** Partitions per region distribution. */
+ protected static final int[] PARTS_PER_REGION = new int[] {10, 20, 30, 40, 24};
+
+ /** Unmapped region id. */
+ protected static final int UNMAPPED_REGION = PARTS_PER_REGION.length;
+
+ /** Clients per partition. */
+ protected static final int CLIENTS_PER_PARTITION = 1;
+
+ /** Total clients. */
+ private static final int TOTAL_CLIENTS;
+
+ /** Affinity function to use on partitioned caches. */
+ private static final AffinityFunction AFFINITY = new RegionAwareAffinityFunction();
+
+ /** Partitions count. */
+ private static final int PARTS_COUNT;
+
+ /** Regions to partitions mapping. */
+ protected static final NavigableMap<Integer, List<Integer>> REGION_TO_PART_MAP = new TreeMap<>();
+
+ /** Query threads count. */
+ protected static final int QUERY_THREADS_CNT = 4;
+
+ /** Restarting threads count. */
+ protected static final int RESTART_THREADS_CNT = 2;
+
+ /** Node stop time. */
+ protected static final int NODE_RESTART_TIME = 1_000;
+
+ static {
+ int total = 0, parts = 0, p = 0, regionId = 1;
+
+ for (int regCnt : PARTS_PER_REGION) {
+ total += regCnt * CLIENTS_PER_PARTITION;
+
+ parts += regCnt;
+
+ REGION_TO_PART_MAP.put(regionId++, Arrays.asList(p, regCnt));
+
+ p += regCnt;
+ }
+
+ /** Last region was left empty intentionally, see {@link #UNMAPPED_REGION} */
+ TOTAL_CLIENTS = total - PARTS_PER_REGION[PARTS_PER_REGION.length - 1] * CLIENTS_PER_PARTITION;
+
+ PARTS_COUNT = parts;
+ }
+
+ /** Deposits per client. */
+ public static final int DEPOSITS_PER_CLIENT = 10;
+
+ /** Rnd. */
+ protected GridRandom rnd = new GridRandom();
+
+ /** {@inheritDoc} */
+ @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+ IgniteConfiguration cfg = super.getConfiguration(gridName);
+
- MemoryConfiguration memCfg = new MemoryConfiguration();
- memCfg.setDefaultMemoryPolicyName("default");
- memCfg.setMemoryPolicies(new MemoryPolicyConfiguration().setName("default").setSize(20 * 1024 * 1024));
++ MemoryConfiguration memCfg = new MemoryConfiguration().setDefaultMemoryPolicySize(20 * 1024 * 1024);
+
+ cfg.setMemoryConfiguration(memCfg);
+
+ TcpDiscoverySpi spi = (TcpDiscoverySpi)cfg.getDiscoverySpi();
+ spi.setIpFinder(IP_FINDER);
+
+ cfg.setDiscoverySpi(spi);
+
+ /** Clients cache */
+ CacheConfiguration<ClientKey, Client> clientCfg = new CacheConfiguration<>();
+ clientCfg.setName("cl");
+ clientCfg.setWriteSynchronizationMode(FULL_SYNC);
+ clientCfg.setAtomicityMode(TRANSACTIONAL);
+ clientCfg.setRebalanceMode(SYNC);
+ clientCfg.setBackups(2);
+ clientCfg.setAffinity(AFFINITY);
+ clientCfg.setIndexedTypes(ClientKey.class, Client.class);
+
+ /** Deposits cache */
+ CacheConfiguration<DepositKey, Deposit> depoCfg = new CacheConfiguration<>();
+ depoCfg.setName("de");
+ depoCfg.setWriteSynchronizationMode(FULL_SYNC);
+ depoCfg.setAtomicityMode(TRANSACTIONAL);
+ depoCfg.setRebalanceMode(SYNC);
+ depoCfg.setBackups(2);
+ depoCfg.setAffinity(AFFINITY);
+ depoCfg.setIndexedTypes(DepositKey.class, Deposit.class);
+
+ /** Regions cache. Uses default affinity. */
+ CacheConfiguration<Integer, Region> regionCfg = new CacheConfiguration<>();
+ regionCfg.setName("re");
+ regionCfg.setWriteSynchronizationMode(FULL_SYNC);
+ regionCfg.setAtomicityMode(TRANSACTIONAL);
+ regionCfg.setRebalanceMode(SYNC);
+ regionCfg.setCacheMode(CacheMode.REPLICATED);
+ regionCfg.setIndexedTypes(Integer.class, Region.class);
+
+ cfg.setCacheConfiguration(clientCfg, depoCfg, regionCfg);
+
+ if ("client".equals(gridName))
+ cfg.setClientMode(true);
+ else {
+ Integer reg = regionForGrid(gridName);
+
+ cfg.setUserAttributes(F.asMap(REGION_ATTR_NAME, reg));
+
+ log().info("Assigned region " + reg + " to grid " + gridName);
+ }
+
+ return cfg;
+ }
+
+ /** */
+ private static final class RegionAwareAffinityFunction implements AffinityFunction {
+ /** {@inheritDoc} */
+ @Override public void reset() {
+ // No-op.
+ }
+
+ /** {@inheritDoc} */
+ @Override public int partitions() {
+ return PARTS_COUNT;
+ }
+
+ /** {@inheritDoc} */
+ @Override public int partition(Object key) {
+ Integer regionId;
+
+ if (key instanceof RegionKey)
+ regionId = ((RegionKey)key).regionId;
+ else if (key instanceof BinaryObject) {
+ BinaryObject bo = (BinaryObject)key;
+
+ regionId = bo.field("regionId");
+ }
+ else
+ throw new IgniteException("Unsupported key for region aware affinity");
+
+ List<Integer> range = REGION_TO_PART_MAP.get(regionId);
+
+ Integer cnt = range.get(1);
+
+ return U.safeAbs(key.hashCode() % cnt) + range.get(0); // Assign partition in region's range.
+ }
+
+ /** {@inheritDoc} */
+ @Override public List<List<ClusterNode>> assignPartitions(AffinityFunctionContext affCtx) {
+ List<ClusterNode> nodes = affCtx.currentTopologySnapshot();
+
+ List<List<ClusterNode>> assignment = new ArrayList<>(PARTS_COUNT);
+
+ for (int p = 0; p < PARTS_COUNT; p++) {
+ // Get region for partition.
+ int regionId = regionForPart(p);
+
+ // Filter all nodes for region.
+ AttributeNodeFilter f = new AttributeNodeFilter(REGION_ATTR_NAME, regionId);
+
+ List<ClusterNode> regionNodes = new ArrayList<>();
+
+ for (ClusterNode node : nodes)
+ if (f.apply(node))
+ regionNodes.add(node);
+
+ final int cp = p;
+
+ Collections.sort(regionNodes, new Comparator<ClusterNode>() {
+ @Override public int compare(ClusterNode o1, ClusterNode o2) {
+ return Long.compare(hash(cp, o1), hash(cp, o2));
+ }
+ });
+
+ assignment.add(regionNodes);
+ }
+
+ return assignment;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void removeNode(UUID nodeId) {
+ // No-op.
+ }
+
+ /**
+ * @param part Partition.
+ */
+ protected int regionForPart(int part) {
+ for (Map.Entry<Integer, List<Integer>> entry : REGION_TO_PART_MAP.entrySet()) {
+ List<Integer> range = entry.getValue();
+
+ if (range.get(0) <= part && part < range.get(0) + range.get(1))
+ return entry.getKey();
+ }
+
+ throw new IgniteException("Failed to find zone for partition");
+ }
+
+ /**
+ * @param part Partition.
+ * @param obj Object.
+ */
+ private long hash(int part, Object obj) {
+ long x = ((long)part << 32) | obj.hashCode();
+ x ^= x >>> 12;
+ x ^= x << 25;
+ x ^= x >>> 27;
+ return x * 2685821657736338717L;
+ }
+ }
+
+ /**
+ * Assigns a region to grid part.
+ *
+ * @param gridName Grid name.
+ */
+ protected Integer regionForGrid(String gridName) {
+ char c = gridName.charAt(gridName.length() - 1);
+ switch (c) {
+ case '0':
+ return 1;
+ case '1':
+ case '2':
+ return 2;
+ case '3':
+ case '4':
+ case '5':
+ return 3;
+ default:
+ return 4;
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void beforeTestsStarted() throws Exception {
+ super.beforeTestsStarted();
+
+ int sum1 = 0;
+ for (List<Integer> range : REGION_TO_PART_MAP.values())
+ sum1 += range.get(1);
+
+ assertEquals("Illegal partition per region distribution", PARTS_COUNT, sum1);
+
+ startGridsMultiThreaded(GRIDS_COUNT);
+
+ startGrid("client");
+
+ // Fill caches.
+ int clientId = 1;
+ int depositId = 1;
+ int regionId = 1;
+ int p = 1; // Percents counter. Log message will be printed 10 times.
+
+ try (IgniteDataStreamer<ClientKey, Client> clStr = grid(0).dataStreamer("cl");
+ IgniteDataStreamer<DepositKey, Deposit> depStr = grid(0).dataStreamer("de")) {
+ for (int cnt : PARTS_PER_REGION) {
+ // Last region was left empty intentionally.
+ if (regionId < PARTS_PER_REGION.length) {
+ for (int i = 0; i < cnt * CLIENTS_PER_PARTITION; i++) {
+ ClientKey ck = new ClientKey(clientId, regionId);
+
+ Client cl = new Client();
+ cl.firstName = "First_Name_" + clientId;
+ cl.lastName = "Last_Name_" + clientId;
+ cl.passport = clientId * 1_000;
+
+ clStr.addData(ck, cl);
+
+ for (int j = 0; j < DEPOSITS_PER_CLIENT; j++) {
+ DepositKey dk = new DepositKey(depositId++, new ClientKey(clientId, regionId));
+
+ Deposit depo = new Deposit();
+ depo.amount = ThreadLocalRandom8.current().nextLong(1_000_001);
+ depStr.addData(dk, depo);
+ }
+
+ if (clientId / (float)TOTAL_CLIENTS >= p / 10f) {
+ log().info("Loaded " + clientId + " of " + TOTAL_CLIENTS);
+
+ p++;
+ }
+
+ clientId++;
+ }
+ }
+
+ Region region = new Region();
+ region.name = "Region_" + regionId;
+ region.code = regionId * 10;
+
+ grid(0).cache("re").put(regionId, region);
+
+ regionId++;
+ }
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void afterTestsStopped() throws Exception {
+ super.afterTestsStopped();
+
+ stopAllGrids();
+ }
+
+ /**
+ * @param orig Originator.
+ */
+ protected void doTestRegionQuery(Ignite orig) {
+ IgniteCache<ClientKey, Client> cl = orig.cache("cl");
+
+ for (int regionId = 1; regionId <= PARTS_PER_REGION.length; regionId++) {
+ SqlQuery<ClientKey, Client> qry1 = new SqlQuery<>(Client.class, "regionId=?");
+ qry1.setArgs(regionId);
+
+ List<Cache.Entry<ClientKey, Client>> clients1 = cl.query(qry1).getAll();
+
+ int expRegionCnt = regionId == 5 ? 0 : PARTS_PER_REGION[regionId - 1] * CLIENTS_PER_PARTITION;
+
+ assertEquals("Region " + regionId + " count", expRegionCnt, clients1.size());
+
+ validateClients(regionId, clients1);
+
+ // Repeat the same query with partition set condition.
+ List<Integer> range = REGION_TO_PART_MAP.get(regionId);
+
+ SqlQuery<ClientKey, Client> qry2 = new SqlQuery<>(Client.class, "1=1");
+ qry2.setPartitions(createRange(range.get(0), range.get(1)));
+
+ try {
+ List<Cache.Entry<ClientKey, Client>> clients2 = cl.query(qry2).getAll();
+
+ assertEquals("Region " + regionId + " count with partition set", expRegionCnt, clients2.size());
+
+ // Query must produce only results from single region.
+ validateClients(regionId, clients2);
+
+ if (regionId == UNMAPPED_REGION)
+ fail();
+ } catch (CacheException ignored) {
+ if (regionId != UNMAPPED_REGION)
+ fail();
+ }
+ }
+ }
+
+ /** */
+ protected int[] createRange(int start, int cnt) {
+ int[] vals = new int[cnt];
+
+ for (int i = 0; i < cnt; i++)
+ vals[i] = start + i;
+
+ return vals;
+ }
+
+ /**
+ * @param orig Originator.
+ */
+ protected void doTestPartitionsQuery(Ignite orig) {
+ IgniteCache<ClientKey, Client> cl = orig.cache("cl");
+
+ for (int regionId = 1; regionId <= PARTS_PER_REGION.length; regionId++) {
+ log().info("Running test queries for region " + regionId);
+
+ List<Integer> range = REGION_TO_PART_MAP.get(regionId);
+
+ int[] parts = createRange(range.get(0), range.get(1));
+
+ int off = rnd.nextInt(parts.length);
+
+ int p1 = parts[off], p2 = parts[(off + (1 + rnd.nextInt(parts.length-1))) % parts.length];
+
+ log().info("Parts: " + p1 + " " + p2);
+
+ SqlQuery<ClientKey, Client> qry = new SqlQuery<>(Client.class, "1=1");
+
+ qry.setPartitions(p1, p2);
+
+ try {
+ List<Cache.Entry<ClientKey, Client>> clients = cl.query(qry).getAll();
+
+ // Query must produce only results from two partitions.
+ for (Cache.Entry<ClientKey, Client> client : clients) {
+ int p = orig.affinity("cl").partition(client.getKey());
+
+ assertTrue("Incorrect partition for key", p == p1 || p == p2);
+ }
+
+ if (regionId == UNMAPPED_REGION)
+ fail();
+ } catch (CacheException ignored) {
+ if (regionId != UNMAPPED_REGION)
+ fail();
+ }
+ }
+ }
+
+ /**
+ * @param orig Query originator.
+ * @param regionIds Region ids.
+ */
+ protected void doTestJoinQuery(Ignite orig, int... regionIds) {
+ IgniteCache<ClientKey, Client> cl = orig.cache("cl");
+
+ if (regionIds == null) {
+ regionIds = new int[PARTS_PER_REGION.length];
+
+ for (int i = 0; i < regionIds.length; i++)
+ regionIds[i] = i + 1;
+ }
+
+ for (int regionId : regionIds) {
+ List<Integer> range = REGION_TO_PART_MAP.get(regionId);
+
+ SqlFieldsQuery qry = new SqlFieldsQuery(JOIN_QRY);
+
+ int[] pSet = createRange(range.get(0), 1 + rnd.nextInt(range.get(1) - 1));
+
+ qry.setPartitions(pSet);
+
+ try {
+ List<List<?>> rows = cl.query(qry).getAll();
+
+ for (List<?> row : rows) {
+ ClientKey key = (ClientKey)row.get(0);
+
+ int p = orig.affinity("cl").partition(key);
+
+ assertTrue(Arrays.binarySearch(pSet, p) >= 0);
+ }
+
+ // Query must produce only results from single region.
+ for (List<?> row : rows)
+ assertEquals("Region id", regionId, ((Integer)row.get(2)).intValue());
+
+ if (regionId == UNMAPPED_REGION)
+ fail();
+ }
+ catch (CacheException ignored) {
+ if (X.hasCause(ignored, InterruptedException.class, IgniteInterruptedCheckedException.class))
+ return; // Allow interruptions.
+
+ if (regionId != UNMAPPED_REGION)
+ fail();
+ }
+ }
+ }
+
+ /**
+ * @param regionId Region id.
+ * @param clients Clients.
+ */
+ protected void validateClients(int regionId, List<Cache.Entry<ClientKey, Client>> clients) {
+ for (Cache.Entry<ClientKey, Client> entry : clients) {
+ List<Integer> range = REGION_TO_PART_MAP.get(regionId);
+
+ int start = range.get(0) * CLIENTS_PER_PARTITION;
+ int end = start + range.get(1) * CLIENTS_PER_PARTITION;
+
+ int clientId = entry.getKey().clientId;
+
+ assertTrue("Client id in range", start < clientId && start <= end);
+ }
+ }
+
+ /** */
+ protected static class ClientKey extends RegionKey {
+ /** Client id. */
+ @QuerySqlField(index = true)
+ protected int clientId;
+
+ /**
+ * @param clientId Client id.
+ * @param regionId Region id.
+ */
+ public ClientKey(int clientId, int regionId) {
+ this.clientId = clientId;
+ this.regionId = regionId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+
+ ClientKey clientKey = (ClientKey)o;
+
+ return clientId == clientKey.clientId;
+
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return clientId;
+ }
+ }
+
+ /** */
+ protected static class DepositKey extends RegionKey {
+ @QuerySqlField(index = true)
+ protected int depositId;
+
+ @QuerySqlField(index = true)
+ protected int clientId;
+
+ /** Client id. */
+ @AffinityKeyMapped
+ protected ClientKey clientKey;
+
+ /**
+ * @param depositId Client id.
+ * @param clientKey Client key.
+ */
+ public DepositKey(int depositId, ClientKey clientKey) {
+ this.depositId = depositId;
+ this.clientId = clientKey.clientId;
+ this.regionId = clientKey.regionId;
+ this.clientKey = clientKey;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+
+ DepositKey that = (DepositKey)o;
+
+ return depositId == that.depositId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return depositId;
+ }
+ }
+
+ /** */
+ protected static class RegionKey implements Serializable {
+ /** Region id. */
+ @QuerySqlField(index = true)
+ protected int regionId;
+ }
+
+ /** */
+ protected static class Client {
+ @QuerySqlField
+ protected String firstName;
+
+ @QuerySqlField
+ protected String lastName;
+
+ @QuerySqlField(index = true)
+ protected int passport;
+ }
+
+ /** */
+ protected static class Deposit {
+ @QuerySqlField
+ protected long amount;
+ }
+
+ /** */
+ protected static class Region {
+ @QuerySqlField
+ protected String name;
+
+ @QuerySqlField
+ protected int code;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheQueryNodeRestartSelfTest2.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheQueryNodeRestartSelfTest2.java
index 6fc9c39,001f40b..943a5c8
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheQueryNodeRestartSelfTest2.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheQueryNodeRestartSelfTest2.java
@@@ -29,14 -29,16 +29,15 @@@ import org.apache.ignite.IgniteCache
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.cache.affinity.AffinityKey;
import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
++import org.apache.ignite.cache.query.QueryCancelledException;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
+ import org.apache.ignite.configuration.MemoryConfiguration;
-import org.apache.ignite.configuration.MemoryPolicyConfiguration;
import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteInterruptedCheckedException;
--import org.apache.ignite.cache.query.QueryCancelledException;
import org.apache.ignite.internal.util.GridRandom;
import org.apache.ignite.internal.util.typedef.CAX;
import org.apache.ignite.internal.util.typedef.F;
@@@ -89,6 -91,12 +90,10 @@@ public class IgniteCacheQueryNodeRestar
@Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
- MemoryConfiguration memCfg = new MemoryConfiguration();
- memCfg.setDefaultMemoryPolicyName("default");
- memCfg.setMemoryPolicies(new MemoryPolicyConfiguration().setName("default").setSize(50 * 1024 * 1024));
++ MemoryConfiguration memCfg = new MemoryConfiguration().setDefaultMemoryPolicySize(50 * 1024 * 1024);
+
+ c.setMemoryConfiguration(memCfg);
+
TcpDiscoverySpi disco = new TcpDiscoverySpi();
disco.setIpFinder(ipFinder);
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
index e4b89e1,fe4e91f..e6e9153
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/MemoryPolicyConfiguration.cs
@@@ -53,8 -42,7 +53,9 @@@ namespace Apache.Ignite.Core.Cache.Conf
{
EvictionThreshold = DefaultEvictionThreshold;
EmptyPagesPoolSize = DefaultEmptyPagesPoolSize;
+ Name = MemoryConfiguration.DefaultDefaultMemoryPolicyName;
+ InitialSize = DefaultInitialSize;
+ MaxSize = DefaultMaxSize;
}
/// <summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/eac6762b/modules/web-console/web-agent/pom.xml
----------------------------------------------------------------------