Search in sources :

Example 61 with Page

use of org.h2.mvstore.Page in project h2database by h2database.

the class Page method read.

/**
 * Read the page from the buffer.
 *
 * @param buff the buffer
 * @param chunkId the chunk id
 * @param offset the offset within the chunk
 * @param maxLength the maximum length
 */
void read(ByteBuffer buff, int chunkId, int offset, int maxLength) {
    int start = buff.position();
    int pageLength = buff.getInt();
    if (pageLength > maxLength || pageLength < 4) {
        throw DataUtils.newIllegalStateException(DataUtils.ERROR_FILE_CORRUPT, "File corrupted in chunk {0}, expected page length 4..{1}, got {2}", chunkId, maxLength, pageLength);
    }
    buff.limit(start + pageLength);
    short check = buff.getShort();
    int mapId = DataUtils.readVarInt(buff);
    if (mapId != map.getId()) {
        throw DataUtils.newIllegalStateException(DataUtils.ERROR_FILE_CORRUPT, "File corrupted in chunk {0}, expected map id {1}, got {2}", chunkId, map.getId(), mapId);
    }
    int checkTest = DataUtils.getCheckValue(chunkId) ^ DataUtils.getCheckValue(offset) ^ DataUtils.getCheckValue(pageLength);
    if (check != (short) checkTest) {
        throw DataUtils.newIllegalStateException(DataUtils.ERROR_FILE_CORRUPT, "File corrupted in chunk {0}, expected check value {1}, got {2}", chunkId, checkTest, check);
    }
    int len = DataUtils.readVarInt(buff);
    keys = new Object[len];
    int type = buff.get();
    boolean node = (type & 1) == DataUtils.PAGE_TYPE_NODE;
    if (node) {
        children = new PageReference[len + 1];
        long[] p = new long[len + 1];
        for (int i = 0; i <= len; i++) {
            p[i] = buff.getLong();
        }
        long total = 0;
        for (int i = 0; i <= len; i++) {
            long s = DataUtils.readVarLong(buff);
            total += s;
            children[i] = new PageReference(null, p[i], s);
        }
        totalCount = total;
    }
    boolean compressed = (type & DataUtils.PAGE_COMPRESSED) != 0;
    if (compressed) {
        Compressor compressor;
        if ((type & DataUtils.PAGE_COMPRESSED_HIGH) == DataUtils.PAGE_COMPRESSED_HIGH) {
            compressor = map.getStore().getCompressorHigh();
        } else {
            compressor = map.getStore().getCompressorFast();
        }
        int lenAdd = DataUtils.readVarInt(buff);
        int compLen = pageLength + start - buff.position();
        byte[] comp = Utils.newBytes(compLen);
        buff.get(comp);
        int l = compLen + lenAdd;
        buff = ByteBuffer.allocate(l);
        compressor.expand(comp, 0, compLen, buff.array(), buff.arrayOffset(), l);
    }
    map.getKeyType().read(buff, keys, len, true);
    if (!node) {
        values = new Object[len];
        map.getValueType().read(buff, values, len, false);
        totalCount = len;
    }
    recalculateMemory();
}
Also used : Compressor(org.h2.compress.Compressor)

Example 62 with Page

use of org.h2.mvstore.Page in project h2database by h2database.

the class TestMVStore method testFastDelete.

private void testFastDelete() {
    String fileName = getBaseDir() + "/" + getTestName();
    FileUtils.delete(fileName);
    MVStore s;
    MVMap<Integer, String> m;
    s = openStore(fileName, 700);
    m = s.openMap("data");
    for (int i = 0; i < 1000; i++) {
        m.put(i, "Hello World");
        assertEquals(i + 1, m.size());
    }
    assertEquals(1000, m.size());
    // previously (131896) we fail to account for initial root page for every map
    // there are two of them here (meta and "data"), hence lack of 256 bytes
    assertEquals(132152, s.getUnsavedMemory());
    s.commit();
    assertEquals(2, s.getFileStore().getWriteCount());
    s.close();
    s = openStore(fileName);
    m = s.openMap("data");
    m.clear();
    assertEquals(0, m.size());
    s.commit();
    // ensure only nodes are read, but not leaves
    assertEquals(45, s.getFileStore().getReadCount());
    assertTrue(s.getFileStore().getWriteCount() < 5);
    s.close();
}
Also used : MVStore(org.h2.mvstore.MVStore) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 63 with Page

