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

    https://github.com/apache/phoenix/pull/290#discussion_r164236923
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/optimize/QueryOptimizer.java ---
    @@ -312,6 +317,16 @@ private static QueryPlan addPlan(PhoenixStatement 
statement, SelectStatement sel
             return null;
         }
     
    +    // returns true if we can still use the index
    +    // retuns false if we've been in PENDING_DISABLE too long - index 
should be considered disabled
    +    private static boolean isUnderPendingDisableThreshold(PhoenixStatement 
statement, PTable indexTable) {
    +        return EnvironmentEdgeManager
    +                .currentTimeMillis() - 
indexTable.getIndexDisableTimestamp() <= statement
    --- End diff --
    
    Good point. So instead of using EnvironmentEdgeManager.currentTimeMillis(), 
use indexTableRef.getCurrentTime(). That'll be the server-side timestamp when 
the index table was resolved during query compilation. The only caveat is that 
when UPDATE_CACHE_FREQUENCY is set, we wouldn't ping the server so we wouldn't 
have a timestamp. There are numerous issues related to this already, though, so 
I think this would be fine. For example, if we don't ping the server, we 
wouldn't know that the index is in a PENDING_DISABLE state either. We already 
have a JIRA on this, so we can tackle these issues down-the-road (and we're not 
using UPDATE_CACHE_FREQUENCY yet).


---

Reply via email to