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

    https://github.com/apache/phoenix/pull/295#discussion_r176801550
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
 ---
    @@ -2405,16 +2413,26 @@ public Void call() throws Exception {
                                 openConnection();
                                 hConnectionEstablished = true;
                                 boolean isDoNotUpgradePropSet = 
UpgradeUtil.isNoUpgradeSet(props);
    +                            boolean doesSystemCatalogAlreadyExist = false;
    --- End diff --
    
    @JamesRTaylor that could be a possible solution, but then we would always 
go through executeUpdate-> ... -> _MetaDataClient.createTable_  -> 
_MetaDataClient.createTableInternal_ -> _CQSI.creataTable_ before finally 
calling ensureTableCreated and a lot of unnecessary steps would be taken till 
that point. If we were to disallow the user to proceed in creating/upgrading 
SYSTEM.CATALOG inside ensureTableCreated, then this would lead to a lot of 
unnecessary intermediary steps. Instead, can we put all the necessary 
conditions inside that try block in a separate method which is always only 
called inside init? This method would also call 
_checkClientServerCompatibility_ and thus would fail fast in case an upgrade is 
required, avoiding other unnecessary steps like updating the cache, etc.


---

Reply via email to