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 2016/12/29 09:37:47 UTC

[43/50] [abbrv] ignite git commit: Merge apache/master into ignite-gg-8.0.2.ea1

Merge apache/master into ignite-gg-8.0.2.ea1


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d98d947f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d98d947f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d98d947f

Branch: refs/heads/ignite-3477
Commit: d98d947fb971053b2c9e024cb6cf286b4c47d65a
Parents: e8f6a54 300750f
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Tue Dec 27 12:53:52 2016 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Dec 27 12:53:52 2016 +0300

----------------------------------------------------------------------
 .../store/cassandra/CassandraCacheStore.java    |    6 +
 .../store/cassandra/datasource/DataSource.java  |    9 +
 .../java/org/apache/ignite/IgniteLogger.java    |    6 +-
 .../java/org/apache/ignite/IgniteServices.java  |   16 +
 .../ignite/cache/store/CacheStoreAdapter.java   |    6 +
 .../cache/store/jdbc/CacheJdbcPojoStore.java    |   19 +-
 .../store/jdbc/JdbcTypesDefaultTransformer.java |  112 +-
 .../org/apache/ignite/internal/GridTopic.java   |    8 +-
 .../ignite/internal/IgniteServicesImpl.java     |    9 +-
 .../internal/binary/BinaryClassDescriptor.java  |   12 +-
 .../ignite/internal/binary/BinaryUtils.java     |   10 +-
 .../binary/builder/BinaryObjectBuilderImpl.java |   11 +-
 .../affinity/GridAffinityProcessor.java         |    2 +-
 .../cache/CacheStoreBalancingWrapper.java       |    6 +
 .../processors/cache/GridCacheAdapter.java      |    8 +-
 .../cache/GridCacheLoaderWriterStore.java       |    6 +
 .../GridCachePartitionExchangeManager.java      |   31 +-
 .../CacheDataStructuresManager.java             |    6 +-
 .../cache/query/GridCacheQueryManager.java      |    4 +-
 .../closure/GridClosureProcessor.java           |   31 +-
 .../internal/processors/job/GridJobWorker.java  |   76 +-
 .../processors/odbc/OdbcRequestHandler.java     |   16 +-
 .../internal/processors/odbc/OdbcTableMeta.java |   15 +-
 .../platform/PlatformContextImpl.java           |    2 +-
 .../dotnet/PlatformDotNetCacheStore.java        |   11 +
 .../platform/services/PlatformServices.java     |    2 +-
 .../platform/utils/PlatformUtils.java           |   28 +
 .../service/GridServiceProcessor.java           |   11 +-
 .../processors/service/GridServiceProxy.java    |   18 +-
 .../processors/task/GridTaskWorker.java         |    7 +
 .../visor/service/VisorCancelServiceTask.java   |   70 +
 .../visor/service/VisorServiceDescriptor.java   |  132 +
 .../visor/service/VisorServiceTask.java         |   75 +
 .../internal/visor/util/VisorTaskUtils.java     |   15 +-
 .../apache/ignite/logger/java/JavaLogger.java   |    4 +-
 .../communication/tcp/TcpCommunicationSpi.java  |    4 +-
 .../apache/ignite/util/AttributeNodeFilter.java |  108 +
 .../resources/META-INF/classnames.properties    |    7 +
 .../jdbc/JdbcTypesDefaultTransformerTest.java   |  283 ++
 .../IgniteComputeTopologyExceptionTest.java     |    5 +-
 .../binary/BinaryMarshallerSelfTest.java        |   66 +
 ...heapCacheMetricsForClusterGroupSelfTest.java |  141 +
 .../CacheOffHeapAndSwapMetricsSelfTest.java     |  617 ---
 ...LocalCacheOffHeapAndSwapMetricsSelfTest.java |  617 +++
 .../closure/GridClosureSerializationTest.java   |  177 +
 ...gniteServiceProxyTimeoutInitializedTest.java |  284 ++
 .../junits/logger/GridTestLog4jLogger.java      |    4 +-
 .../ignite/testsuites/IgniteBasicTestSuite.java |    5 +
 .../IgniteCacheMetricsSelfTestSuite.java        |    6 +-
 .../ignite/testsuites/IgniteCacheTestSuite.java |    2 +
 .../testsuites/IgniteKernalSelfTestSuite.java   |    2 +
 .../util/AttributeNodeFilterSelfTest.java       |  184 +
 .../processors/query/h2/IgniteH2Indexing.java   |   75 +-
 ...niteCachePartitionedFieldsQuerySelfTest.java |   25 +
 .../apache/ignite/logger/log4j/Log4JLogger.java |    4 +-
 .../cache/query/continuous/continuous_query.h   |    2 +-
 .../cpp/odbc-test/config/queries-default.xml    |  145 +
 .../odbc-test/config/queries-test-noodbc.xml    |   84 +-
 .../cpp/odbc-test/config/queries-test.xml       |  122 +-
 .../cpp/odbc-test/src/queries_test.cpp          |   76 +
 .../cpp/odbc-test/src/utility_test.cpp          |   27 +-
 modules/platforms/cpp/odbc/src/utility.cpp      |   10 +
 .../Cache/Query/CacheLinqTest.cs                |   51 +-
 .../Examples/Example.cs                         |    5 +-
 .../Examples/ExamplesTest.cs                    |  107 +-
 .../Apache.Ignite.Core.Tests/ReconnectTest.cs   |   21 +-
 .../EntityFrameworkCacheTest.cs                 |   54 +-
 .../Impl/DbCommandInfo.cs                       |   21 +-
 .../Apache.Ignite.Linq/Impl/ExpressionWalker.cs |    8 +
 modules/platforms/dotnet/build.bat              |   11 +-
 .../spi/deployment/uri/UriDeploymentSpi.java    |    2 +-
 modules/web-console/backend/app/agent.js        |   15 +
 modules/web-console/backend/app/browser.js      |   13 +
 modules/web-console/backend/app/mongo.js        |   24 +-
 modules/web-console/backend/routes/demo.js      |   17 +-
 modules/web-console/backend/routes/profile.js   |    3 +-
 .../web-console/backend/services/notebooks.js   |   14 +-
 .../web-console/backend/services/sessions.js    |    6 +-
 modules/web-console/backend/services/spaces.js  |   15 +
 modules/web-console/frontend/app/app.js         |    5 -
 .../controllers/reset-password.controller.js    |   14 +-
 .../frontend/app/data/event-groups.json         |  169 +
 .../frontend/app/data/event-types.json          |  169 -
 .../frontend/app/data/pom-dependencies.json     |   12 +-
 .../ui-ace-docker/ui-ace-docker.controller.js   |    2 +-
 .../directives/ui-ace-docker/ui-ace-docker.jade |    2 +-
 .../ui-ace-pojos/ui-ace-pojos.controller.js     |   12 +-
 .../ui-ace-pom/ui-ace-pom.controller.js         |    4 +-
 .../helpers/jade/form/form-field-dropdown.jade  |    5 +-
 .../helpers/jade/form/form-field-number.jade    |    3 +-
 .../app/helpers/jade/form/form-field-text.jade  |   19 +-
 .../frontend/app/helpers/jade/mixins.jade       |   52 +-
 .../frontend/app/modules/Demo/Demo.module.js    |    6 +-
 .../configuration/EventGroups.provider.js       |   30 -
 .../modules/configuration/Version.service.js    |    6 +-
 .../configuration/configuration.module.js       |   63 +-
 .../generator/AbstractTransformer.js            |   17 +
 .../modules/configuration/generator/Beans.js    |    5 +
 .../generator/ConfigurationGenerator.js         | 2795 +++++++-------
 .../configuration/generator/Custom.service.js   |   23 +
 .../configuration/generator/Docker.service.js   |    4 +-
 .../generator/JavaTransformer.service.js        | 2318 +++++------
 .../configuration/generator/Maven.service.js    |  234 ++
 .../configuration/generator/Pom.service.js      |  233 --
 .../generator/Properties.service.js             |    2 +-
 .../configuration/generator/Readme.service.js   |    2 +-
 .../generator/SharpTransformer.service.js       |  437 ++-
 .../generator/SpringTransformer.service.js      |  497 ++-
 .../defaults/Cache.platform.service.js          |   56 +
 .../generator/defaults/Cache.service.js         |  131 +
 .../defaults/Cluster.platform.service.js        |   43 +
 .../generator/defaults/Cluster.service.js       |  289 ++
 .../generator/defaults/Event-groups.service.js  |   27 +
 .../generator/defaults/IGFS.service.js          |   64 +
 .../defaults/cache.platform.provider.js         |   60 -
 .../generator/defaults/cache.provider.js        |  137 -
 .../defaults/cluster.platform.provider.js       |   49 -
 .../generator/defaults/cluster.provider.js      |  293 --
 .../generator/defaults/igfs.provider.js         |   68 -
 .../configuration/generator/generator-common.js |  625 ---
 .../configuration/generator/generator-java.js   | 3617 ------------------
 .../generator/generator-optional.js             |   25 -
 .../configuration/generator/generator-spring.js | 2111 ----------
 .../frontend/app/modules/sql/Notebook.data.js   |   11 +-
 .../app/modules/sql/Notebook.service.js         |    2 +-
 .../app/modules/sql/scan-filter-input.jade      |   39 -
 .../modules/sql/scan-filter-input.service.js    |   51 -
 .../frontend/app/modules/sql/sql.controller.js  |  211 +-
 .../frontend/app/modules/sql/sql.module.js      |    2 -
 .../app/modules/states/configuration.state.js   |    2 +
 .../configuration/caches/node-filter.jade       |    2 +-
 .../states/configuration/caches/query.jade      |    3 +
 .../states/configuration/caches/store.jade      |    4 +-
 .../configuration/clusters/checkpoint.jade      |   11 +-
 .../configuration/clusters/checkpoint/fs.jade   |    8 +-
 .../configuration/clusters/checkpoint/jdbc.jade |    8 +-
 .../configuration/clusters/checkpoint/s3.jade   |   25 +-
 .../clusters/collision/custom.jade              |    2 +-
 .../clusters/collision/job-stealing.jade        |    2 +-
 .../configuration/clusters/deployment.jade      |  129 +-
 .../states/configuration/clusters/events.jade   |    4 +-
 .../states/configuration/clusters/failover.jade |    4 +-
 .../clusters/general/discovery/zookeeper.jade   |    2 +-
 .../discovery/zookeeper/retrypolicy/custom.jade |    2 +-
 .../configuration/clusters/load-balancing.jade  |   23 +-
 .../configuration/clusters/logger/custom.jade   |    2 +-
 .../states/configuration/clusters/ssl.jade      |    2 +-
 .../summary/summary-zipper.service.js           |   37 +
 .../configuration/summary/summary.controller.js |  103 +-
 .../configuration/summary/summary.worker.js     |  123 +
 .../frontend/app/modules/user/Auth.service.js   |   11 +-
 .../frontend/app/services/JavaTypes.service.js  |   13 +-
 .../frontend/app/services/Messages.service.js   |   17 +-
 .../frontend/controllers/admin-controller.js    |  211 +-
 .../frontend/controllers/caches-controller.js   |   22 +-
 .../frontend/controllers/clusters-controller.js |   42 +-
 .../frontend/controllers/domains-controller.js  |   32 +-
 .../frontend/controllers/igfs-controller.js     |   20 +-
 .../frontend/controllers/profile-controller.js  |    3 +-
 .../gulpfile.babel.js/webpack/common.js         |   17 +-
 .../webpack/environments/development.js         |   14 +-
 .../webpack/environments/production.js          |    3 +-
 .../webpack/plugins/progress.js                 |   82 -
 modules/web-console/frontend/package.json       |  178 +-
 .../frontend/public/images/cache.png            |  Bin 23700 -> 24791 bytes
 .../frontend/public/images/domains.png          |  Bin 23828 -> 22131 bytes
 .../web-console/frontend/public/images/igfs.png |  Bin 14307 -> 14139 bytes
 .../frontend/public/images/query-chart.png      |  Bin 16637 -> 17142 bytes
 .../frontend/public/images/query-metadata.png   |  Bin 32298 -> 39361 bytes
 .../frontend/public/images/query-table.png      |  Bin 29189 -> 28065 bytes
 .../frontend/public/images/summary.png          |  Bin 31997 -> 33650 bytes
 .../stylesheets/_font-awesome-custom.scss       |   23 +-
 .../frontend/public/stylesheets/form-field.scss |   37 +
 .../frontend/public/stylesheets/style.scss      |  111 +-
 .../frontend/test/unit/JavaTypes.test.js        |   17 +-
 .../frontend/test/unit/Version.test.js          |    8 +-
 .../views/configuration/domains-import.jade     |    5 +-
 .../frontend/views/configuration/summary.jade   |   25 +-
 .../frontend/views/settings/admin.jade          |   85 +-
 .../frontend/views/sql/notebook-new.jade        |    2 +-
 modules/web-console/frontend/views/sql/sql.jade |  235 +-
 .../frontend/views/templates/alert.jade         |    2 +-
 .../frontend/views/templates/select.jade        |    2 +-
 183 files changed, 8697 insertions(+), 12338 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
