Search in sources :

Example 1 with SimpleRateLimiter

use of org.apache.lucene.store.RateLimiter.SimpleRateLimiter in project lucene-solr by apache.

the class TestRateLimiter method testOverflowInt.

// LUCENE-6075
public void testOverflowInt() throws Exception {
    Thread t = new Thread() {

        @Override
        public void run() {
            try {
                new SimpleRateLimiter(1).pause((long) (1.5 * Integer.MAX_VALUE * 1024 * 1024 / 1000));
                fail("should have been interrupted");
            } catch (ThreadInterruptedException tie) {
            // expected
            }
        }
    };
    t.start();
    Thread.sleep(10);
    t.interrupt();
}
Also used : SimpleRateLimiter(org.apache.lucene.store.RateLimiter.SimpleRateLimiter) ThreadInterruptedException(org.apache.lucene.util.ThreadInterruptedException)

Example 2 with SimpleRateLimiter

use of org.apache.lucene.store.RateLimiter.SimpleRateLimiter in project lucene-solr by apache.

the class TestRateLimiter method testThreads.

public void testThreads() throws Exception {
    double targetMBPerSec = 10.0 + 20 * random().nextDouble();
    final SimpleRateLimiter limiter = new SimpleRateLimiter(targetMBPerSec);
    final CountDownLatch startingGun = new CountDownLatch(1);
    Thread[] threads = new Thread[TestUtil.nextInt(random(), 3, 6)];
    final AtomicLong totBytes = new AtomicLong();
    for (int i = 0; i < threads.length; i++) {
        threads[i] = new Thread() {

            @Override
            public void run() {
                try {
                    startingGun.await();
                } catch (InterruptedException ie) {
                    throw new ThreadInterruptedException(ie);
                }
                long bytesSinceLastPause = 0;
                for (int i = 0; i < 500; i++) {
                    long numBytes = TestUtil.nextInt(random(), 1000, 10000);
                    totBytes.addAndGet(numBytes);
                    bytesSinceLastPause += numBytes;
                    if (bytesSinceLastPause > limiter.getMinPauseCheckBytes()) {
                        limiter.pause(bytesSinceLastPause);
                        bytesSinceLastPause = 0;
                    }
                }
            }
        };
        threads[i].start();
    }
    long startNS = System.nanoTime();
    startingGun.countDown();
    for (Thread thread : threads) {
        thread.join();
    }
    long endNS = System.nanoTime();
    double actualMBPerSec = (totBytes.get() / 1024 / 1024.) / ((endNS - startNS) / 1000000000.0);
    // TODO: this may false trip .... could be we can only assert that it never exceeds the max, so slow jenkins doesn't trip:
    double ratio = actualMBPerSec / targetMBPerSec;
    // Only enforce that it wasn't too fast; if machine is bogged down (can't schedule threads / sleep properly) then it may falsely be too slow:
    assumeTrue("actualMBPerSec=" + actualMBPerSec + " targetMBPerSec=" + targetMBPerSec, 0.9 <= ratio);
    assertTrue("targetMBPerSec=" + targetMBPerSec + " actualMBPerSec=" + actualMBPerSec, ratio <= 1.1);
}
Also used : AtomicLong(java.util.concurrent.atomic.AtomicLong) SimpleRateLimiter(org.apache.lucene.store.RateLimiter.SimpleRateLimiter) ThreadInterruptedException(org.apache.lucene.util.ThreadInterruptedException) CountDownLatch(java.util.concurrent.CountDownLatch) ThreadInterruptedException(org.apache.lucene.util.ThreadInterruptedException)

Aggregations

SimpleRateLimiter (org.apache.lucene.store.RateLimiter.SimpleRateLimiter)2 ThreadInterruptedException (org.apache.lucene.util.ThreadInterruptedException)2 CountDownLatch (java.util.concurrent.CountDownLatch)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1