You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/09/09 14:01:49 UTC

[1/7] ignite git commit: IO opts

Repository: ignite
Updated Branches:
  refs/heads/ignite-comm-opts1 [created] 38965d3d3


IO opts


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

Branch: refs/heads/ignite-comm-opts1
Commit: 06de58794479e210d78bf527f2c04eb2fd0239e5
Parents: 8f69787
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Wed Aug 31 15:57:48 2016 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Wed Aug 31 15:57:48 2016 +0300

----------------------------------------------------------------------
 .../configuration/IgniteConfiguration.java      |  2 +-
 .../managers/communication/GridIoManager.java   | 21 +++++++++++++
 .../ignite/internal/util/nio/GridNioServer.java | 16 +++++++---
 .../internal/util/nio/GridNioSessionImpl.java   | 31 +++++++++++++++++++-
 .../config/ignite-localhost-config.xml          |  6 ++++
 .../ignite/yardstick/IgniteBenchmarkUtils.java  | 10 +++----
 6 files changed, 75 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/06de5879/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index 6d35d21..9414675 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -146,7 +146,7 @@ public class IgniteConfiguration {
     public static final int AVAILABLE_PROC_CNT = Runtime.getRuntime().availableProcessors();
 
     /** Default core size of public thread pool. */
-    public static final int DFLT_PUBLIC_THREAD_CNT = Math.max(8, AVAILABLE_PROC_CNT) * 2;
+    public static final int DFLT_PUBLIC_THREAD_CNT = Math.max(8, AVAILABLE_PROC_CNT);
 
     /** Default keep alive time for public thread pool. */
     public static final long DFLT_PUBLIC_KEEP_ALIVE_TIME = 0;

http://git-wip-us.apache.org/repos/asf/ignite/blob/06de5879/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index 3fdda30..9e547ca 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -528,6 +528,27 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
                 closedTopics.add(e.getKey());
             }
         }
+
+        Thread t = new Thread(
+            new Runnable() {
+                @Override public void run() {
+                    for (;;) {
+                        try {
+                            Thread.sleep(5000);
+                        }
+                        catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
+
+                        dumpStats();
+                    }
+                }
+            }
+        );
+
+        t.setDaemon(true);
+
+        t.start();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/06de5879/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 24b8fad..8cb88b8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -104,6 +104,10 @@ public class GridNioServer<T> {
     /** SSL write buf limit. */
     private static final int WRITE_BUF_LIMIT = GridNioSessionMetaKey.nextUniqueKey();
 
+    // TODO
+    private static final int WRITE_BUF_SIZE = IgniteSystemProperties.getInteger("IGNITE_WRITE_BUF_SIZE", 65536);
+    private static final int READ_BUF_SIZE = IgniteSystemProperties.getInteger("IGNITE_READ_BUF_SIZE", 65536);
+
     /** */
     private static final boolean DISABLE_KEYSET_OPTIMIZATION =
         IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_NO_SELECTOR_OPTS);