index c86e572,2962540..86245a8
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java
@@@ -99,10 -96,11 +96,13 @@@ public enum GridTopic 
      /** */
      TOPIC_TX,
  
 +    TOPIC_SNAPSHOT,
 +
      /** */
-     TOPIC_IO_TEST;
+     TOPIC_IO_TEST,
+ 
+     /** */
+     TOPIC_HADOOP_MSG;
  
      /** Enum values. */
      private static final GridTopic[] VALS = values();

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 2b62ce9,f6dfe95..f10a072
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@@ -839,10 -821,18 +839,18 @@@ public class GridCachePartitionExchange
                  lastVer,
                  exchId != null ? exchId.topologyVersion() : AffinityTopologyVersion.NONE);
  
 -        boolean useOldApi = false;
 -
          if (nodes != null) {
              for (ClusterNode node : nodes) {
-                 if (node.version().compareToIgnoreTimestamp(GridDhtPartitionsAbstractMessage.PART_MAP_COMPRESS_SINCE) < 0)
+                 if (node.version().compareTo(GridDhtPartitionMap2.SINCE) < 0) {
 -                    useOldApi = true;
                      compress = false;
+ 
+                     break;
+                 }
 -                else if (!canUsePartitionMapCompression(node))
++                else if (!canUsePartitionMapCompression(node)) {
+                     compress = false;
++
++                    break;
++                }
              }
          }
  

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/internal/visor/util/VisorTaskUtils.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/main/resources/META-INF/classnames.properties
----------------------------------------------------------------------
diff --cc modules/core/src/main/resources/META-INF/classnames.properties
index a1de5bb,4d0b931..445f072
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@@ -1894,8 -1891,8 +1899,9 @@@ org.apache.ignite.spi.checkpoint.shared
  org.apache.ignite.spi.collision.jobstealing.JobStealingRequest
  org.apache.ignite.spi.collision.priorityqueue.PriorityQueueCollisionSpi$PriorityGridCollisionJobContextComparator
  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$1
