@Test public void testSamplerOutOfOrder() throws TimeoutException { TopKSampler<String> sampler = new TopKSampler<String>(); sampler.beginSampling(10); insert(sampler); waitForEmpty(1000); SamplerResult single = sampler.finishSampling(10); single = sampler.finishSampling(10); }
private void insert(TopKSampler<String> sampler) { for (int i = 1; i <= 10; i++) { for (int j = 0; j < i; j++) { String key = "item" + i; sampler.addSample(key, MurmurHash.hash64(key), 1); } } }
/** checking for exceptions from SS/HLL which are not thread safe */ @Test public void testMultithreadedAccess() throws Exception { final AtomicBoolean running = new AtomicBoolean(true); final CountDownLatch latch = new CountDownLatch(1); final TopKSampler<String> sampler = new TopKSampler<String>(); new Thread( new Runnable() { public void run() { try { while (running.get()) { insert(sampler); } } finally { latch.countDown(); } } }, "inserter") .start(); try { // start/stop in fast iterations for (int i = 0; i < 100; i++) { sampler.beginSampling(i); sampler.finishSampling(i); } // start/stop with pause to let it build up past capacity for (int i = 0; i < 3; i++) { sampler.beginSampling(i); Thread.sleep(250); sampler.finishSampling(i); } // with empty results running.set(false); latch.await(1, TimeUnit.SECONDS); waitForEmpty(1000); for (int i = 0; i < 10; i++) { sampler.beginSampling(i); Thread.sleep(i); sampler.finishSampling(i); } } finally { running.set(false); } }
@Test public void testSamplerSingleInsertionsEqualMulti() throws TimeoutException { TopKSampler<String> sampler = new TopKSampler<String>(); sampler.beginSampling(10); insert(sampler); waitForEmpty(1000); SamplerResult single = sampler.finishSampling(10); TopKSampler<String> sampler2 = new TopKSampler<String>(); sampler2.beginSampling(10); for (int i = 1; i <= 10; i++) { String key = "item" + i; sampler2.addSample(key, MurmurHash.hash64(key), i); } waitForEmpty(1000); Assert.assertEquals(countMap(single.topK), countMap(sampler2.finishSampling(10).topK)); Assert.assertEquals(sampler2.hll.cardinality(), 10); Assert.assertEquals(sampler.hll.cardinality(), sampler2.hll.cardinality()); }