Repository: phoenix Updated Branches: refs/heads/4.x-HBase-0.98 cc44713c1 -> 62441793b
PHOENIX-2591 Minimize transaction commit/rollback for DDL Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/62441793 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/62441793 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/62441793 Branch: refs/heads/4.x-HBase-0.98 Commit: 62441793b111e6a2ed6509125009d80f5d50160a Parents: cc44713 Author: James Taylor <[email protected]> Authored: Mon Jan 18 21:09:44 2016 -0800 Committer: James Taylor <[email protected]> Committed: Mon Jan 18 21:17:38 2016 -0800 ---------------------------------------------------------------------- .../apache/phoenix/execute/MutationState.java | 30 ++++++++++---------- .../apache/phoenix/util/TransactionUtil.java | 13 ++------- .../java/org/apache/phoenix/util/TestUtil.java | 2 +- 3 files changed, 19 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/62441793/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java index 4151897..127ae90 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java @@ -37,18 +37,6 @@ import java.util.concurrent.TimeoutException; import javax.annotation.Nonnull; import javax.annotation.concurrent.Immutable; -import co.cask.tephra.Transaction; -import co.cask.tephra.Transaction.VisibilityLevel; -import co.cask.tephra.TransactionAware; -import co.cask.tephra.TransactionCodec; -import co.cask.tephra.TransactionConflictException; -import co.cask.tephra.TransactionContext; -import co.cask.tephra.TransactionFailureException; -import co.cask.tephra.TransactionSystemClient; -import co.cask.tephra.hbase98.TransactionAwareHTable; -import co.cask.tephra.visibility.FenceWait; -import co.cask.tephra.visibility.VisibilityFence; - import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.HTableInterface; @@ -110,6 +98,18 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import co.cask.tephra.Transaction; +import co.cask.tephra.Transaction.VisibilityLevel; +import co.cask.tephra.TransactionAware; +import co.cask.tephra.TransactionCodec; +import co.cask.tephra.TransactionConflictException; +import co.cask.tephra.TransactionContext; +import co.cask.tephra.TransactionFailureException; +import co.cask.tephra.TransactionSystemClient; +import co.cask.tephra.hbase98.TransactionAwareHTable; +import co.cask.tephra.visibility.FenceWait; +import co.cask.tephra.visibility.VisibilityFence; + /** * * Tracks the uncommitted state @@ -369,9 +369,9 @@ public class MutationState implements SQLCloseable { return getTransaction() != null; } - public long getReadPointer() { - Transaction tx = getTransaction(); - return tx == null ? HConstants.LATEST_TIMESTAMP : tx.getReadPointer(); + public long getInitialWritePointer() { + Transaction tx = getTransaction(); + return tx == null ? HConstants.LATEST_TIMESTAMP : tx.getTransactionId(); // First write pointer - won't change with checkpointing } // For testing http://git-wip-us.apache.org/repos/asf/phoenix/blob/62441793/phoenix-core/src/main/java/org/apache/phoenix/util/TransactionUtil.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/TransactionUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/TransactionUtil.java index b33ef71..66857f9 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/util/TransactionUtil.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/util/TransactionUtil.java @@ -67,7 +67,7 @@ public class TransactionUtil { public static long getResolvedTimestamp(PhoenixConnection connection, boolean isTransactional, long defaultResolvedTimestamp) { MutationState mutationState = connection.getMutationState(); Long scn = connection.getSCN(); - return scn != null ? scn : (isTransactional && mutationState.isTransactionStarted()) ? convertToMilliseconds(mutationState.getReadPointer()) : defaultResolvedTimestamp; + return scn != null ? scn : (isTransactional && mutationState.isTransactionStarted()) ? convertToMilliseconds(mutationState.getInitialWritePointer()) : defaultResolvedTimestamp; } public static long getResolvedTime(PhoenixConnection connection, MetaDataMutationResult result) { @@ -80,7 +80,7 @@ public class TransactionUtil { PTable table = result.getTable(); MutationState mutationState = connection.getMutationState(); boolean txInProgress = table != null && table.isTransactional() && mutationState.isTransactionStarted(); - return txInProgress ? convertToMilliseconds(mutationState.getReadPointer()) : result.getMutationTime(); + return txInProgress ? convertToMilliseconds(mutationState.getInitialWritePointer()) : result.getMutationTime(); } public static Long getTableTimestamp(PhoenixConnection connection, boolean transactional) throws SQLException { @@ -89,17 +89,10 @@ public class TransactionUtil { return timestamp; } MutationState mutationState = connection.getMutationState(); - // we need to burn a txn so that we are sure the txn read pointer is close to wall clock time if (!mutationState.isTransactionStarted()) { mutationState.startTransaction(); - connection.commit(); } - else { - connection.commit(); - } - mutationState.startTransaction(); - timestamp = convertToMilliseconds(mutationState.getReadPointer()); - connection.commit(); + timestamp = convertToMilliseconds(mutationState.getInitialWritePointer()); return timestamp; } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/62441793/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java b/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java index e1258e4..66a3c65 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java @@ -563,7 +563,7 @@ public class TestUtil { String query = "UPDATE STATISTICS " + tableName; conn.createStatement().execute(query); // if the table is transactional burn a txn in order to make sure the next txn read pointer is close to wall clock time - TransactionUtil.getTableTimestamp(conn.unwrap(PhoenixConnection.class), transactional); + conn.commit(); } public static void analyzeTableIndex(Connection conn, String tableName) throws IOException, SQLException {
