hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zhang...@apache.org
Subject [1/2] hbase git commit: HBASE-16838 Implement basic scan
Date Fri, 11 Nov 2016 13:01:30 GMT
Repository: hbase
Updated Branches:
  refs/heads/master fa838b020 -> 8a6d6aa23


http://git-wip-us.apache.org/repos/asf/hbase/blob/8a6d6aa2/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCompleteResultScanResultCache.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCompleteResultScanResultCache.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCompleteResultScanResultCache.java
new file mode 100644
index 0000000..d688d0a
--- /dev/null
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestCompleteResultScanResultCache.java
@@ -0,0 +1,159 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hbase.client;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.stream.IntStream;
+
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.testclassification.ClientTests;
+import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({ SmallTests.class, ClientTests.class })
+public class TestCompleteResultScanResultCache {
+
+  private static byte[] CF = Bytes.toBytes("cf");
+
+  private static byte[] CQ1 = Bytes.toBytes("cq1");
+
+  private static byte[] CQ2 = Bytes.toBytes("cq2");
+
+  private static byte[] CQ3 = Bytes.toBytes("cq3");
+
+  private CompleteScanResultCache resultCache;
+
+  @Before
+  public void setUp() {
+    resultCache = new CompleteScanResultCache();
+  }
+
+  @After
+  public void tearDown() {
+    resultCache.clear();
+    resultCache = null;
+  }
+
+  private static Cell createCell(int key, byte[] cq) {
+    return new KeyValue(Bytes.toBytes(key), CF, cq, Bytes.toBytes(key));
+  }
+
+  @Test
+  public void testNoPartial() throws IOException {
+    assertSame(ScanResultCache.EMPTY_RESULT_ARRAY,
+      resultCache.addAndGet(ScanResultCache.EMPTY_RESULT_ARRAY, false));
+    assertSame(ScanResultCache.EMPTY_RESULT_ARRAY,
+      resultCache.addAndGet(ScanResultCache.EMPTY_RESULT_ARRAY, true));
+    int count = 10;
+    Result[] results = new Result[count];
+    IntStream.range(0, count).forEach(i -> {
+      results[i] = Result.create(Arrays.asList(createCell(i, CQ1)));
+    });
+    assertSame(results, resultCache.addAndGet(results, false));
+  }
+
+  @Test
+  public void testCombine1() throws IOException {
+    Result previousResult = Result.create(Arrays.asList(createCell(0, CQ1)), null, false,
true);
+    Result result1 = Result.create(Arrays.asList(createCell(1, CQ1)), null, false, true);
+    Result result2 = Result.create(Arrays.asList(createCell(1, CQ2)), null, false, true);
+    Result result3 = Result.create(Arrays.asList(createCell(1, CQ3)), null, false, true);
+    Result[] results = resultCache.addAndGet(new Result[] { previousResult, result1 }, false);
+    assertEquals(1, results.length);
+    assertSame(previousResult, results[0]);
+
+    assertEquals(0, resultCache.addAndGet(new Result[] { result2 }, false).length);
+    assertEquals(0, resultCache.addAndGet(new Result[] { result3 }, false).length);
+    assertEquals(0, resultCache.addAndGet(new Result[0], true).length);
+
+    results = resultCache.addAndGet(new Result[0], false);
+    assertEquals(1, results.length);
+    assertEquals(1, Bytes.toInt(results[0].getRow()));
+    assertEquals(3, results[0].rawCells().length);
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ1)));
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ2)));
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ3)));
+  }
+
+  @Test
+  public void testCombine2() throws IOException {
+    Result result1 = Result.create(Arrays.asList(createCell(1, CQ1)), null, false, true);
+    Result result2 = Result.create(Arrays.asList(createCell(1, CQ2)), null, false, true);
+    Result result3 = Result.create(Arrays.asList(createCell(1, CQ3)), null, false, true);
+    Result nextResult1 = Result.create(Arrays.asList(createCell(2, CQ1)), null, false, true);
+    Result nextToNextResult1 = Result.create(Arrays.asList(createCell(3, CQ2)), null, false,
false);
+
+    assertEquals(0, resultCache.addAndGet(new Result[] { result1 }, false).length);
+    assertEquals(0, resultCache.addAndGet(new Result[] { result2 }, false).length);
+    assertEquals(0, resultCache.addAndGet(new Result[] { result3 }, false).length);
+
+    Result[] results = resultCache.addAndGet(new Result[] { nextResult1 }, false);
+    assertEquals(1, results.length);
+    assertEquals(1, Bytes.toInt(results[0].getRow()));
+    assertEquals(3, results[0].rawCells().length);
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ1)));
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ2)));
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ3)));
+
+    results = resultCache.addAndGet(new Result[] { nextToNextResult1 }, false);
+    assertEquals(2, results.length);
+    assertEquals(2, Bytes.toInt(results[0].getRow()));
+    assertEquals(1, results[0].rawCells().length);
+    assertEquals(2, Bytes.toInt(results[0].getValue(CF, CQ1)));
+    assertEquals(3, Bytes.toInt(results[1].getRow()));
+    assertEquals(1, results[1].rawCells().length);
+    assertEquals(3, Bytes.toInt(results[1].getValue(CF, CQ2)));
+  }
+
+  @Test
+  public void testCombine3() throws IOException {
+    Result result1 = Result.create(Arrays.asList(createCell(1, CQ1)), null, false, true);
+    Result result2 = Result.create(Arrays.asList(createCell(1, CQ2)), null, false, true);
+    Result nextResult1 = Result.create(Arrays.asList(createCell(2, CQ1)), null, false, false);
+    Result nextToNextResult1 = Result.create(Arrays.asList(createCell(3, CQ1)), null, false,
true);
+
+    assertEquals(0, resultCache.addAndGet(new Result[] { result1 }, false).length);
+    assertEquals(0, resultCache.addAndGet(new Result[] { result2 }, false).length);
+
+    Result[] results = resultCache.addAndGet(new Result[] { nextResult1, nextToNextResult1
},
+      false);
+    assertEquals(2, results.length);
+    assertEquals(1, Bytes.toInt(results[0].getRow()));
+    assertEquals(2, results[0].rawCells().length);
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ1)));
+    assertEquals(1, Bytes.toInt(results[0].getValue(CF, CQ2)));
+    assertEquals(2, Bytes.toInt(results[1].getRow()));
+    assertEquals(1, results[1].rawCells().length);
+    assertEquals(2, Bytes.toInt(results[1].getValue(CF, CQ1)));
+
+    results = resultCache.addAndGet(new Result[0], false);
+    assertEquals(1, results.length);
+    assertEquals(3, Bytes.toInt(results[0].getRow()));
+    assertEquals(1, results[0].rawCells().length);
+    assertEquals(3, Bytes.toInt(results[0].getValue(CF, CQ1)));
+  }
+}


Mime
View raw message