You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2015/07/20 19:14:42 UTC

[12/50] [abbrv] phoenix git commit: PHOENIX-2096 Tweak criteria for when round robin iterator is used

PHOENIX-2096 Tweak criteria for when round robin iterator is used


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

Branch: refs/heads/calcite
Commit: 61f1900ddec5eb5c06245c999711e1fd0c67af53
Parents: 69e55df
Author: James Taylor <jt...@salesforce.com>
Authored: Thu Jul 2 09:48:42 2015 -0700
Committer: James Taylor <jt...@salesforce.com>
Committed: Wed Jul 8 11:57:40 2015 -0700

----------------------------------------------------------------------
 .../apache/phoenix/end2end/ReverseScanIT.java   | 29 ++++++++++++++++----
 .../org/apache/phoenix/execute/ScanPlan.java    |  4 +--
 .../java/org/apache/phoenix/util/ScanUtil.java  |  7 ++---
 3 files changed, 28 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/61f1900d/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReverseScanIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReverseScanIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReverseScanIT.java
index 5481d80..eca183b 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReverseScanIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ReverseScanIT.java
@@ -19,6 +19,9 @@ package org.apache.phoenix.end2end;
 
 import static org.apache.phoenix.util.TestUtil.ROW2;
 import static org.apache.phoenix.util.TestUtil.ROW3;
+import static org.apache.phoenix.util.TestUtil.ROW4;
+import static org.apache.phoenix.util.TestUtil.ROW5;
+import static org.apache.phoenix.util.TestUtil.ROW6;
 import static org.apache.phoenix.util.TestUtil.ROW7;
 import static org.apache.phoenix.util.TestUtil.ROW8;
 import static org.apache.phoenix.util.TestUtil.ROW9;
@@ -31,6 +34,7 @@ import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.sql.Statement;
 import java.util.Map;
 import java.util.Properties;
 
@@ -39,6 +43,7 @@ import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
 import org.apache.phoenix.util.TestUtil;
 import org.junit.BeforeClass;
@@ -81,11 +86,11 @@ public class ReverseScanIT extends BaseHBaseManagedTimeIT {
         initATableValues(tenantId, getSplitsAtRowKeys(tenantId), getUrl());
         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
         Connection conn = DriverManager.getConnection(getUrl(), props);
-        String query = "SELECT entity_id FROM aTable WHERE entity_id >= ? ORDER BY organization_id DESC, entity_id DESC";
+        String query = "SELECT entity_id FROM aTable WHERE entity_id >= '" + ROW3 + "' ORDER BY organization_id DESC, entity_id DESC";
         try {
-            PreparedStatement statement = conn.prepareStatement(query);
-            statement.setString(1, ROW7);
-            ResultSet rs = statement.executeQuery();
+            Statement stmt = conn.createStatement();
+            stmt.setFetchSize(2);
+            ResultSet rs = stmt.executeQuery(query);
 
             assertTrue (rs.next());
             assertEquals(ROW9,rs.getString(1));
@@ -93,10 +98,24 @@ public class ReverseScanIT extends BaseHBaseManagedTimeIT {
             assertEquals(ROW8,rs.getString(1));
             assertTrue (rs.next());
             assertEquals(ROW7,rs.getString(1));
+            assertTrue (rs.next());
+            assertEquals(ROW6,rs.getString(1));
+            assertTrue (rs.next());
+            assertEquals(ROW5,rs.getString(1));
+            assertTrue (rs.next());
+            assertEquals(ROW4,rs.getString(1));
+            assertTrue (rs.next());
+            assertEquals(ROW3,rs.getString(1));
 
             assertFalse(rs.next());
             
-            statement = conn.prepareStatement("SELECT entity_id FROM aTable WHERE organization_id = ? AND entity_id >= ? ORDER BY organization_id DESC, entity_id DESC");
+            rs = conn.createStatement().executeQuery("EXPLAIN " + query);
+            assertEquals(
+                    "CLIENT PARALLEL 1-WAY REVERSE FULL SCAN OVER ATABLE\n" + 
+                    "    SERVER FILTER BY FIRST KEY ONLY AND ENTITY_ID >= '00A323122312312'",
+                    QueryUtil.getExplainPlan(rs));
+            
+            PreparedStatement statement = conn.prepareStatement("SELECT entity_id FROM aTable WHERE organization_id = ? AND entity_id >= ? ORDER BY organization_id DESC, entity_id DESC");
             statement.setString(1, tenantId);
             statement.setString(2, ROW7);
             rs = statement.executeQuery();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/61f1900d/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
index b9dd2f2..fd9f8ad 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java
@@ -18,8 +18,6 @@
 package org.apache.phoenix.execute;
 
 
-import static org.apache.phoenix.util.ScanUtil.shouldRowsBeInRowKeyOrder;
-
 import java.sql.SQLException;
 import java.util.List;
 
@@ -187,7 +185,7 @@ public class ScanPlan extends BaseQueryPlan {
         if (isOrdered) {
             scanner = new MergeSortTopNResultIterator(iterators, limit, orderBy.getOrderByExpressions());
         } else {
-            if ((isSalted || table.getIndexType() == IndexType.LOCAL) && shouldRowsBeInRowKeyOrder(orderBy, context)) { 
+            if ((isSalted || table.getIndexType() == IndexType.LOCAL) && ScanUtil.forceRowKeyOrder(context)) { 
                 scanner = new MergeSortRowKeyResultIterator(iterators, isSalted ? SaltingUtil.NUM_SALTING_BYTES : 0, orderBy == OrderBy.REV_ROW_KEY_ORDER_BY);
             } else if (useRoundRobinIterator()) {
                 scanner = new RoundRobinResultIterator(iterators, this);

http://git-wip-us.apache.org/repos/asf/phoenix/blob/61f1900d/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
index a1473ef..3dff972 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
@@ -672,12 +672,11 @@ public class ScanUtil {
          * not even row key order. Also no point doing round robin of scanners if fetch size
          * is 1.
          */
-        return fetchSize > 1 && !shouldRowsBeInRowKeyOrder(orderBy, context) && orderBy.getOrderByExpressions().isEmpty();
+        return fetchSize > 1 && !forceRowKeyOrder(context) && (orderBy.getOrderByExpressions().isEmpty() && orderBy != FWD_ROW_KEY_ORDER_BY && orderBy != REV_ROW_KEY_ORDER_BY);
     }
     
-    public static boolean shouldRowsBeInRowKeyOrder(OrderBy orderBy, StatementContext context) {
-        boolean forceRowKeyOrder = context.getConnection().getQueryServices().getProps()
+    public static boolean forceRowKeyOrder(StatementContext context) {
+        return context.getConnection().getQueryServices().getProps()
                 .getBoolean(QueryServices.FORCE_ROW_KEY_ORDER_ATTRIB, QueryServicesOptions.DEFAULT_FORCE_ROW_KEY_ORDER);
-        return forceRowKeyOrder || orderBy == FWD_ROW_KEY_ORDER_BY || orderBy == REV_ROW_KEY_ORDER_BY;
     }
 }
\ No newline at end of file