Search in sources :

Example 1 with BLinkNodeMetadata

use of herddb.index.blink.BLinkMetadata.BLinkNodeMetadata in project herddb by diennea.

the class BLinkTest method testUnknownSizeAndRestore.

@Test
public void testUnknownSizeAndRestore() throws Exception {
    String[] data = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
    StringSizeEvaluator evaluator = new StringSizeEvaluator();
    for (String d : data) {
        assertTrue(Sized.valueOf(d).compareTo(evaluator.getPosiviveInfinityKey()) < 0);
    }
    BLinkIndexDataStorage<Sized<String>, Long> storage = new DummyBLinkIndexDataStorage<>();
    BLinkMetadata<Sized<String>> metadata;
    try (BLink<Sized<String>, Long> blink = new BLink<>(2048L, new StringSizeEvaluator(), new RandomPageReplacementPolicy(3), storage)) {
        for (int i = 0; i < data.length; ++i) {
            blink.insert(Sized.valueOf(data[i]), i + 1L);
        }
        assertEquals(data.length, blink.size());
        metadata = blink.checkpoint();
    }
    /* Reset each node size to unknown */
    List<BLinkNodeMetadata<Sized<String>>> unknownSizeNodes = new ArrayList<>(metadata.nodes.size());
    for (BLinkNodeMetadata<Sized<String>> node : metadata.nodes) {
        unknownSizeNodes.add(new BLinkNodeMetadata<>(node.leaf, node.id, node.storeId, node.keys, BLink.UNKNOWN_SIZE, node.outlink, node.rightlink, node.rightsep));
    }
    BLinkMetadata<Sized<String>> unknownSizeMetadata = new BLinkMetadata<>(metadata.nextID, metadata.fast, metadata.fastheight, metadata.top, metadata.topheight, metadata.first, metadata.values, unknownSizeNodes);
    /* Checks that node size has been changed for each node */
    for (int i = 0; i < metadata.nodes.size(); ++i) {
        BLinkNodeMetadata<Sized<String>> node = metadata.nodes.get(i);
        BLinkNodeMetadata<Sized<String>> unknownSizeNode = unknownSizeMetadata.nodes.get(i);
        assertNotNull(unknownSizeNode);
        assertNotEquals(node.bytes, unknownSizeNode.bytes);
    }
    BLinkMetadata<Sized<String>> rebuildMetadata;
    try (BLink<Sized<String>, Long> blinkFromMeta = new BLink<>(2048L, new StringSizeEvaluator(), new RandomPageReplacementPolicy(3), storage, unknownSizeMetadata)) {
        /* Require at least two nodes! */
        assertNotEquals(1, metadata.nodes.size());
        for (int i = 0; i < data.length; ++i) {
            assertEquals(i + 1L, (long) blinkFromMeta.search(Sized.valueOf(data[i])));
        }
        assertEquals(data.length, blinkFromMeta.size());
        rebuildMetadata = blinkFromMeta.checkpoint();
    }
    /* Checks that node size has been restored for each node */
    for (int i = 0; i < metadata.nodes.size(); ++i) {
        BLinkNodeMetadata<Sized<String>> node = metadata.nodes.get(i);
        BLinkNodeMetadata<Sized<String>> rebuildNode = rebuildMetadata.nodes.get(i);
        assertNotNull(rebuildNode);
        assertEquals(node.bytes, rebuildNode.bytes);
    }
}
Also used : Sized(herddb.utils.Sized) BLinkNodeMetadata(herddb.index.blink.BLinkMetadata.BLinkNodeMetadata) ArrayList(java.util.ArrayList) RandomPageReplacementPolicy(herddb.core.RandomPageReplacementPolicy) AtomicLong(java.util.concurrent.atomic.AtomicLong) Test(org.junit.Test)

Aggregations

RandomPageReplacementPolicy (herddb.core.RandomPageReplacementPolicy)1 BLinkNodeMetadata (herddb.index.blink.BLinkMetadata.BLinkNodeMetadata)1 Sized (herddb.utils.Sized)1 ArrayList (java.util.ArrayList)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 Test (org.junit.Test)1