[
https://issues.apache.org/jira/browse/PHOENIX-3623?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16724337#comment-16724337
]
ASF GitHub Bot commented on PHOENIX-3623:
-----------------------------------------
Github user twdsilva commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/418#discussion_r242648708
--- 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 --
Do we always use an InMemoryCommitTable? or is this just for tests?
> 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)