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/08/31 09:10:23 UTC

[1/9] ignite git commit: IGNITE-6193 ML profile is missing in 2.1 binary release

Repository: ignite
Updated Branches:
  refs/heads/ignite-3478 f6e982540 -> 855c2d457


IGNITE-6193 ML profile is missing in 2.1 binary release

(cherry picked from commit c06ceba)


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

Branch: refs/heads/ignite-3478
Commit: b7d198ea3dc70ec1ceb28cb9def26c315ea5d365
Parents: 08a831f
Author: Oleg Ignatenko <oi...@gridgain.com>
Authored: Wed Aug 30 14:15:32 2017 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Aug 30 14:17:29 2017 +0300

----------------------------------------------------------------------
 examples/pom.xml | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b7d198ea/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index f15edeb..170391d 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -103,6 +103,7 @@
         <spark.test.folder>src/test/java</spark.test.folder>
         <lgpl.test.folder>src/test/java</lgpl.test.folder>
         <java8.test.folder>src/test/java</java8.test.folder>
+        <ml.folder>src/main/java</ml.folder>
     </properties>
 
     <profiles>
@@ -234,6 +235,23 @@
         </profile>
 
         <profile>
+            <id>ml</id>
+
+            <properties>
+                <ml.folder>src/main/ml</ml.folder>
+                <java.ver>1.8</java.ver>
+            </properties>
+
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.ignite</groupId>
+                    <artifactId>ignite-ml</artifactId>
+                    <version>${project.version}</version>
+                </dependency>
+            </dependencies>
+        </profile>
+
+        <profile>
             <id>lgpl</id>
 
             <properties>
@@ -292,6 +310,7 @@
                                 <source>${lgpl.folder}</source>
                                 <source>${java8.folder}</source>
                                 <source>${spark.folder}</source>
+                                <source>${ml.folder}</source>
                             </sources>
                         </configuration>
                     </execution>


[2/9] ignite git commit: IGNITE-6125: JDBC thick: several fixes to JdbcDatabaseMetadata. This closes #2506.

Posted by sb...@apache.org.
IGNITE-6125: JDBC thick: several fixes to JdbcDatabaseMetadata. This closes #2506.


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

Branch: refs/heads/ignite-3478
Commit: faa156f0da68d49acbb3f446b3905ad2c64ae505
Parents: b7d198e
Author: Ilya Kasnacheev <il...@gmail.com>
Authored: Wed Aug 30 16:20:45 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Wed Aug 30 16:20:45 2017 +0300

----------------------------------------------------------------------
 .../internal/jdbc2/JdbcMetadataSelfTest.java    | 120 ++++-
 .../internal/jdbc2/JdbcDatabaseMetadata.java    | 466 ++++++++++---------
 2 files changed, 360 insertions(+), 226 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/faa156f0/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
index f2ef769..bc4ef5b 100755
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcMetadataSelfTest.java
@@ -21,12 +21,21 @@ import java.io.Serializable;
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.DriverManager;
+import java.sql.ParameterMetaData;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.Statement;
+import java.sql.Types;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Set;
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.QueryEntity;
+import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.affinity.AffinityKey;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -61,9 +70,20 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 
+        LinkedHashMap<String, Boolean> persFields = new LinkedHashMap<>();
+
+        persFields.put("name", true);
+        persFields.put("age", false);
+
         cfg.setCacheConfiguration(
-            cacheConfiguration("pers", AffinityKey.class, Person.class),
-            cacheConfiguration("org", String.class, Organization.class));
+            cacheConfiguration("pers").setQueryEntities(Arrays.asList(
+                new QueryEntity(AffinityKey.class, Person.class)
+                    .setIndexes(Arrays.asList(
+                        new QueryIndex("orgId"),
+                        new QueryIndex().setFields(persFields))))
+            ),
+            cacheConfiguration("org").setQueryEntities(Arrays.asList(
+                new QueryEntity(AffinityKey.class, Organization.class))));
 
         TcpDiscoverySpi disco = new TcpDiscoverySpi();
 
@@ -78,11 +98,9 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
 
     /**
      * @param name Name.
-     * @param clsK Class k.
-     * @param clsV Class v.
      * @return Cache configuration.
      */
