This is an automated email from the ASF dual-hosted git repository. amashenkov pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push: new 7b638a5 IGNITE-11705: Ability to control affinity cache size. added. 7b638a5 is described below commit 7b638a512792d9c6ed579cea060a45e745d8c296 Author: alapin <lapin1...@gmail.com> AuthorDate: Wed Jun 5 16:48:13 2019 +0300 IGNITE-11705: Ability to control affinity cache size. added. --- .../thin/JdbcThinAffinityAwarenessSelfTest.java | 93 +++++-- .../jdbc/thin/JdbcThinConnectionSelfTest.java | 288 ++++++++++++++------- .../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java | 17 +- .../ignite/internal/jdbc/thin/AffinityCache.java | 21 +- .../internal/jdbc/thin/ConnectionProperties.java | 27 ++ .../jdbc/thin/ConnectionPropertiesImpl.java | 40 ++- .../JdbcThinAffinityAwarenessMappingGroup.java | 10 +- .../internal/jdbc/thin/JdbcThinConnection.java | 66 +++-- 8 files changed, 401 insertions(+), 161 deletions(-) diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java index f0e632c..1383c5a 100644 --- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinAffinityAwarenessSelfTest.java @@ -42,6 +42,7 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.internal.jdbc.thin.AffinityCache; import org.apache.ignite.internal.jdbc.thin.JdbcThinPartitionResultDescriptor; import org.apache.ignite.internal.jdbc.thin.QualifiedSQLQuery; +import org.apache.ignite.internal.processors.cache.GridCacheUtils; import org.apache.ignite.internal.processors.query.QueryHistory; import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing; import org.apache.ignite.internal.sql.optimizer.affinity.PartitionResult; @@ -433,22 +434,22 @@ public class JdbcThinAffinityAwarenessSelfTest extends JdbcThinAbstractSelfTest */ @Test public void testAffinityAwarenessIsSkippedIfItIsSwitchedOff() throws Exception { - Connection conn = DriverManager.getConnection( + try (Connection conn = DriverManager.getConnection( "jdbc:ignite:thin://127.0.0.1:10800..10802?affinityAwareness=false"); + Statement stmt = conn.createStatement()) { - Statement stmt = conn.createStatement(); + final String cacheName = "yac"; - final String cacheName = "yac"; + CacheConfiguration<Object, Object> cache = prepareCacheConfig(cacheName); - CacheConfiguration<Object, Object> cache = prepareCacheConfig(cacheName); + ignite(0).createCache(cache); - ignite(0).createCache(cache); + stmt.executeQuery("select * from \"" + cacheName + "\".Person where _key = 1"); - stmt.executeQuery("select * from \"" + cacheName + "\".Person where _key = 1"); + AffinityCache affinityCache = GridTestUtils.getFieldValue(conn, "affinityCache"); - AffinityCache affinityCache = GridTestUtils.getFieldValue(conn, "affinityCache"); - - assertNull("Affinity cache is not null.", affinityCache); + assertNull("Affinity cache is not null.", affinityCache); + } } /** @@ -458,22 +459,22 @@ public class JdbcThinAffinityAwarenessSelfTest extends JdbcThinAbstractSelfTest */ @Test public void testAffinityAwarenessIsSkippedByDefault() throws Exception { - Connection conn = DriverManager.getConnection( + try (Connection conn = DriverManager.getConnection( "jdbc:ignite:thin://127.0.0.1:10800..10802"); + Statement stmt = conn.createStatement()) { - Statement stmt = conn.createStatement(); + final String cacheName = "yacccc"; - final String cacheName = "yacccc"; + CacheConfiguration<Object, Object> cache = prepareCacheConfig(cacheName); - CacheConfiguration<Object, Object> cache = prepareCacheConfig(cacheName); - - ignite(0).createCache(cache); + ignite(0).createCache(cache); - stmt.executeQuery("select * from \"" + cacheName + "\".Person where _key = 1"); + stmt.executeQuery("select * from \"" + cacheName + "\".Person where _key = 1"); - AffinityCache affinityCache = GridTestUtils.getFieldValue(conn, "affinityCache"); + AffinityCache affinityCache = GridTestUtils.getFieldValue(conn, "affinityCache"); - assertNull("Affinity cache is not null.", affinityCache); + assertNull("Affinity cache is not null.", affinityCache); + } } /** @@ -555,6 +556,62 @@ public class JdbcThinAffinityAwarenessSelfTest extends JdbcThinAbstractSelfTest } /** + * Check that affinityAwarenessSQLCacheSize and affinityAwarenessPartitionDistributionsCacheSize + * actually limit corresponding caches within affinity awareness cache. + * + * @throws Exception If failed. + */ + @Test + public void testAffinityAwarenessLimitedCacheSize() throws Exception { + try (Connection conn = DriverManager.getConnection( + "jdbc:ignite:thin://127.0.0.1:10800..10802?affinityAwareness=true" + + "&affinityAwarenessSQLCacheSize=1&affinityAwarenessPartitionDistributionsCacheSize=1"); + Statement stmt = conn.createStatement()) { + final String cacheName1 = UUID.randomUUID().toString().substring(0, 6); + + CacheConfiguration<Object, Object> cache1 = prepareCacheConfig(cacheName1); + + ignite(0).createCache(cache1); + + fillCache(cacheName1); + + final String cacheName2 = UUID.randomUUID().toString().substring(0, 6); + + CacheConfiguration<Object, Object> cache2 = prepareCacheConfig(cacheName2); + + ignite(0).createCache(cache2); + + fillCache(cacheName2); + + stmt.executeQuery("select * from \"" + cacheName1 + "\".Person where _key = 1"); + stmt.executeQuery("select * from \"" + cacheName1 + "\".Person where _key = 1"); + + stmt.executeQuery("select * from \"" + cacheName2 + "\".Person where _key = 1"); + stmt.executeQuery("select * from \"" + cacheName2 + "\".Person where _key = 1"); + + AffinityCache affinityCache = GridTestUtils.getFieldValue(conn, "affinityCache"); + + GridBoundedLinkedHashMap<Integer, UUID[]> partitionsDistributionCache = + GridTestUtils.getFieldValue(affinityCache, "cachePartitionsDistribution"); + + GridBoundedLinkedHashMap<QualifiedSQLQuery, JdbcThinPartitionResultDescriptor> sqlCache = + GridTestUtils.getFieldValue(affinityCache, "sqlCache"); + + assertEquals("Unexpected count of partitions distributions.", 1, + partitionsDistributionCache.size()); + + assertEquals("Unexpected count of sql queries.", 1, sqlCache.size()); + + assertTrue("Unexpected distribution is found.", + partitionsDistributionCache.containsKey(GridCacheUtils.cacheId(cacheName2))); + + assertTrue("Unexpected sql query is found.", + sqlCache.containsKey(new QualifiedSQLQuery("PUBLIC", + "select * from \"" + cacheName2 + "\".Person where _key = 1"))); + } + } + + /** * Prepares default cache configuration with given name. * * @param cacheName Cache name. diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java index 185fa91..f29ccfa 100644 --- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java @@ -93,11 +93,11 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { "jdbc:ignite:thin://127.0.0.1:10800..10802" : "jdbc:ignite:thin://127.0.0.1"; - /** URL with affinity awareness flag. */ - private String urlWithAffinityAwarenessFlag = url + "?affinityAwareness=" + affinityAwareness; + /** URL with affinity awareness property. */ + private String urlWithAffinityAwarenessProp = url + "?affinityAwareness=" + affinityAwareness; - /** URL with affinity awareness flag and semicolon as delimeter. */ - private String urlWithAffinityAwarenessFlagSemicolon = url + ";affinityAwareness=" + affinityAwareness; + /** URL with affinity awareness property and semicolon as delimiter. */ + private String urlWithAffinityAwarenessPropSemicolon = url + ";affinityAwareness=" + affinityAwareness; /** Nodes count. */ private int nodesCnt = affinityAwareness ? 4 : 2; @@ -175,13 +175,13 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { public void testSocketBuffers() throws Exception { final int dfltDufSize = 64 * 1024; - assertInvalid(urlWithAffinityAwarenessFlag + "&socketSendBuffer=-1", + assertInvalid(urlWithAffinityAwarenessProp + "&socketSendBuffer=-1", "Property cannot be lower than 0 [name=socketSendBuffer, value=-1]"); - assertInvalid(urlWithAffinityAwarenessFlag + "&socketReceiveBuffer=-1", + assertInvalid(urlWithAffinityAwarenessProp + "&socketReceiveBuffer=-1", "Property cannot be lower than 0 [name=socketReceiveBuffer, value=-1]"); - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(dfltDufSize, io.connectionProperties().getSocketSendBuffer()); assertEquals(dfltDufSize, io.connectionProperties().getSocketReceiveBuffer()); @@ -189,21 +189,21 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { } // Note that SO_* options are hints, so we check that value is equals to either what we set or to default. - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&socketSendBuffer=1024")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&socketSendBuffer=1024")) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(1024, io.connectionProperties().getSocketSendBuffer()); assertEquals(dfltDufSize, io.connectionProperties().getSocketReceiveBuffer()); } } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&socketReceiveBuffer=1024")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&socketReceiveBuffer=1024")) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(dfltDufSize, io.connectionProperties().getSocketSendBuffer()); assertEquals(1024, io.connectionProperties().getSocketReceiveBuffer()); } } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&" + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&" + "socketSendBuffer=1024&socketReceiveBuffer=2048")) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(1024, io.connectionProperties().getSocketSendBuffer()); @@ -221,28 +221,28 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { public void testSocketBuffersSemicolon() throws Exception { final int dfltDufSize = 64 * 1024; - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";socketSendBuffer=-1", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";socketSendBuffer=-1", "Property cannot be lower than 0 [name=socketSendBuffer, value=-1]"); - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";socketReceiveBuffer=-1", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";socketReceiveBuffer=-1", "Property cannot be lower than 0 [name=socketReceiveBuffer, value=-1]"); // Note that SO_* options are hints, so we check that value is equals to either what we set or to default. - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";socketSendBuffer=1024")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";socketSendBuffer=1024")) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(1024, io.connectionProperties().getSocketSendBuffer()); assertEquals(dfltDufSize, io.connectionProperties().getSocketReceiveBuffer()); } } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";socketReceiveBuffer=1024")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";socketReceiveBuffer=1024")) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(dfltDufSize, io.connectionProperties().getSocketSendBuffer()); assertEquals(1024, io.connectionProperties().getSocketReceiveBuffer()); } } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";" + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";" + "socketSendBuffer=1024;socketReceiveBuffer=2048")) { for (JdbcThinTcpIo io: ios(conn)) { assertEquals(1024, io.connectionProperties().getSocketSendBuffer()); @@ -258,21 +258,21 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testUpdateBatchSize() throws Exception { - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";updateBatchSize=-1", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";updateBatchSize=-1", "Property cannot be lower than 1 [name=updateBatchSize, value=-1]"); - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon)) { for (JdbcThinTcpIo io: ios(conn)) assertNull(io.connectionProperties().getUpdateBatchSize()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";updateBatchSize=1024")) { for (JdbcThinTcpIo io: ios(conn)) assertEquals(1024, (int)io.connectionProperties().getUpdateBatchSize()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&updateBatchSize=1024")) { for (JdbcThinTcpIo io: ios(conn)) assertEquals(1024, (int)io.connectionProperties().getUpdateBatchSize()); @@ -280,48 +280,140 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { } /** + * Test affinity awareness Sql cache size property. + * + * @throws Exception If failed. + */ + @Test + public void testAffinityAwarenessSqlCacheSizeProperty() throws Exception { + assertInvalid(urlWithAffinityAwarenessProp + "&affinityAwarenessSQLCacheSize=0", + "Property cannot be lower than 1 [name=affinityAwarenessSQLCacheSize, value=0]"); + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { + for (JdbcThinTcpIo io : ios(conn)) + assertEquals(1_000, io.connectionProperties().getAffinityAwarenessSqlCacheSize()); + } + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + + "&affinityAwarenessSQLCacheSize=100")) { + for (JdbcThinTcpIo io : ios(conn)) + assertEquals(100, io.connectionProperties().getAffinityAwarenessSqlCacheSize()); + } + } + + /** + * Test affinity awareness Sql cache size property with semicolon. + * + * @throws Exception If failed. + */ + @Test + public void testAffinityAwarenessSqlCacheSizePropertySemicolon() throws Exception { + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";affinityAwarenessSQLCacheSize=0", + "Property cannot be lower than 1 [name=affinityAwarenessSQLCacheSize, value=0]"); + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon)) { + for (JdbcThinTcpIo io : ios(conn)) + assertEquals(1_000, io.connectionProperties().getAffinityAwarenessSqlCacheSize()); + } + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + + ";affinityAwarenessSQLCacheSize=100")) { + for (JdbcThinTcpIo io : ios(conn)) + assertEquals(100, io.connectionProperties().getAffinityAwarenessSqlCacheSize()); + } + } + + /** + * Test affinity awareness partition distributions cache size property. + * + * @throws Exception If failed. + */ + @Test + public void testAffinityAwarenessPartitionDistributionsCacheSizeProperty() throws Exception { + assertInvalid(urlWithAffinityAwarenessProp + "&affinityAwarenessPartitionDistributionsCacheSize=0", + "Property cannot be lower than 1 [name=affinityAwarenessPartitionDistributionsCacheSize, value=0]"); + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { + for (JdbcThinTcpIo io : ios(conn)) { + assertEquals(1_000, + io.connectionProperties().getAffinityAwarenessPartitionDistributionsCacheSize()); + } + } + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + + "&affinityAwarenessPartitionDistributionsCacheSize=100")) { + for (JdbcThinTcpIo io : ios(conn)) + assertEquals(100, io.connectionProperties().getAffinityAwarenessPartitionDistributionsCacheSize()); + } + } + + /** + * Test affinity awareness partition distributions cache size property with semicolon. + * + * @throws Exception If failed. + */ + @Test + public void testAffinityAwarenessPartitionDistributionsCacheSizePropertySemicolon() throws Exception { + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";affinityAwarenessPartitionDistributionsCacheSize=0", + "Property cannot be lower than 1 [name=affinityAwarenessPartitionDistributionsCacheSize, value=0]"); + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon)) { + for (JdbcThinTcpIo io : ios(conn)) { + assertEquals(1_000, + io.connectionProperties().getAffinityAwarenessPartitionDistributionsCacheSize()); + } + } + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + + ";affinityAwarenessPartitionDistributionsCacheSize=100")) { + for (JdbcThinTcpIo io : ios(conn)) + assertEquals(100, io.connectionProperties().getAffinityAwarenessPartitionDistributionsCacheSize()); + } + } + + /** * Test SQL hints. * * @throws Exception If failed. */ @Test public void testSqlHints() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assertHints(conn, false, false, false, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&distributedJoins=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&distributedJoins=true")) { assertHints(conn, true, false, false, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&enforceJoinOrder=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&enforceJoinOrder=true")) { assertHints(conn, false, true, false, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&collocated=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&collocated=true")) { assertHints(conn, false, false, true, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&replicatedOnly=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&replicatedOnly=true")) { assertHints(conn, false, false, false, true, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&lazy=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&lazy=true")) { assertHints(conn, false, false, false, false, true, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&skipReducerOnUpdate=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&skipReducerOnUpdate=true")) { assertHints(conn, false, false, false, false, false, true, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&distributedJoins=true&" + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&distributedJoins=true&" + "enforceJoinOrder=true&collocated=true&replicatedOnly=true&lazy=true&skipReducerOnUpdate=true")) { assertHints(conn, true, true, true, true, true, true, affinityAwareness); @@ -335,37 +427,37 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testSqlHintsSemicolon() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";distributedJoins=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";distributedJoins=true")) { assertHints(conn, true, false, false, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";enforceJoinOrder=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";enforceJoinOrder=true")) { assertHints(conn, false, true, false, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";collocated=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";collocated=true")) { assertHints(conn, false, false, true, false, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";replicatedOnly=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";replicatedOnly=true")) { assertHints(conn, false, false, false, true, false, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";lazy=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";lazy=true")) { assertHints(conn, false, false, false, false, true, false, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";skipReducerOnUpdate=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";skipReducerOnUpdate=true")) { assertHints(conn, false, false, false, false, false, true, affinityAwareness); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";distributedJoins=true;" + + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";distributedJoins=true;" + "enforceJoinOrder=true;collocated=true;replicatedOnly=true;lazy=true;skipReducerOnUpdate=true")) { assertHints(conn, true, true, true, true, true, true, affinityAwareness); @@ -404,39 +496,39 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testTcpNoDelay() throws Exception { - assertInvalid(urlWithAffinityAwarenessFlag + "&tcpNoDelay=0", + assertInvalid(urlWithAffinityAwarenessProp + "&tcpNoDelay=0", "Invalid property value. [name=tcpNoDelay, val=0, choices=[true, false]]"); - assertInvalid(urlWithAffinityAwarenessFlag + "&tcpNoDelay=1", + assertInvalid(urlWithAffinityAwarenessProp + "&tcpNoDelay=1", "Invalid property value. [name=tcpNoDelay, val=1, choices=[true, false]]"); - assertInvalid(urlWithAffinityAwarenessFlag + "&tcpNoDelay=false1", + assertInvalid(urlWithAffinityAwarenessProp + "&tcpNoDelay=false1", "Invalid property value. [name=tcpNoDelay, val=false1, choices=[true, false]]"); - assertInvalid(urlWithAffinityAwarenessFlag + "&tcpNoDelay=true1", + assertInvalid(urlWithAffinityAwarenessProp + "&tcpNoDelay=true1", "Invalid property value. [name=tcpNoDelay, val=true1, choices=[true, false]]"); - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { for (JdbcThinTcpIo io: ios(conn)) assertTrue(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&tcpNoDelay=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&tcpNoDelay=true")) { for (JdbcThinTcpIo io: ios(conn)) assertTrue(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&tcpNoDelay=True")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&tcpNoDelay=True")) { for (JdbcThinTcpIo io: ios(conn)) assertTrue(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&tcpNoDelay=false")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&tcpNoDelay=false")) { for (JdbcThinTcpIo io: ios(conn)) assertFalse(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&tcpNoDelay=False")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp + "&tcpNoDelay=False")) { for (JdbcThinTcpIo io: ios(conn)) assertFalse(io.connectionProperties().isTcpNoDelay()); } @@ -449,34 +541,34 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testTcpNoDelaySemicolon() throws Exception { - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=0", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=0", "Invalid property value. [name=tcpNoDelay, val=0, choices=[true, false]]"); - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=1", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=1", "Invalid property value. [name=tcpNoDelay, val=1, choices=[true, false]]"); - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=false1", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=false1", "Invalid property value. [name=tcpNoDelay, val=false1, choices=[true, false]]"); - assertInvalid(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=true1", + assertInvalid(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=true1", "Invalid property value. [name=tcpNoDelay, val=true1, choices=[true, false]]"); - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=true")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=true")) { for (JdbcThinTcpIo io: ios(conn)) assertTrue(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=True")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=True")) { for (JdbcThinTcpIo io: ios(conn)) assertTrue(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=false")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=false")) { for (JdbcThinTcpIo io: ios(conn)) assertFalse(io.connectionProperties().isTcpNoDelay()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";tcpNoDelay=False")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";tcpNoDelay=False")) { for (JdbcThinTcpIo io: ios(conn)) assertFalse(io.connectionProperties().isTcpNoDelay()); } @@ -489,7 +581,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testAutoCloseServerCursorProperty() throws Exception { - String url = urlWithAffinityAwarenessFlag + "&autoCloseServerCursor"; + String url = urlWithAffinityAwarenessProp + "&autoCloseServerCursor"; String err = "Invalid property value. [name=autoCloseServerCursor"; @@ -498,7 +590,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { assertInvalid(url + "=false1", err); assertInvalid(url + "=true1", err); - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { for (JdbcThinTcpIo io: ios(conn)) assertFalse(io.connectionProperties().isAutoCloseServerCursor()); } @@ -531,7 +623,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testAutoCloseServerCursorPropertySemicolon() throws Exception { - String url = urlWithAffinityAwarenessFlagSemicolon + ";autoCloseServerCursor"; + String url = urlWithAffinityAwarenessPropSemicolon + ";autoCloseServerCursor"; String err = "Invalid property value. [name=autoCloseServerCursor"; @@ -591,15 +683,15 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testSchemaSemicolon() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";schema=public")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";schema=public")) { assertEquals("Invalid schema", "PUBLIC", conn.getSchema()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";schema=\"" + DEFAULT_CACHE_NAME + '"')) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";schema=\"" + DEFAULT_CACHE_NAME + '"')) { assertEquals("Invalid schema", DEFAULT_CACHE_NAME, conn.getSchema()); } - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlagSemicolon + ";schema=_not_exist_schema_")) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessPropSemicolon + ";schema=_not_exist_schema_")) { assertEquals("Invalid schema", "_NOT_EXIST_SCHEMA_", conn.getSchema()); } } @@ -648,7 +740,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { public void testClose() throws Exception { final Connection conn; - try (Connection conn0 = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn0 = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { conn = conn0; assert conn != null; @@ -673,7 +765,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateStatement() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { try (Statement stmt = conn.createStatement()) { assertNotNull(stmt); @@ -696,7 +788,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateStatement2() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { int [] rsTypes = new int[] {TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE}; @@ -750,7 +842,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateStatement3() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { int [] rsTypes = new int[] {TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.TYPE_SCROLL_SENSITIVE}; @@ -810,7 +902,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testPrepareStatement() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // null query text assertThrows(log, new Callable<Object>() { @@ -844,7 +936,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testPrepareStatement3() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String sqlText = "select * from test where param = ?"; int [] rsTypes = new int[] @@ -905,7 +997,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testPrepareStatement4() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String sqlText = "select * from test where param = ?"; int [] rsTypes = new int[] @@ -971,7 +1063,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testPrepareStatementAutoGeneratedKeysUnsupported() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String sqlText = "insert into test (val) values (?)"; assertThrows(log, @@ -1021,7 +1113,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testPrepareCallUnsupported() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String sqlText = "exec test()"; assertThrows(log, @@ -1062,7 +1154,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testNativeSql() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // null query text assertThrows(log, new Callable<Object>() { @@ -1094,7 +1186,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetAutoCommit() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { boolean ac0 = conn.getAutoCommit(); conn.setAutoCommit(!ac0); @@ -1119,7 +1211,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCommit() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Should not be called in auto-commit mode assertThrows(log, new Callable<Object>() { @@ -1164,7 +1256,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testRollback() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Should not be called in auto-commit mode assertThrows(log, new Callable<Object>() { @@ -1194,7 +1286,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testBeginFailsWhenMvccIsDisabled() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { conn.createStatement().execute("BEGIN"); fail("Exception is expected"); @@ -1209,7 +1301,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCommitIgnoredWhenMvccIsDisabled() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { conn.setAutoCommit(false); conn.createStatement().execute("COMMIT"); @@ -1223,7 +1315,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testRollbackIgnoredWhenMvccIsDisabled() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { conn.setAutoCommit(false); conn.createStatement().execute("ROLLBACK"); @@ -1238,7 +1330,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetMetaData() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { DatabaseMetaData meta = conn.getMetaData(); assertNotNull(meta); @@ -1259,7 +1351,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetReadOnly() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { conn.close(); // Exception when called on closed connection @@ -1283,7 +1375,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetCatalog() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assert !conn.getMetaData().supportsCatalogsInDataManipulation(); assertNull(conn.getCatalog()); @@ -1315,7 +1407,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetTransactionIsolation() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Invalid parameter value assertThrows(log, new Callable<Object>() { @@ -1366,7 +1458,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testClearGetWarnings() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { SQLWarning warn = conn.getWarnings(); assertNull(warn); @@ -1400,7 +1492,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetTypeMap() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assertThrows(log, new Callable<Object>() { @Override public Object call() throws Exception { @@ -1456,7 +1548,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetHoldability() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // default value assertEquals(conn.getMetaData().getResultSetHoldability(), conn.getHoldability()); @@ -1510,7 +1602,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testSetSavepoint() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assert !conn.getMetaData().supportsSavepoints(); // Disallowed in auto-commit mode @@ -1541,7 +1633,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testSetSavepointName() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assert !conn.getMetaData().supportsSavepoints(); // Invalid arg @@ -1587,7 +1679,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testRollbackSavePoint() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assert !conn.getMetaData().supportsSavepoints(); // Invalid arg @@ -1633,7 +1725,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testReleaseSavepoint() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assert !conn.getMetaData().supportsSavepoints(); // Invalid arg @@ -1672,7 +1764,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateClob() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Unsupported assertThrows(log, new Callable<Object>() { @@ -1703,7 +1795,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateBlob() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Unsupported assertThrows(log, new Callable<Object>() { @@ -1734,7 +1826,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateNClob() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Unsupported assertThrows(log, new Callable<Object>() { @@ -1765,7 +1857,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateSQLXML() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Unsupported assertThrows(log, new Callable<Object>() { @@ -1798,7 +1890,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { public void testGetSetClientInfoPair() throws Exception { // fail("https://issues.apache.org/jira/browse/IGNITE-5425"); - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String name = "ApplicationName"; final String val = "SelfTest"; @@ -1832,7 +1924,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetClientInfoProperties() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String name = "ApplicationName"; final String val = "SelfTest"; @@ -1871,7 +1963,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateArrayOf() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final String typeName = "varchar"; final String[] elements = new String[] {"apple", "pear"}; @@ -1912,7 +2004,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testCreateStruct() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // Invalid typename assertThrows(log, new Callable<Object>() { @@ -1949,7 +2041,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetSchema() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { assertEquals("PUBLIC", conn.getSchema()); final String schema = "test"; @@ -1983,7 +2075,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testAbort() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { //Invalid executor assertThrows(log, new Callable<Object>() { @@ -2010,7 +2102,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { */ @Test public void testGetSetNetworkTimeout() throws Exception { - try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { // default assertEquals(0, conn.getNetworkTimeout()); @@ -2058,7 +2150,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { public void testInvalidNestedTxMode() { assertThrows(null, new Callable<Object>() { @Override public Object call() throws Exception { - DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&nestedTransactionsMode=invalid"); + DriverManager.getConnection(urlWithAffinityAwarenessProp + "&nestedTransactionsMode=invalid"); return null; } @@ -2096,7 +2188,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { public void testSslClientAndPlainServer() { Throwable e = assertThrows(log, new Callable<Object>() { @Override public Object call() throws Exception { - DriverManager.getConnection(urlWithAffinityAwarenessFlag + "&sslMode=require" + + DriverManager.getConnection(urlWithAffinityAwarenessProp + "&sslMode=require" + "&sslClientCertificateKeyStoreUrl=" + CLI_KEY_STORE_PATH + "&sslClientCertificateKeyStorePassword=123456" + "&sslTrustCertificateKeyStoreUrl=" + SRV_KEY_STORE_PATH + @@ -2127,7 +2219,7 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest { final AtomicInteger exCnt = new AtomicInteger(0); - try (final Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessFlag)) { + try (final Connection conn = DriverManager.getConnection(urlWithAffinityAwarenessProp)) { final IgniteInternalFuture f = runMultiThreadedAsync(new Runnable() { @Override public void run() { try { diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java index 2b80482..9655f9a 100644 --- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java @@ -70,6 +70,10 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest { /** URL. */ private static final String URL = "jdbc:ignite:thin://127.0.0.1/"; + /** URL with affinity awareness enabled. */ + public static final String URL_AFFINITY_AWARENESS = + "jdbc:ignite:thin://127.0.0.1:10800..10801?affinityAwareness=true"; + /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { return super.getConfiguration(igniteInstanceName) @@ -1218,8 +1222,17 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest { @Test public void testVersions() throws Exception { try (Connection conn = DriverManager.getConnection(URL)) { - assert conn.getMetaData().getDatabaseProductVersion().equals(IgniteVersionUtils.VER.toString()); - assert conn.getMetaData().getDriverVersion().equals(IgniteVersionUtils.VER.toString()); + assertEquals("Unexpected ignite database product version.", + conn.getMetaData().getDatabaseProductVersion(), IgniteVersionUtils.VER.toString()); + assertEquals("Unexpected ignite driver version.", + conn.getMetaData().getDriverVersion(), IgniteVersionUtils.VER.toString()); + } + + try (Connection conn = DriverManager.getConnection(URL_AFFINITY_AWARENESS)) { + assertEquals("Unexpected ignite database product version.", + conn.getMetaData().getDatabaseProductVersion(), IgniteVersionUtils.VER.toString()); + assertEquals("Unexpected ignite driver version.", + conn.getMetaData().getDriverVersion(), IgniteVersionUtils.VER.toString()); } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/AffinityCache.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/AffinityCache.java index bd4dc4b..d13df12 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/AffinityCache.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/AffinityCache.java @@ -27,14 +27,6 @@ import org.apache.ignite.internal.util.GridBoundedLinkedHashMap; * Affinity Cache. */ public final class AffinityCache { - /** Partition distributions cache limit. */ - // TODO: 09.04.19 IGNITE-11705 Jdbc Thin: add ability to control affinity cache size. - public static final int DISTRIBUTIONS_CACHE_LIMIT = 1000; - - /** SQL cache limit. */ - // TODO: 09.04.19 IGNITE-11705 Jdbc Thin: add ability to control affinity cache size. - public static final int SQL_CACHE_LIMIT = 100_000; - /** Affinity topology version. */ private final AffinityTopologyVersion ver; @@ -49,12 +41,13 @@ public final class AffinityCache { * * @param ver Affinity topology version. */ - public AffinityCache(AffinityTopologyVersion ver) { + public AffinityCache(AffinityTopologyVersion ver, int affinityAwarenessPartDistributionsCacheSize, + int affinityAwarenessSQLCacheSize) { this.ver = ver; - cachePartitionsDistribution = new GridBoundedLinkedHashMap<>(DISTRIBUTIONS_CACHE_LIMIT); + cachePartitionsDistribution = new GridBoundedLinkedHashMap<>(affinityAwarenessPartDistributionsCacheSize); - sqlCache = new GridBoundedLinkedHashMap<>(SQL_CACHE_LIMIT); + sqlCache = new GridBoundedLinkedHashMap<>(affinityAwarenessSQLCacheSize); } /** @@ -73,7 +66,7 @@ public final class AffinityCache { void addCacheDistribution(Integer cacheId, UUID[] distribution) { for (Map.Entry<Integer, UUID[]> entry : cachePartitionsDistribution.entrySet()) { if (Arrays.equals(entry.getValue(), distribution)) { - // put link to alrady existing distribution instead of creating new one. + // put link to already existing distribution instead of creating new one. cachePartitionsDistribution.put(cacheId, entry.getValue()); return; @@ -84,7 +77,7 @@ public final class AffinityCache { } /** - * Adds sql query with corresponding partion result descriptor. + * Adds sql query with corresponding partition result descriptor. * * @param sql Qualified sql query. * @param partRes Partition result descriptor. @@ -105,7 +98,7 @@ public final class AffinityCache { /** * @param cacheId Cache Id. - * @return Cache partitoins distribution for given cache Id or null. + * @return Cache partition distribution for given cache Id or null. */ public UUID[] cacheDistribution(int cacheId) { return cachePartitionsDistribution.get(cacheId); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java index 038098e..90b21e7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionProperties.java @@ -432,4 +432,31 @@ public interface ConnectionProperties { * @throws SQLException On error. */ public void setUpdateBatchSize(@Nullable Integer updateBatchSize) throws SQLException; + + /** + * @return SQL cache size that is used within affinity awareness optimizations. + */ + public int getAffinityAwarenessSqlCacheSize(); + + /** + * Sets SQL cache size that is used within affinity awareness optimizations. + * + * @param affinityAwarenessSqlCacheSize SQL cache size. + * @throws SQLException On error. + */ + public void setAffinityAwarenessSqlCacheSize(int affinityAwarenessSqlCacheSize) throws SQLException; + + /** + * @return Partition distributions cache size that is used within affinity awareness optimizations. + */ + public int getAffinityAwarenessPartitionDistributionsCacheSize(); + + /** + * Sets partition distributions cache size that is used within affinity awareness optimizations. + * + * @param affinityAwarenessPartDistributionsCacheSize Partition distributions cache size. + * @throws SQLException On error. + */ + public void setAffinityAwarenessPartitionDistributionsCacheSize( + int affinityAwarenessPartDistributionsCacheSize) throws SQLException; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java index c90a278..0237941 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/ConnectionPropertiesImpl.java @@ -189,7 +189,7 @@ public class ConnectionPropertiesImpl implements ConnectionProperties, Serializa "Whether data page scan for queries is allowed. If not specified, server defines the default behaviour.", null, false); - /** affinity awareness flag. */ + /** Affinity awareness flag. */ private BooleanProperty affinityAwareness = new BooleanProperty( "affinityAwareness", "Whether jdbc thin affinity awareness is enabled.", @@ -201,6 +201,17 @@ public class ConnectionPropertiesImpl implements ConnectionProperties, Serializa "Set to 1 to prevent deadlock on update where keys sequence are different " + "in several concurrent updates.", null, false, 1, Integer.MAX_VALUE); + /** Affinity awareness SQL cache size. */ + private IntegerProperty affinityAwarenessSQLCacheSize = new IntegerProperty("affinityAwarenessSQLCacheSize", + "The size of sql cache that is used within affinity awareness optimization.", + 1_000, false, 1, Integer.MAX_VALUE); + + /** Affinity awareness partition distributions cache size. */ + private IntegerProperty affinityAwarenessPartDistributionsCacheSize = new IntegerProperty( + "affinityAwarenessPartitionDistributionsCacheSize", + "The size of partition distributions cache that is used within affinity awareness optimization.", + 1_000, false, 1, Integer.MAX_VALUE); + /** Properties array. */ private final ConnectionProperty [] propsArray = { distributedJoins, enforceJoinOrder, collocated, replicatedOnly, autoCloseServerCursor, @@ -212,7 +223,9 @@ public class ConnectionPropertiesImpl implements ConnectionProperties, Serializa user, passwd, dataPageScanEnabled, affinityAwareness, - updateBatchSize + updateBatchSize, + affinityAwarenessSQLCacheSize, + affinityAwarenessPartDistributionsCacheSize }; /** {@inheritDoc} */ @@ -538,6 +551,29 @@ public class ConnectionPropertiesImpl implements ConnectionProperties, Serializa this.updateBatchSize.setValue(updateBatchSize); } + /** {@inheritDoc} */ + @Override public int getAffinityAwarenessSqlCacheSize() { + return affinityAwarenessSQLCacheSize.value(); + } + + /** {@inheritDoc} */ + @Override public void setAffinityAwarenessSqlCacheSize(int affinityAwarenessSQLCacheSize) + throws SQLException { + this.affinityAwarenessSQLCacheSize.setValue(affinityAwarenessSQLCacheSize); + } + + /** {@inheritDoc} */ + @Override public int getAffinityAwarenessPartitionDistributionsCacheSize() { + return affinityAwarenessPartDistributionsCacheSize.value(); + } + + /** {@inheritDoc} */ + @Override public void setAffinityAwarenessPartitionDistributionsCacheSize( + int affinityAwarenessPartDistributionsCacheSize) throws SQLException { + this.affinityAwarenessPartDistributionsCacheSize.setValue( + affinityAwarenessPartDistributionsCacheSize); + } + /** * @param url URL connection. * @param props Environment properties. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinAffinityAwarenessMappingGroup.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinAffinityAwarenessMappingGroup.java index 70ce1ae..55a8b31 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinAffinityAwarenessMappingGroup.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinAffinityAwarenessMappingGroup.java @@ -38,7 +38,7 @@ public class JdbcThinAffinityAwarenessMappingGroup implements JdbcRawBinarylizab /** Set of cache Ids. */ private final Set<Integer> cacheIds = new HashSet<>(); - /** Partitoins mappings. */ + /** Partitions mappings. */ private final Map<UUID, Set<Integer>> partitionsMappings; /** @@ -62,7 +62,7 @@ public class JdbcThinAffinityAwarenessMappingGroup implements JdbcRawBinarylizab } /** - * Tries to merge given partions mappings and corresponding cache id with already existing mappings. + * Tries to merge given partitions mappings and corresponding cache id with already existing mappings. * * @param cacheId Cache id. * @param partitionsMappings Partitions mappings. @@ -82,10 +82,10 @@ public class JdbcThinAffinityAwarenessMappingGroup implements JdbcRawBinarylizab /** * Reverts partitions mappings from the form 'node id -> set of partition ids' to the form 'partition id -> node - * id'. First form is more compact, so it's preffered in case of data transfering, second form is easier to use on + * id'. First form is more compact, so it's preferred in case of data transferring, second form is easier to use on * client side, cause we mainly retrieve data using partition is as key. * - * @param partsCnt Partitoins count. + * @param partsCnt Partitions count. * @return Reverted form of partitions mapping: partition id -> node id. */ public UUID[] revertMappings(int partsCnt) { @@ -146,7 +146,7 @@ public class JdbcThinAffinityAwarenessMappingGroup implements JdbcRawBinarylizab * * @param reader Binary object reader. * @param ver Protocol version. - * @return Desirialized instance of <code>JdbcThinAffinityAwarenessMappingGroup</code>. + * @return Deserialized instance of <code>JdbcThinAffinityAwarenessMappingGroup</code>. * @throws BinaryObjectException In case of error. */ public static JdbcThinAffinityAwarenessMappingGroup readGroup(BinaryReaderExImpl reader, diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java index dec052a..3dddb83 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java @@ -212,6 +212,9 @@ public class JdbcThinConnection implements Connection { /** Cancelable future for connections handler task. */ private ScheduledFuture<?> connectionsHndScheduledFut; + /** Connections handler timer. */ + private final IgniteProductVersion baseEndpointVer; + /** * Creates new connection. * @@ -229,11 +232,17 @@ public class JdbcThinConnection implements Connection { affinityAwareness = connProps.isAffinityAwareness(); - ensureConnected(); + if (affinityAwareness) { + baseEndpointVer = connectInBestEffortAffinityMode(null); - if (affinityAwareness) connectionsHndScheduledFut = maintenanceExecutor.scheduleWithFixedDelay(new ConnectionHandlerTask(), 0, RECONNECTION_DELAY, TimeUnit.MILLISECONDS); + } + else { + connectInCommonMode(); + + baseEndpointVer = null; + } } /** @@ -248,7 +257,7 @@ public class JdbcThinConnection implements Connection { assert ios.isEmpty(); if (affinityAwareness) - connectInBestEffortAffinityMode(); + connectInBestEffortAffinityMode(baseEndpointVer); else connectInCommonMode(); } @@ -843,8 +852,12 @@ public class JdbcThinConnection implements Connection { * @return Ignite server version. */ IgniteProductVersion igniteVersion() { - // TODO: IGNITE-11321: JDBC Thin: implement nodes multi version support. - return cliIo(null).igniteVersion(); + if (affinityAwareness) { + return ios.values().stream().map(JdbcThinTcpIo::igniteVersion).min(IgniteProductVersion::compareTo). + orElse(baseEndpointVer); + } + else + return singleIo.igniteVersion(); } /** @@ -1052,8 +1065,12 @@ public class JdbcThinConnection implements Connection { AffinityTopologyVersion resAffinityVer = res.affinityVersion(); - if (affinityCache.version().compareTo(resAffinityVer) < 0) - affinityCache = new AffinityCache(resAffinityVer); + if (affinityCache.version().compareTo(resAffinityVer) < 0) { + affinityCache = new AffinityCache( + resAffinityVer, + connProps.getAffinityAwarenessPartitionDistributionsCacheSize(), + connProps.getAffinityAwarenessSqlCacheSize()); + } else if (affinityCache.version().compareTo(resAffinityVer) > 0) { // Jdbc thin affinity cache is binded to the newer affinity topology version, so we should ignore retrieved // partition distribution. Given situation might occur in case of concurrent race and is not @@ -1433,8 +1450,7 @@ public class JdbcThinConnection implements Connection { * @return True if query cancellation supported, false otherwise. */ boolean isQueryCancellationSupported() { - // TODO: IGNITE-11321: JDBC Thin: implement nodes multi version support. - return cliIo(null).isQueryCancellationSupported(); + return affinityAwareness || singleIo.isQueryCancellationSupported(); } /** @@ -1621,14 +1637,14 @@ public class JdbcThinConnection implements Connection { * Establishes a connection to ignite endpoint, trying all specified hosts and ports one by one. * Stops as soon as all iosArr are established. * + * @param baseEndpointVer Base endpoint version. + * @return last connected endpoint version. * @throws SQLException If failed to connect to at least one ignite endpoint, - * or if endpoints versions are not the same. + * or if endpoints versions are less than base endpoint version. */ - private void connectInBestEffortAffinityMode() throws SQLException { + private IgniteProductVersion connectInBestEffortAffinityMode(IgniteProductVersion baseEndpointVer) throws SQLException { List<Exception> exceptions = null; - IgniteProductVersion prevIgniteEndpointVer = null; - for (int i = 0; i < connProps.getAddresses().length; i++) { HostAndPortRange srv = connProps.getAddresses()[i]; @@ -1650,13 +1666,15 @@ public class JdbcThinConnection implements Connection { INTERNAL_ERROR); } - if (prevIgniteEndpointVer != null && !prevIgniteEndpointVer.equals(cliIo.igniteVersion())) { - // TODO: 13.02.19 IGNITE-11321 JDBC Thin: implement nodes multi version support. + IgniteProductVersion endpointVer = cliIo.igniteVersion(); + + if (baseEndpointVer != null && baseEndpointVer.compareTo(endpointVer) > 0) { cliIo.close(); throw new SQLException("Failed to connect to Ignite node [url=" + - connProps.getUrl() + "]. address = [" + addr + ':' + port + "]." + - "Different versions of nodes are not supported in affinity awareness mode.", + connProps.getUrl() + "], address = [" + addr + ':' + port + "]," + + "the node version [" + endpointVer + "] " + + "is smaller than the base one [" + baseEndpointVer + "].", INTERNAL_ERROR); } @@ -1671,9 +1689,7 @@ public class JdbcThinConnection implements Connection { else connCnt.incrementAndGet(); - prevIgniteEndpointVer = cliIo.igniteVersion(); - - return; + return cliIo.igniteVersion(); } catch (Exception exception) { if (exceptions == null) @@ -1693,6 +1709,8 @@ public class JdbcThinConnection implements Connection { } handleConnectExceptions(exceptions); + + return null; } /** @@ -1705,8 +1723,12 @@ public class JdbcThinConnection implements Connection { if (affinityAwareness) { AffinityTopologyVersion resAffVer = res.affinityVersion(); - if (resAffVer != null && (affinityCache == null || affinityCache.version().compareTo(resAffVer) < 0)) - affinityCache = new AffinityCache(resAffVer); + if (resAffVer != null && (affinityCache == null || affinityCache.version().compareTo(resAffVer) < 0)) { + affinityCache = new AffinityCache( + resAffVer, + connProps.getAffinityAwarenessPartitionDistributionsCacheSize(), + connProps.getAffinityAwarenessSqlCacheSize()); + } // Partition result was requested. if (res.response() instanceof JdbcQueryExecuteResult && qryReq.partitionResponseRequest()) {