Github user ChinmaySKulkarni commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/363#discussion_r225356137
  
    --- Diff: 
phoenix-core/src/it/java/org/apache/phoenix/rpc/UpdateCacheIT.java ---
    @@ -136,14 +137,55 @@ public void testUpdateCacheForChangingUpdateTable() 
throws Exception {
             try (Connection conn = DriverManager.getConnection(getUrl(), 
props)) {
                 conn.createStatement().execute("CREATE TABLE " + fullTableName 
+ TestUtil.TEST_TABLE_SCHEMA + " UPDATE_CACHE_FREQUENCY=never");
             }
    -        helpTestUpdateCache(fullTableName, new int[] {0, 0});
    +        helpTestUpdateCache(fullTableName, new int[] {0, 0}, false);
             try (Connection conn = DriverManager.getConnection(getUrl(), 
props)) {
                 conn.createStatement().execute("ALTER TABLE " + fullTableName 
+ " SET UPDATE_CACHE_FREQUENCY=ALWAYS");
             }
    -        helpTestUpdateCache(fullTableName, new int[] {1, 3});
    +        helpTestUpdateCache(fullTableName, new int[] {1, 3}, false);
    +    }
    +
    +    @Test
    +    public void testUpdateCacheFreqPropagatedToIndexes() throws Exception {
    +        String baseTableName = generateUniqueName();
    +        String fullTableName = INDEX_DATA_SCHEMA + 
QueryConstants.NAME_SEPARATOR + baseTableName;
    +        String localIndex = "LOCAL_" + baseTableName;
    +        String globalIndex = "GLOBAL_" + baseTableName;
    +        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
    +        try (Connection conn = DriverManager.getConnection(getUrl(), 
props)) {
    +            conn.createStatement().execute("CREATE TABLE " + fullTableName 
+
    +                    TestUtil.TEST_TABLE_SCHEMA + " 
UPDATE_CACHE_FREQUENCY=never");
    +
    +            // Create local and global indexes on the base table
    +            conn.createStatement().execute("CREATE LOCAL INDEX " + 
localIndex
    +                    + " on " + fullTableName + " (a.date1, 
b.varchar_col2)");
    +            conn.createStatement().execute("CREATE INDEX " + globalIndex + 
" on "
    +                    + fullTableName + " (a.int_col1, a.long_col1)");
    +        }
    +
    +        // The indexes should have got the UPDATE_CACHE_FREQUENCY value of 
their base table
    +        helpTestUpdateCache(fullTableName, new int[] {0, 0}, false);
    +        helpTestUpdateCache(INDEX_DATA_SCHEMA + 
QueryConstants.NAME_SEPARATOR + localIndex,
    +                new int[] {0}, true);
    +        helpTestUpdateCache(INDEX_DATA_SCHEMA + 
QueryConstants.NAME_SEPARATOR + globalIndex,
    +                new int[] {0}, true);
    +
    +        // Now alter the UPDATE_CACHE_FREQUENCY value of the base table
    +        try (Connection conn = DriverManager.getConnection(getUrl(), 
props)) {
    +            conn.createStatement()
    +                    .execute("ALTER TABLE " + fullTableName + " SET 
UPDATE_CACHE_FREQUENCY=ALWAYS");
    +        }
    +        // Even the indexes should now have the modified value of 
UPDATE_CACHE_FREQUENCY
    +        // Note that when we query the base table, during query plan 
generation, we make 2 getTable
    +        // requests (to retrieve the base table) for each index of the 
base table
    +        helpTestUpdateCache(fullTableName, new int[] {1, 15}, false);
    --- End diff --
    
    @twdsilva when we query the base table, during query plan generation, when 
we evaluate the query plan for each index of the base table, we make 2 
`getTable` requests (to get the base table itself for each index of the base 
table). Hence, since we have 2 indexes created on this base table, we will make 
2* (number of indexes) + 1 (for the base table itself) = 5 calls. Since 
`helpTestUpdateCache` does 3 select calls, the value to expect is 15.
    
    It is another issue/discussion/possible improvement to not do the extra 
`getTable` calls when evaluating the query plan for an index, but this is 
consistent with the currently observed behavior.


---

Reply via email to