Repository: phoenix
Updated Branches:
  refs/heads/3.0 7cc2b5a54 -> 40c2288f0


Tweak SkipScanAfterManualSplitIT to only split at region boundaries


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

Branch: refs/heads/3.0
Commit: 40c2288f0f15ed5d06a6a5cd8b0cd3171bb766b2
Parents: 7cc2b5a
Author: James Taylor <jtay...@salesforce.com>
Authored: Tue Jul 29 09:49:21 2014 -0700
Committer: James Taylor <jtay...@salesforce.com>
Committed: Tue Jul 29 09:49:21 2014 -0700

----------------------------------------------------------------------
 .../end2end/SkipScanAfterManualSplitIT.java     | 59 +++++++++++++++++++-
 1 file changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/40c2288f/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java
index 4fdf4c5..71fa620 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SkipScanAfterManualSplitIT.java
@@ -135,7 +135,7 @@ public class SkipScanAfterManualSplitIT extends 
BaseHBaseManagedTimeIT {
             assertEquals(nRegions, nInitialRegions);
             
             int nRows = 2;
-            String query = "SELECT count(*) FROM S WHERE a IN ('tl','jt')";
+            String query = "SELECT /*+ NO_INTRA_REGION_PARALLELIZATION */ 
count(*) FROM S WHERE a IN ('tl','jt')";
             ResultSet rs1 = conn.createStatement().executeQuery(query);
             assertTrue(rs1.next());
             traceRegionBoundaries(services);
@@ -155,4 +155,61 @@ public class SkipScanAfterManualSplitIT extends 
BaseHBaseManagedTimeIT {
         }
 
     }
+    
+    /* HBase-level repro of above issue. I believe the two scans need
+     * to be issued in parallel to repro (that's the only difference
+     * with the above tests).
+    @Test
+    public void testReproSplitBugAtHBaseLevel() throws Exception {
+        initTable();
+        Connection conn = DriverManager.getConnection(getUrl());
+        ConnectionQueryServices services = 
conn.unwrap(PhoenixConnection.class).getQueryServices();
+        traceRegionBoundaries(services);
+        int nRegions = services.getAllTableRegions(TABLE_NAME_BYTES).size();
+        int nInitialRegions = nRegions;
+        HBaseAdmin admin = services.getAdmin();
+        try {
+            admin.split(TABLE_NAME);
+            int nTries = 0;
+            while (nRegions == nInitialRegions && nTries < 10) {
+                Thread.sleep(1000);
+                nRegions = 
services.getAllTableRegions(TABLE_NAME_BYTES).size();
+                nTries++;
+            }
+            // Split finished by this time, but cache isn't updated until
+            // table is accessed
+            assertEquals(nRegions, nInitialRegions);
+            
+            String query = "SELECT count(*) FROM S WHERE a IN ('tl','jt')";
+            QueryPlan plan = 
conn.createStatement().unwrap(PhoenixStatement.class).compileQuery(query);
+            HTableInterface table = services.getTable(TABLE_NAME_BYTES);
+            Filter filter = 
plan.getContext().getScanRanges().getSkipScanFilter();
+            Scan scan = new Scan();
+            ResultScanner scanner;
+            int count = 0;
+            scan.setFilter(filter);
+            
+            scan.setStartRow(new byte[] {1, 't', 'l'});
+            scan.setStopRow(new byte[] {1, 't', 'l'});
+            scanner = table.getScanner(scan);
+            count = 0;
+            while (scanner.next() != null) {
+                count++;
+            }
+            assertEquals(1, count);
+
+            scan.setStartRow(new byte[] {3});
+            scan.setStopRow(new byte[] {4});
+            scanner = table.getScanner(scan);
+            count = 0;
+            while (scanner.next() != null) {
+                count++;
+            }
+            assertEquals(1, count);
+        } finally {
+            admin.close();
+        }
+    }
+    */
+
 }

Reply via email to