IGNITE-5790 SQL: Append UUID to names of Ignite instances opened by JDBC. Signed-off-by: nikolay_tikhonov <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f00449fe Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f00449fe Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f00449fe Branch: refs/heads/ignite-5578 Commit: f00449fe164b8ddd0430452cdff692498cce0df6 Parents: d779f06 Author: Ilya Kasnacheev <[email protected]> Authored: Fri Aug 18 15:19:53 2017 +0300 Committer: nikolay_tikhonov <[email protected]> Committed: Fri Aug 18 15:21:55 2017 +0300 ---------------------------------------------------------------------- modules/clients/src/test/config/jdbc-config.xml | 1 + .../jdbc2/JdbcConnectionReopenTest.java | 51 ++++++++++++++++++++ .../jdbc/suite/IgniteJdbcDriverTestSuite.java | 2 + .../ignite/internal/jdbc2/JdbcConnection.java | 38 ++++++++++----- 4 files changed, 80 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/f00449fe/modules/clients/src/test/config/jdbc-config.xml ---------------------------------------------------------------------- diff --git a/modules/clients/src/test/config/jdbc-config.xml b/modules/clients/src/test/config/jdbc-config.xml index b05fe64..38535a1 100644 --- a/modules/clients/src/test/config/jdbc-config.xml +++ b/modules/clients/src/test/config/jdbc-config.xml @@ -29,6 +29,7 @@ <!-- JDBC driver should force true value --> <property name="clientMode" value="false"/> + <property name="igniteInstanceName" value="sqlGrid"/> <property name="localHost" value="127.0.0.1"/> <property name="discoverySpi"> http://git-wip-us.apache.org/repos/asf/ignite/blob/f00449fe/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionReopenTest.java ---------------------------------------------------------------------- diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionReopenTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionReopenTest.java new file mode 100644 index 0000000..531b4e5 --- /dev/null +++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcConnectionReopenTest.java @@ -0,0 +1,51 @@ +/* + * 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.jdbc2; + +import java.sql.Connection; +import java.sql.DriverManager; +import org.apache.ignite.Ignite; +import org.apache.ignite.internal.IgnitionEx; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +import static org.apache.ignite.IgniteJdbcDriver.CFG_URL_PREFIX; + +/** + * Connection test. + */ +public class JdbcConnectionReopenTest extends GridCommonAbstractTest { + /** + * @return Config URL to use in test. + */ + private String configURL() { + return "modules/clients/src/test/config/jdbc-config.xml"; + } + + /** + * @throws Exception If failed. + */ + public void testReopenSameInstanceName() throws Exception { + String url = CFG_URL_PREFIX + configURL(); + + try (Ignite ignite = IgnitionEx.start(configURL())) { + try (Connection conn = DriverManager.getConnection(url)) { + assertNotNull(conn); + } + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/f00449fe/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java index a20002b..691ddbf 100644 --- a/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java +++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java @@ -19,6 +19,7 @@ package org.apache.ignite.jdbc.suite; import junit.framework.TestSuite; import org.apache.ignite.internal.jdbc2.JdbcBlobTest; +import org.apache.ignite.internal.jdbc2.JdbcConnectionReopenTest; import org.apache.ignite.internal.jdbc2.JdbcDistributedJoinsQueryTest; import org.apache.ignite.jdbc.JdbcComplexQuerySelfTest; import org.apache.ignite.jdbc.JdbcConnectionSelfTest; @@ -77,6 +78,7 @@ public class IgniteJdbcDriverTestSuite extends TestSuite { suite.addTest(new TestSuite(JdbcDefaultNoOpCacheTest.class)); suite.addTest(new TestSuite(JdbcPojoQuerySelfTest.class)); suite.addTest(new TestSuite(JdbcPojoLegacyQuerySelfTest.class)); + suite.addTest(new TestSuite(JdbcConnectionReopenTest.class)); // Ignite client node based driver tests suite.addTest(new TestSuite(org.apache.ignite.internal.jdbc2.JdbcConnectionSelfTest.class)); http://git-wip-us.apache.org/repos/asf/ignite/blob/f00449fe/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java index 6fb723e..dd0ec08 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.jdbc2; +import java.net.URL; import java.sql.Array; import java.sql.Blob; import java.sql.CallableStatement; @@ -50,7 +51,6 @@ import org.apache.ignite.IgniteClientDisconnectedException; import org.apache.ignite.IgniteDataStreamer; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteJdbcDriver; -import org.apache.ignite.Ignition; import org.apache.ignite.cluster.ClusterGroup; import org.apache.ignite.compute.ComputeTaskTimeoutException; import org.apache.ignite.configuration.IgniteConfiguration; @@ -64,6 +64,7 @@ import org.apache.ignite.internal.processors.query.QueryUtils; import org.apache.ignite.internal.processors.resource.GridSpringResourceContext; import org.apache.ignite.internal.util.future.GridFutureAdapter; import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteBiTuple; import org.apache.ignite.lang.IgniteCallable; import org.apache.ignite.resources.IgniteInstanceResource; @@ -241,21 +242,30 @@ public class JdbcConnection implements Connection { fut = old; else { try { - Ignite ignite; + final IgniteBiTuple<IgniteConfiguration, ? extends GridSpringResourceContext> cfgAndCtx; + + String jdbcName = "ignite-jdbc-driver-" + UUID.randomUUID().toString(); if (NULL.equals(cfg)) { - Ignition.setClientMode(true); + URL url = U.resolveIgniteUrl(IgnitionEx.DFLT_CFG); - ignite = Ignition.start(); - } - else { - IgniteBiTuple<IgniteConfiguration, ? extends GridSpringResourceContext> cfgAndCtx = - loadConfiguration(cfgUrl); + if (url != null) + cfgAndCtx = loadConfiguration(IgnitionEx.DFLT_CFG, jdbcName); + else { + U.warn(null, "Default Spring XML file not found (is IGNITE_HOME set?): " + + IgnitionEx.DFLT_CFG); - ignite = IgnitionEx.start(cfgAndCtx.get1(), cfgAndCtx.get2()); + IgniteConfiguration cfg = new IgniteConfiguration() + .setIgniteInstanceName(jdbcName) + .setClientMode(true); + + cfgAndCtx = new IgniteBiTuple<>(cfg, null); + } } + else + cfgAndCtx = loadConfiguration(cfgUrl, jdbcName); - fut.onDone(ignite); + fut.onDone(IgnitionEx.start(cfgAndCtx.get1(), cfgAndCtx.get2())); } catch (IgniteException e) { fut.onDone(e); @@ -274,9 +284,11 @@ public class JdbcConnection implements Connection { /** * @param cfgUrl Config URL. + * @param jdbcName Appended to instance name or used as default. * @return Ignite config and Spring context. */ - private IgniteBiTuple<IgniteConfiguration, ? extends GridSpringResourceContext> loadConfiguration(String cfgUrl) { + private IgniteBiTuple<IgniteConfiguration, ? extends GridSpringResourceContext> loadConfiguration(String cfgUrl, + String jdbcName) { try { IgniteBiTuple<Collection<IgniteConfiguration>, ? extends GridSpringResourceContext> cfgMap = IgnitionEx.loadConfigurations(cfgUrl); @@ -284,7 +296,9 @@ public class JdbcConnection implements Connection { IgniteConfiguration cfg = F.first(cfgMap.get1()); if (cfg.getIgniteInstanceName() == null) - cfg.setIgniteInstanceName("ignite-jdbc-driver-" + UUID.randomUUID().toString()); + cfg.setIgniteInstanceName(jdbcName); + else + cfg.setIgniteInstanceName(cfg.getIgniteInstanceName() + "-" + jdbcName); cfg.setClientMode(true); // Force client mode.
