Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.Uninterruptibles;
import org.awaitility.Awaitility;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
Expand Down Expand Up @@ -228,27 +229,29 @@ public void testNonSequentialAccess()
rebufferer.closeReader();
rebufferer.close();

assertEquals(5, buffers.size());
Awaitility.await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> {
assertEquals(5, buffers.size());

// requesting PAGE_SIZE after PAGE_SIZE * 2 is non-sequential
assertEquals(1, PrefetchingRebufferer.metrics.nonSequentialRequest.getCount());
// requesting PAGE_SIZE after PAGE_SIZE * 2 is non-sequential
assertEquals(1, PrefetchingRebufferer.metrics.nonSequentialRequest.getCount());

for (int i = 0; i < 5; i++)
{
TestBufferHolder buffer = buffers.get((long) i * PAGE_SIZE);
assertNotNull(buffer);
// In order, we've requested indexes 0, 2 and then 1. We expect:
// - 0 to fetch 0 and prefetch 1 and 2.
// - 2 to find 2 prefetched above (having discared 1) and prefetch 3 and 4.
// - 1 is a seek backward so it discard everything, fetch 1 and prefetch 2 and 3.
// Overall, 0 and 4 are only requested once, but the other indexes are requested twice.
assertEquals("For index " + i, i == 0 || i == 4 ? 1 : 2, buffer.numRequested);
assertTrue(buffer.released);
}
for (int i = 0; i < 5; i++)
{
TestBufferHolder buffer = buffers.get((long) i * PAGE_SIZE);
assertNotNull(buffer);
// In order, we've requested indexes 0, 2 and then 1. We expect:
// - 0 to fetch 0 and prefetch 1 and 2.
// - 2 to find 2 prefetched above (having discarded 1) and prefetch 3 and 4.
// - 1 is a seek backward so it discard everything, fetch 1 and prefetch 2 and 3.
// Overall, 0 and 4 are only requested once, but the other indexes are requested twice.
assertEquals("For index " + i, i == 0 || i == 4 ? 1 : 2, buffer.numRequested);
assertTrue(buffer.released);
}

// As mentioned above, we'd discarded 1 when getting 2, and then discard 3 and 4 when getting 1. And then
// when we close the rebufferer, we discard 2 and 3.
assertEquals(5, PrefetchingRebufferer.metrics.unused.getCount());
// As mentioned above, we'd discarded 1 when getting 2, and then discard 3 and 4 when getting 1. And then
// when we close the rebufferer, we discard 2 and 3.
assertEquals(5, PrefetchingRebufferer.metrics.unused.getCount());
});
}

@Test
Expand Down
Loading