You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 04:24:04 UTC

svn commit: r1181597 - /hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java

Author: nspiegelberg
Date: Tue Oct 11 02:24:02 2011
New Revision: 1181597

URL: http://svn.apache.org/viewvc?rev=1181597&view=rev
Log:
Some columns should be absent in TestMultiColumnScanner

Summary: Modifying TestMultiColumnScanner to make sure that some queried
columns are absent from some rows, as well as from the entire region. This might
be a tricky case for D276420.
Test Plan: Run test.
Reviewed By: kannan
Reviewers: kannan, liyintang
CC: hbase@lists, , kannan
Revert Plan: OK
Differential Revision: 278299

Modified:
    hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java

Modified: hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java?rev=1181597&r1=1181596&r2=1181597&view=diff
==============================================================================
--- hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java (original)
+++ hbase/branches/0.89/src/test/java/org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java Tue Oct 11 02:24:02 2011
@@ -68,7 +68,7 @@ public class TestMultiColumnScanner {
    * The size of the column qualifier set used. Increasing this parameter
    * exponentially increases test time.
    */
-  private static final int NUM_COLUMNS = 8;
+  private static final int NUM_COLUMNS = 10;
 
   private static final int MAX_COLUMN_BIT_MASK = 1 << NUM_COLUMNS - 1;
   private static final int NUM_FLUSHES = 10;
@@ -85,7 +85,13 @@ public class TestMultiColumnScanner {
       1, 3, 5, Integer.MAX_VALUE, BIG_LONG, Long.MAX_VALUE - 1};
 
   /** The probability that a column is skipped in a store file. */
-  private static final double COLUMN_SKIP_PROBABILITY = 0.7;
+  private static final double COLUMN_SKIP_IN_STORE_FILE_PROB = 0.7;
+
+  /** The probability of skipping a column in a single row */
+  private static final double COLUMN_SKIP_IN_ROW_PROB = 0.1;
+
+  /** The probability of skipping a column everywhere */
+  private static final double COLUMN_SKIP_EVERYWHERE_PROB = 0.1;
 
   /** The probability to delete a row/column pair */
   private static final double DELETE_PROBABILITY = 0.02;
@@ -181,15 +187,37 @@ public class TestMultiColumnScanner {
     Map<String, Long> lastDelTimeMap = new HashMap<String, Long>();
 
     Random rand = new Random(29372937L);
+    Set<String> rowQualSkip = new HashSet<String>();
+
+    // Skip some columns in some rows. We need to test scanning over a set
+    // of columns when some of the columns are not there.
+    for (String row : rows)
+      for (String qual : qualifiers)
+        if (rand.nextDouble() < COLUMN_SKIP_IN_ROW_PROB) {
+          LOG.info("Skipping " + qual + " in row " + row);
+          rowQualSkip.add(rowQualKey(row, qual));
+        }
+
+    // Also skip some columns in all rows.
+    for (String qual : qualifiers)
+      if (rand.nextDouble() < COLUMN_SKIP_EVERYWHERE_PROB) {
+        LOG.info("Skipping " + qual + " in all rows");
+        for (String row : rows)
+          rowQualSkip.add(rowQualKey(row, qual));
+      }
+
     for (int iFlush = 0; iFlush < NUM_FLUSHES; ++iFlush) {
       for (String qual : qualifiers) {
         // This is where we decide to include or not include this column into
         // this store file, regardless of row and timestamp.
-        if (rand.nextDouble() < COLUMN_SKIP_PROBABILITY)
+        if (rand.nextDouble() < COLUMN_SKIP_IN_STORE_FILE_PROB)
           continue;
 
         byte[] qualBytes = Bytes.toBytes(qual);
         for (String row : rows) {
+          if (rowQualSkip.contains(rowQualKey(row, qual)))
+            continue;
+
           Put p = new Put(Bytes.toBytes(row));
           for (long ts : TIMESTAMPS) {
             String value = createValue(row, qual, ts);
@@ -312,6 +340,10 @@ public class TestMultiColumnScanner {
         kv.getQualifierLength());
   }
 
+  private static String rowQualKey(String row, String qual) {
+    return row + "_" + qual;
+  }
+
   private static String createValue(String row, String qual, long ts) {
     return "value_for_" + row + "_" + qual + "_" + ts;
   }