+ org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$10
  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$11
 +org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$12
  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$2$ConnectClosure
  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$2$ConnectClosure$1
  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi$2$ConnectClosureNew

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java
index 0000000,ae8807f..20befb5
mode 000000,100644..100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/LocalCacheOffHeapAndSwapMetricsSelfTest.java
@@@ -1,0 -1,621 +1,617 @@@
+ /*
+  * 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.local;
+ 
+ import org.apache.ignite.IgniteCache;
+ import org.apache.ignite.cache.CacheAtomicityMode;
+ import org.apache.ignite.cache.CacheMemoryMode;
+ import org.apache.ignite.cache.CacheMode;
+ import org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicy;
+ import org.apache.ignite.configuration.CacheConfiguration;
+ import org.apache.ignite.configuration.IgniteConfiguration;
 -import org.apache.ignite.spi.swapspace.file.FileSwapSpaceSpi;
+ import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+ 
+ /**
+  *
+  */
+ public class LocalCacheOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractTest {
+     /** Grid count. */
+     private static final int GRID_CNT = 1;
+ 
+     /** Keys count. */
+     private static final int KEYS_CNT = 1000;
+ 
+     /** Max size. */
+     private static final int MAX_SIZE = 100;
+ 
+     /** Entry size. */
+     private static final int ENTRY_SIZE = 86; // Calculated as allocated size divided on entries count.
+ 
+     /** Offheap max count. */
+     private static final int OFFHEAP_MAX_CNT = KEYS_CNT / 2;
+ 
+     /** Offheap max size. */
+     private static final int OFFHEAP_MAX_SIZE = ENTRY_SIZE * OFFHEAP_MAX_CNT;
+ 
+     /** Cache. */
+     private IgniteCache<Integer, Integer> cache;
+ 
+     /** {@inheritDoc} */
+     @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+         IgniteConfiguration cfg = super.getConfiguration(gridName);
+ 
 -        cfg.setSwapSpaceSpi(new FileSwapSpaceSpi());
 -
+         return cfg;
+     }
+ 
+     /**
+      * @param memoryMode Cache memory mode.
+      * @param offHeapSize Max off-heap size.
+      * @param swapEnabled Swap enabled.
+      */
+     private void createCache(CacheMemoryMode memoryMode, int offHeapSize, boolean swapEnabled) {
+         CacheConfiguration ccfg = defaultCacheConfiguration();
+ 
+         ccfg.setStatisticsEnabled(true);
+ 
+         ccfg.setCacheMode(CacheMode.LOCAL);
+         ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
+         ccfg.setMemoryMode(memoryMode);
+ 
+         ccfg.setOffHeapMaxMemory(offHeapSize);
 -        ccfg.setSwapEnabled(swapEnabled);
+ 
+         ccfg.setEvictionPolicy(new FifoEvictionPolicy(MAX_SIZE));
+ 
+         cache = grid(0).getOrCreateCache(ccfg);
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void beforeTestsStarted() throws Exception {
+         super.beforeTestsStarted();
+ 
+         startGrids(GRID_CNT);
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void afterTestsStopped() throws Exception {
+         super.afterTestsStopped();
+ 
+         stopAllGrids();
+     }
+ 
+     /** {@inheritDoc} */
+     @Override protected void afterTest() throws Exception {
+         if (cache != null)
+             cache.destroy();
+     }
+ 
+     /**
+      * @throws Exception if failed.
+      */
+     public void testOffHeapMetrics() throws Exception {
+         createCache(CacheMemoryMode.ONHEAP_TIERED, 0, false);
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.put(i, i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets());
+         assertEquals(0, cache.localMetrics().getOffHeapHits());
+         assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage());
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage());
+         assertEquals(0, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets());
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets());
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits());
+         assertEquals(100 / 3.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100 - (100 / 3.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.remove(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.localMetrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.localMetrics().getOffHeapHits());
+         assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE),
+             cache.localMetrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE),
+             cache.localMetrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(0, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+     }
+ 
+     /**
+      * @throws Exception if failed.
+      */
+     public void testSwapMetrics() throws Exception {
+         createCache(CacheMemoryMode.ONHEAP_TIERED, -1, true);
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.put(i, i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets());
+         assertEquals(0, cache.localMetrics().getSwapHits());
+         assertEquals(0f, cache.localMetrics().getSwapHitPercentage());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses());
+         assertEquals(100f, cache.localMetrics().getSwapMissPercentage());
+         assertEquals(0, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getSwapEntriesCount());
+ 
+         for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits());
+         assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses());
+         assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(KEYS_CNT - MAX_SIZE, cache.localMetrics().getSwapEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.remove(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.localMetrics().getSwapGets());
+         assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.localMetrics().getSwapHits());
+         assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE),
+             cache.localMetrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses());
+         assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE),
+             cache.localMetrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(0, cache.localMetrics().getSwapEntriesCount());
+     }
+ 
+     /**
+      * @throws Exception if failed.
+      */
+     public void testOffHeapAndSwapMetrics() throws Exception {
+         createCache(CacheMemoryMode.ONHEAP_TIERED, OFFHEAP_MAX_SIZE, true);
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.put(i, i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets());
+         assertEquals(0, cache.localMetrics().getOffHeapHits());
+         assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage());
+         assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage());
+         assertEquals(0, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets());
+         assertEquals(0, cache.localMetrics().getSwapHits());
+         assertEquals(0f, cache.localMetrics().getSwapHitPercentage());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses());
+         assertEquals(100f, cache.localMetrics().getSwapMissPercentage());
+         assertEquals(0, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets());
+         assertEquals(0, cache.localMetrics().getOffHeapHits());
+         assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(0, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount());
+ 
+         for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets());
+         assertEquals(0, cache.localMetrics().getOffHeapHits());
+         assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(0, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets());
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits());
+         assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses());
+         assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.remove(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.localMetrics().getOffHeapGets());
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapHits());
+         assertEquals(100 * OFFHEAP_MAX_CNT / (KEYS_CNT * 4.0 - MAX_SIZE),
+             cache.localMetrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT - MAX_SIZE, cache.localMetrics().getOffHeapMisses());
+         assertEquals(100 * (KEYS_CNT * 4 - OFFHEAP_MAX_CNT - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE),
+             cache.localMetrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapRemovals());
+ 
+         assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions());
+         assertEquals(0, cache.localMetrics().getOffHeapEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 4 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapGets());
+         assertEquals(KEYS_CNT * 2 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapHits());
+         assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - MAX_SIZE - OFFHEAP_MAX_CNT),
+             cache.localMetrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses());
+         assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE - OFFHEAP_MAX_CNT),
+             cache.localMetrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapRemovals());
+ 
+         assertEquals(0, cache.localMetrics().getSwapEntriesCount());
+     }
+ 
+     /**
+      * @throws Exception if failed.
+      */
+     public void testOffHeapMetricsInOffHeapTiered() throws Exception {
+         createCache(CacheMemoryMode.OFFHEAP_TIERED, 0, false);
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.put(i, i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapGets());
+         assertEquals(0, cache.metrics().getOffHeapHits());
+         assertEquals(0f, cache.metrics().getOffHeapHitPercentage());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapMisses());
+         assertEquals(100f, cache.metrics().getOffHeapMissPercentage());
+         assertEquals(0, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.metrics().getOffHeapEvictions());
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapEntriesCount());
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapHits());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapMisses());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(0, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.metrics().getOffHeapEvictions());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 3, cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapHits());
+         assertEquals(100 / 3.0, cache.metrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapMisses());
+         assertEquals(100 - (100 / 3.0), cache.metrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(0, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.metrics().getOffHeapEvictions());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.remove(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 4, cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapHits());
+         assertEquals(100 * (KEYS_CNT * 2.0) / (KEYS_CNT * 4.0),
+             cache.metrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapMisses());
+         assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0),
+             cache.metrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(0, cache.metrics().getOffHeapEvictions());
+         assertEquals(0, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+     }
+ 
+     /**
+      * @throws Exception if failed.
+      */
+     public void testOffHeapAndSwapMetricsInOffHeapTiered() throws Exception {
+         createCache(CacheMemoryMode.OFFHEAP_TIERED, OFFHEAP_MAX_SIZE, true);
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.put(i, i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapGets());
+         assertEquals(0, cache.metrics().getOffHeapHits());
+         assertEquals(0f, cache.metrics().getOffHeapHitPercentage());
+         assertEquals(KEYS_CNT, cache.metrics().getOffHeapMisses());
+         assertEquals(100f, cache.metrics().getOffHeapMissPercentage());
+         assertEquals(0, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEvictions());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts());
+         assertEquals(KEYS_CNT, cache.metrics().getSwapGets());
+         assertEquals(0, cache.metrics().getSwapHits());
+         assertEquals(0f, cache.metrics().getSwapHitPercentage());
+         assertEquals(KEYS_CNT, cache.metrics().getSwapMisses());
+         assertEquals(100f, cache.metrics().getSwapMissPercentage());
+         assertEquals(0, cache.metrics().getSwapRemovals());
+ 
+         assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts());
+         assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapGets());
+         assertEquals(0, cache.metrics().getOffHeapHits());
+         assertEquals(0.0, cache.metrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapMisses());
+         assertEquals(100.0, cache.metrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(0, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(cache.metrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEvictions());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 2, cache.metrics().getSwapGets());
+         assertEquals(KEYS_CNT, cache.metrics().getSwapHits());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.metrics().getSwapMisses());
+         assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals());
+ 
+         assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.metrics().getSwapEntriesCount());
+ 
+         for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++)
+             cache.get(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 3, cache.metrics().getOffHeapGets());
+         assertEquals(0, cache.metrics().getOffHeapHits());
+         assertEquals(0.0, cache.metrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 3, cache.metrics().getOffHeapMisses());
+         assertEquals(100.0, cache.metrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(0, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(cache.metrics().getCacheEvictions() - OFFHEAP_MAX_CNT - KEYS_CNT,
+             cache.metrics().getOffHeapEvictions());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 3, cache.metrics().getSwapGets());
+         assertEquals(KEYS_CNT, cache.metrics().getSwapHits());
+         assertEquals(100 / 3.0, cache.metrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses());
+         assertEquals(100 - (100 / 3.0), cache.metrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals());
+ 
+         assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.metrics().getSwapEntriesCount());
+ 
+         for (int i = 0; i < KEYS_CNT; i++)
+             cache.remove(i);
+ 
+         printStat();
+ 
+         assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapGets());
+         assertEquals(KEYS_CNT * 4, cache.metrics().getOffHeapGets());
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapHits());
+         assertEquals(100 * OFFHEAP_MAX_CNT / (KEYS_CNT * 4.0),
+             cache.metrics().getOffHeapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapMisses());
+         assertEquals(100 * (KEYS_CNT * 4 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0),
+             cache.metrics().getOffHeapMissPercentage(), 0.1);
+         assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapRemovals());
+ 
+         assertEquals(cache.metrics().getCacheEvictions() - OFFHEAP_MAX_CNT - 2 * KEYS_CNT, cache.metrics().getOffHeapEvictions());
+         assertEquals(0, cache.metrics().getOffHeapEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapPrimaryEntriesCount());
+         assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount());
+ 
+         assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts());
+         assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.metrics().getSwapGets());
+         assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.metrics().getSwapHits());
+         assertEquals(100 * (KEYS_CNT * 2.0 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT),
+             cache.metrics().getSwapHitPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses());
+         assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT),
+             cache.metrics().getSwapMissPercentage(), 0.1);
+         assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.metrics().getSwapRemovals());
+ 
+         assertEquals(0, cache.metrics().getSwapEntriesCount());
+     }
+ 
+     /**
+      * Prints stats.
+      */
+     protected void printStat() {
+         System.out.println("!!! -------------------------------------------------------");
+         System.out.println("!!! Puts: cache = " + cache.localMetrics().getCachePuts() +
+             ", offheap = " + cache.localMetrics().getOffHeapPuts() +
+             ", swap = " + cache.localMetrics().getSwapPuts());
+         System.out.println("!!! Gets: cache = " + cache.localMetrics().getCacheGets() +
+             ", offheap = " + cache.localMetrics().getOffHeapGets() +
+             ", swap = " + cache.localMetrics().getSwapGets());
+         System.out.println("!!! Removes: cache = " + cache.localMetrics().getCacheRemovals() +
+             ", offheap = " + cache.localMetrics().getOffHeapRemovals() +
+             ", swap = " + cache.localMetrics().getSwapRemovals());
+         System.out.println("!!! Evictions: cache = " + cache.localMetrics().getCacheEvictions() +
+             ", offheap = " + cache.localMetrics().getOffHeapEvictions() +
+             ", swap = none" );
+         System.out.println("!!! Hits: cache = " + cache.localMetrics().getCacheHits() +
+             ", offheap = " + cache.localMetrics().getOffHeapHits() +
+             ", swap = " + cache.localMetrics().getSwapHits());
+         System.out.println("!!! Hit(%): cache = " + cache.localMetrics().getCacheHitPercentage() +
+             ", offheap = " + cache.localMetrics().getOffHeapHitPercentage() +
+             ", swap = " + cache.localMetrics().getSwapHitPercentage());
+         System.out.println("!!! Misses: cache = " + cache.localMetrics().getCacheMisses() +
+             ", offheap = " + cache.localMetrics().getOffHeapMisses() +
+             ", swap = " + cache.localMetrics().getSwapMisses());
+         System.out.println("!!! Miss(%): cache = " + cache.localMetrics().getCacheMissPercentage() +
+             ", offheap = " + cache.localMetrics().getOffHeapMissPercentage() +
+             ", swap = " + cache.localMetrics().getSwapMissPercentage());
+         System.out.println("!!! Entries: cache = " + cache.localMetrics().getSize() +
+             ", offheap = " + cache.localMetrics().getOffHeapEntriesCount() +
+             ", swap = " + cache.localMetrics().getSwapEntriesCount());
+         System.out.println("!!! Size: cache = none" +
+             ", offheap = " + cache.localMetrics().getOffHeapAllocatedSize() +
+             ", swap = " + cache.localMetrics().getSwapSize());
+         System.out.println();
+     }
+ }

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
index 3b5e6b7,9e20d2a..63528a1
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBasicTestSuite.java
@@@ -42,15 -43,11 +43,16 @@@ import org.apache.ignite.internal.proce
  import org.apache.ignite.internal.processors.cache.IgniteMarshallerCacheConcurrentReadWriteTest;
  import org.apache.ignite.internal.processors.cache.OffHeapTieredTransactionSelfTest;
  import org.apache.ignite.internal.processors.closure.GridClosureProcessorSelfTest;