use of org.h2.mvstore.Page in project h2database by h2database.

the class TestMVStoreStopCompact method testStopCompact.

private void testStopCompact(int retentionTime, int timeout) throws InterruptedException {
    String fileName = getBaseDir() + "/testStopCompact.h3";
    FileUtils.createDirectories(getBaseDir());
    FileUtils.delete(fileName);
    // store with a very small page size, to make sure
    // there are many leaf pages
    MVStore s = new MVStore.Builder().fileName(fileName).open();
    s.setRetentionTime(retentionTime);
    MVMap<Integer, String> map = s.openMap("data");
    long start = System.currentTimeMillis();
    Random r = new Random(1);
    for (int i = 0; i < 4000000; i++) {
        long time = System.currentTimeMillis() - start;
        if (time > timeout) {
            break;
        }
        int x = r.nextInt(10000000);
        map.put(x, "Hello World " + i * 10);
    }
    s.setAutoCommitDelay(100);
    long oldWriteCount = s.getFileStore().getWriteCount();
    // expect background write to stop after 5 seconds
    Thread.sleep(5000);
    long newWriteCount = s.getFileStore().getWriteCount();
    // expect that compaction didn't cause many writes
    assertTrue(newWriteCount - oldWriteCount < 30);
    s.close();
}
Also used : MVStore(org.h2.mvstore.MVStore) Random(java.util.Random)

Example 64 with Page

use of org.h2.mvstore.Page in project ignite by apache.

the class InlineIndexColumnTest method testJavaObjectInlineHash.

/**
 */
@Test
public void testJavaObjectInlineHash() throws Exception {
    DataRegionConfiguration plcCfg = new DataRegionConfiguration().setInitialSize(1024 * MB).setMaxSize(1024 * MB);
    PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(log), null, PAGE_SIZE, plcCfg, new DataRegionMetricsImpl(plcCfg, new GridTestKernalContext(log())), false);
    pageMem.start();
    long pageId = 0L;
    long page = 0L;
    try {
        pageId = pageMem.allocatePage(CACHE_ID, 1, PageIdAllocator.FLAG_DATA);
        page = pageMem.acquirePage(CACHE_ID, pageId);
        long pageAddr = pageMem.readLock(CACHE_ID, pageId, page);
        int off = 0;
        IndexKeyTypeSettings keyTypeSettings = new IndexKeyTypeSettings().stringOptimizedCompare(false);
        InlineIndexKeyType keyType = InlineIndexKeyTypeRegistry.get(Value.JAVA_OBJECT, keyTypeSettings);
        Value exp = wrap(new TestPojo(4, 3L), TestPojo.class);
        {
            int maxSize = 3;
            int savedBytesCnt = keyType.put(pageAddr, off, idxKey(exp), maxSize);
            Assert.assertEquals(0, savedBytesCnt);
        }
        {
            int maxSize = 7;
            int savedBytesCnt = keyType.put(pageAddr, off, idxKey(exp), maxSize);
            Assert.assertEquals(5, savedBytesCnt);
            Assert.assertEquals(exp.getObject().hashCode(), keyType.get(pageAddr, off, maxSize).key().hashCode());
            Assert.assertEquals(CANT_BE_COMPARE, keyType.compare(pageAddr, off, maxSize, idxKey(exp)));
        }
    } finally {
        if (page != 0L)
            pageMem.releasePage(CACHE_ID, pageId, page);
        pageMem.stop(true);
    }
}
Also used : DataRegionConfiguration(org.apache.ignite.configuration.DataRegionConfiguration) PageMemoryNoStoreImpl(org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl) StringInlineIndexKeyType(org.apache.ignite.internal.cache.query.index.sorted.inline.types.StringInlineIndexKeyType) InlineIndexKeyType(org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexKeyType) PageMemory(org.apache.ignite.internal.pagemem.PageMemory) GridTestKernalContext(org.apache.ignite.testframework.junits.GridTestKernalContext) Value(org.h2.value.Value) DataRegionMetricsImpl(org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl) UnsafeMemoryProvider(org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider) IndexKeyTypeSettings(org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings) AbstractIndexingCommonTest(org.apache.ignite.internal.processors.cache.index.AbstractIndexingCommonTest) Test(org.junit.Test)

Example 65 with Page

use of org.h2.mvstore.Page in project ignite by apache.

the class InlineIndexColumnTest method testJavaObjectInlineBytes.