@@ -909,6 +913,7 @@ public class GridNioServer<T> {
                 metricsLsnr.onBytesReceived(cnt);
 
             ses.bytesReceived(cnt);
+            ses.onBytesRead(cnt, readBuf.capacity());
 
             readBuf.flip();
 
@@ -1223,6 +1228,7 @@ public class GridNioServer<T> {
                     metricsLsnr.onBytesSent(cnt);
 
                 ses.bytesSent(cnt);
+                ses.onBytesWritten(cnt, buf.capacity());
             }
             else {
                 // For test purposes only (skipWrite is set to true in tests only).
@@ -1477,6 +1483,8 @@ public class GridNioServer<T> {
                                     sb.append(", bytesRcvd=").append(ses.bytesReceived())
                                         .append(", bytesSent=").append(ses.bytesSent())
                                         .append(", opQueueSize=").append(ses.writeQueueSize())
+                                        .append(", writeStats=").append(Arrays.toString(ses.writeStats()))
+                                        .append(", readStats=").append(Arrays.toString(ses.readStats()))
                                         .append(", msgWriter=").append(writer != null ? writer.toString() : "null")
                                         .append(", msgReader=").append(reader != null ? reader.toString() : "null");
 
@@ -1704,10 +1712,10 @@ public class GridNioServer<T> {
                 ByteBuffer readBuf = null;
 
                 if (directMode) {
-                    writeBuf = directBuf ? ByteBuffer.allocateDirect(sock.getSendBufferSize()) :
-                        ByteBuffer.allocate(sock.getSendBufferSize());
-                    readBuf = directBuf ? ByteBuffer.allocateDirect(sock.getReceiveBufferSize()) :
-                        ByteBuffer.allocate(sock.getReceiveBufferSize());
+                    writeBuf = directBuf ? ByteBuffer.allocateDirect(WRITE_BUF_SIZE) :
+                        ByteBuffer.allocate(WRITE_BUF_SIZE);
+                    readBuf = directBuf ? ByteBuffer.allocateDirect(READ_BUF_SIZE) :
+                        ByteBuffer.allocate(READ_BUF_SIZE);
 
                     writeBuf.order(order);
                     readBuf.order(order);

http://git-wip-us.apache.org/repos/asf/ignite/blob/06de5879/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
index 0bcfe64..fbbc448 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
@@ -48,6 +48,9 @@ public class GridNioSessionImpl implements GridNioSession {
     /** Sent bytes counter. */
     private volatile long bytesSent;
 
+    private final long[] writesStat = new long[10];
+    private final long[] readsStat = new long[10];
+
     /** Received bytes counter. */
     private volatile long bytesRcvd;
 
@@ -244,6 +247,32 @@ public class GridNioSessionImpl implements GridNioSession {
         lastSndTime = U.currentTimeMillis();
     }
 
+    public void onBytesWritten(int cnt, int bufCap) {
+        int idx = (int)Math.floor(((cnt * 1.0) / bufCap) * writesStat.length);
+
+        if (idx >= writesStat.length)
+            idx = writesStat.length - 1;
+
+        writesStat[idx]++;
+    }
+
+    public void onBytesRead(int cnt, int bufCap) {
+        int idx = (int)Math.floor(((cnt * 1.0) / bufCap) * readsStat.length);
+
+        if (idx >= readsStat.length)
+            idx = readsStat.length - 1;
+
+        readsStat[idx]++;
+    }
+
+    public long[] readStats() {
+        return readsStat;
+    }
+
+    public long[] writeStats() {
+        return writesStat;
+    }
+
     /**
      * Adds given amount ob bytes to the received bytes counter.
      * <p>
@@ -309,4 +338,4 @@ public class GridNioSessionImpl implements GridNioSession {
     @Override public String toString() {
         return S.toString(GridNioSessionImpl.class, this);
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/06de5879/modules/yardstick/config/ignite-localhost-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-localhost-config.xml b/modules/yardstick/config/ignite-localhost-config.xml
index 95d881c..3e57f4f 100644
--- a/modules/yardstick/config/ignite-localhost-config.xml
+++ b/modules/yardstick/config/ignite-localhost-config.xml
@@ -51,5 +51,11 @@
                 </property>
             </bean>
         </property>
+
+        <property name="communicationSpi">
+            <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
+                <property name="sharedMemoryPort" value="-1"/>
+            </bean>
+        </property>
     </bean>
 </beans>

http://git-wip-us.apache.org/repos/asf/ignite/blob/06de5879/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
index 54ef00d..b2305c9 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
@@ -30,7 +30,7 @@ import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.apache.ignite.transactions.TransactionOptimisticException;
 import org.apache.ignite.transactions.TransactionRollbackException;
-import org.apache.ignite.yardstick.cache.IgniteSqlQueryBenchmark;
+import org.apache.ignite.yardstick.cache.IgnitePutBenchmark;
 import org.yardstickframework.BenchmarkDriver;
 import org.yardstickframework.BenchmarkDriverStartUp;
 
@@ -89,16 +89,16 @@ public class IgniteBenchmarkUtils {
     public static void main(String[] args) throws Exception {
         final String cfg = "modules/yardstick/config/ignite-localhost-config.xml";
 
-        final Class<? extends BenchmarkDriver> benchmark = IgniteSqlQueryBenchmark.class;
+        final Class<? extends BenchmarkDriver> benchmark = IgnitePutBenchmark.class;
 
-        final int threads = 1;
+        final int threads = 5;
 
         final boolean clientDriverNode = true;
 
         final int extraNodes = 2;
 
-        final int warmUp = 5;
-        final int duration = 5;
+        final int warmUp = 60;
+        final int duration = 120;
 
         final int range = 100_000;
 


[6/7] ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-comm-opts

Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/origin/master' into ignite-comm-opts


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

Branch: refs/heads/ignite-comm-opts1
Commit: c81e0d9d0b3d7ca92b7bdd0a2e2704acdae43052
Parents: dbca495 843979d
Author: sboikov <sb...@gridgain.com>
Authored: Fri Sep 9 12:01:43 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Sep 9 12:01:43 2016 +0300

----------------------------------------------------------------------
 .../scripts/recreate-cassandra-artifacts.bat    |   32 +-
 .../store/jdbc/dialect/SQLServerDialect.java    |    2 +-
 .../util/offheap/unsafe/GridUnsafeLru.java      |   30 +-
 .../visor/event/VisorGridDiscoveryEventV2.java  |   80 +
 .../visor/node/VisorNodeDataCollectorJob.java   |   10 +-
 .../internal/visor/util/VisorEventMapper.java   |   96 +-
 .../internal/visor/util/VisorTaskUtils.java     |   22 +-
 .../GridCacheRebalancingOrderingTest.java       |  916 +++++
 .../IgniteCacheReplicatedQuerySelfTest.java     |   50 +-
 .../kafka/connect/IgniteSinkConnector.java      |    9 +
 .../kafka/connect/IgniteSourceConnector.java    |    9 +
 .../kafka/connect/IgniteSinkConnectorTest.java  |   15 +-
 .../connect/IgniteSourceConnectorTest.java      |   14 +-
 .../osgi-karaf/src/main/resources/features.xml  |   12 +-
 .../cpp/odbc/include/ignite/odbc/connection.h   |    7 -
 modules/storm/README.txt                        |    2 +-
 modules/storm/pom.xml                           |    2 +-
 .../ignite/stream/storm/StormStreamer.java      |   10 +-
 .../storm/StormIgniteStreamerSelfTest.java      |   20 +-
 .../ignite/stream/storm/TestStormSpout.java     |   10 +-
 .../ignite/visor/commands/VisorConsole.scala    |    1 +
 .../commands/cache/VisorCacheCommand.scala      |   33 +-
 .../commands/cache/VisorCacheResetCommand.scala |  129 +
 .../cache/VisorCacheResetCommandSpec.scala      |  114 +
 modules/web-agent/.gitignore                    |    2 -
 modules/web-agent/README.txt                    |   88 -
 .../web-agent/assembly/release-web-agent.xml    |   72 -
 modules/web-agent/bin/ignite-web-agent.bat      |   70 -
 modules/web-agent/bin/ignite-web-agent.sh       |   87 -
 modules/web-agent/demo/README.txt               |    4 -
 modules/web-agent/demo/db-init.sql              |  102 -
 modules/web-agent/jdbc-drivers/README.txt       |   10 -
 modules/web-agent/logs/README.txt               |    5 -
 modules/web-agent/pom.xml                       |  189 -
 .../console/agent/AgentConfiguration.java       |  268 --
 .../ignite/console/agent/AgentLauncher.java     |  344 --
 .../apache/ignite/console/agent/AgentUtils.java |  111 -
 .../console/agent/handlers/AbstractHandler.java |  110 -
 .../console/agent/handlers/DatabaseHandler.java |  298 --
 .../console/agent/handlers/RestHandler.java     |  276 --
 .../ignite/console/demo/AgentClusterDemo.java   |  638 ----
 .../ignite/console/demo/AgentMetadataDemo.java  |   92 -
 .../apache/ignite/console/demo/model/Car.java   |  152 -
 .../ignite/console/demo/model/Country.java      |  152 -
 .../ignite/console/demo/model/Department.java   |  152 -
 .../ignite/console/demo/model/Employee.java     |  356 --
 .../ignite/console/demo/model/Parking.java      |  152 -
 .../src/main/resources/log4j.properties         |   53 -
 modules/web-console/.gitignore                  |    6 +
 modules/web-console/DEVNOTES.txt                |   22 +-
 modules/web-console/backend/.babelrc            |    9 +
 modules/web-console/backend/.eslintrc           |  188 +
 modules/web-console/backend/.gitignore          |    8 +
 .../web-console/backend/agent_dists/README.txt  |    7 +
 modules/web-console/backend/app/agent.js        |  753 ++++
 modules/web-console/backend/app/app.js          |   61 +
 modules/web-console/backend/app/browser.js      |  404 ++
 modules/web-console/backend/app/configure.js    |   86 +
 modules/web-console/backend/app/index.js        |  116 +
 modules/web-console/backend/app/mongo.js        |  673 ++++
 modules/web-console/backend/app/nconf.js        |   48 +
 modules/web-console/backend/app/routes.js       |   64 +
 modules/web-console/backend/app/settings.js     |   80 +
 .../backend/config/settings.json.sample         |   30 +
 .../backend/errors/AppErrorException.js         |   36 +
 .../backend/errors/AuthFailedException.js       |   30 +
 .../backend/errors/DuplicateKeyException.js     |   28 +
 .../backend/errors/IllegalAccessError.js        |   29 +
 .../backend/errors/IllegalArgumentException.js  |   29 +
 .../backend/errors/MissingResourceException.js  |   30 +
 .../backend/errors/ServerErrorException.js      |   36 +
 modules/web-console/backend/errors/index.js     |   39 +
 modules/web-console/backend/index.js            |   19 +
 modules/web-console/backend/injector.js         |   30 +
 modules/web-console/backend/middlewares/api.js  |   44 +
 modules/web-console/backend/middlewares/host.js |   39 +
 modules/web-console/backend/middlewares/user.js |   36 +
 modules/web-console/backend/package.json        |   71 +
 modules/web-console/backend/routes/admin.js     |   84 +
 modules/web-console/backend/routes/agent.js     |   53 +
 modules/web-console/backend/routes/caches.js    |   65 +
 modules/web-console/backend/routes/clusters.js  |   64 +
 .../web-console/backend/routes/configuration.js |   41 +
 modules/web-console/backend/routes/demo.js      |  133 +
 .../web-console/backend/routes/demo/caches.json |   87 +
 .../backend/routes/demo/clusters.json           |   50 +
 .../backend/routes/demo/domains.json            |  307 ++
 .../web-console/backend/routes/demo/igfss.json  |   10 +
 modules/web-console/backend/routes/domains.js   |   76 +
 modules/web-console/backend/routes/igfss.js     |   65 +
 modules/web-console/backend/routes/notebooks.js |   80 +
 modules/web-console/backend/routes/profile.js   |   73 +
 modules/web-console/backend/routes/public.js    |  168 +
 modules/web-console/backend/services/agents.js  |   82 +
 modules/web-console/backend/services/auth.js    |   47 +
 modules/web-console/backend/services/caches.js  |  144 +
 .../web-console/backend/services/clusters.js    |  141 +
 .../backend/services/configurations.js          |   59 +
 modules/web-console/backend/services/domains.js |  187 +
 modules/web-console/backend/services/igfss.js   |  136 +
 modules/web-console/backend/services/mails.js   |  131 +
 .../web-console/backend/services/notebooks.js   |  104 +
 .../web-console/backend/services/sessions.js    |   63 +
 modules/web-console/backend/services/spaces.js  |   75 +
 modules/web-console/backend/services/users.js   |  229 ++
 .../backend/test/config/settings.json           |   20 +
 .../web-console/backend/test/data/accounts.json |   18 +
 .../web-console/backend/test/data/caches.json   |   87 +
 .../web-console/backend/test/data/clusters.json |   50 +
 .../web-console/backend/test/data/domains.json  |  307 ++
 .../web-console/backend/test/data/igfss.json    |   10 +
 modules/web-console/backend/test/injector.js    |   31 +
 .../backend/test/unit/CacheService.test.js      |  192 +
 .../backend/test/unit/ClusterService.test.js    |  190 +
 .../backend/test/unit/DomainService.test.js     |  198 +
 .../backend/test/unit/IgfsService.test.js       |  190 +
 .../docker/compose/backend/.dockerignore        |    1 +
 .../docker/compose/backend/Dockerfile           |   30 +
 .../web-console/docker/compose/backend/build.sh |   57 +
 .../docker/compose/docker-compose.yml           |   59 +
 .../docker/compose/frontend/.dockerignore       |    3 +
 .../docker/compose/frontend/Dockerfile          |   32 +
 .../docker/compose/frontend/DockerfileBuild     |   30 +
 .../docker/compose/frontend/build.sh            |   59 +
 .../docker/compose/frontend/nginx/nginx.conf    |   57 +
 .../compose/frontend/nginx/web-console.conf     |   59 +
 .../web-console/docker/standalone/.dockerignore |    2 +
 .../web-console/docker/standalone/Dockerfile    |   87 +
 modules/web-console/docker/standalone/build.sh  |   59 +
 .../docker/standalone/docker-compose.yml        |   41 +
 .../web-console/docker/standalone/entrypoint.sh |   23 +
 .../docker/standalone/nginx/nginx.conf          |   55 +
 .../docker/standalone/nginx/web-console.conf    |   54 +
 modules/web-console/frontend/.babelrc           |    9 +
 modules/web-console/frontend/.eslintrc          |  202 +
 modules/web-console/frontend/.gitignore         |    7 +
 modules/web-console/frontend/app/app.config.js  |   86 +
 modules/web-console/frontend/app/app.js         |  270 ++
 .../frontend/app/controllers/auth.controller.js |   30 +
 .../controllers/reset-password.controller.js    |   50 +
 .../web-console/frontend/app/data/colors.json   |   22 +
 .../frontend/app/data/countries.json            |   94 +
 .../frontend/app/data/demo-info.json            |   14 +
 .../frontend/app/data/event-types.json          |  169 +
 .../frontend/app/data/getting-started.json      |  109 +
 .../frontend/app/data/java-classes.json         |   19 +
 .../frontend/app/data/java-keywords.json        |   55 +
 .../frontend/app/data/java-primitives.json      |    9 +
 .../frontend/app/data/pom-dependencies.json     |   20 +
 .../frontend/app/decorator/select.js            |   77 +
 .../frontend/app/decorator/tooltip.js           |   56 +
 .../app/directives/auto-focus.directive.js      |   26 +
 .../app/directives/bs-affix-update.directive.js |   34 +
 .../app/directives/centered/centered.css        |   37 +
 .../directives/centered/centered.directive.js   |   26 +
 .../directives/copy-to-clipboard.directive.js   |   29 +
 .../hide-on-state-change.directive.js           |   31 +
 .../information/information.directive.js        |   30 +
 .../app/directives/information/information.jade |   20 +
 .../app/directives/information/information.scss |   56 +
 .../frontend/app/directives/match.directive.js  |   27 +
 .../app/directives/on-click-focus.directive.js  |   26 +
 .../directives/on-enter-focus-move.directive.js |   29 +
 .../app/directives/on-enter.directive.js        |   32 +
 .../app/directives/on-escape.directive.js       |   32 +
 .../ui-ace-docker/ui-ace-docker.controller.js   |   33 +
 .../ui-ace-docker/ui-ace-docker.directive.js    |   46 +
 .../directives/ui-ace-docker/ui-ace-docker.jade |   31 +
 .../ui-ace-java/ui-ace-java.controller.js       |   32 +
 .../ui-ace-java/ui-ace-java.directive.js        |  147 +
 .../app/directives/ui-ace-java/ui-ace-java.jade |   22 +
 .../ui-ace-pojos/ui-ace-pojos.controller.js     |   95 +
 .../ui-ace-pojos/ui-ace-pojos.directive.js      |   46 +
 .../directives/ui-ace-pojos/ui-ace-pojos.jade   |   40 +
 .../ui-ace-pom/ui-ace-pom.controller.js         |   33 +
 .../ui-ace-pom/ui-ace-pom.directive.js          |   41 +
 .../app/directives/ui-ace-pom/ui-ace-pom.jade   |   17 +
 .../app/directives/ui-ace-tabs.directive.js     |   24 +
 .../ui-ace-xml/ui-ace-xml.controller.js         |   27 +
 .../ui-ace-xml/ui-ace-xml.directive.js          |  147 +
 .../app/directives/ui-ace-xml/ui-ace-xml.jade   |   17 +
 .../frontend/app/filters/byName.filter.js       |   23 +
 .../app/filters/domainsValidation.filter.js     |   33 +
 .../frontend/app/filters/duration.filter.js     |   38 +
 .../frontend/app/filters/hasPojo.filter.js      |   18 +
 .../frontend/app/helpers/jade/form.jade         |   27 +
 .../helpers/jade/form/form-field-checkbox.jade  |   38 +
 .../helpers/jade/form/form-field-datalist.jade  |   51 +
 .../app/helpers/jade/form/form-field-down.jade  |   18 +
 .../helpers/jade/form/form-field-dropdown.jade  |   50 +
 .../helpers/jade/form/form-field-feedback.jade  |   29 +
 .../app/helpers/jade/form/form-field-label.jade |   23 +
 .../helpers/jade/form/form-field-number.jade    |   52 +
 .../app/helpers/jade/form/form-field-text.jade  |   47 +
 .../app/helpers/jade/form/form-field-up.jade    |   18 +
 .../app/helpers/jade/form/form-group.jade       |   23 +
 .../frontend/app/helpers/jade/mixins.jade       |  541 +++
 .../frontend/app/modules/Demo/Demo.module.js    |  166 +
 .../frontend/app/modules/ace.module.js          |  269 ++
 .../frontend/app/modules/agent/agent.module.js  |  341 ++
 .../app/modules/branding/branding.module.js     |   45 +
 .../app/modules/branding/branding.provider.js   |  111 +
 .../app/modules/branding/features.directive.js  |   35 +
 .../app/modules/branding/footer.directive.js    |   34 +
 .../modules/branding/header-logo.directive.js   |   34 +
 .../app/modules/branding/header-logo.jade       |   18 +
 .../modules/branding/header-title.directive.js  |   35 +
 .../branding/powered-by-apache.directive.js     |   35 +
 .../app/modules/branding/powered-by-apache.jade |   18 +
 .../app/modules/branding/terms.directive.js     |   30 +
 .../configuration/EventGroups.provider.js       |   30 +
 .../modules/configuration/Sidebar.provider.js   |   39 +
 .../configuration/configuration.module.js       |   41 +
 .../configuration/generator/Docker.service.js   |   78 +
 .../configuration/generator/Java.service.js     |   21 +
 .../configuration/generator/Pom.service.js      |  226 ++
 .../configuration/generator/Xml.service.js      |   21 +
 .../modules/configuration/sidebar.directive.js  |   30 +
 .../modules/dialog/dialog-content.directive.js  |   31 +
 .../modules/dialog/dialog-title.directive.js    |   31 +
 .../app/modules/dialog/dialog.controller.js     |   40 +
 .../app/modules/dialog/dialog.directive.js      |   32 +
 .../app/modules/dialog/dialog.factory.js        |   32 +
 .../frontend/app/modules/dialog/dialog.jade     |   26 +
 .../app/modules/dialog/dialog.module.js         |   32 +
 .../field/bs-select-placeholder.directive.js    |   47 +
 .../app/modules/form/field/down.directive.js    |   39 +
 .../app/modules/form/field/feedback.scss        |   37 +
 .../frontend/app/modules/form/field/field.scss  |   43 +
 .../field/form-control-feedback.directive.js    |   40 +
 .../form/field/input/autofocus.directive.js     |   30 +
 .../app/modules/form/field/input/select.scss    |   21 +
 .../app/modules/form/field/input/text.scss      |   41 +
 .../app/modules/form/field/label.directive.js   |   47 +
 .../app/modules/form/field/tooltip.directive.js |   49 +
 .../app/modules/form/field/up.directive.js      |   39 +
 .../frontend/app/modules/form/form.module.js    |   96 +
 .../app/modules/form/group/add.directive.js     |   40 +
 .../app/modules/form/group/tooltip.directive.js |   40 +
 .../app/modules/form/panel/chevron.directive.js |   53 +
 .../app/modules/form/panel/field.directive.js   |   69 +
 .../app/modules/form/panel/panel.directive.js   |   37 +
 .../app/modules/form/panel/revert.directive.js  |   54 +
 .../form/validator/ipaddress.directive.js       |   86 +
 .../validator/java-built-in-class.directive.js  |   31 +
 .../form/validator/java-identifier.directive.js |   31 +
 .../form/validator/java-keywords.directive.js   |   42 +
 .../validator/java-package-name.directive.js    |   31 +
 .../java-package-specified.directive.js         |   34 +
 .../form/validator/property-unique.directive.js |   47 +
 .../property-value-specified.directive.js       |   31 +
 .../modules/form/validator/unique.directive.js  |   49 +
 .../modules/form/validator/uuid.directive.js    |   37 +
 .../getting-started/GettingStarted.provider.js  |  112 +
 .../frontend/app/modules/loading/loading.css    |   73 +
 .../app/modules/loading/loading.directive.js    |   51 +
 .../frontend/app/modules/loading/loading.jade   |   23 +
 .../app/modules/loading/loading.module.js       |   26 +
 .../app/modules/loading/loading.service.js      |   48 +
 .../app/modules/navbar/Navbar.provider.js       |   28 +
 .../app/modules/navbar/Userbar.provider.js      |   28 +
 .../app/modules/navbar/navbar.directive.js      |   30 +
 .../app/modules/navbar/navbar.module.js         |   33 +
 .../app/modules/navbar/userbar.directive.js     |   48 +
 .../frontend/app/modules/socket.module.js       |   41 +
 .../frontend/app/modules/sql/Notebook.data.js   |  157 +
 .../app/modules/sql/Notebook.service.js         |   74 +
 .../app/modules/sql/notebook.controller.js      |   60 +
 .../app/modules/sql/scan-filter-input.jade      |   39 +
 .../modules/sql/scan-filter-input.service.js    |   51 +
 .../frontend/app/modules/sql/sql.controller.js  | 1632 ++++++++
 .../frontend/app/modules/sql/sql.module.js      |   60 +
 .../frontend/app/modules/states/admin.state.js  |   35 +
 .../app/modules/states/configuration.state.js   |   97 +
 .../configuration/Configuration.resource.js     |   42 +
 .../configuration/caches/concurrency.jade       |   65 +
 .../states/configuration/caches/general.jade    |   66 +
 .../states/configuration/caches/memory.jade     |  102 +
 .../configuration/caches/node-filter.jade       |  108 +
 .../states/configuration/caches/query.jade      |   95 +
 .../states/configuration/caches/rebalance.jade  |   65 +
 .../configuration/caches/server-near-cache.jade |   51 +
 .../states/configuration/caches/statistics.jade |   39 +
 .../states/configuration/caches/store.jade      |  244 ++
 .../states/configuration/clusters/atomic.jade   |   53 +
 .../configuration/clusters/attributes.jade      |   57 +
 .../states/configuration/clusters/binary.jade   |   77 +
 .../configuration/clusters/cache-key-cfg.jade   |   53 +
 .../configuration/clusters/collision.jade       |   62 +
 .../clusters/collision/custom.jade              |   24 +
 .../clusters/collision/fifo-queue.jade          |   27 +
 .../clusters/collision/job-stealing.jade        |   63 +
 .../clusters/collision/priority-queue.jade      |   42 +
 .../configuration/clusters/communication.jade   |   99 +
 .../configuration/clusters/connector.jade       |  103 +
 .../configuration/clusters/deployment.jade      |  113 +
 .../configuration/clusters/discovery.jade       |   87 +
 .../states/configuration/clusters/events.jade   |   37 +
 .../states/configuration/clusters/failover.jade |   72 +
 .../states/configuration/clusters/general.jade  |   73 +
 .../clusters/general/discovery/cloud.jade       |  134 +
 .../clusters/general/discovery/google.jade      |   38 +
 .../clusters/general/discovery/jdbc.jade        |   32 +
 .../clusters/general/discovery/multicast.jade   |   99 +
 .../clusters/general/discovery/s3.jade          |   27 +
 .../clusters/general/discovery/shared.jade      |   23 +
 .../clusters/general/discovery/vm.jade          |   79 +
 .../clusters/general/discovery/zookeeper.jade   |   83 +
 .../bounded-exponential-backoff.jade            |   27 +
 .../discovery/zookeeper/retrypolicy/custom.jade |   24 +
 .../retrypolicy/exponential-backoff.jade        |   27 +
 .../zookeeper/retrypolicy/forever.jade          |   22 +
 .../zookeeper/retrypolicy/n-times.jade          |   25 +
 .../zookeeper/retrypolicy/one-time.jade         |   23 +
 .../zookeeper/retrypolicy/until-elapsed.jade    |   25 +
 .../states/configuration/clusters/igfs.jade     |   37 +
 .../states/configuration/clusters/logger.jade   |   66 +
 .../configuration/clusters/logger/custom.jade   |   25 +
 .../configuration/clusters/logger/log4j.jade    |   50 +
 .../configuration/clusters/logger/log4j2.jade   |   39 +
 .../configuration/clusters/marshaller.jade      |   75 +
 .../states/configuration/clusters/metrics.jade  |   51 +
 .../states/configuration/clusters/ssl.jade      |  109 +
 .../states/configuration/clusters/swap.jade     |   71 +
 .../states/configuration/clusters/thread.jade   |   48 +
 .../states/configuration/clusters/time.jade     |   47 +
 .../configuration/clusters/transactions.jade    |   69 +
 .../states/configuration/domains/general.jade   |   46 +
 .../states/configuration/domains/query.jade     |  170 +
 .../states/configuration/domains/store.jade     |  126 +
 .../modules/states/configuration/igfs/dual.jade |   42 +
 .../states/configuration/igfs/fragmentizer.jade |   43 +
 .../states/configuration/igfs/general.jade      |   54 +
 .../modules/states/configuration/igfs/ipc.jade  |   60 +
 .../modules/states/configuration/igfs/misc.jade |  108 +
 .../states/configuration/igfs/secondary.jade    |   44 +
 .../configuration/preview-panel.directive.js    |  239 ++
 .../summary/summary-tabs.directive.js           |   50 +
 .../configuration/summary/summary.controller.js |  365 ++
 .../frontend/app/modules/states/errors.state.js |   43 +
 .../frontend/app/modules/states/logout.state.js |   35 +
 .../app/modules/states/password.state.js        |   46 +
 .../app/modules/states/profile.state.js         |   35 +
 .../frontend/app/modules/states/signin.state.js |   43 +
 .../app/modules/user/AclRoute.provider.js       |   47 +
 .../frontend/app/modules/user/Auth.service.js   |   56 +
 .../frontend/app/modules/user/User.service.js   |   51 +
 .../frontend/app/modules/user/permissions.js    |   28 +
 .../frontend/app/modules/user/user.module.js    |   73 +
 .../app/modules/version/Version.provider.js     |   32 +
 .../app/services/ChartColors.service.js         |   22 +
 .../frontend/app/services/Clone.service.js      |   64 +
 .../frontend/app/services/Confirm.service.js    |   68 +
 .../app/services/ConfirmBatch.service.js        |   92 +
 .../app/services/CopyToClipboard.service.js     |   50 +
 .../frontend/app/services/Countries.service.js  |   31 +
 .../app/services/ErrorPopover.service.js        |  126 +
 .../frontend/app/services/Focus.service.js      |   33 +
 .../frontend/app/services/FormUtils.service.js  |  435 +++
 .../app/services/InetAddress.service.js         |   53 +
 .../frontend/app/services/JavaTypes.service.js  |   93 +
 .../app/services/LegacyTable.service.js         |  209 ++
 .../app/services/LegacyUtils.service.js         |  572 +++
 .../frontend/app/services/Messages.service.js   |   63 +
 .../app/services/ModelNormalizer.service.js     |   59 +
 .../app/services/UnsavedChangesGuard.service.js |   38 +
 modules/web-console/frontend/app/vendor.js      |   55 +
 .../frontend/controllers/admin-controller.js    |   92 +
 .../frontend/controllers/caches-controller.js   |  524 +++
 .../frontend/controllers/clusters-controller.js |  689 ++++
 .../frontend/controllers/domains-controller.js  | 1792 +++++++++
 .../frontend/controllers/igfs-controller.js     |  416 +++
 .../frontend/controllers/profile-controller.js  |   94 +
 .../frontend/generator/generator-common.js      |  612 +++
 .../frontend/generator/generator-java.js        | 3534 ++++++++++++++++++
 .../frontend/generator/generator-optional.js    |   25 +
 .../frontend/generator/generator-properties.js  |  175 +
 .../frontend/generator/generator-readme.js      |   85 +
 .../frontend/generator/generator-xml.js         | 2093 +++++++++++
 .../frontend/gulpfile.babel.js/index.js         |   26 +
 .../frontend/gulpfile.babel.js/paths.js         |   74 +
 .../frontend/gulpfile.babel.js/tasks/build.js   |   21 +
 .../frontend/gulpfile.babel.js/tasks/bundle.js  |   32 +
 .../frontend/gulpfile.babel.js/tasks/clean.js   |   32 +
 .../frontend/gulpfile.babel.js/tasks/copy.js    |   33 +
 .../gulpfile.babel.js/tasks/ignite-modules.js   |   55 +
 .../frontend/gulpfile.babel.js/tasks/jade.js    |   40 +
 .../frontend/gulpfile.babel.js/tasks/test.js    |   92 +
 .../frontend/gulpfile.babel.js/tasks/watch.js   |   31 +
 .../gulpfile.babel.js/webpack/common.js         |  189 +
 .../webpack/environments/development.js         |   69 +
 .../webpack/environments/production.js          |   45 +
 .../frontend/gulpfile.babel.js/webpack/index.js |   32 +
 .../webpack/plugins/progress.js                 |   82 +
 .../frontend/ignite_modules/README.txt          |    6 +
 .../frontend/ignite_modules/index.js            |   27 +
 modules/web-console/frontend/package.json       |  125 +
 modules/web-console/frontend/public/favicon.ico |  Bin 0 -> 1150 bytes
 .../frontend/public/images/cache.png            |  Bin 0 -> 23700 bytes
 .../frontend/public/images/cluster.png          |  Bin 0 -> 29376 bytes
 .../frontend/public/images/docker.png           |  Bin 0 -> 521 bytes
 .../frontend/public/images/domains.png          |  Bin 0 -> 23828 bytes
 .../web-console/frontend/public/images/igfs.png |  Bin 0 -> 14307 bytes
 .../frontend/public/images/ignite-logo.png      |  Bin 0 -> 1982 bytes
 .../frontend/public/images/ignite-logo@2x.png   |  Bin 0 -> 3325 bytes
 .../frontend/public/images/ignite-puzzle.png    |  Bin 0 -> 71974 bytes
 .../web-console/frontend/public/images/java.png |  Bin 0 -> 170 bytes
 .../frontend/public/images/pb-ignite.png        |  Bin 0 -> 3493 bytes
 .../frontend/public/images/pb-ignite@2x.png     |  Bin 0 -> 8558 bytes
 .../frontend/public/images/query-chart.png      |  Bin 0 -> 16637 bytes
 .../frontend/public/images/query-metadata.png   |  Bin 0 -> 32298 bytes
 .../frontend/public/images/query-table.png      |  Bin 0 -> 29189 bytes
 .../frontend/public/images/summary.png          |  Bin 0 -> 31997 bytes
 .../web-console/frontend/public/images/xml.png  |  Bin 0 -> 232 bytes
 .../public/stylesheets/_bootstrap-custom.scss   |   65 +
 .../stylesheets/_bootstrap-variables.scss       |  891 +++++
 .../stylesheets/_font-awesome-custom.scss       |   32 +
 .../public/stylesheets/blocks/error.scss        |   31 +
 .../frontend/public/stylesheets/style.scss      | 2171 +++++++++++
 .../frontend/public/stylesheets/variables.scss  |   28 +
 .../frontend/test/e2e/exampe.test.js            |   40 +
 modules/web-console/frontend/test/karma.conf.js |  113 +
 .../frontend/test/protractor.conf.js            |   50 +
 .../frontend/test/unit/JavaTypes.test.js        |   69 +
 .../frontend/test/unit/UserAuth.test.js         |   35 +
 modules/web-console/frontend/views/403.jade     |   22 +
 modules/web-console/frontend/views/404.jade     |   22 +
 modules/web-console/frontend/views/base.jade    |   22 +
 .../frontend/views/configuration/caches.jade    |   53 +
 .../frontend/views/configuration/clusters.jade  |   66 +
 .../views/configuration/domains-import.jade     |  223 ++
 .../frontend/views/configuration/domains.jade   |   66 +
 .../frontend/views/configuration/igfs.jade      |   51 +
 .../frontend/views/configuration/sidebar.jade   |   29 +
 .../summary-project-structure.jade              |   27 +
 .../views/configuration/summary-tabs.jade       |   25 +
 .../frontend/views/configuration/summary.jade   |  122 +
 .../frontend/views/includes/footer.jade         |   23 +
 .../frontend/views/includes/header.jade         |   51 +
 modules/web-console/frontend/views/index.jade   |   47 +
 modules/web-console/frontend/views/reset.jade   |   48 +
 .../frontend/views/settings/admin.jade          |   76 +
 .../frontend/views/settings/profile.jade        |   76 +
 modules/web-console/frontend/views/signin.jade  |  163 +
 .../frontend/views/sql/cache-metadata.jade      |   40 +
 .../frontend/views/sql/chart-settings.jade      |   40 +
 .../frontend/views/sql/notebook-new.jade        |   31 +
 .../frontend/views/sql/paragraph-rate.jade      |   31 +
 modules/web-console/frontend/views/sql/sql.jade |  193 +
 .../views/templates/agent-download.jade         |   48 +
 .../frontend/views/templates/alert.jade         |   21 +
 .../frontend/views/templates/batch-confirm.jade |   32 +
 .../frontend/views/templates/clone.jade         |   37 +
 .../frontend/views/templates/confirm.jade       |   31 +
 .../frontend/views/templates/demo-info.jade     |   45 +
 .../frontend/views/templates/dropdown.jade      |   24 +
 .../views/templates/getting-started.jade        |   32 +
 .../frontend/views/templates/message.jade       |   26 +
 .../frontend/views/templates/pagination.jade    |   32 +
 .../frontend/views/templates/select.jade        |   26 +
 .../views/templates/validation-error.jade       |   25 +
 modules/web-console/pom.xml                     |   33 +-
 modules/web-console/src/main/js/.babelrc        |    3 -
 modules/web-console/src/main/js/.eslintrc       |  202 -
 modules/web-console/src/main/js/.gitignore      |    9 -
 .../web-console/src/main/js/app/app.config.js   |   86 -
 modules/web-console/src/main/js/app/app.js      |  274 --
 .../main/js/app/controllers/auth.controller.js  |   30 -
 .../js/app/controllers/notebooks.controller.js  |   69 -
 .../controllers/reset-password.controller.js    |   51 -
 .../src/main/js/app/data/colors.json            |   22 -
 .../src/main/js/app/data/countries.json         |   94 -
 .../src/main/js/app/data/demo-info.json         |   14 -
 .../src/main/js/app/data/event-types.json       |  169 -
 .../src/main/js/app/data/getting-started.json   |  109 -
 .../src/main/js/app/data/java-classes.json      |   18 -
 .../src/main/js/app/data/java-keywords.json     |   55 -
 .../src/main/js/app/data/java-primitives.json   |    9 -
 .../src/main/js/app/data/pom-dependencies.json  |   20 -
 .../src/main/js/app/decorator/select.js         |   77 -
 .../src/main/js/app/decorator/tooltip.js        |   56 -
 .../js/app/directives/auto-focus.directive.js   |   26 -
 .../app/directives/bs-affix-update.directive.js |   34 -
 .../js/app/directives/centered/centered.css     |   37 -
 .../directives/centered/centered.directive.js   |   26 -
 .../directives/copy-to-clipboard.directive.js   |   29 -
 .../hide-on-state-change.directive.js           |   31 -
 .../information/information.directive.js        |   30 -
 .../app/directives/information/information.jade |   20 -
 .../app/directives/information/information.scss |   56 -
 .../main/js/app/directives/match.directive.js   |   27 -
 .../app/directives/on-click-focus.directive.js  |   26 -
 .../directives/on-enter-focus-move.directive.js |   29 -
 .../js/app/directives/on-enter.directive.js     |   32 -
 .../js/app/directives/on-escape.directive.js    |   32 -
 .../ui-ace-docker/ui-ace-docker.controller.js   |   33 -
 .../ui-ace-docker/ui-ace-docker.directive.js    |   46 -
 .../directives/ui-ace-docker/ui-ace-docker.jade |   31 -
 .../ui-ace-java/ui-ace-java.controller.js       |   32 -
 .../ui-ace-java/ui-ace-java.directive.js        |  133 -
 .../app/directives/ui-ace-java/ui-ace-java.jade |   22 -
 .../ui-ace-pojos/ui-ace-pojos.controller.js     |   95 -
 .../ui-ace-pojos/ui-ace-pojos.directive.js      |   46 -
 .../directives/ui-ace-pojos/ui-ace-pojos.jade   |   40 -
 .../ui-ace-pom/ui-ace-pom.controller.js         |   33 -
 .../ui-ace-pom/ui-ace-pom.directive.js          |   41 -
 .../app/directives/ui-ace-pom/ui-ace-pom.jade   |   17 -
 .../js/app/directives/ui-ace-tabs.directive.js  |   23 -
 .../ui-ace-xml/ui-ace-xml.controller.js         |   27 -
 .../ui-ace-xml/ui-ace-xml.directive.js          |  133 -
 .../app/directives/ui-ace-xml/ui-ace-xml.jade   |   17 -
 .../src/main/js/app/filters/byName.filter.js    |   23 -
 .../js/app/filters/domainsValidation.filter.js  |   33 -
 .../src/main/js/app/filters/hasPojo.filter.js   |   18 -
 .../src/main/js/app/helpers/jade/mixins.jade    |  588 ---
 .../src/main/js/app/modules/Demo/Demo.module.js |  166 -
 .../js/app/modules/Version/Version.provider.js  |   32 -
 .../src/main/js/app/modules/ace.module.js       |  269 --
 .../main/js/app/modules/agent/agent.module.js   |  323 --
 .../js/app/modules/branding/branding.module.js  |   45 -
 .../app/modules/branding/branding.provider.js   |  111 -
 .../app/modules/branding/features.directive.js  |   35 -
 .../js/app/modules/branding/footer.directive.js |   34 -
 .../modules/branding/header-logo.directive.js   |   34 -
 .../js/app/modules/branding/header-logo.jade    |   18 -
 .../modules/branding/header-title.directive.js  |   35 -
 .../branding/powered-by-apache.directive.js     |   35 -
 .../app/modules/branding/powered-by-apache.jade |   18 -
 .../js/app/modules/branding/terms.directive.js  |   30 -
 .../configuration/EventGroups.provider.js       |   30 -
 .../modules/configuration/Sidebar.provider.js   |   39 -
 .../configuration/configuration.module.js       |   41 -
 .../configuration/generator/Docker.service.js   |   78 -
 .../configuration/generator/Java.service.js     |   21 -
 .../configuration/generator/Pom.service.js      |  210 --
 .../configuration/generator/Xml.service.js      |   21 -
 .../modules/configuration/sidebar.directive.js  |   30 -
 .../modules/dialog/dialog-content.directive.js  |   31 -
 .../modules/dialog/dialog-title.directive.js    |   31 -
 .../js/app/modules/dialog/dialog.controller.js  |   40 -
 .../js/app/modules/dialog/dialog.directive.js   |   32 -
 .../js/app/modules/dialog/dialog.factory.js     |   32 -
 .../src/main/js/app/modules/dialog/dialog.jade  |   26 -
 .../main/js/app/modules/dialog/dialog.module.js |   32 -
 .../field/bs-select-placeholder.directive.js    |   47 -
 .../js/app/modules/form/field/down.directive.js |   43 -
 .../modules/form/field/dropdown.directive.js    |   83 -
 .../js/app/modules/form/field/dropdown.jade     |   61 -
 .../main/js/app/modules/form/field/field.css    |   23 -
 .../app/modules/form/field/field.directive.js   |   44 -
 .../main/js/app/modules/form/field/field.jade   |   27 -
 .../field/form-control-feedback.directive.js    |   40 -
 .../form/field/input/autofocus.directive.js     |   30 -
 .../form/field/input/checkbox.directive.js      |   66 -
 .../app/modules/form/field/input/checkbox.jade  |   30 -
 .../form/field/input/datalist.directive.js      |  122 -
 .../app/modules/form/field/input/datalist.jade  |   51 -
 .../form/field/input/number.directive.js        |   76 -
 .../js/app/modules/form/field/input/number.jade |   50 -
 .../js/app/modules/form/field/input/text.css    |   41 -
 .../modules/form/field/input/text.directive.js  |  126 -
 .../js/app/modules/form/field/input/text.jade   |   48 -
 .../app/modules/form/field/label.directive.js   |   47 -
 .../app/modules/form/field/tooltip.directive.js |   49 -
 .../js/app/modules/form/field/up.directive.js   |   44 -
 .../src/main/js/app/modules/form/form.module.js |  101 -
 .../js/app/modules/form/group/add.directive.js  |   40 -
 .../app/modules/form/group/group.directive.js   |   81 -
 .../main/js/app/modules/form/group/group.jade   |   21 -
 .../app/modules/form/group/table.directive.js   |   29 -
 .../main/js/app/modules/form/group/table.jade   |   17 -
 .../app/modules/form/group/tooltip.directive.js |   40 -
 .../app/modules/form/panel/chevron.directive.js |   53 -
 .../app/modules/form/panel/panel.directive.js   |   37 -
 .../app/modules/form/panel/revert.directive.js  |   53 -
 .../form/validator/ipaddress.directive.js       |   86 -
 .../validator/java-built-in-class.directive.js  |   31 -
 .../form/validator/java-identifier.directive.js |   31 -
 .../form/validator/java-keywords.directive.js   |   42 -
 .../validator/java-package-name.directive.js    |   31 -
 .../java-package-specified.directive.js         |   34 -
 .../form/validator/property-unique.directive.js |   47 -
 .../property-value-specified.directive.js       |   31 -
 .../modules/form/validator/unique.directive.js  |   49 -
 .../getting-started/GettingStarted.provider.js  |  112 -
 .../src/main/js/app/modules/loading/loading.css |   73 -
 .../js/app/modules/loading/loading.directive.js |   51 -
 .../main/js/app/modules/loading/loading.jade    |   23 -
 .../js/app/modules/loading/loading.module.js    |   26 -
 .../js/app/modules/loading/loading.service.js   |   48 -
 .../js/app/modules/navbar/Navbar.provider.js    |   28 -
 .../js/app/modules/navbar/Userbar.provider.js   |   28 -
 .../js/app/modules/navbar/navbar.directive.js   |   30 -
 .../main/js/app/modules/navbar/navbar.module.js |   33 -
 .../js/app/modules/navbar/userbar.directive.js  |   48 -
 .../query-notebooks/query-notebooks.module.js   |  115 -
 .../src/main/js/app/modules/socket.module.js    |   41 -
 .../main/js/app/modules/states/admin.state.js   |   34 -
 .../app/modules/states/configuration.state.js   |  226 --
 .../caches/concurrency.directive.js             |   27 -
 .../configuration/caches/concurrency.jade       |   65 -
 .../configuration/caches/general.directive.js   |   27 -
 .../states/configuration/caches/general.jade    |   65 -
 .../configuration/caches/memory.directive.js    |   27 -
 .../states/configuration/caches/memory.jade     |   88 -
 .../configuration/caches/query.directive.js     |   27 -
 .../states/configuration/caches/query.jade      |   93 -
 .../configuration/caches/rebalance.directive.js |   27 -
 .../states/configuration/caches/rebalance.jade  |   65 -
 .../caches/server-near-cache.directive.js       |   27 -
 .../configuration/caches/server-near-cache.jade |   45 -
 .../caches/statistics.directive.js              |   27 -
 .../states/configuration/caches/statistics.jade |   37 -
 .../configuration/caches/store.directive.js     |   27 -
 .../states/configuration/caches/store.jade      |  271 --
 .../configuration/clusters/atomic.directive.js  |   27 -
 .../states/configuration/clusters/atomic.jade   |   53 -
 .../clusters/attributes.directive.js            |   27 -
 .../configuration/clusters/attributes.jade      |   58 -
 .../configuration/clusters/binary.directive.js  |   27 -
 .../states/configuration/clusters/binary.jade   |  100 -
 .../clusters/collision.directive.js             |   27 -
 .../configuration/clusters/collision.jade       |   60 -
 .../clusters/collision/custom.directive.js      |   27 -
 .../clusters/collision/custom.jade              |   24 -
 .../clusters/collision/fifo-queue.directive.js  |   27 -
 .../clusters/collision/fifo-queue.jade          |   28 -
 .../collision/job-stealing.directive.js         |   27 -
 .../clusters/collision/job-stealing.jade        |   64 -
 .../collision/priority-queue.directive.js       |   27 -
 .../clusters/collision/priority-queue.jade      |   43 -
 .../clusters/communication.directive.js         |   27 -
 .../configuration/clusters/communication.jade   |   96 -
 .../clusters/connector.directive.js             |   27 -
 .../configuration/clusters/connector.jade       |  103 -
 .../clusters/deployment.directive.js            |   27 -
 .../configuration/clusters/deployment.jade      |  119 -
 .../clusters/discovery.directive.js             |   27 -
 .../configuration/clusters/discovery.jade       |   83 -
 .../configuration/clusters/events.directive.js  |   27 -
 .../states/configuration/clusters/events.jade   |   37 -
 .../clusters/failover.directive.js              |   27 -
 .../states/configuration/clusters/failover.jade |   82 -
 .../configuration/clusters/general.directive.js |   27 -
 .../states/configuration/clusters/general.jade  |   68 -
 .../general/discovery/cloud.directive.js        |   27 -
 .../clusters/general/discovery/cloud.jade       |  127 -
 .../general/discovery/google.directive.js       |   27 -
 .../clusters/general/discovery/google.jade      |   38 -
 .../general/discovery/jdbc.directive.js         |   27 -
 .../clusters/general/discovery/jdbc.jade        |   24 -
 .../general/discovery/multicast.directive.js    |   27 -
 .../clusters/general/discovery/multicast.jade   |  109 -
 .../clusters/general/discovery/s3.directive.js  |   27 -
 .../clusters/general/discovery/s3.jade          |   27 -
 .../general/discovery/shared.directive.js       |   27 -
 .../clusters/general/discovery/shared.jade      |   23 -
 .../clusters/general/discovery/vm.directive.js  |   27 -
 .../clusters/general/discovery/vm.jade          |   90 -
 .../general/discovery/zookeeper.directive.js    |   27 -
 .../clusters/general/discovery/zookeeper.jade   |   74 -
 .../bounded-exponential-backoff.directive.js    |   27 -
 .../bounded-exponential-backoff.jade            |   27 -
 .../zookeeper/retrypolicy/custom.directive.js   |   27 -
 .../discovery/zookeeper/retrypolicy/custom.jade |   24 -
 .../exponential-backoff.directive.js            |   27 -
 .../retrypolicy/exponential-backoff.jade        |   27 -
 .../zookeeper/retrypolicy/forever.directive.js  |   27 -
 .../zookeeper/retrypolicy/forever.jade          |   22 -
 .../zookeeper/retrypolicy/n-times.directive.js  |   27 -
 .../zookeeper/retrypolicy/n-times.jade          |   25 -
 .../zookeeper/retrypolicy/one-time.directive.js |   27 -
 .../zookeeper/retrypolicy/one-time.jade         |   23 -
 .../retrypolicy/until-elapsed.directive.js      |   27 -
 .../zookeeper/retrypolicy/until-elapsed.jade    |   25 -
 .../configuration/clusters/igfs.directive.js    |   27 -
 .../states/configuration/clusters/igfs.jade     |   37 -
 .../configuration/clusters/logger.directive.js  |   27 -
 .../states/configuration/clusters/logger.jade   |   65 -
 .../clusters/logger/custom.directive.js         |   27 -
 .../configuration/clusters/logger/custom.jade   |   24 -
 .../clusters/logger/log4j.directive.js          |   27 -
 .../configuration/clusters/logger/log4j.jade    |   49 -
 .../clusters/logger/log4j2.directive.js         |   27 -
 .../configuration/clusters/logger/log4j2.jade   |   38 -
 .../clusters/marshaller.directive.js            |   27 -
 .../configuration/clusters/marshaller.jade      |   69 -
 .../configuration/clusters/metrics.directive.js |   27 -
 .../states/configuration/clusters/metrics.jade  |   50 -
 .../configuration/clusters/ssl.directive.js     |   27 -
 .../states/configuration/clusters/ssl.jade      |  108 -
 .../configuration/clusters/swap.directive.js    |   27 -
 .../states/configuration/clusters/swap.jade     |   67 -
 .../configuration/clusters/thread.directive.js  |   27 -
 .../states/configuration/clusters/thread.jade   |   48 -
 .../configuration/clusters/time.directive.js    |   27 -
 .../states/configuration/clusters/time.jade     |   47 -
 .../clusters/transactions.directive.js          |   27 -
 .../configuration/clusters/transactions.jade    |   59 -
 .../configuration/domains/general.directive.js  |   27 -
 .../states/configuration/domains/general.jade   |   46 -
 .../configuration/domains/query.directive.js    |   27 -
 .../states/configuration/domains/query.jade     |  169 -
 .../configuration/domains/store.directive.js    |   27 -
 .../states/configuration/domains/store.jade     |  126 -
 .../states/configuration/igfs/dual.directive.js |   27 -
 .../modules/states/configuration/igfs/dual.jade |   42 -
 .../igfs/fragmentizer.directive.js              |   27 -
 .../states/configuration/igfs/fragmentizer.jade |   43 -
 .../configuration/igfs/general.directive.js     |   27 -
 .../states/configuration/igfs/general.jade      |   53 -
 .../states/configuration/igfs/ipc.directive.js  |   27 -
 .../modules/states/configuration/igfs/ipc.jade  |   57 -
 .../states/configuration/igfs/misc.directive.js |   27 -
 .../modules/states/configuration/igfs/misc.jade |  108 -
 .../configuration/igfs/secondary.directive.js   |   27 -
 .../states/configuration/igfs/secondary.jade    |   44 -
 .../configuration/preview-panel.directive.js    |  239 --
 .../summary/summary-tabs.directive.js           |   50 -
 .../configuration/summary/summary.controller.js |  359 --
 .../configuration/summary/summary.resource.js   |   40 -
 .../main/js/app/modules/states/logout.state.js  |   36 -
 .../js/app/modules/states/password.state.js     |   46 -
 .../main/js/app/modules/states/profile.state.js |   34 -
 .../main/js/app/modules/states/signin.state.js  |   53 -
 .../src/main/js/app/modules/states/sql.state.js |   46 -
 .../main/js/app/modules/user/Auth.service.js    |   76 -
 .../main/js/app/modules/user/User.service.js    |   65 -
 .../src/main/js/app/modules/user/user.module.js |   28 -
 .../main/js/app/services/ChartColors.service.js |   22 -
 .../src/main/js/app/services/Clone.service.js   |   64 -
 .../src/main/js/app/services/Confirm.service.js |   70 -
 .../js/app/services/ConfirmBatch.service.js     |   92 -
 .../js/app/services/CopyToClipboard.service.js  |   50 -
 .../main/js/app/services/Countries.service.js   |   31 -
 .../src/main/js/app/services/Focus.service.js   |   33 -
 .../main/js/app/services/InetAddress.service.js |   53 -
 .../main/js/app/services/JavaTypes.service.js   |   84 -
 .../main/js/app/services/LegacyTable.service.js |  205 -
 .../main/js/app/services/LegacyUtils.service.js |  948 -----
 .../main/js/app/services/Messages.service.js    |   63 -
 .../js/app/services/ModelNormalizer.service.js  |   59 -
 .../app/services/UnsavedChangesGuard.service.js |   38 -
 modules/web-console/src/main/js/app/vendor.js   |   54 -
 .../src/main/js/controllers/admin-controller.js |   91 -
 .../main/js/controllers/caches-controller.js    |  470 ---
 .../main/js/controllers/clusters-controller.js  |  626 ----
 .../main/js/controllers/domains-controller.js   | 1746 ---------
 .../src/main/js/controllers/igfs-controller.js  |  401 --
 .../main/js/controllers/profile-controller.js   |   91 -
 .../src/main/js/controllers/sql-controller.js   | 1588 --------
 .../src/main/js/generator/generator-common.js   |  611 ---
 .../src/main/js/generator/generator-java.js     | 3404 -----------------
 .../src/main/js/generator/generator-optional.js |   25 -
 .../main/js/generator/generator-properties.js   |  150 -
 .../src/main/js/generator/generator-readme.js   |   85 -
 .../src/main/js/generator/generator-xml.js      | 1978 ----------
 .../src/main/js/gulpfile.babel.js/index.js      |   26 -
 .../src/main/js/gulpfile.babel.js/paths.js      |   70 -
 .../main/js/gulpfile.babel.js/tasks/build.js    |   21 -
 .../main/js/gulpfile.babel.js/tasks/bundle.js   |   32 -
 .../main/js/gulpfile.babel.js/tasks/clean.js    |   32 -
 .../src/main/js/gulpfile.babel.js/tasks/copy.js |   33 -
 .../gulpfile.babel.js/tasks/ignite-modules.js   |   55 -
 .../src/main/js/gulpfile.babel.js/tasks/jade.js |   40 -
 .../main/js/gulpfile.babel.js/tasks/watch.js    |   31 -
 .../main/js/gulpfile.babel.js/webpack/common.js |  192 -
 .../webpack/environments/development.js         |   64 -
 .../webpack/environments/production.js          |   45 -
 .../main/js/gulpfile.babel.js/webpack/index.js  |   32 -
 .../webpack/plugins/progress.js                 |   82 -
 .../src/main/js/ignite_modules/README.txt       |    6 -
 .../src/main/js/ignite_modules/index.js         |   27 -
 modules/web-console/src/main/js/package.json    |  128 -
 .../web-console/src/main/js/public/favicon.ico  |  Bin 1150 -> 0 bytes
 .../src/main/js/public/images/cache.png         |  Bin 23700 -> 0 bytes
 .../src/main/js/public/images/cluster.png       |  Bin 29376 -> 0 bytes
 .../src/main/js/public/images/docker.png        |  Bin 521 -> 0 bytes
 .../src/main/js/public/images/domains.png       |  Bin 23828 -> 0 bytes
 .../src/main/js/public/images/igfs.png          |  Bin 14307 -> 0 bytes
 .../src/main/js/public/images/ignite-logo.png   |  Bin 1982 -> 0 bytes
 .../main/js/public/images/ignite-logo@2x.png    |  Bin 3325 -> 0 bytes
 .../src/main/js/public/images/ignite-puzzle.png |  Bin 71974 -> 0 bytes
 .../src/main/js/public/images/java.png          |  Bin 170 -> 0 bytes
 .../src/main/js/public/images/pb-ignite.png     |  Bin 3493 -> 0 bytes
 .../src/main/js/public/images/pb-ignite@2x.png  |  Bin 8558 -> 0 bytes
 .../src/main/js/public/images/query-chart.png   |  Bin 16637 -> 0 bytes
 .../main/js/public/images/query-metadata.png    |  Bin 32298 -> 0 bytes
 .../src/main/js/public/images/query-table.png   |  Bin 29189 -> 0 bytes
 .../src/main/js/public/images/summary.png       |  Bin 31997 -> 0 bytes
 .../src/main/js/public/images/xml.png           |  Bin 232 -> 0 bytes
 .../public/stylesheets/_bootstrap-custom.scss   |   65 -
 .../stylesheets/_bootstrap-variables.scss       |  891 -----
 .../stylesheets/_font-awesome-custom.scss       |   32 -
 .../src/main/js/public/stylesheets/style.scss   | 2156 -----------
 .../main/js/public/stylesheets/variables.scss   |   28 -
 modules/web-console/src/main/js/serve.js        |  116 -
 modules/web-console/src/main/js/serve/agent.js  |  714 ----
 .../src/main/js/serve/agent_dists/README.txt    |    7 -
 modules/web-console/src/main/js/serve/app.js    |   42 -
 .../web-console/src/main/js/serve/browser.js    |  378 --
 .../main/js/serve/config/settings.json.sample   |   26 -
 .../web-console/src/main/js/serve/configure.js  |   84 -
 modules/web-console/src/main/js/serve/mail.js   |   75 -
 modules/web-console/src/main/js/serve/mongo.js  |  676 ----
 .../src/main/js/serve/routes/admin.js           |  126 -
 .../src/main/js/serve/routes/agent.js           |   81 -
 .../src/main/js/serve/routes/caches.js          |  132 -
 .../src/main/js/serve/routes/clusters.js        |  146 -
 .../src/main/js/serve/routes/demo.js            |  135 -
 .../src/main/js/serve/routes/demo/caches.json   |   87 -
 .../src/main/js/serve/routes/demo/clusters.json |   50 -
 .../src/main/js/serve/routes/demo/domains.json  |  307 --
 .../src/main/js/serve/routes/demo/igfss.json    |   10 -
 .../src/main/js/serve/routes/domains.js         |  195 -
 .../src/main/js/serve/routes/igfs.js            |  122 -
 .../src/main/js/serve/routes/notebooks.js       |  121 -
 .../src/main/js/serve/routes/profile.js         |  102 -
 .../src/main/js/serve/routes/public.js          |  235 --
 .../src/main/js/serve/routes/routes.js          |  103 -
 .../web-console/src/main/js/serve/settings.js   |   84 -
 modules/web-console/src/main/js/views/base.jade |   22 -
 .../src/main/js/views/configuration/caches.jade |   52 -
 .../main/js/views/configuration/clusters.jade   |   64 -
 .../js/views/configuration/domains-import.jade  |  211 --
 .../main/js/views/configuration/domains.jade    |   66 -
 .../src/main/js/views/configuration/igfs.jade   |   51 -
 .../main/js/views/configuration/sidebar.jade    |   29 -
 .../summary-project-structure.jade              |   27 -
 .../js/views/configuration/summary-tabs.jade    |   25 -
 .../main/js/views/configuration/summary.jade    |  152 -
 .../src/main/js/views/includes/footer.jade      |   23 -
 .../src/main/js/views/includes/header.jade      |   51 -
 .../web-console/src/main/js/views/index.jade    |   48 -
 .../web-console/src/main/js/views/reset.jade    |   48 -
 .../src/main/js/views/settings/admin.jade       |   76 -
 .../src/main/js/views/settings/profile.jade     |   76 -
 .../web-console/src/main/js/views/signin.jade   |  163 -
 .../src/main/js/views/sql/cache-metadata.jade   |   40 -
 .../src/main/js/views/sql/chart-settings.jade   |   40 -
 .../src/main/js/views/sql/notebook-new.jade     |   31 -
 .../src/main/js/views/sql/paragraph-rate.jade   |   31 -
 .../web-console/src/main/js/views/sql/sql.jade  |  201 -
 .../main/js/views/templates/agent-download.jade |   48 -
 .../src/main/js/views/templates/alert.jade      |   21 -
 .../main/js/views/templates/batch-confirm.jade  |   32 -
 .../src/main/js/views/templates/clone.jade      |   31 -
 .../src/main/js/views/templates/confirm.jade    |   31 -
 .../src/main/js/views/templates/demo-info.jade  |   45 -
 .../src/main/js/views/templates/dropdown.jade   |   21 -
 .../js/views/templates/getting-started.jade     |   32 -
 .../src/main/js/views/templates/message.jade    |   26 -
 .../src/main/js/views/templates/pagination.jade |   32 -
 .../src/main/js/views/templates/select.jade     |   26 -
 .../js/views/templates/validation-error.jade    |   25 -
 modules/web-console/src/test/js/routes/agent.js |   94 -
 modules/web-console/web-agent/.gitignore        |    2 +
 modules/web-console/web-agent/README.txt        |   88 +
 .../web-agent/assembly/release-web-agent.xml    |   66 +
 .../web-agent/bin/ignite-web-agent.bat          |   70 +
 .../web-agent/bin/ignite-web-agent.sh           |   87 +
 modules/web-console/web-agent/demo/README.txt   |    4 +
 modules/web-console/web-agent/demo/db-init.sql  |  102 +
 .../web-agent/jdbc-drivers/README.txt           |   10 +
 modules/web-console/web-agent/logs/README.txt   |    5 +
 modules/web-console/web-agent/pom.xml           |  199 +
 .../console/agent/AgentConfiguration.java       |  268 ++
 .../ignite/console/agent/AgentLauncher.java     |  344 ++
 .../apache/ignite/console/agent/AgentUtils.java |  111 +
 .../console/agent/handlers/AbstractHandler.java |  110 +
 .../console/agent/handlers/DatabaseHandler.java |  298 ++
 .../console/agent/handlers/RestHandler.java     |  276 ++
 .../ignite/console/demo/AgentClusterDemo.java   |  641 ++++
 .../ignite/console/demo/AgentMetadataDemo.java  |   92 +
 .../apache/ignite/console/demo/model/Car.java   |  152 +
 .../ignite/console/demo/model/Country.java      |  152 +
 .../ignite/console/demo/model/Department.java   |  152 +
 .../ignite/console/demo/model/Employee.java     |  356 ++
 .../ignite/console/demo/model/Parking.java      |  152 +
 .../src/main/resources/log4j.properties         |   53 +
 parent/pom.xml                                  |    4 +-
 pom.xml                                         |    2 +-
 882 files changed, 46323 insertions(+), 41775 deletions(-)
----------------------------------------------------------------------



[7/7] ignite git commit: ignite-comm-opts1

Posted by sb...@apache.org.
ignite-comm-opts1


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

Branch: refs/heads/ignite-comm-opts1
Commit: 38965d3d3e83831bf526f34a6cc0a6fe4289e524
Parents: c81e0d9
Author: sboikov <sb...@gridgain.com>
Authored: Fri Sep 9 17:01:25 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Sep 9 17:01:25 2016 +0300

----------------------------------------------------------------------
 .../managers/communication/GridIoManager.java   |  40 +--
 .../util/nio/GridNioRecoveryDescriptor.java     |   1 +
 .../ignite/internal/util/nio/GridNioServer.java |  14 +-
 .../internal/util/nio/GridNioSession.java       |  14 +-
 .../internal/util/nio/GridNioSessionImpl.java   |  14 +-
 .../util/nio/GridSelectorNioSessionImpl.java    |  44 ++-
 .../communication/tcp/TcpCommunicationSpi.java  | 358 +++++++++++++------
 .../nio/impl/GridNioFilterChainSelfTest.java    |  14 +-
 ...cpCommunicationSpiMultithreadedSelfTest.java |   2 +-
 ...dTcpCommunicationSpiRecoveryAckSelfTest.java |   2 +-
 ...CommunicationRecoveryAckClosureSelfTest.java |   2 +-
 11 files changed, 340 insertions(+), 165 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index 9e547ca..f869c5a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -529,26 +529,26 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
             }
         }
 
-        Thread t = new Thread(
-            new Runnable() {
-                @Override public void run() {
-                    for (;;) {
-                        try {
-                            Thread.sleep(5000);
-                        }
-                        catch (InterruptedException e) {
-                            e.printStackTrace();
-                        }
-
-                        dumpStats();
-                    }
-                }
-            }
-        );
-
-        t.setDaemon(true);
-
-        t.start();
+//        Thread t = new Thread(
+//            new Runnable() {
+//                @Override public void run() {
+//                    for (;;) {
+//                        try {
+//                            Thread.sleep(5000);
+//                        }
+//                        catch (InterruptedException e) {
+//                            e.printStackTrace();
+//                        }
+//
+//                        dumpStats();
+//                    }
+//                }
+//            }
+//        );
+//
+//        t.setDaemon(true);
+//
+//        t.start();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioRecoveryDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioRecoveryDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioRecoveryDescriptor.java
index 35480ac..bf8e26a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioRecoveryDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioRecoveryDescriptor.java
@@ -31,6 +31,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  * Recovery information for single node.
  */
+@Deprecated // To be splitted into in/out parts when do need maintain backward compatibility.
 public class GridNioRecoveryDescriptor {
     /** Number of acknowledged messages. */
     private long acked;

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index a2449f8..18caea6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -521,7 +521,7 @@ public class GridNioServer<T> {
     public void resend(GridNioSession ses) {
         assert ses instanceof GridSelectorNioSessionImpl;
 
-        GridNioRecoveryDescriptor recoveryDesc = ses.recoveryDescriptor();
+        GridNioRecoveryDescriptor recoveryDesc = ses.outRecoveryDescriptor();
 
         if (recoveryDesc != null && !recoveryDesc.messagesFutures().isEmpty()) {
             Deque<GridNioFuture<?>> futs = recoveryDesc.messagesFutures();
@@ -695,7 +695,7 @@ public class GridNioServer<T> {
         assert req.operation() == NioOperation.REGISTER;
         assert req.socketChannel() != null;
 
-        U.debug("Req registration: " + req);
+        //U.debug("Req registration: " + req);
 
         int balanceIdx = req.accepted() ? readBalanceIdx.getAndAdd(2) : writeBalanceIdx.getAndAdd(2);
 
@@ -1531,7 +1531,8 @@ public class GridNioServer<T> {
                                         .append("rmtAddr=").append(ses.remoteAddress())
                                         .append(", locAddr=").append(ses.localAddress());
 
-                                    GridNioRecoveryDescriptor desc = ses.recoveryDescriptor();
+                                    // TODO
+                                    GridNioRecoveryDescriptor desc = ses.outRecoveryDescriptor();
 
                                     if (desc != null) {
                                         sb.append(", msgsSent=").append(desc.sent())
@@ -1900,7 +1901,7 @@ public class GridNioServer<T> {
                 // Since ses is in closed state, no write requests will be added.
                 NioOperationFuture<?> fut = ses.removeMeta(NIO_OPERATION.ordinal());
 
-                GridNioRecoveryDescriptor recovery = ses.recoveryDescriptor();
+                GridNioRecoveryDescriptor recovery = ses.outRecoveryDescriptor();
 
                 if (recovery != null) {
                     try {
@@ -1922,6 +1923,11 @@ public class GridNioServer<T> {
                         fut.connectionClosed();
                 }
 
+                GridNioRecoveryDescriptor inRecovery = ses.inRecoveryDescriptor();
+
+                if (inRecovery != null && inRecovery != recovery)
+                    inRecovery.release();
+
                 try {
                     filterChain.onSessionClosed(ses);
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSession.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSession.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSession.java
index e4a7225..1e427d8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSession.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSession.java
@@ -158,10 +158,20 @@ public interface GridNioSession {
     /**
      * @param recoveryDesc Recovery descriptor.
      */
-    public void recoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc);
+    public void outRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc);
+
+    /**
+     * @param recoveryDesc Recovery descriptor.
+     */
+    public void inRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc);
+
+    /**
+     * @return Recovery descriptor if recovery is supported, {@code null otherwise.}
+     */
+    @Nullable public GridNioRecoveryDescriptor outRecoveryDescriptor();
 
     /**
      * @return Recovery descriptor if recovery is supported, {@code null otherwise.}
      */
-    @Nullable public GridNioRecoveryDescriptor recoveryDescriptor();
+    @Nullable public GridNioRecoveryDescriptor inRecoveryDescriptor();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
index 5d023ca..3f5d367 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
@@ -346,12 +346,22 @@ public class GridNioSessionImpl implements GridNioSession {
     }
 
     /** {@inheritDoc} */
-    @Override public void recoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
+    @Override public void outRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
         throw new UnsupportedOperationException();
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public GridNioRecoveryDescriptor recoveryDescriptor() {
+    @Nullable @Override public GridNioRecoveryDescriptor outRecoveryDescriptor() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void inRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
+        throw new UnsupportedOperationException();
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public GridNioRecoveryDescriptor inRecoveryDescriptor() {
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
index d989ed6..8fddd10 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
@@ -59,8 +59,11 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
     /** Read buffer. */
     private ByteBuffer readBuf;
 
-    /** Recovery data. */
-    private GridNioRecoveryDescriptor recovery;
+    /** Incoming recovery data. */
+    private GridNioRecoveryDescriptor inRecovery;
+
+    /** Outgoing recovery data. */
+    private GridNioRecoveryDescriptor outRecovery;
 
     /** Logger. */
     private final IgniteLogger log;
@@ -232,17 +235,17 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
             if (sem != null && !last.messageThread())
                 sem.release();
 
-            if (recovery != null) {
-                if (!recovery.add(last)) {
+            if (outRecovery != null) {
+                if (!outRecovery.add(last)) {
                     LT.warn(log, null, "Unacknowledged messages queue size overflow, will attempt to reconnect " +
                         "[remoteAddr=" + remoteAddress() +
-                        ", queueLimit=" + recovery.queueLimit() + ']');
+                        ", queueLimit=" + outRecovery.queueLimit() + ']');
 
                     if (log.isDebugEnabled())
                         log.debug("Unacknowledged messages queue size overflow, will attempt to reconnect " +
                             "[remoteAddr=" + remoteAddress() +
-                            ", queueSize=" + recovery.messagesFutures().size() +
-                            ", queueLimit=" + recovery.queueLimit() + ']');
+                            ", queueSize=" + outRecovery.messagesFutures().size() +
+                            ", queueLimit=" + outRecovery.queueLimit() + ']');
 
                     close();
                 }
@@ -279,24 +282,35 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
     }
 
     /** {@inheritDoc} */
-    @Override public void recoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
+    @Override public void outRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
+        assert recoveryDesc != null;
+
+        outRecovery = recoveryDesc;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public GridNioRecoveryDescriptor outRecoveryDescriptor() {
+        return outRecovery;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void inRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
         assert recoveryDesc != null;
 
-        recovery = recoveryDesc;
+        inRecovery = recoveryDesc;
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public GridNioRecoveryDescriptor recoveryDescriptor() {
-        return recovery;
+    @Nullable @Override public GridNioRecoveryDescriptor inRecoveryDescriptor() {
+        return inRecovery;
     }
 
     /** {@inheritDoc} */
     @Override public <T> T addMeta(int key, @Nullable T val) {
-        if (val instanceof GridNioRecoveryDescriptor) {
-            recovery = (GridNioRecoveryDescriptor)val;
+        if (!accepted() && val instanceof GridNioRecoveryDescriptor) {
+            outRecovery = (GridNioRecoveryDescriptor)val;
 
-            if (!accepted())
-                recovery.connected();
+            outRecovery.connected();
 
             return null;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index 3292412..97c75c4 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -102,6 +102,7 @@ import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.lang.IgniteProductVersion;
 import org.apache.ignite.lang.IgniteRunnable;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.extensions.communication.Message;
@@ -236,6 +237,9 @@ import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 @IgniteSpiConsistencyChecked(optional = false)
 public class TcpCommunicationSpi extends IgniteSpiAdapter
     implements CommunicationSpi<Message>, TcpCommunicationSpiMBean {
+    /** */
+    private static final IgniteProductVersion TWO_CONN_SINCE_VER = IgniteProductVersion.fromString("1.8.0");
+
     /** IPC error message. */
     public static final String OUT_OF_RESOURCES_TCP_MSG = "Failed to allocate shared memory segment " +
         "(switching to TCP, may be slower).";
@@ -365,7 +369,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                     if (!stopping) {
                         boolean reconnect = false;
 
-                        GridNioRecoveryDescriptor recoveryData = ses.recoveryDescriptor();
+                        GridNioRecoveryDescriptor recoveryData = ses.outRecoveryDescriptor();
 
                         if (recoveryData != null) {
                             if (recoveryData.nodeAlive(getSpiContext().node(id))) {
@@ -427,105 +431,116 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                     return;
                 }
 
-//                ClusterNode locNode = getSpiContext().localNode();
-//
-//                if (ses.remoteAddress() == null)
-//                    return;
-//
-//                GridCommunicationClient oldClient = clients.get(sndId);
-//
-                boolean hasShmemClient = false;
-//
-//                if (oldClient != null) {
-//                    if (oldClient instanceof GridTcpNioCommunicationClient) {
-//                        if (log.isDebugEnabled())
-//                            log.debug("Received incoming connection when already connected " +
-//                                    "to this node, rejecting [locNode=" + locNode.id() +
-//                                    ", rmtNode=" + sndId + ']');
-//
-//                        ses.send(new RecoveryLastReceivedMessage(-1));
-//
-//                        return;
-//                    }
-//                    else {
-//                        assert oldClient instanceof GridShmemCommunicationClient;
-//
-//                        hasShmemClient = true;
-//                    }
-//                }
-//
-                GridFutureAdapter<GridCommunicationClient> fut = new GridFutureAdapter<>();
-//
-//                GridFutureAdapter<GridCommunicationClient> oldFut = clientFuts.putIfAbsent(sndId, fut);
-//
+                ClusterNode locNode = getSpiContext().localNode();
+
+                if (ses.remoteAddress() == null)
+                    return;
+
                 assert msg instanceof HandshakeMessage : msg;
 
                 HandshakeMessage msg0 = (HandshakeMessage)msg;
-//
-                final GridNioRecoveryDescriptor recoveryDesc = recoveryDescriptor(rmtNode);
-//
-//                if (oldFut == null) {
-//                    oldClient = clients.get(sndId);
-//
-//                    if (oldClient != null) {
-//                        if (oldClient instanceof GridTcpNioCommunicationClient) {
-//                            if (log.isDebugEnabled())
-//                                log.debug("Received incoming connection when already connected " +
-//                                        "to this node, rejecting [locNode=" + locNode.id() +
-//                                        ", rmtNode=" + sndId + ']');
-//
-//                            ses.send(new RecoveryLastReceivedMessage(-1));
-//
-//                            fut.onDone(oldClient);
-//
-//                            return;
-//                        }
-//                        else {
-//                            assert oldClient instanceof GridShmemCommunicationClient;
-//
-//                            hasShmemClient = true;
-//                        }
-//                    }
-//
-//                    boolean reserved = recoveryDesc.tryReserve(msg0.connectCount(),
-//                            new ConnectClosure(ses, recoveryDesc, rmtNode, msg0, !hasShmemClient, fut));
-//
-//                    if (log.isDebugEnabled())
-//                        log.debug("Received incoming connection from remote node " +
-//                                "[rmtNode=" + rmtNode.id() + ", reserved=" + reserved + ']');
-//
-//                    if (reserved) {
-//                        try {
-//                            GridTcpNioCommunicationClient client =
-//                                    connected(recoveryDesc, ses, rmtNode, msg0.received(), true, !hasShmemClient);
-//
-//                            fut.onDone(client);
-//                        }
-//                        finally {
-//                            clientFuts.remove(rmtNode.id(), fut);
-//                        }
-//                    }
-//                }
-//                else {
-//                    if (oldFut instanceof ConnectFuture && locNode.order() < rmtNode.order()) {
-//                        if (log.isDebugEnabled()) {
-//                            log.debug("Received incoming connection from remote node while " +
-//                                    "connecting to this node, rejecting [locNode=" + locNode.id() +
-//                                    ", locNodeOrder=" + locNode.order() + ", rmtNode=" + rmtNode.id() +
-//                                    ", rmtNodeOrder=" + rmtNode.order() + ']');
-//                        }
-//
-//                        ses.send(new RecoveryLastReceivedMessage(-1));
-//                    }
-//                    else {
-                        // The code below causes a race condition between shmem and TCP (see IGNITE-1294)
+
+                if (twoConnections(rmtNode)) {
+                    final GridNioRecoveryDescriptor recoveryDesc = inRecoveryDescriptor(rmtNode);
+
+                    boolean reserve = recoveryDesc.tryReserve(msg0.connectCount(),
+                        new ConnectClosureNew(ses, recoveryDesc, rmtNode, msg0));
+
+                    if (reserve)
+                        connectedNew(recoveryDesc, ses, msg0.received(), true);
+                }
+                else {
+                    GridCommunicationClient oldClient = clients.get(sndId);
+
+                    boolean hasShmemClient = false;
+
+                    if (oldClient != null) {
+                        if (oldClient instanceof GridTcpNioCommunicationClient) {
+                            if (log.isDebugEnabled())
+                                log.debug("Received incoming connection when already connected " +
+                                    "to this node, rejecting [locNode=" + locNode.id() +
+                                    ", rmtNode=" + sndId + ']');
+
+                            ses.send(new RecoveryLastReceivedMessage(-1));
+
+                            return;
+                        }
+                        else {
+                            assert oldClient instanceof GridShmemCommunicationClient;
+
+                            hasShmemClient = true;
+                        }
+                    }
+
+                    GridFutureAdapter<GridCommunicationClient> fut = new GridFutureAdapter<>();
+
+                    GridFutureAdapter<GridCommunicationClient> oldFut = clientFuts.putIfAbsent(sndId, fut);
+
+                    final GridNioRecoveryDescriptor recoveryDesc = inRecoveryDescriptor(rmtNode);
+
+                    if (oldFut == null) {
+                        oldClient = clients.get(sndId);
+
+                        if (oldClient != null) {
+                            if (oldClient instanceof GridTcpNioCommunicationClient) {
+                                if (log.isDebugEnabled())
+                                    log.debug("Received incoming connection when already connected " +
+                                        "to this node, rejecting [locNode=" + locNode.id() +
+                                        ", rmtNode=" + sndId + ']');
+
+                                ses.send(new RecoveryLastReceivedMessage(-1));
+
+                                fut.onDone(oldClient);
+
+                                return;
+                            }
+                            else {
+                                assert oldClient instanceof GridShmemCommunicationClient;
+
+                                hasShmemClient = true;
+                            }
+                        }
+
                         boolean reserved = recoveryDesc.tryReserve(msg0.connectCount(),
+                            new ConnectClosure(ses, recoveryDesc, rmtNode, msg0, !hasShmemClient, fut));
+
+                        if (log.isDebugEnabled())
+                            log.debug("Received incoming connection from remote node " +
+                                "[rmtNode=" + rmtNode.id() + ", reserved=" + reserved + ']');
+
+                        if (reserved) {
+                            try {
+                                GridTcpNioCommunicationClient client =
+                                    connected(recoveryDesc, ses, rmtNode, msg0.received(), true, !hasShmemClient);
+
+                                fut.onDone(client);
+                            }
+                            finally {
+                                clientFuts.remove(rmtNode.id(), fut);
+                            }
+                        }
+                    }
+                    else {
+                        if (oldFut instanceof ConnectFuture && locNode.order() < rmtNode.order()) {
+                            if (log.isDebugEnabled()) {
+                                log.debug("Received incoming connection from remote node while " +
+                                    "connecting to this node, rejecting [locNode=" + locNode.id() +
+                                    ", locNodeOrder=" + locNode.order() + ", rmtNode=" + rmtNode.id() +
+                                    ", rmtNodeOrder=" + rmtNode.order() + ']');
+                            }
+
+                            ses.send(new RecoveryLastReceivedMessage(-1));
+                        }
+                        else {
+                            // The code below causes a race condition between shmem and TCP (see IGNITE-1294)
+                            boolean reserved = recoveryDesc.tryReserve(msg0.connectCount(),
                                 new ConnectClosure(ses, recoveryDesc, rmtNode, msg0, !hasShmemClient, fut));
 
-                        if (reserved)
-                            connected(recoveryDesc, ses, rmtNode, msg0.received(), true, false);
-//                    }
-//                }
+                            if (reserved)
+                                connected(recoveryDesc, ses, rmtNode, msg0.received(), true, !hasShmemClient);
+                        }
+                    }
+                }
             }
 
             @Override public void onMessage(GridNioSession ses, Message msg) {
@@ -553,10 +568,10 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                 else {
                     rcvdMsgsCnt.increment();
 
-                    GridNioRecoveryDescriptor recovery = ses.recoveryDescriptor();
+                    if (msg instanceof RecoveryLastReceivedMessage) {
+                        GridNioRecoveryDescriptor recovery = ses.outRecoveryDescriptor();
 
-                    if (recovery != null) {
-                        if (msg instanceof RecoveryLastReceivedMessage) {
+                        if (recovery != null) {
                             RecoveryLastReceivedMessage msg0 = (RecoveryLastReceivedMessage)msg;
 
                             if (log.isDebugEnabled())
@@ -567,7 +582,11 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
 
                             return;
                         }
-                        else {
+                    }
+                    else {
+                        GridNioRecoveryDescriptor recovery = ses.inRecoveryDescriptor();
+
+                        if (recovery != null) {
                             long rcvCnt = recovery.onReceived();
 
                             if (rcvCnt % ackSndThreshold == 0) {
@@ -623,7 +642,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                 boolean createClient) {
                 recovery.onHandshake(rcvCnt);
 
-                ses.recoveryDescriptor(recovery);
+                ses.inRecoveryDescriptor(recovery);
 
                 nioSrvr.resend(ses);
 
@@ -647,6 +666,87 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
             }
 
             /**
+             * @param recovery Recovery descriptor.
+             * @param ses Session.
+             * @param rcvCnt Number of received messages..
+             * @param sndRes If {@code true} sends response for recovery handshake.
+             */
+            private void connectedNew(
+                GridNioRecoveryDescriptor recovery,
+                GridNioSession ses,
+                long rcvCnt,
+                boolean sndRes) {
+                recovery.onHandshake(rcvCnt);
+
+                ses.inRecoveryDescriptor(recovery);
+
+                if (sndRes)
+                    nioSrvr.sendSystem(ses, new RecoveryLastReceivedMessage(recovery.received()));
+
+                recovery.connected();
+            }
+
+            /**
+             *
+             */
+            class ConnectClosureNew implements IgniteInClosure<Boolean> {
+                /** */
+                private static final long serialVersionUID = 0L;
+
+                /** */
+                private final GridNioSession ses;
+
+                /** */
+                private final GridNioRecoveryDescriptor recoveryDesc;
+
+                /** */
+                private final ClusterNode rmtNode;
+
+                /** */
+                private final HandshakeMessage msg;
+
+                /**
+                 * @param ses Incoming session.
+                 * @param recoveryDesc Recovery descriptor.
+                 * @param rmtNode Remote node.
+                 * @param msg Handshake message.
+                 */
+                ConnectClosureNew(GridNioSession ses,
+                    GridNioRecoveryDescriptor recoveryDesc,
+                    ClusterNode rmtNode,
+                    HandshakeMessage msg) {
+                    this.ses = ses;
+                    this.recoveryDesc = recoveryDesc;
+                    this.rmtNode = rmtNode;
+                    this.msg = msg;
+                }
+
+                /** {@inheritDoc} */
+                @Override public void apply(Boolean success) {
+                    if (success) {
+                        IgniteInClosure<IgniteInternalFuture<?>> lsnr = new IgniteInClosure<IgniteInternalFuture<?>>() {
+                            @Override public void apply(IgniteInternalFuture<?> msgFut) {
+                                try {
+                                    msgFut.get();
+
+                                    connectedNew(recoveryDesc, ses, msg.received(), false);
+                                }
+                                catch (IgniteCheckedException e) {
+                                    if (log.isDebugEnabled())
+                                        log.debug("Failed to send recovery handshake " +
+                                            "[rmtNode=" + rmtNode.id() + ", err=" + e + ']');
+
+                                    recoveryDesc.release();
+                                }
+                            }
+                        };
+
+                        nioSrvr.sendSystem(ses, new RecoveryLastReceivedMessage(recoveryDesc.received()), lsnr);
+                    }
+                }
+            }
+
+            /**
              *
              */
             @SuppressWarnings("PackageVisibleInnerClass")
@@ -867,6 +967,12 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
     /** */
     private final ConcurrentMap<ClientKey, GridNioRecoveryDescriptor> recoveryDescs = GridConcurrentFactory.newMap();
 
+    /** */
+    private final ConcurrentMap<ClientKey, GridNioRecoveryDescriptor> outRecDescs = GridConcurrentFactory.newMap();
+
+    /** */
+    private final ConcurrentMap<ClientKey, GridNioRecoveryDescriptor> inRecDescs = GridConcurrentFactory.newMap();
+
     /** Discovery listener. */
     private final GridLocalEventListener discoLsnr = new GridLocalEventListener() {
         @Override public void onEvent(Event evt) {
@@ -2364,7 +2470,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                             "(node left topology): " + node);
                     }
 
-                    GridNioRecoveryDescriptor recoveryDesc = recoveryDescriptor(node);
+                    GridNioRecoveryDescriptor recoveryDesc = outRecoveryDescriptor(node);
 
                     if (!recoveryDesc.reserve()) {
                         U.closeQuiet(ch);
@@ -2806,34 +2912,52 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
             client.forceClose();
     }
 
+    private GridNioRecoveryDescriptor outRecoveryDescriptor(ClusterNode node) {
+        if (twoConnections(node))
+            return recoveryDescriptor(outRecDescs, node);
+        else
+            return recoveryDescriptor(recoveryDescs, node);
+    }
+
+    private GridNioRecoveryDescriptor inRecoveryDescriptor(ClusterNode node) {
+        if (twoConnections(node))
+            return recoveryDescriptor(inRecDescs, node);
+        else
+            return recoveryDescriptor(recoveryDescs, node);
+    }
+
+    /**
+     * @param node Node.
+     * @return {@code True} if given node supports two connectios.
+     */
+    private boolean twoConnections(ClusterNode node) {
+        return TWO_CONN_SINCE_VER.compareToIgnoreTimestamp(node.version()) <= 0;
+    }
+
     /**
      * @param node Node.
      * @return Recovery receive data for given node.
      */
-    private GridNioRecoveryDescriptor recoveryDescriptor(ClusterNode node) {
+    private GridNioRecoveryDescriptor recoveryDescriptor(
+        ConcurrentMap<ClientKey, GridNioRecoveryDescriptor> recoveryDescs,
+        ClusterNode node) {
         ClientKey id = new ClientKey(node.id(), node.order());
 
         GridNioRecoveryDescriptor recovery = recoveryDescs.get(id);
 
-//        if (recovery == null) {
-//            int maxSize = Math.max(msgQueueLimit, ackSndThreshold);
-//
-//            int queueLimit = unackedMsgsBufSize != 0 ? unackedMsgsBufSize : (maxSize * 5);
-//
-//            GridNioRecoveryDescriptor old =
-//                recoveryDescs.putIfAbsent(id, recovery = new GridNioRecoveryDescriptor(queueLimit, node, log));
-//
-//            if (old != null)
-//                recovery = old;
-//        }
+        if (recovery == null) {
+            int maxSize = Math.max(msgQueueLimit, ackSndThreshold);
 
-        int maxSize = Math.max(
-            msgQueueLimit,
-            ackSndThreshold);
+            int queueLimit = unackedMsgsBufSize != 0 ? unackedMsgsBufSize : (maxSize * 5);
 
-        int queueLimit = unackedMsgsBufSize != 0 ? unackedMsgsBufSize : (maxSize * 5);
+            GridNioRecoveryDescriptor old =
+                recoveryDescs.putIfAbsent(id, recovery = new GridNioRecoveryDescriptor(queueLimit, node, log));
+
+            if (old != null)
+                recovery = old;
+        }
 
-        return new GridNioRecoveryDescriptor(queueLimit, node, log);
+        return recovery;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/test/java/org/apache/ignite/internal/util/nio/impl/GridNioFilterChainSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/impl/GridNioFilterChainSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/impl/GridNioFilterChainSelfTest.java
index 201fd27..58b91e4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/nio/impl/GridNioFilterChainSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/nio/impl/GridNioFilterChainSelfTest.java
@@ -369,12 +369,22 @@ public class GridNioFilterChainSelfTest extends GridCommonAbstractTest {
         }
 
         /** {@inheritDoc} */
-        @Override public void recoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
+        @Override public void outRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
             // No-op.
         }
 
         /** {@inheritDoc} */
-        @Nullable @Override public GridNioRecoveryDescriptor recoveryDescriptor() {
+        @Nullable @Override public GridNioRecoveryDescriptor outRecoveryDescriptor() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void inRecoveryDescriptor(GridNioRecoveryDescriptor recoveryDesc) {
+            // No-op.
+        }
+
+        /** {@inheritDoc} */
+        @Nullable @Override public GridNioRecoveryDescriptor inRecoveryDescriptor() {
             return null;
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiMultithreadedSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiMultithreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiMultithreadedSelfTest.java
index 7bbf531..f210bec 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiMultithreadedSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiMultithreadedSelfTest.java
@@ -370,7 +370,7 @@ public class GridTcpCommunicationSpiMultithreadedSelfTest extends GridSpiAbstrac
             Collection<? extends GridNioSession> sessions = GridTestUtils.getFieldValue(srv, "sessions");
 
             for (GridNioSession ses : sessions) {
-                final GridNioRecoveryDescriptor snd = ses.recoveryDescriptor();
+                final GridNioRecoveryDescriptor snd = ses.outRecoveryDescriptor();
 
                 if (snd != null) {
                     GridTestUtils.waitForCondition(new GridAbsPredicate() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
index 34872c6..fb2dfd7 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
@@ -173,7 +173,7 @@ public class GridTcpCommunicationSpiRecoveryAckSelfTest<T extends CommunicationS
                     boolean found = false;
 
                     for (GridNioSession ses : sessions) {
-                        final GridNioRecoveryDescriptor recoveryDesc = ses.recoveryDescriptor();
+                        final GridNioRecoveryDescriptor recoveryDesc = ses.outRecoveryDescriptor();
 
                         if (recoveryDesc != null) {
                             found = true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/38965d3d/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
index 25e3611..e153fe2 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
@@ -187,7 +187,7 @@ public class IgniteTcpCommunicationRecoveryAckClosureSelfTest<T extends Communic
                     boolean found = false;
 
                     for (GridNioSession ses : sessions) {
-                        final GridNioRecoveryDescriptor recoveryDesc = ses.recoveryDescriptor();
+                        final GridNioRecoveryDescriptor recoveryDesc = ses.outRecoveryDescriptor();
 
                         if (recoveryDesc != null) {
                             found = true;


[3/7] ignite git commit: IO opts : disabled backpressure control + fair affinity

Posted by sb...@apache.org.
IO opts : disabled backpressure control + fair affinity


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

Branch: refs/heads/ignite-comm-opts1
Commit: 9d3cc2dcfed7d6dbba7a924d6ff9cd31242eda2d
Parents: 24d8cc8
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Mon Sep 5 18:06:03 2016 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Mon Sep 5 18:06:03 2016 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheProcessor.java    |  7 +++--
 .../util/nio/GridSelectorNioSessionImpl.java    |  2 +-
 .../communication/tcp/TcpCommunicationSpi.java  | 32 ++++++++++----------
 .../cache/GridCacheAbstractSelfTest.java        |  7 +++++
 4 files changed, 29 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9d3cc2dc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index e104b87..9690c0c 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -51,6 +51,7 @@ import org.apache.ignite.cache.CacheRebalanceMode;
 import org.apache.ignite.cache.affinity.AffinityFunction;
 import org.apache.ignite.cache.affinity.AffinityFunctionContext;
 import org.apache.ignite.cache.affinity.AffinityNodeAddressHashResolver;
+import org.apache.ignite.cache.affinity.fair.FairAffinityFunction;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.cache.store.CacheStore;
 import org.apache.ignite.cache.store.CacheStoreSessionListener;
@@ -226,11 +227,13 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
         if (cfg.getAffinity() == null) {
             if (cfg.getCacheMode() == PARTITIONED) {
-                RendezvousAffinityFunction aff = new RendezvousAffinityFunction();
+                FairAffinityFunction aff = new FairAffinityFunction();
 
-                aff.setHashIdResolver(new AffinityNodeAddressHashResolver());
+                //aff.setHashIdResolver(new AffinityNodeAddressHashResolver());
 
                 cfg.setAffinity(aff);
+
+                U.debug(log, ">>> Set FAIR affinity for cache: " + cfg.getName());
             }
             else if (cfg.getCacheMode() == REPLICATED) {
                 RendezvousAffinityFunction aff = new RendezvousAffinityFunction(false, 512);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9d3cc2dc/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
index 0ba6af2..487b11a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
@@ -103,7 +103,7 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
 
         this.selectorIdx = selectorIdx;
 
-        sem = sndQueueLimit > 0 ? new Semaphore(sndQueueLimit) : null;
+        sem = null;//sndQueueLimit > 0 ? new Semaphore(sndQueueLimit) : null;
 
         if (writeBuf != null) {
             writeBuf.clear();

http://git-wip-us.apache.org/repos/asf/ignite/blob/9d3cc2dc/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index b2c73d7..d12c6bf 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -583,22 +583,22 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                     }
 
                     IgniteRunnable c;
-
-                    if (msgQueueLimit > 0) {
-                        GridNioMessageTracker tracker = ses.meta(TRACKER_META);
-
-                        if (tracker == null) {
-                            GridNioMessageTracker old = ses.addMeta(TRACKER_META, tracker =
-                                new GridNioMessageTracker(ses, msgQueueLimit));
-
-                            assert old == null;
-                        }
-
-                        tracker.onMessageReceived();
-
-                        c = tracker;
-                    }
-                    else
+//
+//                    if (msgQueueLimit > 0) {
+//                        GridNioMessageTracker tracker = ses.meta(TRACKER_META);
+//
+//                        if (tracker == null) {
+//                            GridNioMessageTracker old = ses.addMeta(TRACKER_META, tracker =
+//                                new GridNioMessageTracker(ses, msgQueueLimit));
+//
+//                            assert old == null;
+//                        }
+//
+//                        tracker.onMessageReceived();
+//
+//                        c = tracker;
+//                    }
+//                    else
                         c = NOOP;
 
                     notifyListener(sndId, msg, c);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9d3cc2dc/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
index af31635..8a3930e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
@@ -48,6 +48,7 @@ import org.apache.ignite.internal.util.typedef.R1;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -217,6 +218,12 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
 
         cfg.setCacheConfiguration(cacheConfiguration(gridName));
 
+        TcpCommunicationSpi comm = new TcpCommunicationSpi();
+
+        comm.setSharedMemoryPort(-1);
+
+        cfg.setCommunicationSpi(comm);
+
         return cfg;
     }
 


[2/7] ignite git commit: IO opts

Posted by sb...@apache.org.
IO opts


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

Branch: refs/heads/ignite-comm-opts1
Commit: 24d8cc8b28542113a19becd79082c7f6924a8f1b
Parents: 06de587
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Mon Sep 5 13:49:42 2016 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Mon Sep 5 13:49:42 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/util/nio/GridNioServer.java |  17 +-
 .../internal/util/nio/GridNioSessionImpl.java   |   4 +-
 .../communication/tcp/TcpCommunicationSpi.java  | 211 ++++++++++---------
 .../ignite/yardstick/IgniteBenchmarkUtils.java  |   5 +-
 4 files changed, 126 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/24d8cc8b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 8cb88b8..c67619e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -44,6 +44,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -151,7 +152,11 @@ public class GridNioServer<T> {
 
     /** Index to select which thread will serve next socket channel. Using round-robin balancing. */
     @GridToStringExclude
-    private int balanceIdx;
+    private final AtomicInteger readBalanceIdx = new AtomicInteger();
+
+    // TODO
+    @GridToStringExclude
+    private final AtomicInteger writeBalanceIdx = new AtomicInteger(1);
 
     /** Tcp no delay flag. */
     private final boolean tcpNoDelay;
@@ -679,12 +684,14 @@ public class GridNioServer<T> {
      * @param req Request to balance.
      */
     private synchronized void offerBalanced(NioOperationFuture req) {
-        clientWorkers.get(balanceIdx).offer(req);
+        assert req.operation() == NioOperation.REGISTER;
+        assert req.socketChannel() != null;
+
+        U.debug("Req registration: " + req);
 
-        balanceIdx++;
+        int balanceIdx = req.accepted() ? readBalanceIdx.getAndAdd(2) : writeBalanceIdx.getAndAdd(2);
 
-        if (balanceIdx == clientWorkers.size())
-            balanceIdx = 0;
+        clientWorkers.get(balanceIdx & (clientWorkers.size() - 1)).offer(req);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/24d8cc8b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
index fbbc448..99a61da 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
@@ -48,8 +48,8 @@ public class GridNioSessionImpl implements GridNioSession {
     /** Sent bytes counter. */
     private volatile long bytesSent;
 
-    private final long[] writesStat = new long[10];
-    private final long[] readsStat = new long[10];
+    private final long[] writesStat = new long[25];
+    private final long[] readsStat = new long[25];
 
     /** Received bytes counter. */
     private volatile long bytesRcvd;

http://git-wip-us.apache.org/repos/asf/ignite/blob/24d8cc8b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index 74ecc45..b2c73d7 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -283,7 +283,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
      * Default count of selectors for TCP server equals to
      * {@code "Math.min(4, Runtime.getRuntime().availableProcessors())"}.
      */
-    public static final int DFLT_SELECTORS_CNT = Math.min(4, Runtime.getRuntime().availableProcessors());
+    public static final int DFLT_SELECTORS_CNT = Runtime.getRuntime().availableProcessors();
 
     /** Node ID meta for session. */
     private static final int NODE_ID_META = GridNioSessionMetaKey.nextUniqueKey();
@@ -427,105 +427,105 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                     return;
                 }
 
-                ClusterNode locNode = getSpiContext().localNode();
-
-                if (ses.remoteAddress() == null)
-                    return;
-
-                GridCommunicationClient oldClient = clients.get(sndId);
-
+//                ClusterNode locNode = getSpiContext().localNode();
+//
+//                if (ses.remoteAddress() == null)
+//                    return;
+//
+//                GridCommunicationClient oldClient = clients.get(sndId);
+//
                 boolean hasShmemClient = false;
-
-                if (oldClient != null) {
-                    if (oldClient instanceof GridTcpNioCommunicationClient) {
-                        if (log.isDebugEnabled())
-                            log.debug("Received incoming connection when already connected " +
-                                    "to this node, rejecting [locNode=" + locNode.id() +
-                                    ", rmtNode=" + sndId + ']');
-
-                        ses.send(new RecoveryLastReceivedMessage(-1));
-
-                        return;
-                    }
-                    else {
-                        assert oldClient instanceof GridShmemCommunicationClient;
-
-                        hasShmemClient = true;
-                    }
-                }
-
+//
+//                if (oldClient != null) {
+//                    if (oldClient instanceof GridTcpNioCommunicationClient) {
+//                        if (log.isDebugEnabled())
+//                            log.debug("Received incoming connection when already connected " +
+//                                    "to this node, rejecting [locNode=" + locNode.id() +
+//                                    ", rmtNode=" + sndId + ']');
+//
+//                        ses.send(new RecoveryLastReceivedMessage(-1));
+//
+//                        return;
+//                    }
+//                    else {
+//                        assert oldClient instanceof GridShmemCommunicationClient;
+//
+//                        hasShmemClient = true;
+//                    }
+//                }
+//
                 GridFutureAdapter<GridCommunicationClient> fut = new GridFutureAdapter<>();
-
-                GridFutureAdapter<GridCommunicationClient> oldFut = clientFuts.putIfAbsent(sndId, fut);
-
+//
+//                GridFutureAdapter<GridCommunicationClient> oldFut = clientFuts.putIfAbsent(sndId, fut);
+//
                 assert msg instanceof HandshakeMessage : msg;
 
                 HandshakeMessage msg0 = (HandshakeMessage)msg;
-
+//
                 final GridNioRecoveryDescriptor recoveryDesc = recoveryDescriptor(rmtNode);
-
-                if (oldFut == null) {
-                    oldClient = clients.get(sndId);
-
-                    if (oldClient != null) {
-                        if (oldClient instanceof GridTcpNioCommunicationClient) {
-                            if (log.isDebugEnabled())
-                                log.debug("Received incoming connection when already connected " +
-                                        "to this node, rejecting [locNode=" + locNode.id() +
-                                        ", rmtNode=" + sndId + ']');
-
-                            ses.send(new RecoveryLastReceivedMessage(-1));
-
-                            fut.onDone(oldClient);
-
-                            return;
-                        }
-                        else {
-                            assert oldClient instanceof GridShmemCommunicationClient;
-
-                            hasShmemClient = true;
-                        }
-                    }
-
-                    boolean reserved = recoveryDesc.tryReserve(msg0.connectCount(),
-                            new ConnectClosure(ses, recoveryDesc, rmtNode, msg0, !hasShmemClient, fut));
-
-                    if (log.isDebugEnabled())
-                        log.debug("Received incoming connection from remote node " +
-                                "[rmtNode=" + rmtNode.id() + ", reserved=" + reserved + ']');
-
-                    if (reserved) {
-                        try {
-                            GridTcpNioCommunicationClient client =
-                                    connected(recoveryDesc, ses, rmtNode, msg0.received(), true, !hasShmemClient);
-
-                            fut.onDone(client);
-                        }
-                        finally {
-                            clientFuts.remove(rmtNode.id(), fut);
-                        }
-                    }
-                }
-                else {
-                    if (oldFut instanceof ConnectFuture && locNode.order() < rmtNode.order()) {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Received incoming connection from remote node while " +
-                                    "connecting to this node, rejecting [locNode=" + locNode.id() +
-                                    ", locNodeOrder=" + locNode.order() + ", rmtNode=" + rmtNode.id() +
-                                    ", rmtNodeOrder=" + rmtNode.order() + ']');
-                        }
-
-                        ses.send(new RecoveryLastReceivedMessage(-1));
-                    }
-                    else {
+//
+//                if (oldFut == null) {
+//                    oldClient = clients.get(sndId);
+//
+//                    if (oldClient != null) {
+//                        if (oldClient instanceof GridTcpNioCommunicationClient) {
+//                            if (log.isDebugEnabled())
+//                                log.debug("Received incoming connection when already connected " +
+//                                        "to this node, rejecting [locNode=" + locNode.id() +
+//                                        ", rmtNode=" + sndId + ']');
+//
+//                            ses.send(new RecoveryLastReceivedMessage(-1));
+//
+//                            fut.onDone(oldClient);
+//
+//                            return;
+//                        }
+//                        else {
+//                            assert oldClient instanceof GridShmemCommunicationClient;
+//
+//                            hasShmemClient = true;
+//                        }
+//                    }
+//
+//                    boolean reserved = recoveryDesc.tryReserve(msg0.connectCount(),
+//                            new ConnectClosure(ses, recoveryDesc, rmtNode, msg0, !hasShmemClient, fut));
+//
+//                    if (log.isDebugEnabled())
+//                        log.debug("Received incoming connection from remote node " +
+//                                "[rmtNode=" + rmtNode.id() + ", reserved=" + reserved + ']');
+//
+//                    if (reserved) {
+//                        try {
+//                            GridTcpNioCommunicationClient client =
+//                                    connected(recoveryDesc, ses, rmtNode, msg0.received(), true, !hasShmemClient);
+//
+//                            fut.onDone(client);
+//                        }
+//                        finally {
+//                            clientFuts.remove(rmtNode.id(), fut);
+//                        }
+//                    }
+//                }
+//                else {
+//                    if (oldFut instanceof ConnectFuture && locNode.order() < rmtNode.order()) {
+//                        if (log.isDebugEnabled()) {
+//                            log.debug("Received incoming connection from remote node while " +
+//                                    "connecting to this node, rejecting [locNode=" + locNode.id() +
+//                                    ", locNodeOrder=" + locNode.order() + ", rmtNode=" + rmtNode.id() +
+//                                    ", rmtNodeOrder=" + rmtNode.order() + ']');
+//                        }
+//
+//                        ses.send(new RecoveryLastReceivedMessage(-1));
+//                    }
+//                    else {
                         // The code below causes a race condition between shmem and TCP (see IGNITE-1294)
                         boolean reserved = recoveryDesc.tryReserve(msg0.connectCount(),
                                 new ConnectClosure(ses, recoveryDesc, rmtNode, msg0, !hasShmemClient, fut));
 
                         if (reserved)
-                            connected(recoveryDesc, ses, rmtNode, msg0.received(), true, !hasShmemClient);
-                    }
-                }
+                            connected(recoveryDesc, ses, rmtNode, msg0.received(), true, false);
+//                    }
+//                }
             }
 
             @Override public void onMessage(GridNioSession ses, Message msg) {
@@ -2682,6 +2682,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
                         else
                             ch.write(ByteBuffer.wrap(nodeIdMessage().nodeIdBytesWithType));
                     }
+
                     if (recovery != null) {
                         if (log.isDebugEnabled())
                             log.debug("Waiting for handshake [rmtNode=" + rmtNodeId + ']');
@@ -2814,19 +2815,25 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
 
         GridNioRecoveryDescriptor recovery = recoveryDescs.get(id);
 
-        if (recovery == null) {
-            int maxSize = Math.max(msgQueueLimit, ackSndThreshold);
-
-            int queueLimit = unackedMsgsBufSize != 0 ? unackedMsgsBufSize : (maxSize * 5);
-
-            GridNioRecoveryDescriptor old =
-                recoveryDescs.putIfAbsent(id, recovery = new GridNioRecoveryDescriptor(queueLimit, node, log));
-
-            if (old != null)
-                recovery = old;
-        }
-
-        return recovery;
+//        if (recovery == null) {
+//            int maxSize = Math.max(msgQueueLimit, ackSndThreshold);
+//
+//            int queueLimit = unackedMsgsBufSize != 0 ? unackedMsgsBufSize : (maxSize * 5);
+//
+//            GridNioRecoveryDescriptor old =
+//                recoveryDescs.putIfAbsent(id, recovery = new GridNioRecoveryDescriptor(queueLimit, node, log));
+//
+//            if (old != null)
+//                recovery = old;
+//        }
+
+        int maxSize = Math.max(
+            msgQueueLimit,
+            ackSndThreshold);
+
+        int queueLimit = unackedMsgsBufSize != 0 ? unackedMsgsBufSize : (maxSize * 5);
+
+        return new GridNioRecoveryDescriptor(queueLimit, node, log);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/24d8cc8b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
index b2305c9..8f01993 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/IgniteBenchmarkUtils.java
@@ -91,11 +91,11 @@ public class IgniteBenchmarkUtils {
 
         final Class<? extends BenchmarkDriver> benchmark = IgnitePutBenchmark.class;
 
-        final int threads = 5;
+        final int threads = 1;
 
         final boolean clientDriverNode = true;
 
-        final int extraNodes = 2;
+        final int extraNodes = 1;
 
         final int warmUp = 60;
         final int duration = 120;
@@ -122,6 +122,7 @@ public class IgniteBenchmarkUtils {
         addArg(args0, "-dn", benchmark.getSimpleName());
         addArg(args0, "-sn", "IgniteNode");
         addArg(args0, "-cfg", cfg);
+        addArg(args0, "-wom", "PRIMARY");
 
         if (throughputLatencyProbe)
             addArg(args0, "-pr", "ThroughputLatencyProbe");


[4/7] ignite git commit: IO opts : added simple worker rebalancing + limited default selectors to 8

Posted by sb...@apache.org.
IO opts : added simple worker rebalancing + limited default selectors to 8


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

Branch: refs/heads/ignite-comm-opts1
Commit: c9113dd8edbce931cb1f86586d0cfceb2bba7fb1
Parents: 9d3cc2d
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Thu Sep 8 15:30:47 2016 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Thu Sep 8 15:30:47 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/util/IgniteUtils.java       |  12 +
 .../ignite/internal/util/nio/GridNioServer.java | 278 ++++++++++++++++++-
 .../internal/util/nio/GridNioSessionImpl.java   |  27 +-
 .../util/nio/GridSelectorNioSessionImpl.java    |  11 +-
 .../communication/tcp/TcpCommunicationSpi.java  |   2 +-
 5 files changed, 314 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c9113dd8/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index e3389d5..f8e1d86 100644
--- 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
@@ -8297,6 +8297,18 @@ public abstract class IgniteUtils {
     }
 
     /**
+     * Gets absolute value for long. If argument is {@link Long#MIN_VALUE}, then {@code 0} is returned.
+     *
+     * @param i Argument.
+     * @return Absolute value.
+     */
+    public static long safeAbs(long i) {
+        i = Math.abs(i);
+
+        return i < 0 ? 0 : i;
+    }
+
+    /**
      * Gets wrapper class for a primitive type.
      *
      * @param cls Class. If {@code null}, method is no-op.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c9113dd8/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index c67619e..0b94730 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -108,6 +108,7 @@ public class GridNioServer<T> {
     // TODO
     private static final int WRITE_BUF_SIZE = IgniteSystemProperties.getInteger("IGNITE_WRITE_BUF_SIZE", 65536);
     private static final int READ_BUF_SIZE = IgniteSystemProperties.getInteger("IGNITE_READ_BUF_SIZE", 65536);
+    private static final boolean NIO_SES_BALANCE_ENABLED = IgniteSystemProperties.getBoolean("IGNITE_NIO_SES_BALANCE_ENABLED", true);
 
     /** */
     private static final boolean DISABLE_KEYSET_OPTIMIZATION =
@@ -399,7 +400,10 @@ public class GridNioServer<T> {
 
         NioOperationFuture<Boolean> fut = new NioOperationFuture<>(impl, NioOperation.CLOSE);
 
-        clientWorkers.get(impl.selectorIndex()).offer(fut);
+        int idx = impl.selectorIndex(); // TODO
+
+        if (idx != -1)
+            clientWorkers.get(idx).offer(fut);
 
         return fut;
     }
@@ -459,9 +463,13 @@ public class GridNioServer<T> {
             if (ses.removeFuture(fut))
                 fut.connectionClosed();
         }
-        else if (msgCnt == 1)
+        else if (msgCnt == 1) {
             // Change from 0 to 1 means that worker thread should be waken up.
-            clientWorkers.get(ses.selectorIndex()).offer(fut);
+            int idx = ses.selectorIndex();
+
+            if (idx != 1) // TODO revisit
+                clientWorkers.get(idx).offer(fut);
+        }
 
         if (msgQueueLsnr != null)
             msgQueueLsnr.apply(ses, msgCnt);
@@ -921,6 +929,7 @@ public class GridNioServer<T> {
 
             ses.bytesReceived(cnt);
             ses.onBytesRead(cnt, readBuf.capacity());
+            onRead(cnt);
 
             readBuf.flip();
 
@@ -1236,6 +1245,7 @@ public class GridNioServer<T> {
 
                 ses.bytesSent(cnt);
                 ses.onBytesWritten(cnt, buf.capacity());
+                onWrite(cnt);
             }
             else {
                 // For test purposes only (skipWrite is set to true in tests only).
@@ -1273,6 +1283,13 @@ public class GridNioServer<T> {
         /** Worker index. */
         private final int idx;
 
+        private volatile long bytesRcvd;
+        private volatile long bytesSent;
+        private volatile long bytesRcvd0;
+        private volatile long bytesSent0;
+
+        private final GridConcurrentHashSet<GridSelectorNioSessionImpl> sessions0 = new GridConcurrentHashSet<>();
+
         /**
          * @param idx Index of this worker in server's array.
          * @param gridName Grid name.
@@ -1397,6 +1414,40 @@ public class GridNioServer<T> {
                                 break;
                             }
 
+                            case MOVE: {
+                                SessionMoveFuture f = (SessionMoveFuture)req;
+
+                                GridSelectorNioSessionImpl ses = f.session();
+
+                                if (idx == f.toIdx) {
+                                    ses.selectorIndex(idx);
+
+                                    sessions0.add(ses);
+
+                                    SelectionKey key = f.socketChannel().register(selector,
+                                        SelectionKey.OP_READ | SelectionKey.OP_WRITE, ses); // TODO what if reads were paused?
+
+                                    ses.key(key);
+                                }
+                                else {
+                                    assert ses.selectorIndex() == idx; // TODO replace with IF and ignore?
+
+                                    // Cleanup.
+                                    ses.selectorIndex(-1);
+                                    sessions0.remove(ses);
+
+                                    SelectionKey key = ses.key();
+
+                                    f.socketChannel((SocketChannel)key.channel());
+
+                                    key.cancel();
+
+                                    clientWorkers.get(f.toIndex()).offer(f);
+                                }
+
+                                break;
+                            }
+
                             case REQUIRE_WRITE: {
                                 //Just register write key.
                                 SelectionKey key = req.session().key();
@@ -1464,6 +1515,10 @@ public class GridNioServer<T> {
                                 sb.append(U.nl())
                                     .append(">> Selector info [idx=").append(idx)
                                     .append(", keysCnt=").append(keys.size())
+                                    .append(", bytesRcvd=").append(bytesRcvd)
+                                    .append(", bytesRcvd0=").append(bytesRcvd0)
+                                    .append(", bytesSent=").append(bytesSent)
+                                    .append(", bytesSent0=").append(bytesSent0)
                                     .append("]").append(U.nl());
 
                                 for (SelectionKey key : keys) {
@@ -1488,7 +1543,9 @@ public class GridNioServer<T> {
                                         sb.append(", recoveryDesc=null");
 
                                     sb.append(", bytesRcvd=").append(ses.bytesReceived())
+                                        .append(", bytesRcvd0=").append(ses.bytesReceived0())
                                         .append(", bytesSent=").append(ses.bytesSent())
+                                        .append(", bytesSent0=").append(ses.bytesSent0())
                                         .append(", opQueueSize=").append(ses.writeQueueSize())
                                         .append(", writeStats=").append(Arrays.toString(ses.writeStats()))
                                         .append(", readStats=").append(Arrays.toString(ses.readStats()))
@@ -1754,6 +1811,7 @@ public class GridNioServer<T> {
                     resend(ses);
 
                 sessions.add(ses);
+                sessions0.add(ses);
 
                 try {
                     filterChain.onSessionOpened(ses);
@@ -1779,7 +1837,7 @@ public class GridNioServer<T> {
         }
 
         /**
-         * Closes the ses and all associated resources, then notifies the listener.
+         * Closes the session and all associated resources, then notifies the listener.
          *
          * @param ses Session to be closed.
          * @param e Exception to be passed to the listener, if any.
@@ -1796,12 +1854,10 @@ public class GridNioServer<T> {
             }
 
             sessions.remove(ses);
+            sessions0.remove(ses);
 
             SelectionKey key = ses.key();
 
-            // Shutdown input and output so that remote client will see correct socket close.
-            Socket sock = ((SocketChannel)key.channel()).socket();
-
             if (ses.setClosed()) {
                 ses.onClosed();
 
@@ -1813,6 +1869,9 @@ public class GridNioServer<T> {
                         ((DirectBuffer)ses.readBuffer()).cleaner().clean();
                 }
 
+                // Shutdown input and output so that remote client will see correct socket close.
+                Socket sock = ((SocketChannel)key.channel()).socket();
+
                 try {
                     try {
                         sock.shutdownInput();
@@ -1891,6 +1950,24 @@ public class GridNioServer<T> {
          * @throws IOException If write failed.
          */
         protected abstract void processWrite(SelectionKey key) throws IOException;
+
+        protected void onRead(int cnt) { // TODO
+            bytesRcvd += cnt;
+            bytesRcvd0 += cnt;
+        }
+
+        protected void onWrite(int cnt) {
+            bytesSent += cnt;
+            bytesSent0 += cnt;
+        }
+
+        protected void reset0() {
+            bytesSent0 = 0;
+            bytesRcvd0 = 0;
+
+            for (GridSelectorNioSessionImpl ses : sessions0)
+                ses.reset0();
+        }
     }
 
     /**
@@ -1961,12 +2038,155 @@ public class GridNioServer<T> {
          * @throws IgniteCheckedException If failed.
          */
         private void accept() throws IgniteCheckedException {
+            long lastBalance = U.currentTimeMillis();
+
             try {
                 while (!closed && selector.isOpen() && !Thread.currentThread().isInterrupted()) {
                     // Wake up every 2 seconds to check if closed.
                     if (selector.select(2000) > 0)
                         // Walk through the ready keys collection and process date requests.
                         processSelectedKeys(selector.selectedKeys());
+
+                    if (!NIO_SES_BALANCE_ENABLED)
+                        continue;
+
+                    long now = U.currentTimeMillis();
+
+                    if (lastBalance + 5000 < now) {
+                        lastBalance = now;
+
+                        long maxRcvd0 = -1, minRcvd0 = -1, maxSent0 = -1, minSent0 = -1;
+                        int maxRcvdIdx = -1, minRcvdIdx = -1, maxSentIdx = -1, minSentIdx = -1;
+
+                        if(sessions.size() > 2)
+                            System.out.println("");
+
+                        for (int i = 0; i < clientWorkers.size(); i++) {
+                            AbstractNioClientWorker worker = clientWorkers.get(i);
+
+                            if ((i & 1) == 0) {
+                                // Reader.
+                                long bytesRcvd0 = worker.bytesRcvd0;
+
+                                if ((maxRcvd0 == -1 || bytesRcvd0 > maxRcvd0) && bytesRcvd0 > 0 &&
+                                    worker.sessions0.size() > 1) {
+                                    maxRcvd0 = bytesRcvd0;
+                                    maxRcvdIdx = i;
+
+                                    continue;
+                                }
+
+                                if (minRcvd0 == -1 || bytesRcvd0 < minRcvd0) {
+                                    minRcvd0 = bytesRcvd0;
+                                    minRcvdIdx = i;
+                                }
+                            }
+                            else {
+                                // Writer.
+                                long bytesSent0 = worker.bytesSent0;
+
+                                if ((maxSent0 == -1 || bytesSent0 > maxSent0) && bytesSent0 > 0 &&
+                                    worker.sessions0.size() > 1) {
+                                    maxSent0 = bytesSent0;
+                                    maxSentIdx = i;
+
+                                    continue;
+                                }
+
+                                if (minSent0 == -1 || bytesSent0 < minSent0) {
+                                    minSent0 = bytesSent0;
+                                    minSentIdx = i;
+                                }
+                            }
+                        }
+
+                        if (log.isDebugEnabled())
+                            log.debug("Balancing data [minSent0=" + minSent0 + ", minSentIdx=" + minSentIdx +
+                                ", maxSent0=" + maxSent0 + ", maxSentIdx=" + maxSentIdx +
+                                ", minRcvd0=" + minRcvd0 + ", minRcvdIdx=" + minRcvdIdx +
+                                ", maxRcvd0=" + maxRcvd0 + ", maxRcvdIdx=" + maxRcvdIdx + ']');
+
+                        U.debug("Balancing data [minSent0=" + minSent0 + ", minSentIdx=" + minSentIdx +
+                                ", maxSent0=" + maxSent0 + ", maxSentIdx=" + maxSentIdx +
+                                ", minRcvd0=" + minRcvd0 + ", minRcvdIdx=" + minRcvdIdx +
+                                ", maxRcvd0=" + maxRcvd0 + ", maxRcvdIdx=" + maxRcvdIdx + ']');
+
+                        if (maxSent0 != -1 && minSent0 != -1) {
+                            GridSelectorNioSessionImpl ses = null;
+
+                            long sentDiff = maxSent0 - minSent0;
+                            long delta = sentDiff;
+                            double threshold = sentDiff * 0.9;
+
+                            for (GridSelectorNioSessionImpl ses0 : clientWorkers.get(maxSentIdx).sessions0) {
+                                long bytesSent0 = ses0.bytesSent0();
+
+                                if (bytesSent0 < threshold &&
+                                    (ses == null || delta > U.safeAbs(bytesSent0 - sentDiff / 2))) {
+                                    ses = ses0;
+                                    delta = U.safeAbs(bytesSent0 - sentDiff / 2);
+                                }
+                            }
+
+                            if (ses != null) {
+                                if (log.isDebugEnabled())
+                                    log.debug("Will move session to less loaded writer [ses=" + ses +
+                                        ", from=" + maxSentIdx + ", to=" + minSentIdx + ']');
+
+                                U.debug(log, "Will move session to less loaded writer [ses=" + ses +
+                                    ", from=" + maxSentIdx + ", to=" + minSentIdx + ']');
+                            }
+                            else {
+                                if (log.isDebugEnabled())
+                                    log.debug("Unable to find session to move for writers.");
+
+                                U.debug(log, "Unable to find session to move for writers.");
+                            }
+
+                            clientWorkers.get(maxSentIdx).offer(new SessionMoveFuture(ses, minSentIdx));
+                        }
+
+                        if (maxRcvd0 != -1 && minRcvd0 != -1) {
+                            GridSelectorNioSessionImpl ses = null;
+
+                            long rcvdDiff = maxRcvd0 - minRcvd0;
+                            long delta = rcvdDiff;
+                            double threshold = rcvdDiff * 0.9;
+
+                            for (GridSelectorNioSessionImpl ses0 : clientWorkers.get(maxRcvdIdx).sessions0) {
+                                long bytesRcvd0 = ses0.bytesReceived0();
+
+                                if (bytesRcvd0 < threshold &&
+                                    (ses == null || delta > U.safeAbs(bytesRcvd0 - rcvdDiff / 2))) {
+                                    ses = ses0;
+                                    delta = U.safeAbs(bytesRcvd0 - rcvdDiff / 2);
+                                }
+                            }
+
+                            if (ses != null) {
+                                if (log.isDebugEnabled())
+                                    log.debug("Will move session to less loaded reader [ses=" + ses +
+                                        ", from=" + maxRcvdIdx + ", to=" + minRcvdIdx + ']');
+
+                                U.debug(log, "Will move session to less loaded reader [ses=" + ses +
+                                    ", from=" + maxSentIdx + ", to=" + minSentIdx + ']');
+                            }
+                            else {
+                                if (log.isDebugEnabled())
+                                    log.debug("Unable to find session to move for readers.");
+
+                                U.debug(log, "Unable to find session to move for readers.");
+                            }
+
+                            clientWorkers.get(maxRcvdIdx).offer(new SessionMoveFuture(ses, minRcvdIdx));
+                        }
+
+                        for (int i = 0; i < clientWorkers.size(); i++) {
+                            AbstractNioClientWorker worker = clientWorkers.get(i);
+
+                            worker.reset0();
+                        }
+                    }
                 }
             }
             // Ignore this exception as thread interruption is equal to 'close' call.
@@ -2067,6 +2287,9 @@ public class GridNioServer<T> {
         /** Register read key selection. */
         REGISTER,
 
+        /** */
+        MOVE,
+
         /** Register write key selection. */
         REQUIRE_WRITE,
 
@@ -2092,7 +2315,7 @@ public class GridNioServer<T> {
 
         /** Socket channel in register request. */
         @GridToStringExclude
-        private SocketChannel sockCh;
+        protected SocketChannel sockCh; // TODO to be fixed with proper hierarchy
 
         /** Session to perform operation on. */
         @GridToStringExclude
@@ -2234,14 +2457,14 @@ public class GridNioServer<T> {
         /**
          * @return Socket channel for register request.
          */
-        private SocketChannel socketChannel() {
+        SocketChannel socketChannel() {
             return sockCh;
         }
 
         /**
          * @return Session for this change request.
          */
-        private GridSelectorNioSessionImpl session() {
+        GridSelectorNioSessionImpl session() {
             return ses;
         }
 
@@ -2288,6 +2511,41 @@ public class GridNioServer<T> {
     }
 
     /**
+     *
+     */
+    private static class SessionMoveFuture<R> extends NioOperationFuture<R> {
+        /** */
+        private final int toIdx;
+
+        /**
+         * @param ses
+         * @param toIdx
+         */
+        public SessionMoveFuture(
+            GridSelectorNioSessionImpl ses,
+            int toIdx
+        ) {
+            super(ses, NioOperation.MOVE);
+
+            this.sockCh = sockCh;
+            this.toIdx = toIdx;
+        }
+
+        int toIndex() {
+            return toIdx;
+        }
+
+        void socketChannel(SocketChannel sockCh) {
+            this.sockCh = sockCh;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return S.toString(SessionMoveFuture.class, this, super.toString());
+        }
+    }
+
+    /**
      * Filter forwarding messages from chain's head to this server.
      */
     private class HeadFilter extends GridNioFilterAdapter {

http://git-wip-us.apache.org/repos/asf/ignite/blob/c9113dd8/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
index 99a61da..5d023ca 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioSessionImpl.java
@@ -45,15 +45,21 @@ public class GridNioSessionImpl implements GridNioSession {
     /** Session close timestamp. */
     private final AtomicLong closeTime = new AtomicLong();
 
-    /** Sent bytes counter. */
-    private volatile long bytesSent;
-
     private final long[] writesStat = new long[25];
     private final long[] readsStat = new long[25];
 
+    /** Sent bytes counter. */
+    private volatile long bytesSent;
+
     /** Received bytes counter. */
     private volatile long bytesRcvd;
 
+    /** Sent bytes counter since last re-balancing. */
+    private volatile long bytesSent0;
+
+    /** Received bytes counter since last re-balancing. */
+    private volatile long bytesRcvd0;
+
     /** Last send schedule timestamp. */
     private volatile long sndSchedTime;
 
@@ -166,6 +172,19 @@ public class GridNioSessionImpl implements GridNioSession {
         return bytesRcvd;
     }
 
+    public long bytesSent0() {
+        return bytesSent0;
+    }
+
+    public long bytesReceived0() {
+        return bytesRcvd0;
+    }
+
+    public void reset0() {
+        bytesSent0 = 0;
+        bytesRcvd0 = 0;
+    }
+
     /** {@inheritDoc} */
     @Override public long createTime() {
         return createTime;
@@ -243,6 +262,7 @@ public class GridNioSessionImpl implements GridNioSession {
      */
     public void bytesSent(int cnt) {
         bytesSent += cnt;
+        bytesSent0 += cnt;
 
         lastSndTime = U.currentTimeMillis();
     }
@@ -282,6 +302,7 @@ public class GridNioSessionImpl implements GridNioSession {
      */
     public void bytesReceived(int cnt) {
         bytesRcvd += cnt;
+        bytesRcvd0 += cnt;
 
         lastRcvTime = U.currentTimeMillis();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c9113dd8/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
index 487b11a..d989ed6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridSelectorNioSessionImpl.java
@@ -44,7 +44,7 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
     private SelectionKey key;
 
     /** Worker index for server */
-    private final int selectorIdx;
+    private volatile int selectorIdx;
 
     /** Size counter. */
     private final AtomicInteger queueSize = new AtomicInteger();
@@ -124,7 +124,7 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
      * @param key Selection key.
      */
     void key(SelectionKey key) {
-        assert this.key == null;
+        assert key != null;
 
         this.key = key;
     }
@@ -158,6 +158,13 @@ class GridSelectorNioSessionImpl extends GridNioSessionImpl {
     }
 
     /**
+     * @param selectorIdx Selector index.
+     */
+    void selectorIndex(int selectorIdx) {
+        this.selectorIdx = selectorIdx;
+    }
+
+    /**
      * Adds write future at the front of the queue without acquiring back pressure semaphore.
      *
      * @param writeFut Write request.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c9113dd8/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index d12c6bf..3292412 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -283,7 +283,7 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
      * Default count of selectors for TCP server equals to
      * {@code "Math.min(4, Runtime.getRuntime().availableProcessors())"}.
      */
-    public static final int DFLT_SELECTORS_CNT = Runtime.getRuntime().availableProcessors();
+    public static final int DFLT_SELECTORS_CNT = Math.min(8, Runtime.getRuntime().availableProcessors());
 
     /** Node ID meta for session. */
     private static final int NODE_ID_META = GridNioSessionMetaKey.nextUniqueKey();


[5/7] ignite git commit: IO opts: fixed hang

Posted by sb...@apache.org.
IO opts: fixed hang


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

Branch: refs/heads/ignite-comm-opts1
Commit: dbca495a1cc1bd11f42bf7770622e529ecaef993
Parents: c9113dd
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Fri Sep 9 11:20:35 2016 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Fri Sep 9 11:20:35 2016 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/internal/util/nio/GridNioServer.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/dbca495a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index 0b94730..a2449f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -467,7 +467,7 @@ public class GridNioServer<T> {
             // Change from 0 to 1 means that worker thread should be waken up.
             int idx = ses.selectorIndex();
 
-            if (idx != 1) // TODO revisit
+            if (idx != -1) // TODO revisit
                 clientWorkers.get(idx).offer(fut);
         }