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 2017/09/20 12:48:01 UTC

[03/33] ignite git commit: IGNITE-6413: Improved thin client configuration processing. This closes #2680.

IGNITE-6413: Improved thin client configuration processing. This closes #2680.


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

Branch: refs/heads/ignite-3478
Commit: 2d848c9d0440415a2e342da9ce157c59318062d5
Parents: 2200214
Author: devozerov <vo...@gridgain.com>
Authored: Mon Sep 18 13:36:38 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Mon Sep 18 13:36:38 2017 +0300

----------------------------------------------------------------------
 .../configuration/IgniteConfiguration.java      |   3 +-
 .../odbc/ClientConnectorConfigurationEx.java    |  27 +++
 .../odbc/ClientListenerProcessor.java           |  22 ++-
 ...onnectorConfigurationValidationSelfTest.java | 195 ++++++++++++++++---
 4 files changed, 219 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/2d848c9d/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 b445205..6e91b10 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
@@ -43,6 +43,7 @@ import org.apache.ignite.compute.ComputeTask;
 import org.apache.ignite.events.Event;
 import org.apache.ignite.events.EventType;
 import org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
+import org.apache.ignite.internal.processors.odbc.ClientListenerProcessor;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.lang.IgniteAsyncCallback;
 import org.apache.ignite.lang.IgniteInClosure;
