Example #1
0
 @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);
 }
Example #2
0
 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);
     }
   }
 }
Example #3
0
  /** 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);
    }
  }
Example #4
0
  @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());
  }