Search in sources :

Example 21 with Sized

use of herddb.utils.Sized in project herddb by diennea.

the class BlockRangeIndexTest method testSimpleSplit.

@Test
public void testSimpleSplit() {
    BlockRangeIndex<Sized<Integer>, Sized<String>> index = new BlockRangeIndex<>(400, new RandomPageReplacementPolicy(10));
    index.put(Sized.valueOf(1), Sized.valueOf("a"));
    index.put(Sized.valueOf(2), Sized.valueOf("b"));
    index.put(Sized.valueOf(3), Sized.valueOf("c"));
    dumpIndex(index);
    assertEquals(Sized.valueOf("a"), index.search(Sized.valueOf(1)).get(0));
    assertEquals(Sized.valueOf("b"), index.search(Sized.valueOf(2)).get(0));
    assertEquals(Sized.valueOf("c"), index.search(Sized.valueOf(3)).get(0));
    assertEquals(2, index.getNumBlocks());
}
Also used : Sized(herddb.utils.Sized) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) Test(org.junit.Test)

Example 22 with Sized

use of herddb.utils.Sized in project herddb by diennea.

the class BlockRangeIndexTest method testSplitAndDelete.

/**
 * Verify that BRIN blocks next field is managed when pointed block get deleted
 *
 * @author diego.salvi
 */
@Test
public void testSplitAndDelete() throws IOException {
    /* Must be 1 to keep just one page in memory keeping to unload on every page load */
    final PageReplacementPolicy policy = new RandomPageReplacementPolicy(1);
    final MemoryIndexDataStorage<Sized<Integer>, Sized<String>> storage = new MemoryIndexDataStorage<>();
    final BlockRangeIndex<Sized<Integer>, Sized<String>> index = new BlockRangeIndex<>(400, policy, storage);
    /* Add values until block split */
    int elements;
    for (elements = 0; index.getNumBlocks() < 2; elements++) {
        /* All entries have the same key to create contiguous blocks with same keys */
        index.put(Sized.valueOf(1), Sized.valueOf("test_" + elements));
    }
    /* NumBlocks must be greater than 1 (split done) */
    Assert.assertTrue(index.getNumBlocks() > 1);
    /* Check every value existance */
    {
        List<Sized<String>> result = index.search(Sized.valueOf(1));
        Assert.assertEquals(elements, result.size());
    }
    /* Remove every last value until last block is empty */
    for (int i = elements - 1; i > -1; i--) {
        index.delete(Sized.valueOf(1), Sized.valueOf("test_" + i));
        /* Check if last block got emptied */
        if (index.getBlocks().lastEntry().getValue().getSize() == 0) {
            elements = i;
            break;
        }
    }
    /* Now checkpoint to remove empty block */
    BlockRangeIndexMetadata<Sized<Integer>> metadata = index.checkpoint();
    /* Deletes unreferenced pages from memory store */
    storage.getPages().retainAll(metadata.getBlocksMetadata().stream().map(m -> m.pageId).collect(Collectors.toList()));
    /* Delete remaining values (next should have been handled to avoid errors) */
    for (int i = 0; i < elements; i++) {
        index.delete(Sized.valueOf(1), Sized.valueOf("test_" + i));
    }
    /* Check every value non existance */
    {
        List<Sized<String>> result = index.search(Sized.valueOf(1));
        Assert.assertEquals(0, result.size());
    }
    index.clear();
}
Also used : Sized(herddb.utils.Sized) List(java.util.List) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) PageReplacementPolicy(herddb.core.PageReplacementPolicy) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) Test(org.junit.Test)

Example 23 with Sized

use of herddb.utils.Sized in project herddb by diennea.

the class BLinkTest method testScanMiddleNotExistent.

