1   /*
2    * Copyright 2009 The Apache Software Foundation
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS,
16   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17   * See the License for the specific language governing permissions and
18   * limitations under the License.
19   */
20  
21  package org.apache.hadoop.hbase.regionserver;
22  
23  import junit.framework.TestCase;
24  import org.apache.hadoop.hbase.KeyValue;
25  import org.apache.hadoop.hbase.KeyValueTestUtil;
26  
27  import java.io.IOException;
28  import java.util.ArrayList;
29  import java.util.List;
30  import static org.apache.hadoop.hbase.regionserver.KeyValueScanFixture.scanFixture;
31  
32  public class TestMinorCompactingStoreScanner extends TestCase {
33  
34    public void testDeleteFamiliy() throws IOException {
35      KeyValue[] kvs = new KeyValue[] {
36          KeyValueTestUtil.create("R1", "cf", "a", 100, KeyValue.Type.DeleteFamily, "dont-care"),
37          KeyValueTestUtil.create("R1", "cf", "b", 11, KeyValue.Type.Put, "dont-care"),
38          KeyValueTestUtil.create("R1", "cf", "c", 11, KeyValue.Type.Put, "dont-care"),
39          KeyValueTestUtil.create("R1", "cf", "d", 11, KeyValue.Type.Put, "dont-care"),
40          KeyValueTestUtil.create("R1", "cf", "e", 11, KeyValue.Type.Put, "dont-care"),
41          KeyValueTestUtil.create("R1", "cf", "e", 11, KeyValue.Type.DeleteColumn, "dont-care"),
42          KeyValueTestUtil.create("R1", "cf", "f", 11, KeyValue.Type.Put, "dont-care"),
43          KeyValueTestUtil.create("R1", "cf", "g", 11, KeyValue.Type.Put, "dont-care"),
44          KeyValueTestUtil.create("R1", "cf", "g", 11, KeyValue.Type.Delete, "dont-care"),
45          KeyValueTestUtil.create("R1", "cf", "h", 11, KeyValue.Type.Put, "dont-care"),
46          KeyValueTestUtil.create("R1", "cf", "i", 11, KeyValue.Type.Put, "dont-care"),
47          KeyValueTestUtil.create("R2", "cf", "a", 11, KeyValue.Type.Put, "dont-care"),
48      };
49      List<KeyValueScanner> scanners = scanFixture(kvs);
50      
51      InternalScanner scan =
52          new MinorCompactingStoreScanner("cf", KeyValue.COMPARATOR, scanners);
53      List<KeyValue> results = new ArrayList<KeyValue>();
54      assertTrue(scan.next(results));
55      assertEquals(11, results.size());
56      assertEquals(kvs[0], results.get(0));
57      assertEquals(kvs[1], results.get(1));
58      assertEquals(kvs[2], results.get(2));
59      assertEquals(kvs[3], results.get(3));
60      assertEquals(kvs[5], results.get(4));
61      assertEquals(kvs[4], results.get(5));
62      assertEquals(kvs[6], results.get(6));
63      assertEquals(kvs[8], results.get(7));
64      assertEquals(kvs[7], results.get(8));
65      assertEquals(kvs[9], results.get(9));
66      assertEquals(kvs[10], results.get(10));
67  
68      results.clear();
69      assertFalse(scan.next(results));
70      assertEquals(1, results.size());
71      assertEquals(kvs[kvs.length-1], results.get(0));
72    }
73  
74    public void testDeleteVersion() throws IOException {
75      KeyValue[] kvs = new KeyValue[] {
76          KeyValueTestUtil.create("R1", "cf", "a", 15, KeyValue.Type.Put, "dont-care"),
77          KeyValueTestUtil.create("R1", "cf", "a", 10, KeyValue.Type.Delete, "dont-care"),
78          KeyValueTestUtil.create("R1", "cf", "a", 10, KeyValue.Type.Put, "dont-care")
79      };
80      List<KeyValueScanner> scanners = scanFixture(kvs);
81      InternalScanner scan =
82          new MinorCompactingStoreScanner("cf", KeyValue.COMPARATOR, scanners);
83      List<KeyValue> results = new ArrayList<KeyValue>();
84      assertFalse(scan.next(results));
85      assertEquals(3, results.size());
86      assertEquals(kvs[0], results.get(0));
87      assertEquals(kvs[1], results.get(1));
88      assertEquals(kvs[2], results.get(2));
89    }
90  }