You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2017/10/30 12:44:01 UTC

ignite git commit: IGNITE-6398 Web Console: Added support for ClientConnectorConfiguration.

Repository: ignite
Updated Branches:
  refs/heads/master 555b71ed0 -> 58dbbc539


IGNITE-6398 Web Console: Added support for ClientConnectorConfiguration.


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

Branch: refs/heads/master
Commit: 58dbbc5394d603fabc348d92cda2a4e959fa0e79
Parents: 555b71e
Author: vsisko <vs...@gridgain.com>
Authored: Mon Oct 30 19:43:48 2017 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Mon Oct 30 19:43:48 2017 +0700

----------------------------------------------------------------------
 .../internal/visor/VisorDataTransferObject.java |   3 +
 .../node/VisorClientConnectorConfiguration.java | 166 +++++++++++++++++++
 .../visor/node/VisorGridConfiguration.java      |  26 ++-
 .../node/VisorSqlConnectorConfiguration.java    |   3 +
 .../config/VisorConfigurationCommand.scala      |  29 +++-
 modules/web-console/backend/app/mongo.js        |  11 ++
 .../generator/AbstractTransformer.js            |   5 +
 .../generator/ConfigurationGenerator.js         |  35 +++-
 .../configuration/clusters/client-connector.pug |  59 +++++++
 .../configuration/clusters/sql-connector.pug    |   4 +-
 .../views/configuration/clusters.tpl.pug        |   6 +
 11 files changed, 332 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
