[
https://issues.apache.org/jira/browse/PHOENIX-5008?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16685941#comment-16685941
]
ASF GitHub Bot commented on PHOENIX-5008:
-----------------------------------------
Github user ChinmaySKulkarni commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/403#discussion_r233278355
--- Diff:
phoenix-core/src/it/java/org/apache/phoenix/end2end/SystemCatalogCreationOnConnectionIT.java
---
@@ -428,14 +433,78 @@ public void
testMetadataAlterRemainsAutoUpgradeEnabled() throws Exception {
assertEquals(Integer.parseInt(MODIFIED_MAX_VERSIONS),
verifyModificationTableMetadata(driver, PHOENIX_SYSTEM_CATALOG));
}
+ // Test the case when an end-user uses the vanilla PhoenixDriver to
create a connection and a
+ // requirement for upgrade is detected. In this case, the user should
get a connection on which
+ // they are only able to run "EXECUTE UPGRADE"
+ @Test
+ public void testExecuteUpgradeSameConnWithPhoenixDriver() throws
Exception {
+ // Register the vanilla PhoenixDriver
+ DriverManager.registerDriver(PhoenixDriver.INSTANCE);
--- End diff --
Thanks for the review @twdsilva.
> 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)