@Test
public void testScanMiddleNotExistent() throws Exception {
    BLinkIndexDataStorage<Sized<Long>, Long> storage = new DummyBLinkIndexDataStorage<>();
    try (BLink<Sized<Long>, Long> blink = new BLink<>(2048L, new LongSizeEvaluator(), new RandomPageReplacementPolicy(10), storage)) {
        final long headInserts = 100;
        final long nonExistents = 100;
        final long tailInserts = 100;
        for (long l = 0; l < headInserts; l++) {
            blink.insert(Sized.valueOf(l), l);
        }
        for (long l = headInserts + nonExistents; l < headInserts + nonExistents + tailInserts; l++) {
            blink.insert(Sized.valueOf(l), l);
        }
        BLinkMetadata<Sized<Long>> metadata = blink.checkpoint();
        /* Require at least two nodes! */
        assertNotEquals(1, metadata.nodes.size());
        long offset = 10;
        for (long l = headInserts; l < headInserts + nonExistents - offset; l++) {
            Stream<Entry<Sized<Long>, Long>> stream = blink.scan(Sized.valueOf(l), Sized.valueOf(l + offset));
            Holder<Long> h = new Holder<>(l);
            Holder<Long> count = new Holder<>(0L);
            StringBuilder builder = new StringBuilder();
            /* Check each value */
            stream.forEach(entry -> {
                assertEquals(h.value, entry.getValue());
                h.value++;
                count.value++;
                builder.append(entry.getValue()).append(", ");
            });
            assertEquals(0, (long) count.value);
        }
    }
}
Also used : Sized(herddb.utils.Sized) Holder(herddb.utils.Holder) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) Entry(java.util.Map.Entry) AtomicLong(java.util.concurrent.atomic.AtomicLong) Test(org.junit.Test)

Example 24 with Sized

use of herddb.utils.Sized in project herddb by diennea.

the class BLinkTest method testUnload.

@Test
public void testUnload() throws Exception {
    final int pages = 5;
    final int inserts = 100;
    BLinkIndexDataStorage<Sized<Long>, Long> storage = new DummyBLinkIndexDataStorage<>();
    PageReplacementPolicy policy = new RandomPageReplacementPolicy(pages);
    try (BLink<Sized<Long>, Long> blink = new BLink<>(2048L, new LongSizeEvaluator(), policy, storage)) {
        for (long l = 0; l < inserts; l++) {
            blink.insert(Sized.valueOf(l), l);
        }
        /* Must fill the polocy */
        assertEquals(pages, policy.size());
        assertEquals(inserts, blink.size());
        blink.close();
        /* No pages should remain in memory after unload!! */
        assertEquals(0, policy.size());
        assertEquals(0, blink.size());
    }
}
Also used : Sized(herddb.utils.Sized) AtomicLong(java.util.concurrent.atomic.AtomicLong) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) PageReplacementPolicy(herddb.core.PageReplacementPolicy) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) Test(org.junit.Test)

Example 25 with Sized

use of herddb.utils.Sized in project herddb by diennea.

the class BLinkTest method testDataSet.

private void testDataSet(List<Long> data, int maxSize) throws Exception {
    System.out.println("testDataSet " + data.size() + " maxSize:" + maxSize + ": " + data);
    BLinkIndexDataStorage<Sized<Long>, Long> storage = new DummyBLinkIndexDataStorage<>();
    BLinkMetadata<Sized<Long>> metadata;
    try (BLink<Sized<Long>, Long> blink = new BLink<>(maxSize, new LongSizeEvaluator(), new RandomPageReplacementPolicy(10), storage)) {
        for (long l : data) {
            blink.insert(Sized.valueOf(l), l);
        }
        for (long l : data) {
            assertEquals(l, (long) blink.search(Sized.valueOf(l)));
        }
        metadata = blink.checkpoint();
        System.out.println("metadata:" + metadata);
        metadata.nodes.forEach(n -> {
            System.out.println("node:" + n + " rightsep:" + n.rightsep);
        });
    }
    // reboot
    try (BLink<Sized<Long>, Long> blink = new BLink<>(maxSize, new LongSizeEvaluator(), new RandomPageReplacementPolicy(10), storage, metadata)) {
        for (long l : data) {
            assertEquals(l, (long) blink.search(Sized.valueOf(l)));
        }
    }
}
Also used : Sized(herddb.utils.Sized) AtomicLong(java.util.concurrent.atomic.AtomicLong) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy)

Aggregations

Sized (herddb.utils.Sized)28 RandomPageReplacementPolicy (herddb.core.RandomPageReplacementPolicy)26 Test (org.junit.Test)26 AtomicLong (java.util.concurrent.atomic.AtomicLong)12 Holder (herddb.utils.Holder)5 Entry (java.util.Map.Entry)5 PageReplacementPolicy (herddb.core.PageReplacementPolicy)4 ExecutorService (java.util.concurrent.ExecutorService)4 List (java.util.List)3 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)3 CountDownLatch (java.util.concurrent.CountDownLatch)3 Map (java.util.Map)2 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)2 ClockProPolicy (herddb.core.ClockProPolicy)1 Block (herddb.index.brin.BlockRangeIndex.Block)1 RandomString (herddb.utils.RandomString)1 ArrayList (java.util.ArrayList)1 Random (java.util.Random)1 Future (java.util.concurrent.Future)1