/**
 */
@Test
public void testJavaObjectInlineBytes() throws Exception {
    DataRegionConfiguration plcCfg = new DataRegionConfiguration().setInitialSize(1024 * MB).setMaxSize(1024 * MB);
    DataRegionMetricsImpl dataRegionMetrics = new DataRegionMetricsImpl(plcCfg, new GridTestKernalContext(log()));
    PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(log), null, PAGE_SIZE, plcCfg, dataRegionMetrics, false);
    pageMem.start();
    long pageId = 0L;
    long page = 0L;
    try {
        pageId = pageMem.allocatePage(CACHE_ID, 1, PageIdAllocator.FLAG_DATA);
        page = pageMem.acquirePage(CACHE_ID, pageId);
        long pageAddr = pageMem.readLock(CACHE_ID, pageId, page);
        int off = 0;
        IndexKeyTypeSettings keyTypeSettings = new IndexKeyTypeSettings().inlineObjHash(false).stringOptimizedCompare(false);
        InlineIndexKeyType keyType = InlineIndexKeyTypeRegistry.get(Value.JAVA_OBJECT, keyTypeSettings);
        ValueJavaObject exp = ValueJavaObject.getNoCopy(new TestPojo(4, 3L), null, null);
        int maxSize = 3 + 3;
        int savedBytesCnt = keyType.put(pageAddr, off, idxKey(exp), maxSize);
        assertTrue(savedBytesCnt > 0);
        assertTrue(savedBytesCnt <= maxSize);
        maxSize = 3 + exp.getBytesNoCopy().length;
        assertTrue(Arrays.equals(Arrays.copyOf(exp.getBytesNoCopy(), 3), ((JavaObjectIndexKey) keyType.get(pageAddr, off, maxSize)).bytesNoCopy()));
        savedBytesCnt = keyType.put(pageAddr, off, idxKey(ValueJavaObject.getNoCopy(null, exp.getBytesNoCopy(), null)), maxSize);
        assertTrue(savedBytesCnt > 0);
        assertTrue(savedBytesCnt <= maxSize);
        assertTrue(Arrays.equals(exp.getBytesNoCopy(), ((JavaObjectIndexKey) keyType.get(pageAddr, off, maxSize)).bytesNoCopy()));
    } finally {
        if (page != 0L)
            pageMem.releasePage(CACHE_ID, pageId, page);
        pageMem.stop(true);
    }
}
Also used : PageMemoryNoStoreImpl(org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl) StringInlineIndexKeyType(org.apache.ignite.internal.cache.query.index.sorted.inline.types.StringInlineIndexKeyType) InlineIndexKeyType(org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexKeyType) GridTestKernalContext(org.apache.ignite.testframework.junits.GridTestKernalContext) PageMemory(org.apache.ignite.internal.pagemem.PageMemory) DataRegionMetricsImpl(org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl) JavaObjectIndexKey(org.apache.ignite.internal.cache.query.index.sorted.keys.JavaObjectIndexKey) DataRegionConfiguration(org.apache.ignite.configuration.DataRegionConfiguration) ValueJavaObject(org.h2.value.ValueJavaObject) UnsafeMemoryProvider(org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider) IndexKeyTypeSettings(org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings) AbstractIndexingCommonTest(org.apache.ignite.internal.processors.cache.index.AbstractIndexingCommonTest) Test(org.junit.Test)

Aggregations

CreateTableData (org.h2.command.ddl.CreateTableData)9 Value (org.h2.value.Value)8 Data (org.h2.store.Data)7 Column (org.h2.table.Column)6 Page (org.h2.mvstore.Page)5 IndexColumn (org.h2.table.IndexColumn)5 ResultSet (java.sql.ResultSet)4 SQLException (java.sql.SQLException)4 QueryCancelledException (org.apache.ignite.cache.query.QueryCancelledException)4 DataRegionConfiguration (org.apache.ignite.configuration.DataRegionConfiguration)4 UnsafeMemoryProvider (org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider)4 PageMemory (org.apache.ignite.internal.pagemem.PageMemory)4 PageMemoryNoStoreImpl (org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl)4 DataRegionMetricsImpl (org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl)4 GridCacheSqlQuery (org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery)4 Row (org.h2.result.Row)4 Connection (java.sql.Connection)3 ArrayList (java.util.ArrayList)3 CRC32 (java.util.zip.CRC32)3 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)3