1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.util;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertTrue;
24 import org.apache.hadoop.conf.Configuration;
25 import org.apache.hadoop.hbase.HBaseConfiguration;
26 import org.apache.hadoop.hbase.testclassification.MiscTests;
27 import org.apache.hadoop.hbase.testclassification.SmallTests;
28 import org.junit.Test;
29 import org.junit.experimental.categories.Category;
30
31 @Category({MiscTests.class, SmallTests.class})
32 public class TestLossyCounting {
33
34 private final Configuration conf = HBaseConfiguration.create();
35
36 @Test
37 public void testBucketSize() {
38 LossyCounting<?> lossyCounting = new LossyCounting<>("testBucketSize", 0.01);
39 assertEquals(100L, lossyCounting.getBucketSize());
40 LossyCounting<?> lossyCounting2 = new LossyCounting<>("testBucketSize2", conf);
41 assertEquals(50L, lossyCounting2.getBucketSize());
42 }
43
44 @Test
45 public void testAddByOne() {
46 LossyCounting<String> lossyCounting = new LossyCounting<>("testAddByOne", 0.01);
47 for (int i = 0; i < 100; i++) {
48 String key = "" + i;
49 lossyCounting.add(key);
50 }
51 assertEquals(100L, lossyCounting.getDataSize());
52 for (int i = 0; i < 100; i++) {
53 String key = "" + i;
54 assertTrue(lossyCounting.contains(key));
55 }
56 }
57
58 @Test
59 public void testSweep1() throws Exception {
60 LossyCounting<String> lossyCounting = new LossyCounting<>("testSweep1", 0.01);
61 for(int i = 0; i < 400; i++){
62 String key = "" + i;
63 lossyCounting.add(key);
64 }
65 assertEquals(4L, lossyCounting.getCurrentTerm());
66 waitForSweep(lossyCounting);
67
68
69 lossyCounting.sweep();
70 assertEquals(lossyCounting.getBucketSize() - 1, lossyCounting.getDataSize());
71 }
72
73 private void waitForSweep(LossyCounting<?> lossyCounting) throws InterruptedException {
74
75 int retry = 0;
76 while (!lossyCounting.getSweepFuture().isDone() && retry < 10) {
77 Thread.sleep(100);
78 retry++;
79 }
80 }
81
82 @Test
83 public void testSweep2() throws Exception {
84 LossyCounting<String> lossyCounting = new LossyCounting<>("testSweep2", 0.1);
85 for (int i = 0; i < 10; i++) {
86 String key = "" + i;
87 lossyCounting.add(key);
88 }
89 waitForSweep(lossyCounting);
90 assertEquals(10L, lossyCounting.getDataSize());
91 for(int i = 0; i < 10; i++){
92 String key = "1";
93 lossyCounting.add(key);
94 }
95 waitForSweep(lossyCounting);
96 assertEquals(1L, lossyCounting.getDataSize());
97 }
98 }