You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by td...@apache.org on 2017/03/09 23:03:02 UTC

[49/50] [abbrv] phoenix git commit: Initial implementation for TAL

Initial implementation for TAL


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/3e4795f9
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/3e4795f9
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/3e4795f9

Branch: refs/heads/omid
Commit: 3e4795f91f06733ee5c85f889b4ee574788d2a8d
Parents: 66a152a
Author: Ohad Shacham <oh...@yahoo-inc.com>
Authored: Thu Mar 9 11:03:11 2017 +0200
Committer: Thomas D'Silva <td...@apache.org>
Committed: Thu Mar 9 15:00:14 2017 -0800

----------------------------------------------------------------------
 .../transaction/PhoenixTransactionContext.java  |  91 ++++++++++++
 .../transaction/PhoenixTransactionalTable.java  | 138 +++++++++++++++++++
 2 files changed, 229 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/3e4795f9/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionContext.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionContext.java b/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionContext.java
new file mode 100644
index 0000000..f07640e
--- /dev/null
+++ b/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionContext.java
@@ -0,0 +1,91 @@
+package org.apache.phoenix.transaction;
+
+import org.apache.phoenix.schema.PTable;
+
+import java.sql.SQLException;
+import java.util.concurrent.TimeoutException;
+
+public interface PhoenixTransactionContext {
+
+    /**
+     * Starts a transaction
+     *
+     * @throws SQLException
+     */
+    public void begin() throws SQLException;
+
+    /**
+     * Commits a transaction
+     *
+     * @throws SQLException
+     */
+    public void commit() throws SQLException;
+
+    /**
+     * Rollback a transaction
+     *
+     * @throws SQLException
+     */
+    public void abort() throws SQLException;
+
+    /**
+     * Rollback a transaction
+     *
+     * @param e
+     * @throws SQLException
+     */
+    public void abort(SQLException e) throws SQLException;
+
+    /**
+     * Create a checkpoint in a transaction as defined in [TEPHRA-96]
+     * @throws SQLException
+     */
+    public void checkpoint() throws SQLException;
+
+    /**
+     * Commit DDL to guarantee that no transaction started before create index
+     * and committed afterwards, as explained in [PHOENIX-2478], [TEPHRA-157] and [OMID-56].
+     *
+     * @param dataTable  the table that the DDL command works on
+     * @throws SQLException
+     * @throws InterruptedException
+     * @throws TimeoutException
+     */
+    public void commitDDLFence(PTable dataTable)
+            throws SQLException, InterruptedException, TimeoutException;
+
+    /**
+     * mark DML with table information for conflict detection of concurrent
+     * DDL operation, as explained in [PHOENIX-2478], [TEPHRA-157] and [OMID-56].
+     *
+     * @param table  the table that the DML command works on
+     */
+    public void markDMLFence(PTable table);
+
+    /**
+     * Augment the current context with ctx modified keys
+     *
+     * @param ctx
+     */
+    public void join(PhoenixTransactionContext ctx);
+
+    /**
+     * Is there a transaction in flight?
+     */
+    public boolean isTransactionRunning();
+
+    /**
+     * Reset transaction state
+     */
+    public void reset();
+
+    /**
+     * Returns transaction unique identifier
+     */
+    long getTransactionId();
+
+    /**
+     * Returns transaction snapshot id
+     */
+    long getReadPointer();
+}

http://git-wip-us.apache.org/repos/asf/phoenix/blob/3e4795f9/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionalTable.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionalTable.java b/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionalTable.java
new file mode 100644
index 0000000..7495c5b
--- /dev/null
+++ b/phoenix-core/src/main/java/org/apache/phoenix/transaction/PhoenixTransactionalTable.java
@@ -0,0 +1,138 @@
+package org.apache.phoenix.transaction;
+
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.HTableInterface;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HTableDescriptor;
+
+import java.io.IOException;
+import java.util.List;
+
+public interface PhoenixTransactionalTable extends HTableInterface {
+
+    /**
+     * Transaction version of {@link HTableInterface#get(Get get)}
+     * @param get
+     * @return
+     * @throws IOException
+     */
+    public Result get(Get get) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#put(Put put)}
+     * @param put
+     * @throws IOException
+     */
+    public void put(Put put) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#delete(Delete delete)}
+     *
+     * @param delete
+     * @throws IOException
+     */
+    public void delete(Delete delete) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#getScanner(Scan scan)}
+     *
+     * @param scan
+     * @return ResultScanner
+     * @throws IOException
+     */
+    public ResultScanner getScanner(Scan scan) throws IOException;
+
+    /**
+     * Returns Htable name
+     */
+    public byte[] getTableName();
+
+    /**
+     * Returns Htable configuration object
+     */
+    public Configuration getConfiguration();
+
+    /**
+     * Returns HTableDescriptor of Htable
+     * @throws IOException
+     */
+    public HTableDescriptor getTableDescriptor() throws IOException;
+
+    /**
+     * Checks if cell exists
+     * @throws IOException
+     */
+    public boolean exists(Get get) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#get(List gets)}
+     * @throws IOException
+     */
+    public Result[] get(List<Get> gets) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#getScanner(byte[] family)}
+     * @throws IOException
+     */
+    public ResultScanner getScanner(byte[] family) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#getScanner(byte[] family, byte[] qualifier)}
+     * @throws IOException
+     */
+    public ResultScanner getScanner(byte[] family, byte[] qualifier) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#put(List puts)}
+     * @throws IOException
+     */
+    public void put(List<Put> puts) throws IOException;
+
+    /**
+     * Transactional version of {@link HTableInterface#delete(List deletes)}
+     * @throws IOException
+     */
+    public void delete(List<Delete> deletes) throws IOException;
+
+    /**
+     * Return the underling htable
+     */
+    public HTableInterface getHTable();
+
+    /**
+     * Delegates to {@link HTable#setAutoFlush(boolean autoFlush)}
+     */
+    public void setAutoFlush(boolean autoFlush);
+
+    /**
+     * Delegates to {@link HTable#isAutoFlush()}
+     */
+    public boolean isAutoFlush();
+
+    /**
+     * Delegates to see HTable.getWriteBufferSize()
+     */
+    public long getWriteBufferSize();
+
+    /**
+     * Delegates to see HTable.setWriteBufferSize()
+     */
+    public void setWriteBufferSize(long writeBufferSize) throws IOException;
+
+    /**
+     * Delegates to see HTable.flushCommits()
+     */
+    public void flushCommits() throws IOException;
+
+    /**
+     * Releases resources
+     * @throws IOException
+     */
+    public void close() throws IOException;
+}