Chinmay Kulkarni created PHOENIX-5008:
-----------------------------------------
Summary: 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
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)