You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2018/02/13 21:08:00 UTC

[jira] [Commented] (PHOENIX-4605) Add TRANSACTION_PROVIDER and DEFAULT_TRANSACTION_PROVIDER instead of using boolean

    [ https://issues.apache.org/jira/browse/PHOENIX-4605?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16363046#comment-16363046 ] 

James Taylor commented on PHOENIX-4605:
---------------------------------------

FYI, [~ohads]. Not sure what we should do about QueryServices.TRANSACTIONS_ENABLED (currently a boolean as well). Maybe it should contain a list of supported/configured transaction providers? We use that mostly in tests, but we also use it when we open a cluster connection to conditionally establish a connection to the transaction manager. Is there any initialization required for Omid along these lines? If so, should we add a new TAL method?
{code}
    private void openConnection() throws SQLException {
        try {
            boolean transactionsEnabled = props.getBoolean(
                    QueryServices.TRANSACTIONS_ENABLED,
                    QueryServicesOptions.DEFAULT_TRANSACTIONS_ENABLED);
            this.connection = HBaseFactoryProvider.getHConnectionFactory().createConnection(this.config);
            GLOBAL_HCONNECTIONS_COUNTER.increment();
            logger.info("HConnection established. Stacktrace for informational purposes: " + connection + " " +  LogUtil.getCallerStackTrace());
            // only initialize the tx service client if needed and if we succeeded in getting a connection
            // to HBase
            if (transactionsEnabled) {
                initTxServiceClient();
            }
        } catch (IOException e) {
            throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ESTABLISH_CONNECTION)
            .setRootCause(e).build().buildException();
        }
        if (this.connection.isClosed()) { // TODO: why the heck doesn't this throw above?
            throw new SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ESTABLISH_CONNECTION).build().buildException();
        }
    }
{code}

One more check needed would be in MutationState to disallow updates to both Tephra and Omid tables in the same transaction.


> Add TRANSACTION_PROVIDER and DEFAULT_TRANSACTION_PROVIDER instead of using boolean
> ----------------------------------------------------------------------------------
>
>                 Key: PHOENIX-4605
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4605
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Priority: Major
>
> We should deprecate QueryServices.DEFAULT_TABLE_ISTRANSACTIONAL_ATTRIB and instead have a QueryServices.DEFAULT_TRANSACTION_PROVIDER now that we'll have two transaction providers: Tephra and Omid. Along the same lines, we should add a TRANSACTION_PROVIDER column to SYSTEM.CATALOG  and stop using the IS_TRANSACTIONAL table property. For backwards compatibility, we can assume the provider is Tephra if the existing properties are set to true.



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