@@ -472,7 +473,7 @@ public class IgniteConfiguration {
     private SqlConnectorConfiguration sqlConnCfg;
 
     /** Client connector configuration. */
-    private ClientConnectorConfiguration cliConnCfg;
+    private ClientConnectorConfiguration cliConnCfg = ClientListenerProcessor.DFLT_CLI_CFG;
 
     /**
      * Creates valid grid configuration with all default values.

http://git-wip-us.apache.org/repos/asf/ignite/blob/2d848c9d/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientConnectorConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientConnectorConfigurationEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientConnectorConfigurationEx.java
new file mode 100644
index 0000000..82b1306
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientConnectorConfigurationEx.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.odbc;
+
+import org.apache.ignite.configuration.ClientConnectorConfiguration;
+
+/**
+ * Extended client connector configuration. Needed to distinguish between default and non-default configurations.
+ */
+public class ClientConnectorConfigurationEx extends ClientConnectorConfiguration {
+    // No-op.
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/2d848c9d/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
index 3462da2..06977c8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/ClientListenerProcessor.java
@@ -45,6 +45,9 @@ import org.jetbrains.annotations.Nullable;
  * Client connector processor.
  */
 public class ClientListenerProcessor extends GridProcessorAdapter {
+    /** Default client connector configuration. */
+    public static final ClientConnectorConfiguration DFLT_CLI_CFG = new ClientConnectorConfigurationEx();
+
     /** Default number of selectors. */
     private static final int DFLT_SELECTOR_CNT = Math.min(4, Runtime.getRuntime().availableProcessors());
 
@@ -204,7 +207,10 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
         SqlConnectorConfiguration sqlConnCfg = cfg.getSqlConnectorConfiguration();
         ClientConnectorConfiguration cliConnCfg = cfg.getClientConnectorConfiguration();
 
-        if (cliConnCfg != null) {
+        if (cliConnCfg == null && sqlConnCfg == null && odbcCfg == null)
+            return null;
+
+        if (isNotDefault(cliConnCfg)) {
             // User set configuration explicitly. User it, but print a warning about ignored SQL/ODBC configs.
             if (odbcCfg != null) {
                 U.warn(log, "Deprecated " + OdbcConfiguration.class.getSimpleName() + " will be ignored because " +
@@ -221,8 +227,6 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
 
             if (sqlConnCfg != null) {
                 // Migrate from SQL configuration.
-                cliConnCfg = new ClientConnectorConfiguration();
-
                 cliConnCfg.setHost(sqlConnCfg.getHost());
                 cliConnCfg.setMaxOpenCursorsPerConnection(sqlConnCfg.getMaxOpenCursorsPerConnection());
                 cliConnCfg.setPort(sqlConnCfg.getPort());
@@ -244,8 +248,6 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
                 // Migrate from ODBC configuration.
                 HostAndPortRange hostAndPort = parseOdbcEndpoint(odbcCfg);
 
-                cliConnCfg = new ClientConnectorConfiguration();
-
                 cliConnCfg.setHost(hostAndPort.host());
                 cliConnCfg.setPort(hostAndPort.portFrom());
                 cliConnCfg.setPortRange(hostAndPort.portTo() - hostAndPort.portFrom());
@@ -305,4 +307,14 @@ public class ClientListenerProcessor extends GridProcessorAdapter {
 
         return res;
     }
+
+    /**
+     * Check whether configuration is not default.
+     *
+     * @param cliConnCfg Client connector configuration.
+     * @return {@code True} if not default.
+     */
+    private static boolean isNotDefault(ClientConnectorConfiguration cliConnCfg) {
+        return cliConnCfg != null && !(cliConnCfg instanceof ClientConnectorConfigurationEx);
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/2d848c9d/modules/indexing/src/test/java/org/apache/ignite/internal/processors/client/ClientConnectorConfigurationValidationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/client/ClientConnectorConfigurationValidationSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/client/ClientConnectorConfigurationValidationSelfTest.java
index 2044949..c861e49 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/client/ClientConnectorConfigurationValidationSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/client/ClientConnectorConfigurationValidationSelfTest.java
@@ -19,10 +19,13 @@ package org.apache.ignite.internal.processors.client;
 
 import junit.framework.TestCase;
 import org.apache.ignite.IgniteException;
+import org.apache.ignite.Ignition;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.ClientConnectorConfiguration;
+import org.apache.ignite.configuration.OdbcConfiguration;
+import org.apache.ignite.configuration.SqlConnectorConfiguration;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -33,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -60,7 +64,7 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
      */
     public void testDefault() throws Exception {
         check(new ClientConnectorConfiguration(), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
     }
 
     /**
@@ -72,10 +76,10 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         check(new ClientConnectorConfiguration().setHost("126.0.0.1"), false);
 
         check(new ClientConnectorConfiguration().setHost("127.0.0.1"), true);
-        assertJdbc("127.0.0.1", ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc("127.0.0.1", ClientConnectorConfiguration.DFLT_PORT);
 
         check(new ClientConnectorConfiguration().setHost("0.0.0.0"), true);
-        assertJdbc("0.0.0.0", ClientConnectorConfiguration.DFLT_PORT + 1);
+        checkJdbc("0.0.0.0", ClientConnectorConfiguration.DFLT_PORT + 1);
 
     }
 
@@ -91,10 +95,10 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         check(new ClientConnectorConfiguration().setPort(65536), false);
 
         check(new ClientConnectorConfiguration().setPort(ClientConnectorConfiguration.DFLT_PORT), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
 
         check(new ClientConnectorConfiguration().setPort(ClientConnectorConfiguration.DFLT_PORT + 200), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 200);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 200);
     }
 
 
@@ -107,10 +111,10 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         check(new ClientConnectorConfiguration().setPortRange(-1), false);
 
         check(new ClientConnectorConfiguration().setPortRange(0), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
 
         check(new ClientConnectorConfiguration().setPortRange(10), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 1);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 1);
     }
 
     /**
@@ -123,10 +127,10 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         check(new ClientConnectorConfiguration().setSocketReceiveBufferSize(-4 * 1024), false);
 
         check(new ClientConnectorConfiguration().setSocketSendBufferSize(4 * 1024), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
 
         check(new ClientConnectorConfiguration().setSocketReceiveBufferSize(4 * 1024), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 1);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 1);
     }
 
     /**
@@ -138,10 +142,10 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         check(new ClientConnectorConfiguration().setMaxOpenCursorsPerConnection(-1), false);
 
         check(new ClientConnectorConfiguration().setMaxOpenCursorsPerConnection(0), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
 
         check(new ClientConnectorConfiguration().setMaxOpenCursorsPerConnection(100), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 1);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT + 1);
     }
 
     /**
@@ -154,24 +158,156 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         check(new ClientConnectorConfiguration().setThreadPoolSize(-1), false);
 
         check(new ClientConnectorConfiguration().setThreadPoolSize(4), true);
-        assertJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+        checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
     }
 
     /**
-     * Perform check.
+     * Test ODBC connector conversion.
      *
-     * @param sqlCfg SQL configuration.
-     * @param success Success flag. * @throws Exception If failed.
+     * @throws Exception If failed.
+     */
+    public void testOdbcConnectorConversion() throws Exception {
+        int port = ClientConnectorConfiguration.DFLT_PORT - 1;
+
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setOdbcConfiguration(new OdbcConfiguration().setEndpointAddress("127.0.0.1:" + port));
+
+        Ignition.start(cfg);
+
+        checkJdbc(null, port);
+    }
+
+    /**
+     * Test SQL connector conversion.
+     *
+     * @throws Exception If failed.
+     */
+    public void testSqlConnectorConversion() throws Exception {
+        int port = ClientConnectorConfiguration.DFLT_PORT - 1;
+
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setSqlConnectorConfiguration(new SqlConnectorConfiguration().setPort(port));
+
+        Ignition.start(cfg);
+
+        checkJdbc(null, port);
+    }
+
+    /**
+     * Test SQL connector conversion.
+     *
+     * @throws Exception If failed.
      */
-    @SuppressWarnings({"ThrowableResultOfMethodCallIgnored", "unchecked"})
-    private void check(ClientConnectorConfiguration sqlCfg, boolean success) throws Exception {
+    public void testIgnoreOdbcWhenSqlSet() throws Exception {
+        int port = ClientConnectorConfiguration.DFLT_PORT - 1;
+
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setSqlConnectorConfiguration(new SqlConnectorConfiguration().setPort(port));
+        cfg.setOdbcConfiguration(new OdbcConfiguration().setEndpointAddress("127.0.0.1:" + (port - 1)));
+
+        Ignition.start(cfg);
+
+        checkJdbc(null, port);
+    }
+
+    /**
+     * Test SQL connector conversion.
+     *
+     * @throws Exception If failed.
+     */
+    public void testIgnoreOdbcAndSqlWhenClientSet() throws Exception {
+        int cliPort = ClientConnectorConfiguration.DFLT_PORT - 1;
+        int sqlPort = ClientConnectorConfiguration.DFLT_PORT - 2;
+        int odbcPort = ClientConnectorConfiguration.DFLT_PORT - 3;
+
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setClientConnectorConfiguration(new ClientConnectorConfiguration().setPort(cliPort));
+        cfg.setSqlConnectorConfiguration(new SqlConnectorConfiguration().setPort(sqlPort));
+        cfg.setOdbcConfiguration(new OdbcConfiguration().setEndpointAddress("127.0.0.1:" + odbcPort));
+
+        Ignition.start(cfg);
+
+        checkJdbc(null, cliPort);
+    }
+
+    /**
+     * Test SQL connector conversion.
+     *
+     * @throws Exception If failed.
+     */
+    public void testIgnoreOdbcWhenClientSet() throws Exception {
+        int cliPort = ClientConnectorConfiguration.DFLT_PORT - 1;
+        int odbcPort = ClientConnectorConfiguration.DFLT_PORT - 2;
+
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setClientConnectorConfiguration(new ClientConnectorConfiguration().setPort(cliPort));
+        cfg.setOdbcConfiguration(new OdbcConfiguration().setEndpointAddress("127.0.0.1:" + odbcPort));
+
+        Ignition.start(cfg);
+
+        checkJdbc(null, cliPort);
+    }
+
+    /**
+     * Test SQL connector conversion.
+     *
+     * @throws Exception If failed.
+     */
+    public void testIgnoreSqlWhenClientSet() throws Exception {
+        int cliPort = ClientConnectorConfiguration.DFLT_PORT - 1;
+        int sqlPort = ClientConnectorConfiguration.DFLT_PORT - 2;
+
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setClientConnectorConfiguration(new ClientConnectorConfiguration().setPort(cliPort));
+        cfg.setSqlConnectorConfiguration(new SqlConnectorConfiguration().setPort(sqlPort));
+
+        Ignition.start(cfg);
+
+        checkJdbc(null, cliPort);
+    }
+
+    /**
+     * Test disabled client.
+     *
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
+    public void testDisabled() throws Exception {
+        IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setClientConnectorConfiguration(null);
+
+        Ignition.start(cfg);
+
+        GridTestUtils.assertThrows(log, new Callable<Void>() {
+            @Override public Void call() throws Exception {
+                checkJdbc(null, ClientConnectorConfiguration.DFLT_PORT);
+
+                return null;
+            }
+        }, SQLException.class, null);
+    }
+
+    /**
+     * Get base node configuration.
+     *
+     * @return Configuration.
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("unchecked")
+    private IgniteConfiguration baseConfiguration() throws Exception {
         final IgniteConfiguration cfg = super.getConfiguration();
 
         cfg.setIgniteInstanceName(ClientConnectorConfigurationValidationSelfTest.class.getName() + "-" +
             NODE_IDX_GEN.incrementAndGet());
 
         cfg.setLocalHost("127.0.0.1");
-        cfg.setClientConnectorConfiguration(sqlCfg);
         cfg.setMarshaller(new BinaryMarshaller());
 
         TcpDiscoverySpi spi = new TcpDiscoverySpi();
@@ -180,10 +316,25 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
         cfg.setDiscoverySpi(spi);
 
         CacheConfiguration ccfg = new CacheConfiguration(CACHE_NAME)
-            .setIndexedTypes(SqlConnectorKey.class, SqlConnectorValue.class);
+            .setIndexedTypes(ClientConnectorKey.class, ClientConnectorValue.class);
 
         cfg.setCacheConfiguration(ccfg);
 
+        return cfg;
+    }
+
+    /**
+     * Perform check.
+     *
+     * @param cliConnCfg Client connector configuration.
+     * @param success Success flag. * @throws Exception If failed.
+     */
+    @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
+    private void check(ClientConnectorConfiguration cliConnCfg, boolean success) throws Exception {
+        final IgniteConfiguration cfg = baseConfiguration();
+
+        cfg.setClientConnectorConfiguration(cliConnCfg);
+
         if (success)
             startGrid(cfg.getIgniteInstanceName(), cfg);
         else {
@@ -204,7 +355,7 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
      * @param port Port.
      * @throws Exception If failed.
      */
-    private void assertJdbc(@Nullable String host, int port) throws Exception {
+    private void checkJdbc(@Nullable String host, int port) throws Exception {
         if (host == null)
             host = "127.0.0.1";
 
@@ -226,7 +377,7 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
     /**
      * Key class.
      */
-    private static class SqlConnectorKey {
+    private static class ClientConnectorKey {
         @QuerySqlField
         public int key;
     }
@@ -234,7 +385,7 @@ public class ClientConnectorConfigurationValidationSelfTest extends GridCommonAb
     /**
      * Value class.
      */
-    private static class SqlConnectorValue {
+    private static class ClientConnectorValue {
         @QuerySqlField
         public int val;
     }