index 8660891..4635c3e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/VisorDataTransferObject.java
@@ -41,6 +41,9 @@ public abstract class VisorDataTransferObject implements Externalizable {
     /** Version 2. */
     protected static final byte V2 = 2;
 
+    /** Version 3. */
+    protected static final byte V3 = 3;
+
     /**
      * @param col Source collection.
      * @param <T> Collection type.

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorClientConnectorConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorClientConnectorConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorClientConnectorConfiguration.java
new file mode 100644
index 0000000..397b72a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorClientConnectorConfiguration.java
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.visor.node;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.configuration.ClientConnectorConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.visor.VisorDataTransferObject;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Data transfer object for client connector configuration.
+ */
+public class VisorClientConnectorConfiguration extends VisorDataTransferObject {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Host. */
+    private String host;
+
+    /** Port. */
+    private int port;
+
+    /** Port range. */
+    private int portRange;
+
+    /** Max number of opened cursors per connection. */
+    private int maxOpenCursorsPerConn;
+
+    /** Socket send buffer size. */
+    private int sockSndBufSize;
+
+    /** Socket receive buffer size. */
+    private int sockRcvBufSize;
+
+    /** TCP no delay. */
+    private boolean tcpNoDelay;
+
+    /** Thread pool size. */
+    private int threadPoolSize ;
+
+    /**
+     * Default constructor.
+     */
+    public VisorClientConnectorConfiguration() {
+        // No-op.
+    }
+
+    /**
+     * Create data transfer object for Sql connector configuration.
+     *
+     * @param cfg Sql connector configuration.
+     */
+    public VisorClientConnectorConfiguration(ClientConnectorConfiguration cfg) {
+        host = cfg.getHost();
+        port = cfg.getPort();
+        portRange = cfg.getPortRange();
+        maxOpenCursorsPerConn = cfg.getMaxOpenCursorsPerConnection();
+        sockSndBufSize = cfg.getSocketSendBufferSize();
+        sockRcvBufSize = cfg.getSocketReceiveBufferSize();
+        tcpNoDelay = cfg.isTcpNoDelay();
+        threadPoolSize = cfg.getThreadPoolSize();
+    }
+
+    /**
+     * @return Host.
+     */
+    @Nullable public String getHost() {
+        return host;
+    }
+
+    /**
+     * @return Port.
+     */
+    public int getPort() {
+        return port;
+    }
+
+    /**
+     * @return Port range.
+     */
+    public int getPortRange() {
+        return portRange;
+    }
+
+    /**
+     * @return Maximum number of opened cursors.
+     */
+    public int getMaxOpenCursorsPerConnection() {
+        return maxOpenCursorsPerConn;
+    }
+
+    /**
+     * @return Socket send buffer size in bytes.
+     */
+    public int getSocketSendBufferSize() {
+        return sockSndBufSize;
+    }
+
+    /**
+     * @return Socket receive buffer size in bytes.
+     */
+    public int getSocketReceiveBufferSize() {
+        return sockRcvBufSize;
+    }
+
+    /**
+     * @return TCP NO_DELAY flag.
+     */
+    public boolean isTcpNoDelay() {
+        return tcpNoDelay;
+    }
+    /**
+     * @return Thread pool that is in charge of processing SQL requests.
+     */
+    public int getThreadPoolSize() {
+        return threadPoolSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void writeExternalData(ObjectOutput out) throws IOException {
+        U.writeString(out, host);
+        out.writeInt(port);
+        out.writeInt(portRange);
+        out.writeInt(maxOpenCursorsPerConn);
+        out.writeInt(sockSndBufSize);
+        out.writeInt(sockRcvBufSize );
+        out.writeBoolean(tcpNoDelay);
+        out.writeInt(threadPoolSize);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
+        host = U.readString(in);
+        port = in.readInt();
+        portRange = in.readInt();
+        maxOpenCursorsPerConn = in.readInt();
+        sockSndBufSize = in.readInt();
+        sockRcvBufSize = in.readInt();
+        tcpNoDelay = in.readBoolean();
+        threadPoolSize = in.readInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(VisorClientConnectorConfiguration.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
index 99cce40..9e2370c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorGridConfiguration.java
@@ -26,9 +26,9 @@ import java.util.Map;
 import java.util.Properties;
 import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.configuration.BinaryConfiguration;
+import org.apache.ignite.configuration.ClientConnectorConfiguration;
 import org.apache.ignite.configuration.HadoopConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.configuration.SqlConnectorConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -122,6 +122,9 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
     /** Configuration of data storage. */
     private VisorDataStorageConfiguration dataStorage;
 
+    /** Client connector configuration */
+    private VisorClientConnectorConfiguration clnConnCfg;
+
     /**
      * Default constructor.
      */
@@ -177,10 +180,10 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
         if (hc != null)
             hadoopCfg = new VisorHadoopConfiguration(hc);
 
-        SqlConnectorConfiguration scc = c.getSqlConnectorConfiguration();
+        ClientConnectorConfiguration ccc = c.getClientConnectorConfiguration();
 
-        if (scc != null)
-            sqlConnCfg = new VisorSqlConnectorConfiguration(scc);
+        if (ccc != null)
+            clnConnCfg = new VisorClientConnectorConfiguration(ccc);
 
         srvcCfgs = VisorServiceConfiguration.list(c.getServiceConfiguration());
 
@@ -356,6 +359,13 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
     }
 
     /**
+     * @return Client connector configuration.
+     */
+    public VisorClientConnectorConfiguration getClientConnectorConfiguration() {
+        return clnConnCfg;
+    }
+
+    /**
      * @return List of service configurations
      */
     public List<VisorServiceConfiguration> getServiceConfigurations() {
@@ -371,7 +381,7 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
 
     /** {@inheritDoc} */
     @Override public byte getProtocolVersion() {
-        return V2;
+        return V3;
     }
 
     /** {@inheritDoc} */
@@ -402,6 +412,7 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
         out.writeObject(sqlConnCfg);
         U.writeCollection(out, srvcCfgs);
         out.writeObject(dataStorage);
+        out.writeObject(clnConnCfg);
     }
 
     /** {@inheritDoc} */
@@ -432,8 +443,11 @@ public class VisorGridConfiguration extends VisorDataTransferObject {
         sqlConnCfg = (VisorSqlConnectorConfiguration) in.readObject();
         srvcCfgs = U.readList(in);
 
-        if (protoVer == V2)
+        if (protoVer >= V2)
             dataStorage = (VisorDataStorageConfiguration)in.readObject();
+
+        if (protoVer >= V3)
+            clnConnCfg = (VisorClientConnectorConfiguration)in.readObject();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSqlConnectorConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSqlConnectorConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSqlConnectorConfiguration.java
index ccde415..2c2f959 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSqlConnectorConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorSqlConnectorConfiguration.java
@@ -28,7 +28,10 @@ import org.jetbrains.annotations.Nullable;
 
 /**
  * Data transfer object for SQL connector configuration.
+ *
+ * Deprecated as of Apache Ignite 2.3
  */
+@Deprecated
 public class VisorSqlConnectorConfiguration extends VisorDataTransferObject {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
----------------------------------------------------------------------
diff --git a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
index 13ab778..b9b0af9 100644
--- a/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
+++ b/modules/visor-console/src/main/scala/org/apache/ignite/visor/commands/config/VisorConfigurationCommand.scala
@@ -17,19 +17,16 @@
 
 package org.apache.ignite.visor.commands.config
 
+import java.util.UUID
 import org.apache.ignite.cluster.ClusterGroupEmptyException
 import org.apache.ignite.internal.util.scala.impl
 import org.apache.ignite.internal.util.{IgniteUtils => U}
-import org.apache.ignite.lang.IgniteBiTuple
 import org.apache.ignite.visor.VisorTag
 import org.apache.ignite.visor.commands.cache.VisorCacheCommand._
 import org.apache.ignite.visor.commands.common.{VisorConsoleCommand, VisorTextTable}
 import org.apache.ignite.visor.visor._
 
-import java.lang.System._
-import java.util.UUID
-
-import org.apache.ignite.internal.visor.node.{VisorSpiDescription, VisorGridConfiguration, VisorNodeConfigurationCollectorTask}
+import org.apache.ignite.internal.visor.node.{VisorGridConfiguration, VisorNodeConfigurationCollectorTask, VisorSpiDescription}
 import org.apache.ignite.internal.visor.util.VisorTaskUtils._
 
 import scala.collection.JavaConversions._
@@ -240,6 +237,26 @@ class VisorConfigurationCommand extends VisorConsoleCommand {
 
         spisT.render()
 
+        println("\nClient connector configuration")
+
+        val cliConnCfg = cfg.getClientConnectorConfiguration
+        val cliConnTbl = VisorTextTable()
+
+        if (cliConnCfg != null) {
+            cliConnTbl += ("Host", safe(cliConnCfg.getHost, safe(basic.getLocalHost)))
+            cliConnTbl += ("Port", cliConnCfg.getPort)
+            cliConnTbl += ("Port range", cliConnCfg.getPortRange)
+            cliConnTbl += ("Socket send buffer size", formatMemory(cliConnCfg.getSocketSendBufferSize))
+            cliConnTbl += ("Socket receive buffer size", formatMemory(cliConnCfg.getSocketReceiveBufferSize))
+            cliConnTbl += ("Max connection cursors", cliConnCfg.getMaxOpenCursorsPerConnection)
+            cliConnTbl += ("Pool size", cliConnCfg.getThreadPoolSize)
+            cliConnTbl += ("TCP_NODELAY", bool2Str(cliConnCfg.isTcpNoDelay))
+
+            cliConnTbl.render()
+        }
+        else
+            println("Client Connection is not configured")
+
         println("\nPeer-to-Peer:")
 
         val p2pT = VisorTextTable()
@@ -371,7 +388,7 @@ class VisorConfigurationCommand extends VisorConsoleCommand {
      * @return List of strings.
      */
     private[this] def compactProperty(name: String, value: String): List[String] = {
-        val ps = getProperty("path.separator")
+        val ps = System.getProperty("path.separator")
 
         // Split all values having path separator into multiple lines (with few exceptions...).
         val lst =

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/web-console/backend/app/mongo.js
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/app/mongo.js b/modules/web-console/backend/app/mongo.js
index 5b02a72..7043fcd 100644
--- a/modules/web-console/backend/app/mongo.js
+++ b/modules/web-console/backend/app/mongo.js
@@ -854,6 +854,17 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose
                 className: String
             }
         }],
+        clientConnectorConfiguration: {
+            enabled: Boolean,
+            host: String,
+            port: Number,
+            portRange: Number,
+            socketSendBufferSize: Number,
+            socketReceiveBufferSize: Number,
+            tcpNoDelay: {type: Boolean, default: true},
+            maxOpenCursorsPerConnection: Number,
+            threadPoolSize: Number
+        },
         loadBalancingSpi: [{
             kind: {type: String, enum: ['RoundRobin', 'Adaptive', 'WeightedRandom', 'Custom']},
             RoundRobin: {

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js b/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
index f6f471c..af799bd 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/AbstractTransformer.js
@@ -78,6 +78,11 @@ export default class AbstractTransformer {
         return this.toSection(this.generator.clusterCacheKeyConfiguration(keyCfgs));
     }
 
+    // Generate client connector configuration.
+    static clusterClientConnector(cluster, available) {
+        return this.toSection(this.generator.clusterClientConnector(cluster, available));
+    }
+
     // Generate collision group.
     static clusterCollision(collision) {
         return this.toSection(this.generator.clusterCollision(collision));

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
index 1b12d52..16202f8 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
@@ -78,6 +78,10 @@ export default class IgniteConfigurationGenerator {
         this.clusterBinary(cluster.binaryConfiguration, cfg);
         this.clusterCacheKeyConfiguration(cluster.cacheKeyConfiguration, cfg);
         this.clusterCheckpoint(cluster, cluster.caches, cfg);
+
+        if (available('2.3.0'))
+            this.clusterClientConnector(cluster, available, cfg);
+
         this.clusterCollision(cluster.collision, cfg);
         this.clusterCommunication(cluster, cfg);
         this.clusterConnector(cluster.connector, cfg);
@@ -106,7 +110,9 @@ export default class IgniteConfigurationGenerator {
         if (available(['2.1.0', '2.3.0']))
             this.clusterPersistence(cluster.persistenceStoreConfiguration, available, cfg);
 
-        this.clusterQuery(cluster, available, cfg);
+        if (available(['2.1.0', '2.3.0']))
+            this.clusterQuery(cluster, available, cfg);
+
         this.clusterServiceConfiguration(cluster.serviceConfigurations, cluster.caches, cfg);
         this.clusterSsl(cluster, cfg);
 
@@ -760,6 +766,33 @@ export default class IgniteConfigurationGenerator {
         return cfg;
     }
 
+    // Generate cluster query group.
+    static clusterClientConnector(cluster, available, cfg = this.igniteConfigurationBean(cluster)) {
+        if (!available('2.3.0'))
+            return cfg;
+
+        cfg.intProperty('longQueryWarningTimeout');
+
+        if (_.get(cluster, 'clientConnectorConfiguration.enabled') !== true)
+            return cfg;
+
+        const bean = new Bean('org.apache.ignite.configuration.ClientConnectorConfiguration', 'cliConnCfg',
+            cluster.clientConnectorConfiguration, clusterDflts.clientConnectorConfiguration);
+
+        bean.stringProperty('host')
+            .intProperty('port')
+            .intProperty('portRange')
+            .intProperty('socketSendBufferSize')
+            .intProperty('socketReceiveBufferSize')
+            .intProperty('maxOpenCursorsPerConnection')
+            .intProperty('threadPoolSize')
+            .boolProperty('tcpNoDelay');
+
+        cfg.beanProperty('clientConnectorConfiguration', bean);
+
+        return cfg;
+    }
+
     // Generate collision group.
     static clusterCollision(collision, cfg = this.igniteConfigurationBean()) {
         let colSpi;

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
new file mode 100644
index 0000000..dd2fa6d
--- /dev/null
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/client-connector.pug
@@ -0,0 +1,59 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+include /app/helpers/jade/mixins
+
+-var form = 'clientConnector'
+-var model = 'backupItem'
+-var connectionModel = model + '.clientConnectorConfiguration'
+-var connectionEnabled = connectionModel + '.enabled'
+
+.panel.panel-default(ng-show='$ctrl.available("2.3.0")' ng-form=form novalidate)
+    .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
+        ignite-form-panel-chevron
+        label Client connector configuration
+        ignite-form-field-tooltip.tipLabel
+            | Client connector configuration
+        ignite-form-revert
+    .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
+        .panel-body(ng-if=`$ctrl.available("2.3.0") && ui.isPanelLoaded('${form}')`)
+            .col-sm-6
+                .settings-row
+                    +checkbox('Enabled', connectionEnabled, '"ClientConnectorEnabled"', 'Flag indicating whether to configure client connector configuration')
+                .settings-row
+                    +text-enabled('Host:', `${connectionModel}.host`, '"ClientConnectorHost"', connectionEnabled, 'false', 'localhost', 'Host')
+                .settings-row
+                    +number('Port:', `${connectionModel}.port`, '"ClientConnectorPort"', connectionEnabled, '10800', '1025', 'Port')
+                .settings-row
+                    +number('Port range:', `${connectionModel}.portRange`, '"ClientConnectorPortRange"', connectionEnabled, '100', '0', 'Port range')
+                .settings-row
+                    +number('Socket send buffer size:', `${connectionModel}.socketSendBufferSize`, '"ClientConnectorSocketSendBufferSize"', connectionEnabled, '0', '0',
+                        'Socket send buffer size.<br/>\
+                        When set to <b>0</b>, operation system default will be used')
+                .settings-row
+                    +number('Socket receive buffer size:', `${connectionModel}.socketReceiveBufferSize`, '"ClientConnectorSocketReceiveBufferSize"', connectionEnabled, '0', '0',
+                        'Socket receive buffer size.<br/>\
+                        When set to <b>0</b>, operation system default will be used')
+                .settings-row
+                    +number('Max connection cursors:', `${connectionModel}.maxOpenCursorsPerConnection`, '"ClientConnectorMaxOpenCursorsPerConnection"', connectionEnabled, '128', '0',
+                        'Max number of opened cursors per connection')
+                .settings-row
+                    +number('Pool size:', `${connectionModel}.threadPoolSize`, '"ClientConnectorThreadPoolSize"', connectionEnabled, 'max(8, availableProcessors)', '1',
+                        'Size of thread pool that is in charge of processing SQL requests')
+                .settings-row
+                    +checkbox-enabled('TCP_NODELAY option', `${connectionModel}.tcpNoDelay`, '"ClientConnectorTcpNoDelay"', connectionEnabled, 'Value for TCP_NODELAY socket option')
+            .col-sm-6
+                +preview-xml-java(model, 'clusterClientConnector')

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug b/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
index 89e00d7..d72f962 100644
--- a/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
+++ b/modules/web-console/frontend/app/modules/states/configuration/clusters/sql-connector.pug
@@ -21,7 +21,7 @@ include /app/helpers/jade/mixins
 -var connectionModel = model + '.sqlConnectorConfiguration'
 -var connectionEnabled = connectionModel + '.enabled'
 
-.panel.panel-default(ng-show='$ctrl.available("2.1.0")' ng-form=form novalidate)
+.panel.panel-default(ng-show='$ctrl.available(["2.1.0", "2.3.0"])' ng-form=form novalidate)
     .panel-heading(bs-collapse-toggle ng-click=`ui.loadPanel('${form}')`)
         ignite-form-panel-chevron
         label Query configuration
@@ -30,7 +30,7 @@ include /app/helpers/jade/mixins
         //- TODO IGNITE-5415 Add link to documentation.
         ignite-form-revert
     .panel-collapse(role='tabpanel' bs-collapse-target id=`${form}`)
-        .panel-body(ng-if=`$ctrl.available("2.1.0") && ui.isPanelLoaded('${form}')`)
+        .panel-body(ng-if=`$ctrl.available(["2.1.0", "2.3.0"]) && ui.isPanelLoaded('${form}')`)
             .col-sm-6
                 .settings-row
                     +checkbox('Enabled', connectionEnabled, '"SqlConnectorEnabled"', 'Flag indicating whether to configure SQL connector configuration')

http://git-wip-us.apache.org/repos/asf/ignite/blob/58dbbc53/modules/web-console/frontend/views/configuration/clusters.tpl.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/configuration/clusters.tpl.pug b/modules/web-console/frontend/views/configuration/clusters.tpl.pug
index 26a1da1..19ed350 100644
--- a/modules/web-console/frontend/views/configuration/clusters.tpl.pug
+++ b/modules/web-console/frontend/views/configuration/clusters.tpl.pug
@@ -45,6 +45,10 @@ include /app/helpers/jade/mixins
                             include /app/modules/states/configuration/clusters/binary
                             include /app/modules/states/configuration/clusters/cache-key-cfg
                             include /app/modules/states/configuration/clusters/checkpoint
+
+                            //- Since ignite 2.3
+                            include /app/modules/states/configuration/clusters/client-connector
+
                             include /app/modules/states/configuration/clusters/collision
                             include /app/modules/states/configuration/clusters/communication
                             include /app/modules/states/configuration/clusters/connector
@@ -73,6 +77,8 @@ include /app/helpers/jade/mixins
 
                             //- Since ignite 2.1, deprecated in ignite 2.3
                             include /app/modules/states/configuration/clusters/persistence
+
+                            //- Deprecated in ignite 2.3
                             include /app/modules/states/configuration/clusters/sql-connector
 
                             include /app/modules/states/configuration/clusters/service