/secondaryindex/src/test/java/org/apache/hadoop/hbase/index/coprocessor/regionserver/TestMultipleIndicesInScan.java
Java | 3493 lines | 3064 code | 329 blank | 100 comment | 180 complexity | 95f01d4f2d92d3ef1204bf8dd29772c6 MD5 | raw file
Possible License(s): Apache-2.0
- /**
- * Copyright 2011 The Apache Software Foundation
- *
- * 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.index.coprocessor.regionserver;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertTrue;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import junit.framework.Assert;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.hbase.HBaseTestingUtility;
- import org.apache.hadoop.hbase.HColumnDescriptor;
- import org.apache.hadoop.hbase.HConstants;
- import org.apache.hadoop.hbase.HTableDescriptor;
- import org.apache.hadoop.hbase.LargeTests;
- import org.apache.hadoop.hbase.client.HBaseAdmin;
- import org.apache.hadoop.hbase.client.HTable;
- import org.apache.hadoop.hbase.client.Put;
- import org.apache.hadoop.hbase.client.Result;
- import org.apache.hadoop.hbase.client.ResultScanner;
- import org.apache.hadoop.hbase.client.Scan;
- import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
- import org.apache.hadoop.hbase.filter.BinaryComparator;
- import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
- import org.apache.hadoop.hbase.filter.DoubleComparator;
- import org.apache.hadoop.hbase.filter.Filter;
- import org.apache.hadoop.hbase.filter.FilterList;
- import org.apache.hadoop.hbase.filter.FilterList.Operator;
- import org.apache.hadoop.hbase.filter.FloatComparator;
- import org.apache.hadoop.hbase.filter.IntComparator;
- import org.apache.hadoop.hbase.filter.RowFilter;
- import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
- import org.apache.hadoop.hbase.index.ColumnQualifier.ValueType;
- import org.apache.hadoop.hbase.index.Constants;
- import org.apache.hadoop.hbase.index.IndexSpecification;
- import org.apache.hadoop.hbase.index.IndexedHTableDescriptor;
- import org.apache.hadoop.hbase.index.coprocessor.master.IndexMasterObserver;
- import org.apache.hadoop.hbase.index.coprocessor.wal.IndexWALObserver;
- import org.apache.hadoop.hbase.index.util.ByteArrayBuilder;
- import org.apache.hadoop.hbase.index.util.IndexUtils;
- import org.apache.hadoop.hbase.util.Bytes;
- import org.apache.hadoop.hbase.zookeeper.ZKAssign;
- import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
- import org.apache.zookeeper.KeeperException;
- import org.junit.After;
- import org.junit.AfterClass;
- import org.junit.Before;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.junit.experimental.categories.Category;
- @Category(LargeTests.class)
- public class TestMultipleIndicesInScan {
- private static HBaseTestingUtility UTIL = new HBaseTestingUtility();
- @BeforeClass
- public static void setupBeforeClass() throws Exception {
- Configuration conf = UTIL.getConfiguration();
- conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, IndexMasterObserver.class.getName());
- conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, IndexRegionObserver.class.getName());
- conf.set(CoprocessorHost.WAL_COPROCESSOR_CONF_KEY, IndexWALObserver.class.getName());
- conf.setInt("hbase.regionserver.lease.period", 10 * 60 * 1000);
- conf.setInt("hbase.rpc.timeout", 10 * 60 * 1000);
- UTIL.startMiniCluster(1);
- }
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- UTIL.shutdownMiniCluster();
- }
- @After
- public void tearDown() throws Exception {
- IndexRegionObserver.setIsTestingEnabled(false);
- }
- @Before
- public void setUp() throws Exception {
- IndexRegionObserver.setIndexedFlowUsed(false);
- IndexRegionObserver.setSeekpointAdded(false);
- IndexRegionObserver.setSeekPoints(null);
- IndexRegionObserver.setIsTestingEnabled(true);
- IndexRegionObserver.addSeekPoints(null);
- }
- @Test(timeout = 180000)
- public void testAndOrCombinationWithMultipleIndices() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testSimpleScenarioForMultipleIndices";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2", "c1" }, "idx4");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testSimpleScenarioForMultipleIndices");
- putforIDX1(Bytes.toBytes("row0"), table);
- putforIDX1(Bytes.toBytes("row1"), table);
- putforIDX2(Bytes.toBytes("row2"), table);
- putforIDX3(Bytes.toBytes("row3"), table);
- putforIDX1(Bytes.toBytes("row4"), table);
- putforIDX2(Bytes.toBytes("row4"), table);
- putforIDX3(Bytes.toBytes("row4"), table);
- putforIDX1(Bytes.toBytes("row5"), table);
- putforIDX1(Bytes.toBytes("row6"), table);
- putforIDX2(Bytes.toBytes("row7"), table);
- putforIDX3(Bytes.toBytes("row8"), table);
- putforIDX1(Bytes.toBytes("row9"), table);
- putforIDX2(Bytes.toBytes("row9"), table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- // create the filter
- FilterList filter = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- filter.addFilter(iscvf1);
- filter.addFilter(iscvf2);
- FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
- iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "cat".getBytes());
- iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- "dog".getBytes());
- filter1.addFilter(iscvf1);
- filter1.addFilter(iscvf2);
- FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
- iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- "ele".getBytes());
- iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.EQUAL,
- "fan".getBytes());
- filter2.addFilter(iscvf1);
- filter2.addFilter(iscvf2);
- masterFilter.addFilter(filter);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 2, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 2);
- }
- @Test(timeout = 180000)
- public void testReseekWhenSomeScannerAlreadyScannedGreaterValueThanSeekPoint()
- throws IOException, KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testReseekWhenSomeScannerAlreadyScannedGreaterValueThanSeekPoint";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2", "c1" }, "idx4");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table =
- new HTable(conf, "testReseekWhenSomeScannerAlreadyScannedGreaterValueThanSeekPoint");
- putforIDX1(Bytes.toBytes("row0"), table);
- putforIDX1(Bytes.toBytes("row3"), table);
- putforIDX1(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row6"), table);
- putforIDX3(Bytes.toBytes("row1"), table);
- putforIDX3(Bytes.toBytes("row3"), table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- // create the filter
- FilterList filter = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- filter.addFilter(iscvf1);
- filter.addFilter(iscvf2);
- FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
- iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "cat".getBytes());
- iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- "dog".getBytes());
- filter1.addFilter(iscvf1);
- filter1.addFilter(iscvf2);
- FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
- iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- "ele".getBytes());
- iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.EQUAL,
- "fan".getBytes());
- filter2.addFilter(iscvf1);
- filter2.addFilter(iscvf2);
- masterFilter.addFilter(filter);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 2, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 2);
- }
- private void putforIDX3(byte[] row, HTable htable) throws IOException {
- Put p = new Put(row);
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("bat"));
- htable.put(p);
- }
- private void putforIDX2(byte[] row, HTable htable) throws IOException {
- Put p = new Put(row);
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("apple"));
- htable.put(p);
- }
- private void putforIDX1(byte[] row, HTable htable) throws IOException {
- Put p = new Put(row);
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("cat"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c4"), Bytes.toBytes("dog"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c5"), Bytes.toBytes("ele"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c6"), Bytes.toBytes("fan"));
- htable.put(p);
- }
- private IndexSpecification createIndexSpecification(HColumnDescriptor hcd, ValueType type,
- int maxValueLength, String[] qualifiers, String name) {
- IndexSpecification index = new IndexSpecification(name.getBytes());
- for (String qualifier : qualifiers) {
- index.addIndexColumn(hcd, qualifier, type, maxValueLength);
- }
- return index;
- }
- @Test(timeout = 180000)
- public void testWhenAppliedFilterGetsNoScanScheme() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testWhenAppliedFilterGetsNoScanScheme";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2", "c1" }, "idx4");
- ihtd.addIndex(indexSpecification);
- SingleColumnValueFilter filter =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- "ele".getBytes());
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testWhenAppliedFilterGetsNoScanScheme");
- putforIDX1(Bytes.toBytes("row1"), table);
- putforIDX1(Bytes.toBytes("row2"), table);
- putforIDX1(Bytes.toBytes("row3"), table);
- putforIDX1(Bytes.toBytes("row4"), table);
- Scan scan = new Scan();
- scan.setFilter(filter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertFalse("Index table should not be used", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertFalse("No seek points should get added from index flow",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertTrue(testRes.size() == 4);
- }
- @Test(timeout = 180000)
- public void testTheOROperation() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testTheOROperation";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2", "c1" }, "idx4");
- ihtd.addIndex(indexSpecification);
- SingleColumnValueFilter filter =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testTheOROperation");
- putforIDX2(Bytes.toBytes("row1"), table);
- putforIDX3(Bytes.toBytes("row1"), table);
- putforIDX2(Bytes.toBytes("row2"), table);
- putforIDX2(Bytes.toBytes("row3"), table);
- putforIDX3(Bytes.toBytes("row4"), table);
- putforIDX3(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row6"), table);
- putforIDX3(Bytes.toBytes("row7"), table);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should be used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Index should fetch some seek points.",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("Index should fetch 7 seek points", 7, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertEquals("Final result should have 7 rows.", 7, testRes.size());
- }
- @Test(timeout = 180000)
- public void testTheANDOpeartion() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testTheANDOpeartion";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- SingleColumnValueFilter filter =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testTheANDOpeartion");
- putforIDX2(Bytes.toBytes("row1"), table);
- putforIDX3(Bytes.toBytes("row1"), table);
- putforIDX2(Bytes.toBytes("row2"), table);
- putforIDX2(Bytes.toBytes("row3"), table);
- putforIDX3(Bytes.toBytes("row4"), table);
- putforIDX3(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row6"), table);
- putforIDX3(Bytes.toBytes("row7"), table);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should be used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Index should fetch some seek points.",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("Index should fetch 2 seek points", 2, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertEquals("Final result should have 2 rows.", 2, testRes.size());
- }
- @Test(timeout = 180000)
- public void testAndOperationWithProperStartAndStopRow() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testAndOperationWithProperStartAndStopRow";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("5"));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 1);
- }
- @Test(timeout = 180000)
- public void testAndOperationWithSimilarValuePattern() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testAndOperationWithSimilarValuePattern";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("aaa"));
- table.put(p);
- p = new Put(Bytes.toBytes("row9"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("aaa1"));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("aaa3"));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("aaa4"));
- table.put(p);
- p = new Put(Bytes.toBytes("row7"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("aaa5"));
- table.put(p);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("aaa"));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 1);
- Assert.assertTrue("Index should fetch some seek points.",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("Index should fetch 2 seek points", 1, IndexRegionObserver
- .getMultipleSeekPoints().size());
- }
- @Test(timeout = 180000)
- public void testScanWithMutlipleIndicesOnTheSameColAndSimilarPattern() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testScanWithMutlipleIndicesOnTheSameColAndSimilarPattern";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- byte[][] val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row1"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row2"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row3"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog1"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row4"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1"), Bytes.toBytes("ant") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row5"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elefe"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row6"), val, table);
- table.flushCommits();
- admin.flush(userTableName);
- admin.flush(userTableName + "_idx");
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("cat"));
- SingleColumnValueFilter scvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("dog"));
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("elef"));
- masterFilter.addFilter(scvf);
- masterFilter.addFilter(scvf1);
- masterFilter.addFilter(scvf2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 2);
- }
- @Test(timeout = 180000)
- public void testScanWithMutlipleIndicesWithGreaterthanEqualCondOnTheSameColAndSimilarPattern()
- throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName =
- "testScanWithMutlipleIndicesWithGreaterthanEqualCondOnTheSameColAndSimilarPattern";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- byte[][] val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row1"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row2"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row3"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog1"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row4"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1"), Bytes.toBytes("ant") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row5"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elefe"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row6"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row7"), val, table);
- table.flushCommits();
- admin.flush(userTableName);
- admin.flush(userTableName + "_idx");
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("cat"));
- SingleColumnValueFilter scvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("dog"));
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("elef"));
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.GREATER_OR_EQUAL,
- Bytes.toBytes("goat"));
- masterFilter.addFilter(scvf);
- masterFilter.addFilter(scvf1);
- masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf3);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertEquals(testRes.size(), 3);
- }
- @Test(timeout = 180000)
- public void testScanWithMutlipleIndicesWithGreaterCondOnTheSameColAndSimilarPattern()
- throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName =
- "testScanWithMutlipleIndicesWithGreaterCondOnTheSameColAndSimilarPattern";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- byte[][] val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row1"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row2"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row3"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog1"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row4"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1"), Bytes.toBytes("ant") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row5"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elefe"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row6"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row7"), val, table);
- table.flushCommits();
- admin.flush(userTableName);
- admin.flush(userTableName + "_idx");
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("cat"));
- SingleColumnValueFilter scvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("dog"));
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("elef"));
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.GREATER,
- Bytes.toBytes("goat"));
- masterFilter.addFilter(scvf);
- masterFilter.addFilter(scvf1);
- masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf3);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertEquals(testRes.size(), 2);
- }
- @Test(timeout = 180000)
- public void testScanWithMutlipleIndicesWithLesserCondOnTheSameColAndSimilarPattern()
- throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testScanWithMutlipleIndicesWithLesserCondOnTheSameColAndSimilarPattern";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- byte[][] val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row1"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row2"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row3"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog1"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row4"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1"), Bytes.toBytes("ant") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row5"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elefe"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row6"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row7"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("gda") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row8"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goa") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row9"), val, table);
- table.flushCommits();
- admin.flush(userTableName);
- admin.flush(userTableName + "_idx");
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("cat"));
- SingleColumnValueFilter scvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("dog"));
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("elef"));
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.LESS,
- Bytes.toBytes("goat"));
- masterFilter.addFilter(scvf);
- masterFilter.addFilter(scvf1);
- masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf3);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertEquals(testRes.size(), 2);
- }
- @Test(timeout = 180000)
- public void testScanWithMutlipleIndicesWithLesserEqualCondOnTheSameColAndSimilarPattern()
- throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName =
- "testScanWithMutlipleIndicesWithLesserEqualCondOnTheSameColAndSimilarPattern";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- byte[][] val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row1"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("ele"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row2"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row3"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog1"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row4"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat1"), Bytes.toBytes("ant") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row5"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elefe"),
- Bytes.toBytes("goat1") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row6"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goat") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row7"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("gda") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row8"), val, table);
- val =
- new byte[][] { Bytes.toBytes("cat"), Bytes.toBytes("dog"), Bytes.toBytes("elef"),
- Bytes.toBytes("goa") };
- putsForIdx1WithDiffValues(Bytes.toBytes("row9"), val, table);
- table.flushCommits();
- admin.flush(userTableName);
- admin.flush(userTableName + "_idx");
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("cat"));
- SingleColumnValueFilter scvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("dog"));
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("elef"));
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.LESS_OR_EQUAL,
- Bytes.toBytes("goat"));
- masterFilter.addFilter(scvf);
- masterFilter.addFilter(scvf1);
- masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf3);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertEquals(testRes.size(), 3);
- }
- private void putsForIdx1WithDiffValues(byte[] row, byte[][] valList, HTable table)
- throws IOException {
- Put p = new Put(row);
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), (valList[0]));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c4"), valList[1]);
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c5"), valList[2]);
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c6"), valList[3]);
- table.put(p);
- }
- @Test(timeout = 180000)
- public void testWhenSomePointsAreFetchedFromIndexButMainScanStillHasSomeFiltersToApply()
- throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "MainScanStillHasSomeFiltersToApply";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- scvf.setFilterIfMissing(true);
- SingleColumnValueFilter scvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- scvf1.setFilterIfMissing(true);
- FilterList orFilter = new FilterList(Operator.MUST_PASS_ONE);
- orFilter.addFilter(scvf);
- orFilter.addFilter(scvf1);
- FilterList andFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "cat".getBytes());
- scvf2.setFilterIfMissing(true);
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- "dog".getBytes());
- scvf3.setFilterIfMissing(true);
- SingleColumnValueFilter scvf4 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- "ele".getBytes());
- scvf4.setFilterIfMissing(true);
- SingleColumnValueFilter scvf5 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.EQUAL,
- "fan".getBytes());
- scvf5.setFilterIfMissing(true);
- andFilter.addFilter(scvf5);
- andFilter.addFilter(scvf4);
- andFilter.addFilter(scvf3);
- andFilter.addFilter(scvf2);
- FilterList master = new FilterList(Operator.MUST_PASS_ALL);
- master.addFilter(andFilter);
- master.addFilter(orFilter);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "MainScanStillHasSomeFiltersToApply");
- putforIDX1(Bytes.toBytes("row0"), table);
- putforIDX1(Bytes.toBytes("row1"), table);
- putforIDX2(Bytes.toBytes("row2"), table);
- putforIDX3(Bytes.toBytes("row3"), table);
- putforIDX1(Bytes.toBytes("row4"), table);
- putforIDX2(Bytes.toBytes("row4"), table);
- putforIDX3(Bytes.toBytes("row4"), table);
- putforIDX1(Bytes.toBytes("row5"), table);
- putforIDX1(Bytes.toBytes("row6"), table);
- putforIDX2(Bytes.toBytes("row7"), table);
- putforIDX3(Bytes.toBytes("row8"), table);
- putforIDX1(Bytes.toBytes("row9"), table);
- putforIDX2(Bytes.toBytes("row9"), table);
- Scan scan = new Scan();
- scan.setFilter(master);
- // scan.setCaching(10);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should be used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Index should fetch some seek points.",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("Index should fetch 6 seek points", 6, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertEquals("Final result should have 2 rows.", 2, testRes.size());
- }
- @Test(timeout = 180000)
- public void testWhenThereIsNoDataInIndexRegion() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testWhenThereIsNoDataInIndexRegion";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- SingleColumnValueFilter filter =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testWhenThereIsNoDataInIndexRegion");
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should be used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertFalse("Index should fetch some seek points.",
- IndexRegionObserver.getSeekpointAdded());
- }
- @Test(timeout = 180000)
- public void testMultipleScansOnTheIndexRegion() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- final Configuration conf = UTIL.getConfiguration();
- String userTableName = "testMultipleScansOnTheIndexRegion";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2", "c1" }, "idx4");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testMultipleScansOnTheIndexRegion");
- putforIDX1(Bytes.toBytes("row0"), table);
- putforIDX1(Bytes.toBytes("row1"), table);
- putforIDX2(Bytes.toBytes("row2"), table);
- putforIDX3(Bytes.toBytes("row3"), table);
- putforIDX1(Bytes.toBytes("row4"), table);
- putforIDX2(Bytes.toBytes("row4"), table);
- putforIDX3(Bytes.toBytes("row4"), table);
- putforIDX1(Bytes.toBytes("row5"), table);
- putforIDX1(Bytes.toBytes("row6"), table);
- putforIDX2(Bytes.toBytes("row7"), table);
- putforIDX3(Bytes.toBytes("row8"), table);
- putforIDX1(Bytes.toBytes("row9"), table);
- putforIDX2(Bytes.toBytes("row9"), table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- // create the filter
- FilterList filter = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- filter.addFilter(iscvf1);
- filter.addFilter(iscvf2);
- FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
- iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "cat".getBytes());
- iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
- "dog".getBytes());
- filter1.addFilter(iscvf1);
- filter1.addFilter(iscvf2);
- FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
- iscvf1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
- "ele".getBytes());
- iscvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.EQUAL,
- "fan".getBytes());
- filter2.addFilter(iscvf1);
- filter2.addFilter(iscvf2);
- masterFilter.addFilter(filter);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- Thread test = new testThread(masterFilter, "testMultipleScansOnTheIndexRegion");
- test.start();
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- test.join();
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 4, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 2);
- }
- private class testThread extends Thread {
- Filter filter = null;
- String tableName = null;
- public testThread(Filter filter, String tableName) {
- this.filter = filter;
- this.tableName = tableName;
- }
- @Override
- public synchronized void start() {
- try {
- HTable table = new HTable(UTIL.getConfiguration(), tableName);
- Scan scan = new Scan();
- scan.setFilter(filter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 2);
- } catch (IOException e) {
- }
- }
- }
- @Test(timeout = 180000)
- public void testFalsePositiveCases() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- final Configuration conf = UTIL.getConfiguration();
- String userTableName = "testFalsePositiveCases";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testFalsePositiveCases");
- HTable idx_table = new HTable(conf, "testFalsePositiveCases_idx");
- ByteArrayBuilder byteArray = new ByteArrayBuilder(33);
- byteArray.put(new byte[1]);
- byteArray.put(Bytes.toBytes("idx2"));
- byteArray.put(new byte[14]);
- byteArray.put(Bytes.toBytes("apple"));
- byteArray.put(new byte[5]);
- int offset = byteArray.position();
- byteArray.put(Bytes.toBytes("row1"));
- ByteArrayBuilder value = new ByteArrayBuilder(4);
- value.put(Bytes.toBytes((short) byteArray.array().length));
- value.put(Bytes.toBytes((short) offset));
- Put p = new Put(byteArray.array());
- p.add(Constants.IDX_COL_FAMILY, Constants.IDX_COL_QUAL, value.array());
- idx_table.put(p);
- SingleColumnValueFilter filter =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 1, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertEquals("Overall result should have only 2 rows", 0, testRes.size());
- }
- @Test(timeout = 180000)
- public void testSingleLevelRangeScanForAND() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testSingleLevelRangeScanForAND";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- // SingleColumnValueFilter scvfsub = new SingleColumnValueFilter("cf1".getBytes(),
- // "c1".getBytes(),
- // CompareOp.EQUAL, "5".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- // filterList1.addFilter(scvfsub);
- // filterList1.addFilter(scvf2sub);
- // filterList1.addFilter(scvf3sub);
- // SingleColumnValueFilter scvf = new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(),
- // CompareOp.GREATER_OR_EQUAL, "5".getBytes());
- // SingleColumnValueFilter scvf2 = new SingleColumnValueFilter("cf1".getBytes(),
- // "c2".getBytes(),
- // CompareOp.LESS_OR_EQUAL, "5".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "5".getBytes());
- // masterFilter.addFilter(scvf);
- // masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(scvf3);
- // masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 2, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 2);
- }
- @Test(timeout = 180000)
- public void testSingleLevelRangeScanForOR() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testSingleLevelRangeScanForOR";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- // SingleColumnValueFilter scvfsub = new SingleColumnValueFilter("cf1".getBytes(),
- // "c1".getBytes(),
- // CompareOp.EQUAL, "5".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- // filterList1.addFilter(scvfsub);
- // filterList1.addFilter(scvf2sub);
- // filterList1.addFilter(scvf3sub);
- // SingleColumnValueFilter scvf = new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(),
- // CompareOp.GREATER_OR_EQUAL, "5".getBytes());
- // SingleColumnValueFilter scvf2 = new SingleColumnValueFilter("cf1".getBytes(),
- // "c2".getBytes(),
- // CompareOp.LESS_OR_EQUAL, "5".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "5".getBytes());
- // masterFilter.addFilter(scvf);
- // masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(scvf3);
- // masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 6, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 6 rows", testRes.size() == 6);
- }
- @Test(timeout = 180000)
- public void testEqualAndRangeCombinationWithMultipleIndices() throws IOException,
- KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testEqualAndRangeCombinationWithMultipleIndices";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "4".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- masterFilter.addFilter(scvfsub);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 1, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 1);
- }
- @Test(timeout = 180000)
- public void testEqualAndRangeCombinationWithMultipleIndicesPart2() throws IOException,
- KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testEqualAndRangeCombinationWithMultipleIndicesPart2";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "1".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "6".getBytes());
- masterFilter.addFilter(scvfsub);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 4, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 4);
- }
- @Test(timeout = 180000)
- public void testOREvaluatorWithMultipleOperatorsInEachLevel() throws IOException,
- KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testOREvaluatorWithMultipleOperatorsInEachLevel";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "5".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "5".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- filterList1.addFilter(scvfsub);
- filterList1.addFilter(scvf2sub);
- filterList1.addFilter(scvf3sub);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "4".getBytes());
- masterFilter.addFilter(scvf);
- masterFilter.addFilter(scvf2);
- masterFilter.addFilter(scvf3);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 6, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 6 rows", testRes.size() == 6);
- }
- @Test(timeout = 180000)
- public void testIfAllScannersAreRangeInAllLevels() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testIfAllScannersAreRangeInAllLevels";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "1".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- masterFilter.addFilter(scvfsub);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 6, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 6);
- }
- @Test(timeout = 180000)
- public void testANDWithORbranchesWhereEachBranchHavingAtleastOneFilterOtherThanSCVF()
- throws IOException, KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName =
- "testANDWithORbranchesWhereEachBranchHavingAtleastOneFilterOtherThanSCVF";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "1".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- RowFilter rowFilter =
- new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row1")));
- FilterList filterList2 = new FilterList(Operator.MUST_PASS_ONE);
- filterList2.addFilter(scvfsub);
- filterList2.addFilter(scvf2sub);
- filterList2.addFilter(scvf3sub);
- filterList2.addFilter(rowFilter);
- SingleColumnValueFilter scvfsub1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- RowFilter rowFilter2 =
- new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row1")));
- FilterList subFilterList = new FilterList(Operator.MUST_PASS_ONE);
- subFilterList.addFilter(scvfsub1);
- subFilterList.addFilter(scvf2sub2);
- subFilterList.addFilter(scvf3sub3);
- subFilterList.addFilter(rowFilter2);
- filterList1.addFilter(subFilterList);
- masterFilter.addFilter(filterList1);
- masterFilter.addFilter(filterList2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertFalse("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- }
- @Test(timeout = 180000)
- public void testORIfEachBranchHavingAtleastOneOtherFilterThanSCVF() throws IOException,
- KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testORIfEachBranchHavingAtleastOneOtherFilterThanSCVF";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "1".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- RowFilter rowFilter =
- new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row1")));
- FilterList filterList2 = new FilterList(Operator.MUST_PASS_ONE);
- filterList2.addFilter(scvfsub);
- filterList2.addFilter(scvf2sub);
- filterList2.addFilter(scvf3sub);
- filterList2.addFilter(rowFilter);
- SingleColumnValueFilter scvfsub1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- RowFilter rowFilter2 =
- new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row1")));
- FilterList subFilterList = new FilterList(Operator.MUST_PASS_ONE);
- subFilterList.addFilter(scvfsub1);
- subFilterList.addFilter(scvf2sub2);
- subFilterList.addFilter(scvf3sub3);
- subFilterList.addFilter(rowFilter2);
- filterList1.addFilter(subFilterList);
- masterFilter.addFilter(filterList1);
- masterFilter.addFilter(filterList2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertFalse("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- }
- @Test(timeout = 180000)
- public void testORBranchesInWhichOneBranchHavingOtherFiltersThanSCVF() throws IOException,
- KeeperException, InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testORBranchesInWhichOneBranchHavingOtherFiltersThanSCVF";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "1".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- RowFilter rowFilter =
- new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row1")));
- FilterList filterList2 = new FilterList(Operator.MUST_PASS_ONE);
- filterList2.addFilter(scvfsub);
- filterList2.addFilter(scvf2sub);
- filterList2.addFilter(scvf3sub);
- filterList2.addFilter(rowFilter);
- masterFilter.addFilter(filterList1);
- masterFilter.addFilter(filterList2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertFalse("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- }
- @Test(timeout = 180000)
- public void testANDhavingORbranchWithOtherFilterThanSCVF() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testANDhavingORbranchWithOtherFilterThanSCVF";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "1".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- RowFilter rowFilter =
- new RowFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row1")));
- FilterList filterList2 = new FilterList(Operator.MUST_PASS_ONE);
- filterList2.addFilter(scvfsub);
- filterList2.addFilter(scvf2sub);
- filterList2.addFilter(scvf3sub);
- filterList2.addFilter(rowFilter);
- masterFilter.addFilter(filterList1);
- masterFilter.addFilter(filterList2);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 6, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 6);
- }
- @Test(timeout = 180000)
- public void testIfAllScannersAreRangeInAllLevelsPart2() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testIfAllScannersAreRangeInAllLevelsPart2";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "1".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "4".getBytes());
- masterFilter.addFilter(scvfsub);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 1, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 1);
- }
- @Test(timeout = 180000)
- public void testIfAllScannersAreRangeInAllLevelsPart3() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testIfAllScannersAreRangeInAllLevelsPart3";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "4".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "1".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- masterFilter.addFilter(scvfsub);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 1, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 1);
- }
- @Test(timeout = 180000)
- public void testOREvaluationFromMultipleLevels() throws IOException, KeeperException,
- InterruptedException {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testOREvaluationFromMultipleLevels";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "1".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "5".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "4".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- SingleColumnValueFilter scvfsub =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "6".getBytes());
- SingleColumnValueFilter scvf3sub =
- new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
- "3".getBytes());
- masterFilter.addFilter(scvfsub);
- masterFilter.addFilter(scvf2sub);
- masterFilter.addFilter(scvf3sub);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 6, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 6);
- }
- private void rangePutForIdx2(HTable table) throws IOException {
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("1"));
- table.put(p);
- p = new Put(Bytes.toBytes("row9"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("2"));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("3"));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("4"));
- table.put(p);
- p = new Put(Bytes.toBytes("row7"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("5"));
- table.put(p);
- p = new Put(Bytes.toBytes("row15"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("6"));
- table.put(p);
- }
- private void rangePutForIdx3(HTable table) throws IOException {
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("1"));
- table.put(p);
- p = new Put(Bytes.toBytes("row9"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("2"));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("3"));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("4"));
- table.put(p);
- p = new Put(Bytes.toBytes("row7"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("5"));
- table.put(p);
- p = new Put(Bytes.toBytes("row15"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c2"), Bytes.toBytes("6"));
- table.put(p);
- }
- private void rangePutForIdx4(HTable table) throws IOException {
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("1"));
- table.put(p);
- p = new Put(Bytes.toBytes("row9"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("2"));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("3"));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("4"));
- table.put(p);
- p = new Put(Bytes.toBytes("row7"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("5"));
- table.put(p);
- p = new Put(Bytes.toBytes("row15"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c3"), Bytes.toBytes("6"));
- table.put(p);
- }
- @Test(timeout = 180000)
- public void testCombinationOfLESSorGREATERwithEQUAL() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testCombinationOfLESSorGREATERwithEQUAL";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10,
- new String[] { "c3", "c4", "c5", "c6" }, "idx1");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c3" }, "idx4");
- ihtd.addIndex(indexSpecification);
- // indexSpecification = createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2",
- // "c1" }, "idx4");
- // ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2(table);
- rangePutForIdx3(table);
- rangePutForIdx4(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- FilterList filterList1 = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
- "2".getBytes());
- SingleColumnValueFilter scvf3 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "2".getBytes());
- SingleColumnValueFilter scvf2 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- "5".getBytes());
- SingleColumnValueFilter scvf4 =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "5".getBytes());
- filterList1.addFilter(scvf);
- filterList1.addFilter(scvf2);
- filterList1.addFilter(scvf3);
- filterList1.addFilter(scvf4);
- masterFilter.addFilter(filterList1);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- i++;
- result = scanner.next(1);
- }
- System.out.println("************* result count......*********** " + testRes.size()
- + " ###### " + testRes);
- Assert.assertTrue("Index flow should get used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Seekpoints should get added by index scanner",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("It should get two seek points from index scanner.", 4, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertTrue("Overall result should have only 2 rows", testRes.size() == 4);
- }
- @Test(timeout = 180000)
- public void testIndexScanWithCaching() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- ZooKeeperWatcher zkw = HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testIndexScanWithCaching";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx2");
- ihtd.addIndex(indexSpecification);
- indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c2" }, "idx3");
- ihtd.addIndex(indexSpecification);
- SingleColumnValueFilter filter =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- "apple".getBytes());
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
- "bat".getBytes());
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
- masterFilter.addFilter(filter1);
- masterFilter.addFilter(filter);
- admin.createTable(ihtd);
- ZKAssign.blockUntilNoRIT(zkw);
- HTable table = new HTable(conf, "testIndexScanWithCaching");
- putforIDX2(Bytes.toBytes("row1"), table);
- putforIDX3(Bytes.toBytes("row1"), table);
- putforIDX2(Bytes.toBytes("row2"), table);
- putforIDX2(Bytes.toBytes("row3"), table);
- putforIDX3(Bytes.toBytes("row4"), table);
- putforIDX3(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row5"), table);
- putforIDX2(Bytes.toBytes("row6"), table);
- putforIDX3(Bytes.toBytes("row7"), table);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- scan.setCaching(10);
- int i = 0;
- ResultScanner scanner = table.getScanner(scan);
- int nextCalled = 0;
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(10);
- nextCalled++;
- while (result != null && result.length > 1) {
- for (int j = 0; j < result.length; j++) {
- testRes.add(result[j]);
- }
- i++;
- result = scanner.next(10);
- nextCalled++;
- }
- Assert.assertTrue("Index flow should be used.", IndexRegionObserver.getIndexedFlowUsed());
- Assert.assertTrue("Index should fetch some seek points.",
- IndexRegionObserver.getSeekpointAdded());
- Assert.assertEquals("Index should fetch 7 seek points", 7, IndexRegionObserver
- .getMultipleSeekPoints().size());
- Assert.assertEquals("Final result should have 7 rows.", 7, testRes.size());
- Assert.assertEquals("All rows should be fetched in single next call.", 2, nextCalled);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegtiveIntValueWithEqualCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testOtherDataTypes";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Int, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithInteger(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes(-4));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 1);
- assertTrue(testRes.toString().contains("row3"));
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeIntValueWithLessCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeIntValueWithLessCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Int, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithInteger(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
- (Bytes.toBytes(-4)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 2);
- }
- @Test(timeout = 180000)
- public void testShouldRetriveNegativeIntValueWithGreaterCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetriveNegativeIntValueWithGreaterCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Int, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithInteger(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- new IntComparator(Bytes.toBytes(-6)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 5);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeIntValue() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeIntValue";
- HTableDescriptor ihtd = new HTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithInteger(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- new IntComparator(Bytes.toBytes(-6)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 5);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeFloatValueWithGreaterCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeFloatValueWithGreaterCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Float, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithFloat(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
- new FloatComparator(Bytes.toBytes(-5f)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 4);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeFloatValueWithLessCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeFloatValueWithLessCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Float, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithFloat(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
- new FloatComparator(Bytes.toBytes(-5f)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 2);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeFloatValueWithEqualsCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeFloatValueWithEqualsCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Float, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithFloat(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- new FloatComparator(Bytes.toBytes(-5.3f)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 1);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeDoubleValueWithLesserThanEqualsCondition() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeDoubleValueWithLesserThanEqualsCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Double, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithDouble(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
- new DoubleComparator(Bytes.toBytes(-5.3d)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertEquals(testRes.size(), 2);
- }
- @Test(timeout = 180000)
- public void testShouldRetrieveNegativeDoubleValueWithGreaterThanEqualsCondition()
- throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testShouldRetrieveNegativeDoubleValueWithGreaterThanEqualsCondition";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.Double, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- admin.createTable(ihtd);
- HTable table = new HTable(conf, userTableName);
- rangePutForIdx2WithDouble(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
- new DoubleComparator(Bytes.toBytes(-5.3d)));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- while (result != null && result.length > 0) {
- testRes.add(result[0]);
- result = scanner.next(1);
- }
- assertTrue(testRes.size() == 5);
- }
- @Test(timeout = 180000)
- public void testCachingWithValuesDistributedAmongMulitpleRegions() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testCachingWithValuesDistributedAmongMulitpleRegions";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- byte[][] split =
- new byte[][] { Bytes.toBytes("row1"), Bytes.toBytes("row2"), Bytes.toBytes("row3"),
- Bytes.toBytes("row4") };
- admin.createTable(ihtd, split);
- HTable table = new HTable(conf, userTableName);
- insert100Rows(table);
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("5"));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setCaching(5);
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- int i = 0;
- while (result != null && result.length > 0) {
- System.out.println(Bytes.toString(result[0].getRow()));
- testRes.add(result[0]);
- result = scanner.next(1);
- i++;
- }
- assertEquals(8, i);
- }
- @Test(timeout = 180000)
- public void testCachingWithValuesWhereSomeRegionsDontHaveAnyData() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testCachingWithValuesWhereSomeRegionsDontHaveAnyData";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- byte[][] split =
- new byte[][] { Bytes.toBytes("row1"), Bytes.toBytes("row3"), Bytes.toBytes("row5"),
- Bytes.toBytes("row7") };
- admin.createTable(ihtd, split);
- HTable table = new HTable(conf, userTableName);
- for (int i = 0; i < 10; i++) {
- if (i > 4 && i < 8) {
- continue;
- }
- Put p = new Put(Bytes.toBytes("row" + i));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("5"));
- table.put(p);
- }
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("5"));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setCaching(5);
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- int i = 0;
- while (result != null && result.length > 0) {
- System.out.println(Bytes.toString(result[0].getRow()));
- testRes.add(result[0]);
- result = scanner.next(1);
- i++;
- }
- assertEquals(7, i);
- }
- @Test(timeout = 180000)
- public void testCachingWithLessNumberOfRowsThanCaching() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String userTableName = "testCachingWithLessNumberOfRowsThanCaching";
- IndexedHTableDescriptor ihtd = new IndexedHTableDescriptor(userTableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf1");
- ihtd.addFamily(hcd);
- IndexSpecification indexSpecification =
- createIndexSpecification(hcd, ValueType.String, 10, new String[] { "c1" }, "idx1");
- ihtd.addIndex(indexSpecification);
- byte[][] split =
- new byte[][] { Bytes.toBytes("row1"), Bytes.toBytes("row3"), Bytes.toBytes("row5"),
- Bytes.toBytes("row7") };
- admin.createTable(ihtd, split);
- HTable table = new HTable(conf, userTableName);
- for (int i = 0; i < 10; i++) {
- if (i > 4 && i < 8) {
- continue;
- }
- Put p = new Put(Bytes.toBytes("row" + i));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("5"));
- table.put(p);
- }
- FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter scvf =
- new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
- Bytes.toBytes("5"));
- masterFilter.addFilter(scvf);
- Scan scan = new Scan();
- scan.setCaching(10);
- scan.setFilter(masterFilter);
- ResultScanner scanner = table.getScanner(scan);
- List<Result> testRes = new ArrayList<Result>();
- Result[] result = scanner.next(1);
- int i = 0;
- while (result != null && result.length > 0) {
- System.out.println(Bytes.toString(result[0].getRow()));
- testRes.add(result[0]);
- result = scanner.next(1);
- i++;
- }
- assertEquals(7, i);
- }
- private void insert100Rows(HTable table) throws IOException {
- for (int i = 0; i < 8; i++) {
- Put p = new Put(Bytes.toBytes("row" + i));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes("5"));
- table.put(p);
- }
- }
- private void rangePutForIdx2WithInteger(HTable table) throws IOException {
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(1));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(2));
- table.put(p);
- p = new Put(Bytes.toBytes("row2"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(3));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-4));
- table.put(p);
- p = new Put(Bytes.toBytes("row4"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-5));
- table.put(p);
- p = new Put(Bytes.toBytes("row5"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-6));
- table.put(p);
- }
- private void rangePutForIdx2WithFloat(HTable table) throws IOException {
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(1.5f));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(2.89f));
- table.put(p);
- p = new Put(Bytes.toBytes("row2"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(3.9f));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-4.7f));
- table.put(p);
- p = new Put(Bytes.toBytes("row4"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-5.3f));
- table.put(p);
- p = new Put(Bytes.toBytes("row5"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-6.456f));
- table.put(p);
- }
- private void rangePutForIdx2WithDouble(HTable table) throws IOException {
- Put p = new Put(Bytes.toBytes("row0"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(1.5d));
- table.put(p);
- p = new Put(Bytes.toBytes("row1"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(2.89d));
- table.put(p);
- p = new Put(Bytes.toBytes("row2"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(3.9d));
- table.put(p);
- p = new Put(Bytes.toBytes("row3"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-4.7d));
- table.put(p);
- p = new Put(Bytes.toBytes("row4"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-5.3d));
- table.put(p);
- p = new Put(Bytes.toBytes("row5"));
- p.add(Bytes.toBytes("cf1"), Bytes.toBytes("c1"), Bytes.toBytes(-6.456d));
- table.put(p);
- }
- @Test(timeout = 180000)
- public void testComplexRangeScan() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String tableName = "testComplexRangeScan";
- IndexSpecification spec1 = new IndexSpecification("idx1");
- IndexSpecification spec2 = new IndexSpecification("idx2");
- IndexSpecification spec3 = new IndexSpecification("idx3");
- IndexedHTableDescriptor htd = new IndexedHTableDescriptor(tableName);
- // HTableDescriptor htd = new HTableDescriptor(tableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf");
- spec1.addIndexColumn(hcd, "detail", ValueType.String, 10);
- spec2.addIndexColumn(hcd, "info", ValueType.String, 10);
- spec3.addIndexColumn(hcd, "value", ValueType.String, 10);
- htd.addFamily(hcd);
- htd.addIndex(spec1);
- htd.addIndex(spec2);
- htd.addIndex(spec3);
- String[] splitkeys = new String[9];
- for (int i = 100, j = 0; i <= 900; i += 100, j++) {
- splitkeys[j] = new Integer(i).toString();
- }
- admin.createTable(htd, Bytes.toByteArrays(splitkeys));
- String rowname = "row";
- String startrow = "";
- int keys = 0;
- List<Put> put = new ArrayList<Put>();
- for (int i = 1, j = 999; i < 1000; i++, j--) {
- if (i % 100 == 0) {
- startrow = splitkeys[keys++];
- }
- Put p = new Put(Bytes.toBytes(startrow + rowname + i));
- p.add(Bytes.toBytes("cf"), Bytes.toBytes("detail"), Bytes.toBytes(new Integer(i).toString()));
- p.add(Bytes.toBytes("cf"), Bytes.toBytes("info"), Bytes.toBytes(new Integer(j).toString()));
- p.add(Bytes.toBytes("cf"), Bytes.toBytes("value"),
- Bytes.toBytes(new Integer(i % 100).toString()));
- System.out.println(p);
- put.add(p);
- }
- HTable table = new HTable(conf, tableName);
- table.put(put);
- Scan s = new Scan();
- s.setCacheBlocks(true);
- FilterList master = new FilterList(Operator.MUST_PASS_ONE);
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf".getBytes(), "detail".getBytes(), CompareOp.LESS_OR_EQUAL,
- "6".getBytes());
- filter1.setFilterIfMissing(true);
- SingleColumnValueFilter filter2 =
- new SingleColumnValueFilter("cf".getBytes(), "info".getBytes(), CompareOp.GREATER_OR_EQUAL,
- "992".getBytes());
- filter2.setFilterIfMissing(true);
- SingleColumnValueFilter filter3 =
- new SingleColumnValueFilter("cf".getBytes(), "value".getBytes(), CompareOp.EQUAL,
- "9".getBytes());
- filter3.setFilterIfMissing(true);
- master.addFilter(filter1);
- master.addFilter(filter2);
- master.addFilter(filter3);
- s.setFilter(master);
- // scanOperation(s, conf, tableName);
- assertEquals("data consistency is missed ", 563, scanOperation(s, conf, tableName));
- System.out.println("Done ************");
- s = new Scan();
- s.setFilter(master);
- s.setCaching(5);
- // scanOperation(s, conf, tableName);
- assertEquals("data consistency is missed ", 563, scanOperation(s, conf, tableName));
- }
- @Test(timeout = 180000)
- public void testComplexRangeScanWithAnd() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String tableName = "RangeScanMetrix_2_new_id";
- IndexSpecification spec1 = new IndexSpecification("idx1");
- IndexSpecification spec2 = new IndexSpecification("idx2");
- IndexSpecification spec3 = new IndexSpecification("idx3");
- IndexedHTableDescriptor htd = new IndexedHTableDescriptor(tableName);
- // HTableDescriptor htd = new HTableDescriptor(tableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf");
- spec1.addIndexColumn(hcd, "detail", ValueType.String, 10);
- spec2.addIndexColumn(hcd, "info", ValueType.String, 10);
- spec3.addIndexColumn(hcd, "value", ValueType.String, 10);
- htd.addFamily(hcd);
- htd.addIndex(spec1);
- htd.addIndex(spec2);
- htd.addIndex(spec3);
- String[] splitkeys = new String[9];
- for (int i = 100, j = 0; i <= 900; i += 100, j++) {
- splitkeys[j] = new Integer(i).toString();
- }
- admin.createTable(htd, Bytes.toByteArrays(splitkeys));
- String rowname = "row";
- String startrow = "";
- int keys = 0;
- List<Put> put = new ArrayList<Put>();
- for (int i = 1, j = 999; i < 1000; i++, j--) {
- if (i % 100 == 0) {
- startrow = splitkeys[keys++];
- }
- Put p = new Put(Bytes.toBytes(startrow + rowname + i));
- p.add(Bytes.toBytes("cf"), Bytes.toBytes("detail"), Bytes.toBytes(new Integer(i).toString()));
- p.add(Bytes.toBytes("cf"), Bytes.toBytes("info"), Bytes.toBytes(new Integer(j).toString()));
- p.add(Bytes.toBytes("cf"), Bytes.toBytes("value"),
- Bytes.toBytes(new Integer(i % 100).toString()));
- System.out.println(p);
- put.add(p);
- }
- HTable table = new HTable(conf, tableName);
- table.put(put);
- Scan s = new Scan();
- s.setCacheBlocks(true);
- s.setCaching(1);
- FilterList master = new FilterList(Operator.MUST_PASS_ALL);
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf".getBytes(), "detail".getBytes(), CompareOp.LESS_OR_EQUAL,
- "65".getBytes());
- filter1.setFilterIfMissing(true);
- SingleColumnValueFilter filter2 =
- new SingleColumnValueFilter("cf".getBytes(), "info".getBytes(), CompareOp.GREATER,
- "900".getBytes());
- filter2.setFilterIfMissing(true);
- SingleColumnValueFilter filter3 =
- new SingleColumnValueFilter("cf".getBytes(), "value".getBytes(),
- CompareOp.GREATER_OR_EQUAL, "5".getBytes());
- filter3.setFilterIfMissing(true);
- master.addFilter(filter1);
- master.addFilter(filter2);
- master.addFilter(filter3);
- s.setFilter(master);
- // scanOperation(s, conf, tableName);
- assertEquals("data consistency is missed ", 18, scanOperation(s, conf, tableName));
- System.out.println("Done ************");
- s = new Scan();
- s.setFilter(master);
- s.setCaching(5);
- // scanOperation(s, conf, tableName);
- assertEquals("data consistency is missed ", 18, scanOperation(s, conf, tableName));
- }
- @Test(timeout = 180000)
- public void testVerifyTheStopRowIsCorrectInCaseOfGreaterOperatorsInSCVF() throws Exception {
- HBaseAdmin admin = UTIL.getHBaseAdmin();
- HBaseTestingUtility.getZooKeeperWatcher(UTIL);
- Configuration conf = UTIL.getConfiguration();
- String tableName = "testDeleteIncosistent";
- IndexSpecification spec1 = new IndexSpecification("idx1");
- IndexedHTableDescriptor htd = new IndexedHTableDescriptor(tableName);
- // HTableDescriptor htd = new HTableDescriptor(tableName);
- HColumnDescriptor hcd = new HColumnDescriptor("cf");
- spec1.addIndexColumn(hcd, "detail", ValueType.String, 10);
- htd.addFamily(hcd);
- htd.addIndex(spec1);
- admin.createTable(htd);
- HTable table = new HTable(conf, "testDeleteIncosistent");
- HTable table2 = new HTable(conf, "testDeleteIncosistent_idx");
- Put p = new Put(Bytes.toBytes("row5"));
- p.add("cf".getBytes(), "detail".getBytes(), "5".getBytes());
- table2.put(IndexUtils.prepareIndexPut(p, spec1, HConstants.EMPTY_START_ROW));
- p = new Put(Bytes.toBytes("row6"));
- p.add("cf".getBytes(), "detail".getBytes(), "6".getBytes());
- table.put(p);
- Scan s = new Scan();
- SingleColumnValueFilter filter1 =
- new SingleColumnValueFilter("cf".getBytes(), "detail".getBytes(), CompareOp.GREATER,
- "5".getBytes());
- s.setFilter(filter1);
- ResultScanner scanner = table.getScanner(s);
- int i = 0;
- for (Result result : scanner) {
- i++;
- }
- assertEquals(1, i);
- }
- private int scanOperation(Scan s, Configuration conf, String tableName) {
- ResultScanner scanner = null;
- int i = 0;
- try {
- HTable table = new HTable(conf, tableName);
- scanner = table.getScanner(s);
- for (Result result : scanner) {
- System.out.println(Bytes.toString(result.getRow()));
- i++;
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (scanner != null) {
- scanner.close();
- }
- }
- System.out.println("******* Return value " + i);
- return i;
- }
- }