You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Chinmay Kulkarni (JIRA)" <ji...@apache.org> on 2018/11/14 01:14:00 UTC

[jira] [Reopened] (PHOENIX-5008) CQSI.init should not bubble up RetriableUpgradeException to client in case of an UpgradeRequiredException

     [ https://issues.apache.org/jira/browse/PHOENIX-5008?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Chinmay Kulkarni reopened PHOENIX-5008:
---------------------------------------

> CQSI.init should not bubble up RetriableUpgradeException to client in case of an UpgradeRequiredException
> ---------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-5008
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5008
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Chinmay Kulkarni
>            Assignee: Chinmay Kulkarni
>            Priority: Major
>             Fix For: 4.15.0, 5.1.0
>
>         Attachments: PHOENIX-5008.patch
>
>
> Inside _ConnectionQueryServicesImpl_._init_, if we catch a _RetriableUpgradeException_, we re-throw this exception. In its caller methods for example, in _PhoenixDriver.getConnectionQueryServices_, this is caught as a _SQLException_, and this fails the initialization of the ConnectionQueryServices and removes the new CQS object from the cache. 
> In the case that the _RetriableUpgradeException_ is an instance of an _UpgradeNotRequiredException_ or an _UpgradeInProgressException_, this can only occur when we attempt to upgrade system tables, either wrongly or concurrently when there is an ongoing attempt for the same. In this case, it is fine to bubble the exception up to the end client and the client will subsequently have to re-attempt to create a connection (calling CQS.init again).
> However, if the _RetriableUpgradeException_ is an instance of an _UpgradeRequiredException_,  the end-client will never be able to get a connection and thus will never be able to manually run "EXECUTE UPGRADE". In this case, instead of re-throwing the exception, we should log that the client must manually run "EXECUTE UPGRADE" before being able to run any other commands and let the CQS.init succeed. Thus, the client will get a connection which has "upgradeRequired" set and this connection will fail for any query except "EXECUTE UPGRADE".



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)