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

    https://github.com/apache/phoenix/pull/295#discussion_r176611190
  
    --- 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 A few follow-up questions from your comment:
    
    - If we were to call _ensureTableCreated_ at this point inside the init 
method, don't have the values of other arguments such as the families, splits, 
etc. which we would need for the admin.createTable call. Instead I propose 
splitting the _ensureTableCreated_ method and having another private method 
which just checks for the existence of system catalog and does client-server 
compatibility checks. We can reuse this stub inside _ensureTableCreated_ and 
make sure we don't do this again when called via _createTable_.
    -  If we throw an UpgradeRequiredException in case an upgrade is required, 
the user will not get the connection object right? This also prevents the user 
from being able to run "EXECUTE UPGRADE". Instead I guess we can call 
_setUpgradeRequired_, log an error and return the connection object. This will 
disallow the user from running anything except "EXECUTE UPGRADE" since we have 
this snippet in place:
    `                        
    if (conn.getQueryServices().isUpgradeRequired() && !conn.isRunningUpgrade()
        && stmt.getOperation() != Operation.UPGRADE) {
            throw new UpgradeRequiredException();
    }
    `



---

Reply via email to