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
----------------------------------------------------------------------