-    protected CacheConfiguration cacheConfiguration(@NotNull String name, Class<?> clsK, Class<?> clsV) {
+    protected CacheConfiguration cacheConfiguration(@NotNull String name) {
         CacheConfiguration<?,?> cache = defaultCacheConfiguration();
 
         cache.setName(name);
@@ -90,7 +108,6 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
         cache.setBackups(1);
         cache.setWriteSynchronizationMode(FULL_SYNC);
         cache.setAtomicityMode(TRANSACTIONAL);
-        cache.setIndexedTypes(clsK, clsV);
 
         return cache;
     }
@@ -194,7 +211,7 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
         try (Connection conn = DriverManager.getConnection(BASE_URL)) {
             DatabaseMetaData meta = conn.getMetaData();
 
-            ResultSet rs = meta.getColumns("", "pers", "Person", "%");
+            ResultSet rs = meta.getColumns("", "pers", "PERSON", "%");
 
             assertNotNull(rs);
 
@@ -227,7 +244,7 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
             assertTrue(names.isEmpty());
             assertEquals(3, cnt);
 
-            rs = meta.getColumns("", "org", "Organization", "%");
+            rs = meta.getColumns("", "org", "ORGANIZATION", "%");
 
             assertNotNull(rs);
 
@@ -287,10 +304,95 @@ public class JdbcMetadataSelfTest extends GridCommonAbstractTest {
             int cnt = 0;
 
             while (rs.next()) {
+                String idxName = rs.getString("INDEX_NAME");
+                String field = rs.getString("COLUMN_NAME");
+                String ascOrDesc = rs.getString("ASC_OR_DESC");
+
+                assertEquals(DatabaseMetaData.tableIndexOther, rs.getInt("TYPE"));
+
+                if ("PERSON_ORGID_ASC_IDX".equals(idxName)) {
+                    assertEquals("ORGID", field);
+                    assertEquals("A", ascOrDesc);
+                }
+                else if ("PERSON_NAME_ASC_AGE_DESC_IDX".equals(idxName)) {
+                    if ("NAME".equals(field))
+                        assertEquals("A", ascOrDesc);
+                    else if ("AGE".equals(field))
+                        assertEquals("D", ascOrDesc);
+                    else
+                        fail("Unexpected field: " + field);
+                }
+                else
+                    fail("Unexpected index: " + idxName);
+
+                cnt++;
+            }
+
+            assertEquals(3, cnt);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPrimaryKeyMetadata() throws Exception {
+        try (Connection conn = DriverManager.getConnection(BASE_URL);
+             ResultSet rs = conn.getMetaData().getPrimaryKeys(null, "pers", "PERSON")) {
+
+            int cnt = 0;
+
+            while (rs.next()) {
+                assertEquals("_KEY", rs.getString("COLUMN_NAME"));
+
                 cnt++;
             }
 
-            assertEquals(0, cnt);
+            assertEquals(1, cnt);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testParametersMetadata() throws Exception {
+        try (Connection conn = DriverManager.getConnection(BASE_URL)) {
+            conn.setSchema("pers");
+
+            PreparedStatement stmt = conn.prepareStatement("select orgId from Person p where p.name > ? and p.orgId > ?");
+
+            ParameterMetaData meta = stmt.getParameterMetaData();
+
+            assertNotNull(meta);
+
+            assertEquals(2, meta.getParameterCount());
+
+            assertEquals(Types.VARCHAR, meta.getParameterType(1));
+            assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(1));
+            assertEquals(Integer.MAX_VALUE, meta.getPrecision(1));
+
+            assertEquals(Types.INTEGER, meta.getParameterType(2));
+            assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(2));
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSchemasMetadata() throws Exception {
+        try (Connection conn = DriverManager.getConnection(BASE_URL)) {
+            ResultSet rs = conn.getMetaData().getSchemas();
+
+            Set<String> expectedSchemas = new HashSet<>(Arrays.asList("pers", "org"));
+
+            Set<String> schemas = new HashSet<>();
+
+            while (rs.next()) {
+                schemas.add(rs.getString(1));
+
+                assertNull(rs.getString(2));
+            }
+
+            assertEquals(expectedSchemas, schemas);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/faa156f0/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
index e9a5fde..aad6daa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
@@ -66,67 +66,67 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean allProceduresAreCallable() throws SQLException {
+    @Override public boolean allProceduresAreCallable() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean allTablesAreSelectable() throws SQLException {
+    @Override public boolean allTablesAreSelectable() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public String getURL() throws SQLException {
+    @Override public String getURL() {
         return conn.url();
     }
 
     /** {@inheritDoc} */
-    @Override public String getUserName() throws SQLException {
+    @Override public String getUserName() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public boolean isReadOnly() throws SQLException {
-        return true;
+    @Override public boolean isReadOnly() {
+        return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean nullsAreSortedHigh() throws SQLException {
+    @Override public boolean nullsAreSortedHigh() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean nullsAreSortedLow() throws SQLException {
+    @Override public boolean nullsAreSortedLow() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean nullsAreSortedAtStart() throws SQLException {
+    @Override public boolean nullsAreSortedAtStart() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean nullsAreSortedAtEnd() throws SQLException {
+    @Override public boolean nullsAreSortedAtEnd() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public String getDatabaseProductName() throws SQLException {
+    @Override public String getDatabaseProductName() {
         return "Ignite Cache";
     }
 
     /** {@inheritDoc} */
-    @Override public String getDatabaseProductVersion() throws SQLException {
+    @Override public String getDatabaseProductVersion() {
         return "4.1.0";
     }
 
     /** {@inheritDoc} */
-    @Override public String getDriverName() throws SQLException {
+    @Override public String getDriverName() {
         return "Ignite JDBC Driver";
     }
 
     /** {@inheritDoc} */
-    @Override public String getDriverVersion() throws SQLException {
+    @Override public String getDriverVersion() {
         return "1.0";
     }
 
@@ -141,517 +141,517 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean usesLocalFiles() throws SQLException {
+    @Override public boolean usesLocalFiles() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean usesLocalFilePerTable() throws SQLException {
+    @Override public boolean usesLocalFilePerTable() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsMixedCaseIdentifiers() throws SQLException {
+    @Override public boolean supportsMixedCaseIdentifiers() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean storesUpperCaseIdentifiers() throws SQLException {
+    @Override public boolean storesUpperCaseIdentifiers() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean storesLowerCaseIdentifiers() throws SQLException {
+    @Override public boolean storesLowerCaseIdentifiers() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean storesMixedCaseIdentifiers() throws SQLException {
+    @Override public boolean storesMixedCaseIdentifiers() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
+    @Override public boolean supportsMixedCaseQuotedIdentifiers() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean storesUpperCaseQuotedIdentifiers() throws SQLException {
+    @Override public boolean storesUpperCaseQuotedIdentifiers() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean storesLowerCaseQuotedIdentifiers() throws SQLException {
+    @Override public boolean storesLowerCaseQuotedIdentifiers() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean storesMixedCaseQuotedIdentifiers() throws SQLException {
+    @Override public boolean storesMixedCaseQuotedIdentifiers() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public String getIdentifierQuoteString() throws SQLException {
-        return " ";
+    @Override public String getIdentifierQuoteString() {
+        return "\"";
     }
 
     /** {@inheritDoc} */
-    @Override public String getSQLKeywords() throws SQLException {
-        return "";
+    @Override public String getSQLKeywords() {
+        return "LIMIT,MINUS,ROWNUM,SYSDATE,SYSTIME,SYSTIMESTAMP,TODAY";
     }
 
     /** {@inheritDoc} */
-    @Override public String getNumericFunctions() throws SQLException {
+    @Override public String getNumericFunctions() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public String getStringFunctions() throws SQLException {
+    @Override public String getStringFunctions() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public String getSystemFunctions() throws SQLException {
+    @Override public String getSystemFunctions() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public String getTimeDateFunctions() throws SQLException {
+    @Override public String getTimeDateFunctions() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public String getSearchStringEscape() throws SQLException {
-        return "";
+    @Override public String getSearchStringEscape() {
+        return "\\";
     }
 
     /** {@inheritDoc} */
-    @Override public String getExtraNameCharacters() throws SQLException {
+    @Override public String getExtraNameCharacters() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsAlterTableWithAddColumn() throws SQLException {
+    @Override public boolean supportsAlterTableWithAddColumn() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsAlterTableWithDropColumn() throws SQLException {
+    @Override public boolean supportsAlterTableWithDropColumn() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsColumnAliasing() throws SQLException {
+    @Override public boolean supportsColumnAliasing() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean nullPlusNonNullIsNull() throws SQLException {
+    @Override public boolean nullPlusNonNullIsNull() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsConvert() throws SQLException {
-        return false;
+    @Override public boolean supportsConvert() {
+        return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsConvert(int fromType, int toType) throws SQLException {
-        return false;
+    @Override public boolean supportsConvert(int fromType, int toType) {
+        return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsTableCorrelationNames() throws SQLException {
+    @Override public boolean supportsTableCorrelationNames() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsDifferentTableCorrelationNames() throws SQLException {
+    @Override public boolean supportsDifferentTableCorrelationNames() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsExpressionsInOrderBy() throws SQLException {
+    @Override public boolean supportsExpressionsInOrderBy() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsOrderByUnrelated() throws SQLException {
+    @Override public boolean supportsOrderByUnrelated() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsGroupBy() throws SQLException {
+    @Override public boolean supportsGroupBy() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsGroupByUnrelated() throws SQLException {
+    @Override public boolean supportsGroupByUnrelated() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsGroupByBeyondSelect() throws SQLException {
+    @Override public boolean supportsGroupByBeyondSelect() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsLikeEscapeClause() throws SQLException {
+    @Override public boolean supportsLikeEscapeClause() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsMultipleResultSets() throws SQLException {
+    @Override public boolean supportsMultipleResultSets() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsMultipleTransactions() throws SQLException {
+    @Override public boolean supportsMultipleTransactions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsNonNullableColumns() throws SQLException {
+    @Override public boolean supportsNonNullableColumns() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsMinimumSQLGrammar() throws SQLException {
+    @Override public boolean supportsMinimumSQLGrammar() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCoreSQLGrammar() throws SQLException {
-        return false;
+    @Override public boolean supportsCoreSQLGrammar() {
+        return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsExtendedSQLGrammar() throws SQLException {
+    @Override public boolean supportsExtendedSQLGrammar() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsANSI92EntryLevelSQL() throws SQLException {
+    @Override public boolean supportsANSI92EntryLevelSQL() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsANSI92IntermediateSQL() throws SQLException {
+    @Override public boolean supportsANSI92IntermediateSQL() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsANSI92FullSQL() throws SQLException {
+    @Override public boolean supportsANSI92FullSQL() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsIntegrityEnhancementFacility() throws SQLException {
+    @Override public boolean supportsIntegrityEnhancementFacility() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsOuterJoins() throws SQLException {
+    @Override public boolean supportsOuterJoins() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsFullOuterJoins() throws SQLException {
-        return true;
+    @Override public boolean supportsFullOuterJoins() {
+        return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsLimitedOuterJoins() throws SQLException {
+    @Override public boolean supportsLimitedOuterJoins() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public String getSchemaTerm() throws SQLException {
+    @Override public String getSchemaTerm() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public String getProcedureTerm() throws SQLException {
+    @Override public String getProcedureTerm() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public String getCatalogTerm() throws SQLException {
+    @Override public String getCatalogTerm() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public boolean isCatalogAtStart() throws SQLException {
+    @Override public boolean isCatalogAtStart() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public String getCatalogSeparator() throws SQLException {
+    @Override public String getCatalogSeparator() {
         return "";
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSchemasInDataManipulation() throws SQLException {
-        return false;
+    @Override public boolean supportsSchemasInDataManipulation() {
+        return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSchemasInProcedureCalls() throws SQLException {
+    @Override public boolean supportsSchemasInProcedureCalls() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSchemasInTableDefinitions() throws SQLException {
+    @Override public boolean supportsSchemasInTableDefinitions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSchemasInIndexDefinitions() throws SQLException {
+    @Override public boolean supportsSchemasInIndexDefinitions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException {
+    @Override public boolean supportsSchemasInPrivilegeDefinitions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCatalogsInDataManipulation() throws SQLException {
+    @Override public boolean supportsCatalogsInDataManipulation() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCatalogsInProcedureCalls() throws SQLException {
+    @Override public boolean supportsCatalogsInProcedureCalls() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCatalogsInTableDefinitions() throws SQLException {
+    @Override public boolean supportsCatalogsInTableDefinitions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCatalogsInIndexDefinitions() throws SQLException {
+    @Override public boolean supportsCatalogsInIndexDefinitions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException {
+    @Override public boolean supportsCatalogsInPrivilegeDefinitions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsPositionedDelete() throws SQLException {
+    @Override public boolean supportsPositionedDelete() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsPositionedUpdate() throws SQLException {
+    @Override public boolean supportsPositionedUpdate() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSelectForUpdate() throws SQLException {
+    @Override public boolean supportsSelectForUpdate() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsStoredProcedures() throws SQLException {
+    @Override public boolean supportsStoredProcedures() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSubqueriesInComparisons() throws SQLException {
+    @Override public boolean supportsSubqueriesInComparisons() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSubqueriesInExists() throws SQLException {
+    @Override public boolean supportsSubqueriesInExists() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSubqueriesInIns() throws SQLException {
+    @Override public boolean supportsSubqueriesInIns() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSubqueriesInQuantifieds() throws SQLException {
+    @Override public boolean supportsSubqueriesInQuantifieds() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsCorrelatedSubqueries() throws SQLException {
+    @Override public boolean supportsCorrelatedSubqueries() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsUnion() throws SQLException {
+    @Override public boolean supportsUnion() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsUnionAll() throws SQLException {
+    @Override public boolean supportsUnionAll() {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsOpenCursorsAcrossCommit() throws SQLException {
+    @Override public boolean supportsOpenCursorsAcrossCommit() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsOpenCursorsAcrossRollback() throws SQLException {
+    @Override public boolean supportsOpenCursorsAcrossRollback() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsOpenStatementsAcrossCommit() throws SQLException {
+    @Override public boolean supportsOpenStatementsAcrossCommit() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsOpenStatementsAcrossRollback() throws SQLException {
+    @Override public boolean supportsOpenStatementsAcrossRollback() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxBinaryLiteralLength() throws SQLException {
+    @Override public int getMaxBinaryLiteralLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxCharLiteralLength() throws SQLException {
+    @Override public int getMaxCharLiteralLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxColumnNameLength() throws SQLException {
+    @Override public int getMaxColumnNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxColumnsInGroupBy() throws SQLException {
+    @Override public int getMaxColumnsInGroupBy() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxColumnsInIndex() throws SQLException {
+    @Override public int getMaxColumnsInIndex() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxColumnsInOrderBy() throws SQLException {
+    @Override public int getMaxColumnsInOrderBy() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxColumnsInSelect() throws SQLException {
+    @Override public int getMaxColumnsInSelect() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxColumnsInTable() throws SQLException {
+    @Override public int getMaxColumnsInTable() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxConnections() throws SQLException {
+    @Override public int getMaxConnections() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxCursorNameLength() throws SQLException {
+    @Override public int getMaxCursorNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxIndexLength() throws SQLException {
+    @Override public int getMaxIndexLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxSchemaNameLength() throws SQLException {
+    @Override public int getMaxSchemaNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxProcedureNameLength() throws SQLException {
+    @Override public int getMaxProcedureNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxCatalogNameLength() throws SQLException {
+    @Override public int getMaxCatalogNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxRowSize() throws SQLException {
+    @Override public int getMaxRowSize() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean doesMaxRowSizeIncludeBlobs() throws SQLException {
+    @Override public boolean doesMaxRowSizeIncludeBlobs() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxStatementLength() throws SQLException {
+    @Override public int getMaxStatementLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxStatements() throws SQLException {
+    @Override public int getMaxStatements() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxTableNameLength() throws SQLException {
+    @Override public int getMaxTableNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxTablesInSelect() throws SQLException {
+    @Override public int getMaxTablesInSelect() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getMaxUserNameLength() throws SQLException {
+    @Override public int getMaxUserNameLength() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getDefaultTransactionIsolation() throws SQLException {
+    @Override public int getDefaultTransactionIsolation() {
         return TRANSACTION_NONE;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsTransactions() throws SQLException {
+    @Override public boolean supportsTransactions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
+    @Override public boolean supportsTransactionIsolationLevel(int level) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException {
+    @Override public boolean supportsDataDefinitionAndDataManipulationTransactions() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsDataManipulationTransactionsOnly() throws SQLException {
+    @Override public boolean supportsDataManipulationTransactionsOnly() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean dataDefinitionCausesTransactionCommit() throws SQLException {
+    @Override public boolean dataDefinitionCausesTransactionCommit() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean dataDefinitionIgnoredInTransactions() throws SQLException {
+    @Override public boolean dataDefinitionIgnoredInTransactions() {
         return false;
     }
 
@@ -697,12 +697,16 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
 
         List<List<?>> rows = new LinkedList<>();
 
-        if (tblTypes == null || Arrays.asList(tblTypes).contains("TABLE"))
-            for (Map.Entry<String, Map<String, Map<String, String>>> schema : meta.entrySet())
-                if (matches(schema.getKey(), schemaPtrn))
-                    for (String tbl : schema.getValue().keySet())
+        if (validCatalogPattern(catalog) && (tblTypes == null || Arrays.asList(tblTypes).contains("TABLE"))) {
+            for (Map.Entry<String, Map<String, Map<String, String>>> schema : meta.entrySet()) {
+                if (matches(schema.getKey(), schemaPtrn)) {
+                    for (String tbl : schema.getValue().keySet()) {
                         if (matches(tbl, tblNamePtrn))
                             rows.add(tableRow(schema.getKey(), tbl));
+                    }
+                }
+            }
+        }
 
         return new JdbcResultSet(null,
             conn.createStatement0(),
@@ -775,14 +779,21 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
 
         int cnt = 0;
 
-        for (Map.Entry<String, Map<String, Map<String, String>>> schema : meta.entrySet())
-            if (matches(schema.getKey(), schemaPtrn))
-                for (Map.Entry<String, Map<String, String>> tbl : schema.getValue().entrySet())
-                    if (matches(tbl.getKey(), tblNamePtrn))
-                        for (Map.Entry<String, String> col : tbl.getValue().entrySet())
-                            rows.add(columnRow(schema.getKey(), tbl.getKey(), col.getKey(),
-                                JdbcUtils.type(col.getValue()), JdbcUtils.typeName(col.getValue()),
-                                JdbcUtils.nullable(col.getKey(), col.getValue()), ++cnt));
+        if (validCatalogPattern(catalog)) {
+            for (Map.Entry<String, Map<String, Map<String, String>>> schema : meta.entrySet()) {
+                if (matches(schema.getKey(), schemaPtrn)) {
+                    for (Map.Entry<String, Map<String, String>> tbl : schema.getValue().entrySet()) {
+                        if (matches(tbl.getKey(), tblNamePtrn)) {
+                            for (Map.Entry<String, String> col : tbl.getValue().entrySet()) {
+                                rows.add(columnRow(schema.getKey(), tbl.getKey(), col.getKey(),
+                                    JdbcUtils.type(col.getValue()), JdbcUtils.typeName(col.getValue()),
+                                    JdbcUtils.nullable(col.getKey(), col.getValue()), ++cnt));
+                            }
+                        }
+                    }
+                }
+            }
+        }
 
         return new JdbcResultSet(null,
             conn.createStatement0(),
@@ -891,17 +902,22 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public ResultSet getPrimaryKeys(String catalog, String schema, String tbl) throws SQLException {
+    @Override public ResultSet getPrimaryKeys(String catalog, String schemaPtrn, String tblNamePtrn)
+        throws SQLException {
         updateMetaData();
 
         List<List<?>> rows = new LinkedList<>();
 
-        for (Map.Entry<String, Map<String, Map<String, String>>> s : meta.entrySet())
-            if (schema == null || schema.toUpperCase().equals(s.getKey()))
-                for (Map.Entry<String, Map<String, String>> t : s.getValue().entrySet())
-                    if (tbl == null || tbl.toUpperCase().equals(t.getKey()))
-                        rows.add(Arrays.<Object>asList(null, s.getKey().toUpperCase(),
-                            t.getKey().toUpperCase(), "_KEY", 1, "_KEY"));
+        if (validCatalogPattern(catalog)) {
+            for (Map.Entry<String, Map<String, Map<String, String>>> schema : meta.entrySet()) {
+                if (matches(schema.getKey(), schemaPtrn)) {
+                    for (Map.Entry<String, Map<String, String>> tbl : schema.getValue().entrySet()) {
+                        if (matches(tbl.getKey(), tblNamePtrn))
+                            rows.add(Arrays.<Object>asList(null, schema.getKey(), tbl.getKey(), "_KEY", 1, "_KEY"));
+                    }
+                }
+            }
+        }
 
         return new JdbcResultSet(null,
             conn.createStatement0(),
@@ -969,28 +985,30 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
 
         Collection<List<?>> rows = new ArrayList<>(indexes.size());
 
-        for (List<Object> idx : indexes) {
-            String idxSchema = (String)idx.get(0);
-            String idxTbl = (String)idx.get(1);
-
-            if ((schema == null || schema.equals(idxSchema)) && (tbl == null || tbl.equals(idxTbl))) {
-                List<Object> row = new ArrayList<>(13);
-
-                row.add(null);
-                row.add(idxSchema);
-                row.add(idxTbl);
-                row.add(idx.get(2));
-                row.add(null);
-                row.add(idx.get(3));
-                row.add((int)tableIndexOther);
-                row.add(idx.get(4));
-                row.add(idx.get(5));
-                row.add((Boolean)idx.get(6) ? "D" : "A");
-                row.add(0);
-                row.add(0);
-                row.add(null);
-
-                rows.add(row);
+        if (validCatalogPattern(catalog)) {
+            for (List<Object> idx : indexes) {
+                String idxSchema = (String)idx.get(0);
+                String idxTbl = (String)idx.get(1);
+
+                if ((schema == null || schema.equals(idxSchema)) && (tbl == null || tbl.equals(idxTbl))) {
+                    List<Object> row = new ArrayList<>(13);
+
+                    row.add(null);
+                    row.add(idxSchema);
+                    row.add(idxTbl);
+                    row.add(idx.get(2));
+                    row.add(null);
+                    row.add(idx.get(3));
+                    row.add((int)tableIndexOther);
+                    row.add(idx.get(4));
+                    row.add(idx.get(5));
+                    row.add((Boolean)idx.get(6) ? "D" : "A");
+                    row.add(0);
+                    row.add(0);
+                    row.add(null);
+
+                    rows.add(row);
+                }
             }
         }
 
@@ -1009,62 +1027,62 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsResultSetType(int type) throws SQLException {
+    @Override public boolean supportsResultSetType(int type) {
         return true;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException {
+    @Override public boolean supportsResultSetConcurrency(int type, int concurrency) {
         return concurrency == CONCUR_READ_ONLY;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean ownUpdatesAreVisible(int type) throws SQLException {
+    @Override public boolean ownUpdatesAreVisible(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean ownDeletesAreVisible(int type) throws SQLException {
+    @Override public boolean ownDeletesAreVisible(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean ownInsertsAreVisible(int type) throws SQLException {
+    @Override public boolean ownInsertsAreVisible(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean othersUpdatesAreVisible(int type) throws SQLException {
+    @Override public boolean othersUpdatesAreVisible(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean othersDeletesAreVisible(int type) throws SQLException {
+    @Override public boolean othersDeletesAreVisible(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean othersInsertsAreVisible(int type) throws SQLException {
+    @Override public boolean othersInsertsAreVisible(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean updatesAreDetected(int type) throws SQLException {
+    @Override public boolean updatesAreDetected(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean deletesAreDetected(int type) throws SQLException {
+    @Override public boolean deletesAreDetected(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean insertsAreDetected(int type) throws SQLException {
+    @Override public boolean insertsAreDetected(int type) {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsBatchUpdates() throws SQLException {
+    @Override public boolean supportsBatchUpdates() {
         return true;
     }
 
@@ -1082,27 +1100,27 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public Connection getConnection() throws SQLException {
+    @Override public Connection getConnection() {
         return conn;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsSavepoints() throws SQLException {
+    @Override public boolean supportsSavepoints() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsNamedParameters() throws SQLException {
+    @Override public boolean supportsNamedParameters() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsMultipleOpenResults() throws SQLException {
+    @Override public boolean supportsMultipleOpenResults() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsGetGeneratedKeys() throws SQLException {
+    @Override public boolean supportsGetGeneratedKeys() {
         return false;
     }
 
@@ -1146,52 +1164,52 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsResultSetHoldability(int holdability) throws SQLException {
+    @Override public boolean supportsResultSetHoldability(int holdability) {
         return holdability == HOLD_CURSORS_OVER_COMMIT;
     }
 
     /** {@inheritDoc} */
-    @Override public int getResultSetHoldability() throws SQLException {
+    @Override public int getResultSetHoldability() {
         return HOLD_CURSORS_OVER_COMMIT;
     }
 
     /** {@inheritDoc} */
-    @Override public int getDatabaseMajorVersion() throws SQLException {
+    @Override public int getDatabaseMajorVersion() {
         return 1;
     }
 
     /** {@inheritDoc} */
-    @Override public int getDatabaseMinorVersion() throws SQLException {
+    @Override public int getDatabaseMinorVersion() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getJDBCMajorVersion() throws SQLException {
+    @Override public int getJDBCMajorVersion() {
         return 1;
     }
 
     /** {@inheritDoc} */
-    @Override public int getJDBCMinorVersion() throws SQLException {
+    @Override public int getJDBCMinorVersion() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public int getSQLStateType() throws SQLException {
+    @Override public int getSQLStateType() {
         return 0;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean locatorsUpdateCopy() throws SQLException {
+    @Override public boolean locatorsUpdateCopy() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsStatementPooling() throws SQLException {
+    @Override public boolean supportsStatementPooling() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public RowIdLifetime getRowIdLifetime() throws SQLException {
+    @Override public RowIdLifetime getRowIdLifetime() {
         return ROWID_UNSUPPORTED;
     }
 
@@ -1201,9 +1219,12 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
 
         List<List<?>> rows = new ArrayList<>(meta.size());
 
-        for (String schema : meta.keySet())
-            if (matches(schema, schemaPtrn))
-                rows.add(Arrays.<Object>asList(schema, null));
+        if (validCatalogPattern(catalog)) {
+            for (String schema : meta.keySet()) {
+                if (matches(schema, schemaPtrn))
+                    rows.add(Arrays.<Object>asList(schema, null));
+            }
+        }
 
         return new JdbcResultSet(null,
             conn.createStatement0(),
@@ -1215,12 +1236,17 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
+    @Override public boolean supportsStoredFunctionsUsingCallSyntax() {
         return false;
     }
 
     /** {@inheritDoc} */
-    @Override public boolean autoCommitFailureClosesAllResultSets() throws SQLException {
+    @Override public boolean autoCommitFailureClosesAllResultSets() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean generatedKeyAlwaysReturned() {
         return false;
     }
 
@@ -1270,20 +1296,6 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public <T> T unwrap(Class<T> iface) throws SQLException {
-        if (!isWrapperFor(iface))
-            throw new SQLException("Database meta data is not a wrapper for " + iface.getName());
-
-        return (T)this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
-        return iface != null && iface == DatabaseMetaData.class;
-    }
-
-    /** {@inheritDoc} */
     @Override public ResultSet getPseudoColumns(String catalog, String schemaPtrn, String tblNamePtrn,
         String colNamePtrn) throws SQLException {
         return new JdbcResultSet(null,
@@ -1297,8 +1309,17 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean generatedKeyAlwaysReturned() throws SQLException {
-        return false;
+    @SuppressWarnings("unchecked")
+    @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+        if (!isWrapperFor(iface))
+            throw new SQLException("Database meta data is not a wrapper for " + iface.getName());
+
+        return (T)this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isWrapperFor(Class<?> iface) {
+        return iface != null && iface == DatabaseMetaData.class;
     }
 
     /**
@@ -1344,7 +1365,7 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
 
                         for (String field : idx.fields()) {
                             indexes.add(F.<Object>asList(name, type.toUpperCase(), !idx.unique(),
-                                idx.name().toUpperCase(), ++cnt, field, idx.descending(field)));
+                                idx.name(), ++cnt, field, idx.descending(field)));
                         }
                     }
                 }
@@ -1364,9 +1385,20 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
      * @param ptrn Pattern.
      * @return Whether string matches pattern.
      */
-    private boolean matches(String str, String ptrn) {
+    private static boolean matches(String str, String ptrn) {
         return str != null && (ptrn == null ||
-            str.toUpperCase().matches(ptrn.toUpperCase().replace("%", ".*").replace("_", ".")));
+            str.matches(ptrn.replace("%", ".*").replace("_", ".")));
+    }
+
+    /**
+     * Checks whether pattern matches any catalog.
+     *
+     * @param catalog Catalog pattern.
+     * @return {@code true} If patter is valid for Ignite (null, empty, or '%' wildcard).
+     *  Otherwise returns {@code false}.
+     */
+    private static boolean validCatalogPattern(String catalog) {
+        return F.isEmpty(catalog) || "%".equals(catalog);
     }
 
     /**


[9/9] ignite git commit: Merge branch 'ignite-3478-1' into ignite-3478

Posted by sb...@apache.org.
Merge branch 'ignite-3478-1' into ignite-3478


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

Branch: refs/heads/ignite-3478
Commit: 855c2d45794c300d41e386b4e6fa40736cc3e40d
Parents: 275a85d b7b9089
Author: sboikov <sb...@gridgain.com>
Authored: Thu Aug 31 12:09:58 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Aug 31 12:09:58 2017 +0300

----------------------------------------------------------------------
 .../jdbc/thin/JdbcThinConnectionSelfTest.java   | 22 ++++++
 .../jdbc/thin/JdbcThinNoDefaultSchemaTest.java  | 82 +++++++++++++++++++-
 .../org/apache/ignite/IgniteJdbcThinDriver.java | 20 +++--
 .../internal/jdbc/thin/JdbcThinConnection.java  | 11 ++-
 .../internal/jdbc/thin/JdbcThinUtils.java       |  2 +-
 .../internal/managers/discovery/DiscoCache.java | 62 +++------------
 .../discovery/GridDiscoveryManager.java         | 38 +--------
 .../GridCachePartitionExchangeManager.java      |  4 +-
 .../processors/cache/GridCacheUtils.java        | 53 +------------
 .../dht/GridClientPartitionTopology.java        |  8 +-
 .../dht/GridDhtPartitionTopologyImpl.java       |  6 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  2 +-
 .../dht/colocated/GridDhtColocatedCache.java    |  4 +-
 .../GridDhtPartitionsExchangeFuture.java        |  2 +-
 .../near/GridNearTransactionalCache.java        |  4 +-
 .../cache/query/GridCacheQueryAdapter.java      |  2 +-
 .../cache/query/GridCacheQueryManager.java      |  6 +-
 .../service/GridServiceProcessor.java           |  4 +-
 .../CacheLateAffinityAssignmentTest.java        |  2 +-
 19 files changed, 163 insertions(+), 171 deletions(-)
----------------------------------------------------------------------



[4/9] ignite git commit: IGNITE-5931 .NET: Fix type registration race condition

Posted by sb...@apache.org.
IGNITE-5931 .NET: Fix type registration race condition

This closes #2553


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

Branch: refs/heads/ignite-3478
Commit: eae6e3b9fd43b42fc9d74e61118800dc0f3f6f0c
Parents: d253c02
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Wed Aug 30 18:35:05 2017 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Wed Aug 30 18:35:05 2017 +0300

----------------------------------------------------------------------
 .../Binary/BinaryDynamicRegistrationTest.cs     | 49 ++++++++++++++++++++
 .../Binary/BinarySelfTest.cs                    | 12 -----
 .../Cache/Affinity/AffinityFieldTest.cs         | 10 +++-
 .../Impl/Binary/Marshaller.cs                   | 43 ++++++++++-------
 4 files changed, 84 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/eae6e3b9/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs
index 4f458f4..01804b7 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs
@@ -25,6 +25,8 @@ namespace Apache.Ignite.Core.Tests.Binary
     using System.Collections.Generic;
     using System.IO;
     using System.Linq;
+    using System.Threading;
+    using System.Threading.Tasks;
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Cache.Store;
@@ -357,6 +359,53 @@ namespace Apache.Ignite.Core.Tests.Binary
         }
 
         /// <summary>
+        /// Tests registration in multiple threads.
+        /// </summary>
+        [Test]
+        public void TestRegistrationMultithreaded([Values(true, false)] bool useTypeName)
+        {
+            const int iterations = 50;
+            const int threads = 4;
+
+            using (var ignite = Ignition.Start(TestUtils.GetTestConfiguration()))
+            {
+                var cache = ignite.CreateCache<int, int>("c").WithKeepBinary<int, IBinaryObject>();
+                var bin = ignite.GetBinary();
+                Func<Type, IBinaryObjectBuilder> getBuilder = x =>
+                    useTypeName ? bin.GetBuilder(x.FullName) : bin.GetBuilder(x);
+                    
+                var types = new[] { typeof(Foo), typeof(Bar), typeof(Bin) };
+
+                foreach (var type in types)
+                {
+                    var type0 = type;  // Modified closure.
+
+                    for (var i = 0; i < iterations; i++)
+                    {
+                        var countdown = new CountdownEvent(threads);
+
+                        Action registerType = () =>
+                        {
+                            countdown.Signal();
+                            Assert.IsTrue(countdown.Wait(5000));
+
+                            var binObj = getBuilder(type0).SetIntField("x", 1).Build();
+                            cache[1] = binObj;
+
+                            Assert.AreEqual(binObj, cache[1]);
+                        };
+
+                        var tasks = Enumerable.Range(0, threads)
+                            .Select(x => Task.Factory.StartNew(registerType))
+                            .ToArray();
+
+                        Task.WaitAll(tasks);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
         /// Tests the type registration.
         /// </summary>
         private static void Test(IIgnite ignite1, IIgnite ignite2)

http://git-wip-us.apache.org/repos/asf/ignite/blob/eae6e3b9/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
index e24dca0..4237eda 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinarySelfTest.cs
@@ -1534,18 +1534,6 @@ namespace Apache.Ignite.Core.Tests.Binary
             Assert.AreEqual(nDateArr, obj2.NDateArr);
         }
 
-        [Test]
-        public void TestBinaryConfigurationValidation()
-        {
-            var cfg = new BinaryConfiguration(typeof (PropertyType))
-            {
-                Types = new[] {typeof(PropertyType).AssemblyQualifiedName}
-            };
-
-            // ReSharper disable once ObjectCreationAsStatement
-            Assert.Throws<BinaryObjectException>(() => new Marshaller(cfg));
-        }
-
         /// <summary>
         /// Tests the compact footer setting.
         /// </summary>

http://git-wip-us.apache.org/repos/asf/ignite/blob/eae6e3b9/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFieldTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFieldTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFieldTest.cs
index 31326b7..c3482bb 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFieldTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Affinity/AffinityFieldTest.cs
@@ -76,7 +76,8 @@ namespace Apache.Ignite.Core.Tests.Cache.Affinity
             _cache1.Put(new CacheKeyAttrOverride(), string.Empty);
 
             // Verify
-            foreach (var type in new[] { typeof(CacheKey) , typeof(CacheKeyAttr), typeof(CacheKeyAttrOverride)})
+            foreach (var type in new[] { typeof(CacheKey), typeof(CacheKeyAttr), 
+                typeof(CacheKeyAttrDynamicRegistration), typeof(CacheKeyAttrOverride)})
             {
                 Assert.AreEqual("AffinityKey", _cache1.Ignite.GetBinary().GetBinaryType(type).AffinityKeyFieldName);
                 Assert.AreEqual("AffinityKey", _cache2.Ignite.GetBinary().GetBinaryType(type).AffinityKeyFieldName);
@@ -91,6 +92,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Affinity
         {
             TestKeyLocation0((key, affKey) => new CacheKey {Key = key, AffinityKey = affKey});
             TestKeyLocation0((key, affKey) => new CacheKeyAttr {Key = key, AffinityKey = affKey});
+            TestKeyLocation0((key, affKey) => new CacheKeyAttrDynamicRegistration {Key = key, AffinityKey = affKey});
             TestKeyLocation0((key, affKey) => new CacheKeyAttrOverride {Key = key, AffinityKey = affKey});
         }
 
@@ -190,6 +192,12 @@ namespace Apache.Ignite.Core.Tests.Cache.Affinity
             [AffinityKeyMapped] public int AffinityKey { get; set; }
         }
 
+        private class CacheKeyAttrDynamicRegistration
+        {
+            public int Key { get; set; }
+            [AffinityKeyMapped] public int AffinityKey { get; set; }
+        }
+
         private class CacheKeyAttrOverride
         {
             [AffinityKeyMapped] public int Key { get; set; }

http://git-wip-us.apache.org/repos/asf/ignite/blob/eae6e3b9/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
index 5ede542..a6d5517 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/Marshaller.cs
@@ -503,21 +503,28 @@ namespace Apache.Ignite.Core.Impl.Binary
 
             desc = desc == null
                 ? new BinaryFullTypeDescriptor(type, typeId, typeName, true, _cfg.NameMapper,
-                    _cfg.IdMapper, ser, false, null, BinaryUtils.IsIgniteEnum(type), registered)
+                    _cfg.IdMapper, ser, false, GetAffinityKeyFieldNameFromAttribute(type), 
+                    BinaryUtils.IsIgniteEnum(type), registered)
                 : new BinaryFullTypeDescriptor(desc, type, ser, registered);
 
             if (RegistrationDisabled)
+            {
                 return desc;
+            }
 
             var typeKey = BinaryUtils.TypeKey(true, typeId);
 
             var desc0 = _idToDesc.GetOrAdd(typeKey, x => desc);
-            if (desc0.Type != null && desc0.Type.FullName != type.FullName)
+            if (desc0.Type != null && desc0.TypeName != typeName)
+            {
                 ThrowConflictingTypeError(type, desc0.Type, typeId);
+            }
 
             desc0 = _typeNameToDesc.GetOrAdd(typeName, x => desc);
-            if (desc0.Type != null && desc0.Type.FullName != type.FullName)
+            if (desc0.Type != null && desc0.TypeName != typeName)
+            {
                 ThrowConflictingTypeError(type, desc0.Type, typeId);
+            }
 
             _typeToDesc.Set(type, desc);
 
@@ -652,34 +659,36 @@ namespace Apache.Ignite.Core.Impl.Binary
             bool keepDeserialized, IBinaryNameMapper nameMapper, IBinaryIdMapper idMapper,
             IBinarySerializerInternal serializer, string affKeyFieldName, bool isEnum)
         {
+            Debug.Assert(!string.IsNullOrEmpty(typeName));
+
             long typeKey = BinaryUtils.TypeKey(userType, typeId);
 
             BinaryFullTypeDescriptor conflictingType;
 
-            if (_idToDesc.TryGetValue(typeKey, out conflictingType))
+            if (_idToDesc.TryGetValue(typeKey, out conflictingType) && conflictingType.TypeName != typeName)
             {
-                var type1 = conflictingType.Type != null
-                    ? conflictingType.Type.AssemblyQualifiedName
-                    : conflictingType.TypeName;
-
-                var type2 = type != null ? type.AssemblyQualifiedName : typeName;
-
-                ThrowConflictingTypeError(type1, type2, typeId);
+                ThrowConflictingTypeError(typeName, conflictingType.TypeName, typeId);
             }
 
-            if (userType && _typeNameToDesc.ContainsKey(typeName))
-                throw new BinaryObjectException("Conflicting type name: " + typeName);
-
             var descriptor = new BinaryFullTypeDescriptor(type, typeId, typeName, userType, nameMapper, idMapper, 
                 serializer, keepDeserialized, affKeyFieldName, isEnum);
 
+            if (RegistrationDisabled)
+            {
+                return descriptor;
+            }
+
             if (type != null)
-                _typeToDesc.GetOrAdd(type, x => descriptor);
+            {
+                _typeToDesc.Set(type, descriptor);
+            }
 
             if (userType)
-                _typeNameToDesc.GetOrAdd(typeName, x => descriptor);
+            {
+                _typeNameToDesc.Set(typeName, descriptor);
+            }
 
-            _idToDesc.GetOrAdd(typeKey, _ => descriptor);
+            _idToDesc.Set(typeKey, descriptor);
 
             return descriptor;
         }


[6/9] ignite git commit: Merge remote-tracking branch 'remotes/origin/master' into ignite-3478

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


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

Branch: refs/heads/ignite-3478
Commit: 275a85db5cd6923b36126166ae99b15e876192be
Parents: f6e9825 f9be391
Author: sboikov <sb...@gridgain.com>
Authored: Thu Aug 31 10:44:07 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Aug 31 10:44:07 2017 +0300

----------------------------------------------------------------------
 examples/pom.xml                                |  19 +
 .../internal/jdbc2/JdbcMetadataSelfTest.java    | 120 ++++-
 .../internal/jdbc2/JdbcDatabaseMetadata.java    | 466 ++++++++++---------
 .../distributed/dht/GridDhtLocalPartition.java  |   8 +-
 .../GridCacheDatabaseSharedManager.java         |  31 +-
 .../IgniteCacheDatabaseSharedManager.java       |   2 +-
 .../db/file/IgnitePdsEvictionTest.java          |   3 +-
 .../Binary/BinaryDynamicRegistrationTest.cs     |  49 ++
 .../Binary/BinarySelfTest.cs                    |  12 -
 .../Cache/Affinity/AffinityFieldTest.cs         |  10 +-
 .../Impl/Binary/Marshaller.cs                   |  43 +-
 11 files changed, 486 insertions(+), 277 deletions(-)
----------------------------------------------------------------------



[8/9] ignite git commit: disco cache cleanup

Posted by sb...@apache.org.
disco cache cleanup


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

Branch: refs/heads/ignite-3478
Commit: b7b9089f0102b8cab9942a9c887d93e9f26cc7d2
Parents: bc8e645
Author: sboikov <sb...@gridgain.com>
Authored: Thu Aug 31 12:00:36 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Aug 31 12:00:36 2017 +0300

----------------------------------------------------------------------
 .../internal/managers/discovery/DiscoCache.java | 62 ++++----------------
 .../discovery/GridDiscoveryManager.java         | 38 ++----------
 .../GridCachePartitionExchangeManager.java      |  4 +-
 .../processors/cache/GridCacheUtils.java        | 53 ++---------------
 .../dht/GridClientPartitionTopology.java        |  8 +--
 .../dht/GridDhtPartitionTopologyImpl.java       |  6 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  2 +-
 .../dht/colocated/GridDhtColocatedCache.java    |  4 +-
 .../GridDhtPartitionsExchangeFuture.java        |  2 +-
 .../near/GridNearTransactionalCache.java        |  4 +-
 .../cache/query/GridCacheQueryAdapter.java      |  2 +-
 .../cache/query/GridCacheQueryManager.java      |  6 +-
 .../service/GridServiceProcessor.java           |  4 +-
 .../CacheLateAffinityAssignmentTest.java        |  2 +-
 14 files changed, 40 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java
index 5ac99f1..4b57eb8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoCache.java
@@ -58,13 +58,6 @@ public class DiscoCache {
     /** Daemon nodes. */
     private final List<ClusterNode> daemonNodes;
 
-    /** All server nodes. */
-    private final List<ClusterNode> srvNodesWithCaches;
-
-    /** All nodes with at least one cache configured. */
-    @GridToStringInclude
-    private final List<ClusterNode> allNodesWithCaches;
-
     /** All remote nodes with at least one cache configured. */
     @GridToStringInclude
     private final List<ClusterNode> rmtNodesWithCaches;
@@ -97,8 +90,6 @@ public class DiscoCache {
      * @param allNodes All nodes.
      * @param srvNodes Server nodes.
      * @param daemonNodes Daemon nodes.
-     * @param srvNodesWithCaches Server nodes with at least one cache configured.
-     * @param allNodesWithCaches All nodes with at least one cache configured.
      * @param rmtNodesWithCaches Remote nodes with at least one cache configured.
      * @param allCacheNodes Cache nodes by cache name.
      * @param cacheGrpAffNodes Affinity nodes by cache group ID.
@@ -113,8 +104,6 @@ public class DiscoCache {
         List<ClusterNode> allNodes,
         List<ClusterNode> srvNodes,
         List<ClusterNode> daemonNodes,
-        List<ClusterNode> srvNodesWithCaches,
-        List<ClusterNode> allNodesWithCaches,
         List<ClusterNode> rmtNodesWithCaches,
         Map<Integer, List<ClusterNode>> allCacheNodes,
         Map<Integer, List<ClusterNode>> cacheGrpAffNodes,
@@ -127,8 +116,6 @@ public class DiscoCache {
         this.allNodes = allNodes;
         this.srvNodes = srvNodes;
         this.daemonNodes = daemonNodes;
-        this.srvNodesWithCaches = srvNodesWithCaches;
-        this.allNodesWithCaches = allNodesWithCaches;
         this.rmtNodesWithCaches = rmtNodesWithCaches;
         this.allCacheNodes = allCacheNodes;
         this.cacheGrpAffNodes = cacheGrpAffNodes;
@@ -195,36 +182,13 @@ public class DiscoCache {
         return daemonNodes;
     }
 
-    /** @return Server nodes with at least one cache configured. */
-    public List<ClusterNode> serverNodesWithCaches() {
-        return srvNodesWithCaches;
-    }
-
     /**
-     * Gets all remote nodes that have at least one cache configured.
+     * Gets all alive remote nodes that have at least one cache configured.
      *
      * @return Collection of nodes.
      */
-    public List<ClusterNode> remoteNodesWithCaches() {
-        return rmtNodesWithCaches;
-    }
-
-    /**
-     * Gets collection of nodes with at least one cache configured.
-     *
-     * @return Collection of nodes.
-     */
-    public List<ClusterNode> allNodesWithCaches() {
-        return allNodesWithCaches;
-    }
-
-    /**
-     * Gets collection of server nodes with at least one cache configured.
-     *
-     * @return Collection of nodes.
-     */
-    public Collection<ClusterNode> aliveServerNodes() {
-        return F.view(serverNodes(), new P1<ClusterNode>() {
+    public Collection<ClusterNode> remoteAliveNodesWithCaches() {
+        return F.view(rmtNodesWithCaches, new P1<ClusterNode>() {
             @Override public boolean apply(ClusterNode node) {
                 return alives.contains(node.id());
             }
@@ -236,8 +200,8 @@ public class DiscoCache {
      *
      * @return Collection of nodes.
      */
-    public Collection<ClusterNode> aliveServerNodesWithCaches() {
-        return F.view(serverNodesWithCaches(), new P1<ClusterNode>() {
+    public Collection<ClusterNode> aliveServerNodes() {
+        return F.view(serverNodes(), new P1<ClusterNode>() {
             @Override public boolean apply(ClusterNode node) {
                 return alives.contains(node.id());
             }
@@ -248,16 +212,14 @@ public class DiscoCache {
      * @return Oldest alive server node.
      */
     public @Nullable ClusterNode oldestAliveServerNode(){
-        Iterator<ClusterNode> it = aliveServerNodes().iterator();
-        return it.hasNext() ? it.next() : null;
-    }
+        for (int i = 0; i < srvNodes.size(); i++) {
+            ClusterNode srv = srvNodes.get(i);
 
-    /**
-     * @return Oldest alive server node with at least one cache configured.
-     */
-    public @Nullable ClusterNode oldestAliveServerNodeWithCache(){
-        Iterator<ClusterNode> it = aliveServerNodesWithCaches().iterator();
-        return it.hasNext() ? it.next() : null;
+            if (alives.contains(srv.id()))
+                return srv;
+        }
+
+        return null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index d426ca5..8e3f9fc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -1805,42 +1805,21 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
     }
 
     /**
-     * Gets cache nodes for cache with given ID.
-     *
-     * @param cacheId Cache ID.
-     * @param topVer Topology version.
-     * @return Collection of cache nodes.
-     */
-    public Collection<ClusterNode> cacheNodes(int cacheId, AffinityTopologyVersion topVer) {
-        return resolveDiscoCache(cacheId, topVer).cacheNodes(cacheId);
-    }
-
-    /**
-     * Gets all nodes with at least one cache configured.
-     *
-     * @param topVer Topology version.
-     * @return Collection of cache nodes.
-     */
-    public Collection<ClusterNode> cacheNodes(AffinityTopologyVersion topVer) {
-        return resolveDiscoCache(CU.cacheId(null), topVer).allNodesWithCaches();
-    }
-
-    /**
      * Gets cache remote nodes for cache with given name.
      *
      * @param topVer Topology version.
      * @return Collection of cache nodes.
      */
-    public Collection<ClusterNode> remoteCacheNodes(AffinityTopologyVersion topVer) {
-        return resolveDiscoCache(CU.cacheId(null), topVer).remoteNodesWithCaches();
+    public Collection<ClusterNode> remoteAliveNodesWithCaches(AffinityTopologyVersion topVer) {
+        return resolveDiscoCache(CU.cacheId(null), topVer).remoteAliveNodesWithCaches();
     }
 
     /**
      * @param topVer Topology version (maximum allowed node order).
      * @return Oldest alive server nodes with at least one cache configured.
      */
-    @Nullable public ClusterNode oldestAliveCacheServerNode(AffinityTopologyVersion topVer) {
-        return resolveDiscoCache(CU.cacheId(null), topVer).oldestAliveServerNodeWithCache();
+    @Nullable public ClusterNode oldestAliveServerNode(AffinityTopologyVersion topVer) {
+        return resolveDiscoCache(CU.cacheId(null), topVer).oldestAliveServerNode();
     }
 
     /**
@@ -2203,9 +2182,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
         Map<Integer, List<ClusterNode>> allCacheNodes = U.newHashMap(allNodes.size());
         Map<Integer, List<ClusterNode>> cacheGrpAffNodes = U.newHashMap(allNodes.size());
 
-        Set<ClusterNode> allNodesWithCaches = new TreeSet<>(GridNodeOrderComparator.INSTANCE);
         Set<ClusterNode> rmtNodesWithCaches = new TreeSet<>(GridNodeOrderComparator.INSTANCE);
-        Set<ClusterNode> srvNodesWithCaches = new TreeSet<>(GridNodeOrderComparator.INSTANCE);
 
         for (ClusterNode node : allNodes) {
             assert node.order() != 0 : "Invalid node order [locNode=" + loc + ", node=" + node + ']';
@@ -2230,11 +2207,6 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
                 CachePredicate filter = entry.getValue();
 
                 if (filter.cacheNode(node)) {
-                    allNodesWithCaches.add(node);
-
-                    if(!CU.clientNode(node))
-                        srvNodesWithCaches.add(node);
-
                     if (!node.isLocal())
                         rmtNodesWithCaches.add(node);
 
@@ -2251,8 +2223,6 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
             Collections.unmodifiableList(allNodes),
             Collections.unmodifiableList(srvNodes),
             Collections.unmodifiableList(daemonNodes),
-            U.sealList(srvNodesWithCaches),
-            U.sealList(allNodesWithCaches),
             U.sealList(rmtNodesWithCaches),
             Collections.unmodifiableMap(allCacheNodes),
             Collections.unmodifiableMap(cacheGrpAffNodes),

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index bd34a5f..5ec6bfb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -925,7 +925,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
      * for non coordinator -  {@link GridDhtPartitionsSingleMessage SingleMessages} send
      */
     private void refreshPartitions() {
-        ClusterNode oldest = cctx.discovery().oldestAliveCacheServerNode(AffinityTopologyVersion.NONE);
+        ClusterNode oldest = cctx.discovery().oldestAliveServerNode(AffinityTopologyVersion.NONE);
 
         if (oldest == null) {
             if (log.isDebugEnabled())
@@ -955,7 +955,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
             AffinityTopologyVersion rmtTopVer =
                 lastFut != null ? (lastFut.isDone() ? lastFut.topologyVersion() : lastFut.initialVersion()) : AffinityTopologyVersion.NONE;
 
-            Collection<ClusterNode> rmts = CU.remoteNodes(cctx, rmtTopVer);
+            Collection<ClusterNode> rmts = cctx.discovery().remoteAliveNodesWithCaches(rmtTopVer);
 
             if (log.isDebugEnabled())
                 log.debug("Refreshing partitions from oldest node: " + cctx.localNodeId());

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index f94cfb5..5885fcd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -438,59 +438,14 @@ public class GridCacheUtils {
     }
 
     /**
-     * Gets all nodes on which cache with the same name is started.
-     *
-     * @param ctx Cache context.
-     * @param topOrder Maximum allowed node order.
-     * @return All nodes on which cache with the same name is started (including nodes
-     *      that may have already left).
-     */
-    public static Collection<ClusterNode> allNodes(GridCacheContext ctx, AffinityTopologyVersion topOrder) {
-        return ctx.discovery().cacheNodes(ctx.cacheId(), topOrder);
-    }
-
-    /**
-     * Gets all nodes with at least one cache configured.
-     *
-     * @param ctx Shared cache context.
-     * @param topOrder Maximum allowed node order.
-     * @return All nodes on which cache with the same name is started (including nodes
-     *      that may have already left).
-     */
-    public static Collection<ClusterNode> allNodes(GridCacheSharedContext ctx, AffinityTopologyVersion topOrder) {
-        return ctx.discovery().cacheNodes(topOrder);
-    }
-
-    /**
-     * Gets remote nodes with at least one cache configured.
-     *
-     * @param ctx Cache shared context.
-     * @param topVer Topology version.
-     * @return Collection of remote nodes with at least one cache configured.
-     */
-    public static Collection<ClusterNode> remoteNodes(final GridCacheSharedContext ctx, AffinityTopologyVersion topVer) {
-        return ctx.discovery().remoteCacheNodes(topVer);
-    }
-
-    /**
-     * Gets all nodes on which cache with the same name is started and the local DHT storage is enabled.
-     *
-     * @param ctx Cache context.
-     * @return All nodes on which cache with the same name is started.
-     */
-    public static Collection<ClusterNode> affinityNodes(final GridCacheContext ctx) {
-        return ctx.discovery().cacheGroupAffinityNodes(ctx.groupId(), AffinityTopologyVersion.NONE);
-    }
-
-    /**
      * Gets DHT affinity nodes.
      *
      * @param ctx Cache context.
-     * @param topOrder Maximum allowed node order.
-     * @return Affinity nodes.
+     * @param topVer Topology version.
+     * @return Cache affinity nodes for given topology version.
      */
-    public static Collection<ClusterNode> affinityNodes(GridCacheContext ctx, AffinityTopologyVersion topOrder) {
-        return ctx.discovery().cacheGroupAffinityNodes(ctx.groupId(), topOrder);
+    public static Collection<ClusterNode> affinityNodes(GridCacheContext ctx, AffinityTopologyVersion topVer) {
+        return ctx.discovery().cacheGroupAffinityNodes(ctx.groupId(), topVer);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java
index 299394f..4ac9195 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridClientPartitionTopology.java
@@ -338,7 +338,7 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology {
         }
 
         // In case if node joins, get topology at the time of joining node.
-        ClusterNode oldest = discoCache.oldestAliveServerNodeWithCache();
+        ClusterNode oldest = discoCache.oldestAliveServerNode();
 
         assert oldest != null;
 
@@ -535,7 +535,7 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology {
      * @return List of nodes for the partition.
      */
     private List<ClusterNode> nodes(int p, AffinityTopologyVersion topVer, GridDhtPartitionState state, GridDhtPartitionState... states) {
-        Collection<UUID> allIds = topVer.topologyVersion() > 0 ? F.nodeIds(discoCache.allNodesWithCaches()) : null;
+        Collection<UUID> allIds = F.nodeIds(discoCache.cacheGroupAffinityNodes(grpId));
 
         lock.readLock().lock();
 
@@ -961,10 +961,10 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology {
         assert nodeId.equals(cctx.localNodeId());
 
         // In case if node joins, get topology at the time of joining node.
-        ClusterNode oldest = discoCache.oldestAliveServerNodeWithCache();
+        ClusterNode oldest = discoCache.oldestAliveServerNode();
 
         // If this node became the oldest node.
-        if (oldest.id().equals(cctx.localNodeId())) {
+        if (cctx.localNode().equals(oldest)) {
             long seq = node2part.updateSequence();
 
             if (seq != updateSeq) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
index f7f71a1..01d972d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
@@ -326,7 +326,7 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
         if (grp.affinityNode()) {
             ClusterNode loc = ctx.localNode();
 
-            ClusterNode oldest = discoCache.oldestAliveServerNodeWithCache();
+            ClusterNode oldest = discoCache.oldestAliveServerNode();
 
             GridDhtPartitionExchangeId exchId = exchFut.exchangeId();
 
@@ -466,7 +466,7 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
                         lastTopChangeVer = readyTopVer = evts.topologyVersion();
                     }
 
-                    ClusterNode oldest = discoCache.oldestAliveServerNodeWithCache();
+                    ClusterNode oldest = discoCache.oldestAliveServerNode();
 
                     if (log.isDebugEnabled()) {
                         log.debug("Partition map beforeExchange [exchId=" + exchFut.exchangeId() +
@@ -2047,7 +2047,7 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
     private long updateLocal(int p, GridDhtPartitionState state, long updateSeq, AffinityTopologyVersion affVer) {
         assert lock.isWriteLockedByCurrentThread();
 
-        ClusterNode oldest = discoCache.oldestAliveServerNodeWithCache();
+        ClusterNode oldest = discoCache.oldestAliveServerNode();
 
         assert oldest != null || ctx.kernalContext().clientNode();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 1467bfa..7d0f747 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -1965,7 +1965,7 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
         if (dhtFut != null) {
             if (req.writeSynchronizationMode() == PRIMARY_SYNC
                 // To avoid deadlock disable back-pressure for sender data node.
-                && !ctx.discovery().cacheAffinityNode(node, ctx.name())
+                && !ctx.discovery().cacheGroupAffinityNode(node, ctx.groupId())
                 && !dhtFut.isDone()) {
                 final IgniteRunnable tracker = GridNioBackPressureControl.threadTracker();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
index c72f53e..053bbe5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
@@ -712,7 +712,7 @@ public class GridDhtColocatedCache<K, V> extends GridDhtTransactionalCacheAdapte
                     }
 
                     if (map == null) {
-                        Collection<ClusterNode> affNodes = CU.allNodes(ctx, topVer);
+                        Collection<ClusterNode> affNodes = CU.affinityNodes(ctx, topVer);
 
                         keyCnt = (int)Math.ceil((double)keys.size() / affNodes.size());
 
@@ -815,7 +815,7 @@ public class GridDhtColocatedCache<K, V> extends GridDhtTransactionalCacheAdapte
                     AffinityTopologyVersion topVer = lock.topologyVersion();
 
                     if (map == null) {
-                        Collection<ClusterNode> affNodes = CU.allNodes(ctx, topVer);
+                        Collection<ClusterNode> affNodes = CU.affinityNodes(ctx, topVer);
 
                         keyCnt = (int)Math.ceil((double)keys.size() / affNodes.size());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index 240b5f0..6d85222 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -2826,7 +2826,7 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte
                     null);
             }
             else {
-                ClusterNode oldest = cctx.discovery().oldestAliveCacheServerNode(AffinityTopologyVersion.NONE);
+                ClusterNode oldest = cctx.discovery().oldestAliveServerNode(AffinityTopologyVersion.NONE);
 
                 if (oldest != null && oldest.isLocal()) {
                     GridDhtPartitionTopology top = cctx.exchange().clientTopology(grpId);

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
index a691cbc..973a199 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTransactionalCache.java
@@ -540,7 +540,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V>
                             ver = cand.version();
 
                             if (map == null) {
-                                Collection<ClusterNode> affNodes = CU.allNodes(ctx, cand.topologyVersion());
+                                Collection<ClusterNode> affNodes = CU.affinityNodes(ctx, cand.topologyVersion());
 
                                 if (F.isEmpty(affNodes))
                                     return;
@@ -663,7 +663,7 @@ public class GridNearTransactionalCache<K, V> extends GridNearCacheAdapter<K, V>
 
                             if (cand != null) {
                                 if (map == null) {
-                                    Collection<ClusterNode> affNodes = CU.allNodes(ctx, cand.topologyVersion());
+                                    Collection<ClusterNode> affNodes = CU.affinityNodes(ctx, cand.topologyVersion());
 
                                     if (F.isEmpty(affNodes))
                                         return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
index c4eae8c..b5fdd23 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
@@ -600,7 +600,7 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
 
         final AffinityTopologyVersion topVer = cctx.affinity().affinityTopologyVersion();
 
-        Collection<ClusterNode> affNodes = CU.affinityNodes(cctx);
+        Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer);
 
         if (prj == null && part == null)
             return affNodes;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index 3e27720..f873461 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -1859,11 +1859,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
             Callable<Collection<CacheSqlMetadata>> job = new MetadataJob();
 
             // Remote nodes that have current cache.
-            Collection<ClusterNode> nodes = F.view(cctx.discovery().remoteNodes(), new P1<ClusterNode>() {
-                @Override public boolean apply(ClusterNode n) {
-                    return cctx.kernalContext().discovery().cacheAffinityNode(n, cacheName);
-                }
-            });
+            Collection<ClusterNode> nodes = CU.affinityNodes(cctx, AffinityTopologyVersion.NONE);
 
             Collection<Collection<CacheSqlMetadata>> res = new ArrayList<>(nodes.size() + 1);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
index 1d8720c..28b2983 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
@@ -1292,7 +1292,7 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
 
             if (!cache.context().affinityNode()) {
                 ClusterNode oldestSrvNode =
-                    ctx.discovery().oldestAliveCacheServerNode(AffinityTopologyVersion.NONE);
+                    ctx.discovery().oldestAliveServerNode(AffinityTopologyVersion.NONE);
 
                 if (oldestSrvNode == null)
                     return new GridEmptyIterator<>();
@@ -1566,7 +1566,7 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
                         // In case the cache instance isn't tracked by DiscoveryManager anymore.
                         discoCache.updateAlives(ctx.discovery());
 
-                        ClusterNode oldest = discoCache.oldestAliveServerNodeWithCache();
+                        ClusterNode oldest = discoCache.oldestAliveServerNode();
 
                         if (oldest != null && oldest.isLocal()) {
                             final Collection<GridServiceDeployment> retries = new ConcurrentLinkedQueue<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/b7b9089f/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
index 695d8a6..95e9479 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
@@ -2826,7 +2826,7 @@ public class CacheLateAffinityAssignmentTest extends GridCommonAbstractTest {
 
         assertNotNull("Failed to find exchange future:", evt);
 
-        Collection<ClusterNode> allNodes = ctx.discovery().cacheNodes(topVer0);
+        Collection<ClusterNode> allNodes = ctx.discovery().serverNodes(topVer0);
 
         for (DynamicCacheDescriptor cacheDesc : ctx.cache().cacheDescriptors().values()) {
             if (assignments.get(cacheDesc.cacheId()) != null)


[7/9] ignite git commit: IGNITE-5409: JDBC thin: added schema to connection URL. This closes #2179.

Posted by sb...@apache.org.
IGNITE-5409: JDBC thin: added schema to connection URL. This closes #2179.


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

Branch: refs/heads/ignite-3478
Commit: bc8e64567eebfb4bfa30e989ee63ddae65b20693
Parents: f9be391
Author: tledkov-gridgain <tl...@gridgain.com>
Authored: Thu Aug 31 11:03:18 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Thu Aug 31 11:03:18 2017 +0300

----------------------------------------------------------------------
 .../jdbc/thin/JdbcThinConnectionSelfTest.java   | 22 ++++++
 .../jdbc/thin/JdbcThinNoDefaultSchemaTest.java  | 82 +++++++++++++++++++-
 .../org/apache/ignite/IgniteJdbcThinDriver.java | 20 +++--
 .../internal/jdbc/thin/JdbcThinConnection.java  | 11 ++-
 .../internal/jdbc/thin/JdbcThinUtils.java       |  2 +-
 5 files changed, 123 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinConnectionSelfTest.java
----------------------------------------------------------------------
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 a2e7be1..2306a2b 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
@@ -287,6 +287,28 @@ public class JdbcThinConnectionSelfTest extends JdbcThinAbstractSelfTest {
     }
 
     /**
+     * Test schema property in URL.
+     *
+     * @throws Exception If failed.
+     */
+    public void testSchema() throws Exception {
+        assertInvalid("jdbc:ignite:thin://127.0.0.1/qwe/qwe",
+            "Invalid URL format (only schema name is allowed in URL path parameter 'host:port[/schemaName]')" );
+
+        try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/public")) {
+            assertEquals("Invalid schema", "public", conn.getSchema());
+        }
+
+        try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/" + DEFAULT_CACHE_NAME)) {
+            assertEquals("Invalid schema", DEFAULT_CACHE_NAME, conn.getSchema());
+        }
+
+        try (Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1/_not_exist_schema_")) {
+            assertEquals("Invalid schema", "_not_exist_schema_", conn.getSchema());
+        }
+    }
+
+    /**
      * Get client socket for connection.
      *
      * @param conn Connection.

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
index ff49742..7b226e5 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinNoDefaultSchemaTest.java
@@ -20,7 +20,9 @@ package org.apache.ignite.jdbc.thin;
 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 org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -28,6 +30,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
 import org.jetbrains.annotations.NotNull;
 
 /**
@@ -119,11 +122,9 @@ public class JdbcThinNoDefaultSchemaTest extends JdbcThinAbstractSelfTest {
     /**
      * @throws Exception If failed.
      */
-    public void testNoCacheNameQuery() throws Exception {
+    public void testSchemaNameInQuery() throws Exception {
         Connection conn = DriverManager.getConnection(URL);
 
-        conn.setSchema("cache1");
-
         Statement stmt = conn.createStatement();
 
         assertNotNull(stmt);
@@ -155,4 +156,79 @@ public class JdbcThinNoDefaultSchemaTest extends JdbcThinAbstractSelfTest {
 
         stmt.close();
     }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSchemaInUrl() throws Exception {
+        try(Connection conn = DriverManager.getConnection(URL + "/cache1")) {
+            Statement stmt = conn.createStatement();
+
+            stmt.execute("select t._key, t._val from Integer t");
+
+            ResultSet rs = stmt.getResultSet();
+
+            while (rs.next())
+                assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+        }
+
+        try(Connection conn = DriverManager.getConnection(URL + "/cache2")) {
+            Statement stmt = conn.createStatement();
+
+            stmt.execute("select t._key, t._val from Integer t");
+
+            ResultSet rs = stmt.getResultSet();
+
+            while (rs.next())
+                assertEquals(rs.getInt(2), rs.getInt(1) * 3);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSchemaInUrlAndInQuery() throws Exception {
+        try(Connection conn = DriverManager.getConnection(URL + "/cache2")) {
+            Statement stmt = conn.createStatement();
+
+            stmt.execute("select t._key, t._val, v._val " +
+                "from \"cache1\".Integer t join Integer v on t._key = v._key");
+
+            ResultSet rs = stmt.getResultSet();
+
+            while (rs.next()) {
+                assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+                assertEquals(rs.getInt(3), rs.getInt(1) * 3);
+            }
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testSetSchema() throws Exception {
+        try(Connection conn = DriverManager.getConnection(URL)) {
+            // Try to execute query without set schema
+            GridTestUtils.assertThrows(log, new Callable<Object>() {
+                @Override public Object call() throws Exception {
+                    Statement stmt = conn.createStatement();
+
+                    stmt.execute("select t._key, t._val from Integer t");
+
+                    return null;
+                }
+            }, SQLException.class, "Failed to query Ignite");
+
+            conn.setSchema("cache1");
+
+            Statement stmt = conn.createStatement();
+
+            stmt.execute("select t._key, t._val from Integer t");
+
+            ResultSet rs = stmt.getResultSet();
+
+            while (rs.next())
+                assertEquals(rs.getInt(2), rs.getInt(1) * 2);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
index 7e23d7a..423223c 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDriver.java
@@ -166,9 +166,9 @@ public class IgniteJdbcThinDriver implements Driver {
         if (!acceptsURL(url))
             return null;
 
-        parseUrl(url, props);
+        String schema = parseUrl(url, props);
 
-        return new JdbcThinConnection(url, props);
+        return new JdbcThinConnection(url, props, schema);
     }
 
     /** {@inheritDoc} */
@@ -218,9 +218,10 @@ public class IgniteJdbcThinDriver implements Driver {
      *
      * @param props Properties.
      * @param url URL.
+     * @return Scheme name. {@code null} in case the schema isn't specified in the url.
      * @throws SQLException On error.
      */
-    private void parseUrl(String url, Properties props) throws SQLException {
+    private String parseUrl(String url, Properties props) throws SQLException {
         if (F.isEmpty(url))
             throw new SQLException("URL cannot be null or empty.");
 
@@ -234,10 +235,9 @@ public class IgniteJdbcThinDriver implements Driver {
         if (nakedUrlParts.length > 2)
             throw new SQLException("Invalid URL format (only one ? character is allowed): " + url);
 
-        String endpoint = nakedUrlParts[0];
+        String[] pathParts = nakedUrlParts[0].split("/");
 
-        if (endpoint.endsWith("/"))
-            endpoint = endpoint.substring(0, endpoint.length() - 1);
+        String endpoint = pathParts[0];
 
         String[] endpointParts = endpoint.split(":");
 
@@ -251,6 +251,14 @@ public class IgniteJdbcThinDriver implements Driver {
 
         if (nakedUrlParts.length == 2)
             parseParameters(nakedUrlParts[1], props);
+
+        if (pathParts.length > 2) {
+            throw new SQLException("Invalid URL format (only schema name is allowed in URL path parameter " +
+                "'host:port[/schemaName]'): " + url);
+        }
+
+        // Gets schema from URL string & returns.
+        return pathParts.length == 2 ? pathParts[1] : null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
----------------------------------------------------------------------
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 1ed0844..370cfa4 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
@@ -69,7 +69,7 @@ public class JdbcThinConnection implements Connection {
     private String url;
 
     /** Schema name. */
-    private String schemaName;
+    private String schema;
 
     /** Closed flag. */
     private boolean closed;
@@ -100,9 +100,10 @@ public class JdbcThinConnection implements Connection {
      *
      * @param url Connection URL.
      * @param props Additional properties.
+     * @param schema Schema name.
      * @throws SQLException In case Ignite client failed to start.
      */
-    public JdbcThinConnection(String url, Properties props) throws SQLException {
+    public JdbcThinConnection(String url, Properties props, String schema) throws SQLException {
         assert url != null;
         assert props != null;
 
@@ -112,6 +113,8 @@ public class JdbcThinConnection implements Connection {
         autoCommit = true;
         txIsolation = Connection.TRANSACTION_NONE;
 
+        this.schema = schema;
+
         String host = extractHost(props);
         int port = extractPort(props);
 
@@ -522,12 +525,12 @@ public class JdbcThinConnection implements Connection {
 
     /** {@inheritDoc} */
     @Override public void setSchema(String schema) throws SQLException {
-        schemaName = schema;
+        this.schema = schema;
     }
 
     /** {@inheritDoc} */
     @Override public String getSchema() throws SQLException {
-        return schemaName;
+        return schema;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/bc8e6456/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
index 675cf2d..bb6eb14 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinUtils.java
@@ -46,7 +46,7 @@ public class JdbcThinUtils {
     public static final String URL_PREFIX = "jdbc:ignite:thin://";
 
     /** Prefix for property names. */
-    public static final String PROP_PREFIX = "ignite.jdbc";
+    public static final String PROP_PREFIX = "ignite.jdbc.";
 
     /** Port number property name. */
     public static final String PROP_PORT = PROP_PREFIX + "port";


[5/9] ignite git commit: IGNITE-6115: Ignore page eviction mode if Ignite persistence is enabled. - Fixes #2523.

Posted by sb...@apache.org.
IGNITE-6115: Ignore page eviction mode if Ignite persistence is enabled. - Fixes #2523.

Signed-off-by: shroman <rs...@yahoo.com>


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

Branch: refs/heads/ignite-3478
Commit: f9be391856ceff2268249fccbfd3c5ca0132378e
Parents: eae6e3b
Author: shroman <rs...@yahoo.com>
Authored: Thu Aug 31 12:15:09 2017 +0900
Committer: shroman <rs...@yahoo.com>
Committed: Thu Aug 31 12:15:09 2017 +0900

----------------------------------------------------------------------
 .../GridCacheDatabaseSharedManager.java         | 31 ++++++++++++--------
 .../IgniteCacheDatabaseSharedManager.java       |  2 +-
 .../db/file/IgnitePdsEvictionTest.java          |  3 +-
 3 files changed, 21 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f9be3918/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index b4502d2..c59cccc 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -478,6 +478,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
 
     /**
      * Try to register Metrics MBean.
+     *
      * @throws IgniteCheckedException If failed.
      */
     private void registrateMetricsMBean() throws IgniteCheckedException {
@@ -535,15 +536,16 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
                 }
 
                 if (totalSize == 0)
-                    return (float) 0;
+                    return (float)0;
 
-                return (float) loadSize / totalSize;
+                return (float)loadSize / totalSize;
             }
         };
     }
 
     /** {@inheritDoc} */
-    @Override public void readCheckpointAndRestoreMemory(List<DynamicCacheDescriptor> cachesToStart) throws IgniteCheckedException {
+    @Override public void readCheckpointAndRestoreMemory(
+        List<DynamicCacheDescriptor> cachesToStart) throws IgniteCheckedException {
         checkpointReadLock();
 
         try {
@@ -688,7 +690,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
     @Override protected void checkPolicyEvictionProperties(MemoryPolicyConfiguration plcCfg, MemoryConfiguration dbCfg)
         throws IgniteCheckedException {
         if (plcCfg.getPageEvictionMode() != DataPageEvictionMode.DISABLED)
-            throw new IgniteCheckedException("Page eviction is not compatible with persistence: " + plcCfg.getName());
+            U.warn(log, "Page eviction mode for [" + plcCfg.getName() + "] memory region is ignored " +
+                "because Ignite Native Persistence is enabled");
     }
 
     /**
@@ -858,7 +861,8 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
     }
 
     /**
-     * Gets the checkpoint read lock. While this lock is held, checkpoint thread will not acquiSnapshotWorkerre memory state.
+     * Gets the checkpoint read lock. While this lock is held, checkpoint thread will not acquiSnapshotWorkerre memory
+     * state.
      */
     @SuppressWarnings("LockAcquiredButNotSafelyReleased")
     @Override public void checkpointReadLock() {
@@ -909,7 +913,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
             return true;
 
         for (MemoryPolicy memPlc : memPlcs) {
-            PageMemoryEx pageMemEx = (PageMemoryEx) memPlc.pageMemory();
+            PageMemoryEx pageMemEx = (PageMemoryEx)memPlc.pageMemory();
 
             if (!pageMemEx.safeToUpdate())
                 return false;
@@ -1302,6 +1306,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
 
     /**
      * Loads WAL pointer from CP file
+     *
      * @param cpMarkerFile Checkpoint mark file.
      * @return WAL pointer.
      * @throws IgniteCheckedException If failed to read mark file.
@@ -1706,7 +1711,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
         List<IgniteBiTuple<PageMemory, Collection<FullPageId>>> cpEntities = new ArrayList<>(memPolicies.size());
 
         for (MemoryPolicy memPlc : memPolicies) {
-            PageMemoryEx pageMem = (PageMemoryEx) memPlc.pageMemory();
+            PageMemoryEx pageMem = (PageMemoryEx)memPlc.pageMemory();
             cpEntities.add(new IgniteBiTuple<PageMemory, Collection<FullPageId>>(pageMem,
                 (pageMem).beginCheckpoint()));
         }
@@ -1719,7 +1724,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
         int cpPagesCnt = 0;
 
         for (IgniteBiTuple<PageMemory, Collection<FullPageId>> e : cpEntities) {
-            PageMemoryEx pageMem = (PageMemoryEx) e.get1();
+            PageMemoryEx pageMem = (PageMemoryEx)e.get1();
 
             Collection<FullPageId> cpPages = e.get2();
 
@@ -2251,7 +2256,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
                 if (printCheckpointStats) {
                     if (log.isInfoEnabled())
                         LT.info(log, String.format("Skipping checkpoint (no pages were modified) [" +
-                            "checkpointLockWait=%dms, checkpointLockHoldTime=%dms, reason='%s']",
+                                "checkpointLockWait=%dms, checkpointLockHoldTime=%dms, reason='%s']",
                             tracker.lockWaitDuration(),
                             tracker.lockHoldDuration(),
                             curr.reason));
@@ -2290,7 +2295,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
             int pagesNum = 0;
 
             for (MemoryPolicy memPlc : memoryPolicies()) {
-                GridMultiCollectionWrapper<FullPageId> nextCpPagesCol = ((PageMemoryEx) memPlc.pageMemory()).beginCheckpoint();
+                GridMultiCollectionWrapper<FullPageId> nextCpPagesCol = ((PageMemoryEx)memPlc.pageMemory()).beginCheckpoint();
 
                 pagesNum += nextCpPagesCol.size();
 
@@ -2403,7 +2408,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
         /** */
         private CheckpointMetricsTracker tracker;
 
-        /** Collection of page IDs to write under this task. Overall pages to write may be greater than this collection*/
+        /** Collection of page IDs to write under this task. Overall pages to write may be greater than this collection */
         private Collection<FullPageId> writePageIds;
 
         /** */
@@ -2415,11 +2420,12 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
         /** Counter for all written pages. May be shared between several workers */
         private AtomicInteger writtenPagesCntr;
 
-        /** Total pages to write, counter may be greater than {@link #writePageIds} size*/
+        /** Total pages to write, counter may be greater than {@link #writePageIds} size */
         private final int totalPagesToWrite;
 
         /**
          * Creates task for write pages
+         *
          * @param tracker
          * @param writePageIds Collection of page IDs to write.
          * @param updStores
@@ -2810,7 +2816,6 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
         }
 
         /**
-         *
          * @param cacheId Cache ID.
          * @param partId Partition ID.
          * @return Reserved counter or null if couldn't reserve.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f9be3918/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
index 69feac8..37e0108 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
@@ -901,7 +901,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
      * @param pageMem Page memory.
      */
     private PageEvictionTracker createPageEvictionTracker(MemoryPolicyConfiguration plc, PageMemory pageMem) {
-        if (plc.getPageEvictionMode() == DataPageEvictionMode.DISABLED)
+        if (plc.getPageEvictionMode() == DataPageEvictionMode.DISABLED || cctx.gridConfig().isPersistentStoreEnabled())
             return new NoOpPageEvictionTracker();
 
         assert pageMem instanceof PageMemoryNoStoreImpl : pageMem.getClass();

http://git-wip-us.apache.org/repos/asf/ignite/blob/f9be3918/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsEvictionTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsEvictionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsEvictionTest.java
index d7790c3..8544cf1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsEvictionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsEvictionTest.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.concurrent.Callable;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.DataPageEvictionMode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.MemoryConfiguration;
 import org.apache.ignite.configuration.MemoryPolicyConfiguration;
@@ -84,6 +85,7 @@ public class IgnitePdsEvictionTest extends GridCommonAbstractTest {
         MemoryPolicyConfiguration memPlcCfg = new MemoryPolicyConfiguration();
         memPlcCfg.setInitialSize(MEMORY_LIMIT);
         memPlcCfg.setMaxSize(MEMORY_LIMIT);
+        memPlcCfg.setPageEvictionMode(DataPageEvictionMode.RANDOM_LRU);
         memPlcCfg.setName("dfltMemPlc");
 
         memCfg.setPageSize(PAGE_SIZE);
@@ -94,7 +96,6 @@ public class IgnitePdsEvictionTest extends GridCommonAbstractTest {
         return memCfg;
     }
 
-
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         super.beforeTestsStarted();


[3/9] ignite git commit: gg-12686 : Fixed null CacheMapHolder if node is restarted with partition in RENTING state.

Posted by sb...@apache.org.
gg-12686 : Fixed null CacheMapHolder if node is restarted with partition in RENTING state.

Signed-off-by: Andrey Gura <ag...@apache.org>


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

Branch: refs/heads/ignite-3478
Commit: d253c02496f54ce4669fe19fefcf5856fa48d08e
Parents: faa156f
Author: Ilya Lantukh <il...@gridgain.com>
Authored: Wed Aug 30 16:58:32 2017 +0300
Committer: Andrey Gura <ag...@apache.org>
Committed: Wed Aug 30 17:56:22 2017 +0300

----------------------------------------------------------------------
 .../cache/distributed/dht/GridDhtLocalPartition.java         | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/d253c024/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
index 4d1bb38..f0e0d47 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
@@ -932,12 +932,8 @@ public class GridDhtLocalPartition extends GridCacheConcurrentMapImpl implements
                     try {
                         CacheDataRow row = it0.next();
 
-                        if (grp.sharedGroup() && (hld == null || hld.cctx.cacheId() != row.cacheId())) {
-                            hld = cacheMaps.get(row.cacheId());
-
-                            if (hld == null)
-                                continue;
-                        }
+                        if (grp.sharedGroup() && (hld == null || hld.cctx.cacheId() != row.cacheId()))
+                            hld = cacheMapHolder(ctx.cacheContext(row.cacheId()));
 
                         assert hld != null;