phoenix-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-3623) Integrate Omid with Phoenix
Date Tue, 18 Dec 2018 19:27:00 GMT

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

ASF GitHub Bot commented on PHOENIX-3623:
-----------------------------------------

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

    https://github.com/apache/phoenix/pull/418#discussion_r242673332
  
    --- Diff: phoenix-core/src/main/java/org/apache/phoenix/transaction/OmidTransactionProvider.java
---
    @@ -63,26 +83,106 @@ public PhoenixTransactionContext getTransactionContext(PhoenixConnection
connect
     
         @Override
         public PhoenixTransactionClient getTransactionClient(Configuration config, ConnectionInfo
connectionInfo) throws SQLException{
    -        return new OmidTransactionClient();
    +        if (transactionManager == null) {
    +            try {
    +                HBaseOmidClientConfiguration clientConf = new HBaseOmidClientConfiguration();
    +                clientConf.setConflictAnalysisLevel(OmidClientConfiguration.ConflictDetectionLevel.ROW);
    +                transactionManager = (HBaseTransactionManager) HBaseTransactionManager.newInstance(clientConf);
    +            } catch (IOException | InterruptedException e) {
    +                throw new SQLExceptionInfo.Builder(
    +                        SQLExceptionCode.TRANSACTION_FAILED)
    +                        .setMessage(e.getMessage()).setRootCause(e).build()
    +                        .buildException();
    +            }
    +        }
    +
    +        return new OmidTransactionClient(transactionManager);
         }
     
         static class OmidTransactionClient implements PhoenixTransactionClient {
    +        private final HBaseTransactionManager transactionManager;
    +
    +        public OmidTransactionClient(HBaseTransactionManager transactionManager) {
    +            this.transactionManager = transactionManager;
    +        }
    +
    +        public HBaseTransactionManager getTransactionClient() {
    +            return transactionManager;
    +        }
    +
             @Override
             public void close() throws IOException {}
         }
     
    +    // For testing only
    +    public CommitTable.Client getCommitTableClient() {
    +        return commitTableClient;
    +    }
    +    
         @Override
         public PhoenixTransactionService getTransactionService(Configuration config, ConnectionInfo
connectionInfo, int port) throws  SQLException{
    -        return new OmidTransactionService();
    +        TSOServerConfig tsoConfig = new TSOServerConfig();
    +        TSOServer tso;
    +
    +        tsoConfig.setPort(port);
    +        tsoConfig.setConflictMapSize(config.getInt(OMID_TSO_CONFLICT_MAP_SIZE, DEFAULT_OMID_TSO_CONFLICT_MAP_SIZE));
    +        tsoConfig.setTimestampType(config.get(OMID_TSO_TIMESTAMP_TYPE, DEFAULT_OMID_TSO_TIMESTAMP_TYPE));
    +
    +        Injector injector = Guice.createInjector(new TSOMockModule(tsoConfig));
    +        tso = injector.getInstance(TSOServer.class);
    +        tso.startAndWait();
    +
    +        OmidClientConfiguration clientConfig = new OmidClientConfiguration();
    +        clientConfig.setConnectionString("localhost:" + port);
    +        clientConfig.setConflictAnalysisLevel(OmidClientConfiguration.ConflictDetectionLevel.ROW);
    +
    +        InMemoryCommitTable commitTable = (InMemoryCommitTable) injector.getInstance(CommitTable.class);
    --- End diff --
    
    The InMemoryCommitTable is only used during testing.


> Integrate Omid with Phoenix
> ---------------------------
>
>                 Key: PHOENIX-3623
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3623
>             Project: Phoenix
>          Issue Type: New Feature
>            Reporter: Ohad Shacham
>            Assignee: Ohad Shacham
>            Priority: Major
>             Fix For: 4.15.0
>
>         Attachments: 4.x-HBase-1.2.patch, 4.x-HBase-1.3.patch, 4.x-HBase-1.4.patch, master.patch
>
>
> The purpose of this Jira is to propose a work plan for connecting Omid to Phoenix.
> Each task of the following will be handled in a seperate sub Jira. Subtasks 4.* are related
to augmenting Omid to support features required by Phoenix and therefore, their corresponding
Jiras will appear under Omid and not under Phoenix. 
> Each task is completed by a commit.
> Task 1: Adding transaction abstraction layer (TAL) - Currently Tephra calls are integrated
inside Phoenix code. Therefore, in order to support both Omid and Tephra, we need to add another
abstraction layer that later-on will be connected to both Tephra and Omid. The first tasks
is to define such an interface.
> Task 2: Implement TAL functionality for Tephra. 
> Task 3: Refactor Phoenix to use TAL instead of direct calls to Tephra.
> Task 4: Implement Omid required features for Phoenix:
> Task 4.1: Add checkpoints to Omid. A checkpoint is a point in a transaction where every
write occurs after the checkpoint is not visible by the transaction. Explanations for this
feature can be seen in [TEPHRA-96].
> Task 4.2: Add an option to mark a key as non-conflicting. The motivation is to reduce
the size of the write set needed by the transaction manager upon commit as well as reduce
the conflict detection work.
> Task 4.3: Add support for transactions that never abort. Such transactions will only
make other inflight transactions abort and will abort only in case of a transaction manager
failure. 
> These transactions are needed for ‘create index’ and the scenario was discussed in
[TEPHRA-157] and [PHOENIX-2478]. Augmenting Omid with this kind of transactions was also discussed
in [OMID-56].
> Task 4.4: Add support for returning multiple versions in a scan. The use case is described
in [TEPHRA-134].
> Task 4.5: Change Omid's timestamp mechanism to return real time based timestamp, while
keeping monotonicity.
> Task 5: Implement TAL functionality for Omid.
> Task 6: Implement performance tests and tune Omid for Phoenix use. This task requires
understanding of common usage scenarios in Phoenix as well as defining the tradeoff between
throughput and latency. 
> Could you please review the proposed work plan?
> Also, could you please let me know whether I missed any augmentation needed for Omid
in order to support Phoenix operations?
> I opened a jira [OMID-82] that encapsulates all Omid related development for Phoenix.



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

Mime
View raw message