+ import org.apache.ignite.internal.processors.closure.GridClosureSerializationTest;
  import org.apache.ignite.internal.processors.continuous.GridEventConsumeSelfTest;
  import org.apache.ignite.internal.processors.continuous.GridMessageListenSelfTest;
 -import org.apache.ignite.internal.processors.odbc.OdbcProcessorValidationSelfTest;
 +import org.apache.ignite.internal.processors.database.BPlusTreeFakeReuseSelfTest;
 +import org.apache.ignite.internal.processors.database.BPlusTreeReuseSelfTest;
 +import org.apache.ignite.internal.processors.database.BPlusTreeSelfTest;
 +import org.apache.ignite.internal.processors.database.FreeListImplSelfTest;
 +import org.apache.ignite.internal.processors.database.MetadataStorageSelfTest;
  import org.apache.ignite.internal.processors.odbc.OdbcEscapeSequenceSelfTest;
 +import org.apache.ignite.internal.processors.odbc.OdbcProcessorValidationSelfTest;
  import org.apache.ignite.internal.processors.service.ClosureServiceClientsNodesTest;
  import org.apache.ignite.internal.product.GridProductVersionSelfTest;
  import org.apache.ignite.internal.util.nio.IgniteExceptionInNioWorkerSelfTest;
@@@ -154,13 -152,8 +157,15 @@@ public class IgniteBasicTestSuite exten
  
          suite.addTestSuite(SecurityPermissionSetBuilderTest.class);
  
+         suite.addTestSuite(AttributeNodeFilterSelfTest.class);
+ 
 +        // Basic DB data structures.
 +        suite.addTestSuite(BPlusTreeSelfTest.class);
 +        suite.addTestSuite(BPlusTreeFakeReuseSelfTest.class);
 +        suite.addTestSuite(BPlusTreeReuseSelfTest.class);
 +        suite.addTestSuite(MetadataStorageSelfTest.class);
 +        suite.addTestSuite(FreeListImplSelfTest.class);
 +
          return suite;
      }
  }

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/d98d947f/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCachePartitionedFieldsQuerySelfTest.java
----------------------------------------------------------------------