use of org.apache.ignite.internal.pagemem.PageMemory in project ignite by apache.
the class IgniteCacheDatabaseSharedManager method initMemory.
/**
* @param memCfg memory configuration with common parameters.
* @param plcCfg memory policy with PageMemory specific parameters.
* @param memMetrics {@link MemoryMetrics} object to collect memory usage metrics.
* @return Memory policy instance.
*/
private MemoryPolicy initMemory(MemoryConfiguration memCfg, MemoryPolicyConfiguration plcCfg, MemoryMetricsImpl memMetrics) {
File allocPath = buildAllocPath(plcCfg);
DirectMemoryProvider memProvider = allocPath == null ? new UnsafeMemoryProvider(log) : new MappedFileMemoryProvider(log, allocPath);
PageMemory pageMem = createPageMemory(memProvider, memCfg, plcCfg, memMetrics);
return new MemoryPolicy(pageMem, plcCfg, memMetrics, createPageEvictionTracker(plcCfg, pageMem));
}
use of org.apache.ignite.internal.pagemem.PageMemory in project ignite by apache.
the class InlineIndexHelperTest method testStringTruncate.
/** */
public void testStringTruncate() throws Exception {
MemoryPolicyConfiguration plcCfg = new MemoryPolicyConfiguration().setMaxSize(1024 * MB);
JavaLogger log = new JavaLogger();
PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(log), null, PAGE_SIZE, plcCfg, new MemoryMetricsImpl(plcCfg), 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;
InlineIndexHelper ih = new InlineIndexHelper(Value.STRING, 1, 0);
ih.put(pageAddr, off, ValueString.get("aaaaaaa"), 3 + 5);
assertFalse(ih.isValueFull(pageAddr, off));
assertEquals("aaaaa", ih.get(pageAddr, off, 3 + 5).getString());
ih.put(pageAddr, off, ValueString.get("aaa"), 3 + 5);
assertTrue(ih.isValueFull(pageAddr, off));
assertEquals("aaa", ih.get(pageAddr, off, 3 + 5).getString());
} finally {
if (page != 0L)
pageMem.releasePage(CACHE_ID, pageId, page);
pageMem.stop();
}
}
use of org.apache.ignite.internal.pagemem.PageMemory in project ignite by apache.
the class InlineIndexHelperTest method testPutGet.
/** */
private void testPutGet(Value v1, Value v2, Value v3) throws Exception {
MemoryPolicyConfiguration plcCfg = new MemoryPolicyConfiguration().setMaxSize(1024 * MB);
JavaLogger log = new JavaLogger();
PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(log), null, PAGE_SIZE, plcCfg, new MemoryMetricsImpl(plcCfg), 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;
int max = 255;
InlineIndexHelper ih = new InlineIndexHelper(v1.getType(), 1, 0);
off += ih.put(pageAddr, off, v1, max - off);
off += ih.put(pageAddr, off, v2, max - off);
off += ih.put(pageAddr, off, v3, max - off);
Value v11 = ih.get(pageAddr, 0, max);
Value v22 = ih.get(pageAddr, ih.fullSize(pageAddr, 0), max);
assertEquals(v1.getObject(), v11.getObject());
assertEquals(v2.getObject(), v22.getObject());
} finally {
if (page != 0L)
pageMem.releasePage(CACHE_ID, pageId, page);
pageMem.stop();
}
}
use of org.apache.ignite.internal.pagemem.PageMemory in project ignite by apache.
the class InlineIndexHelperTest method testBytes.
/** */
public void testBytes() throws Exception {
MemoryPolicyConfiguration plcCfg = new MemoryPolicyConfiguration().setMaxSize(1024 * MB);
JavaLogger log = new JavaLogger();
PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(log), null, PAGE_SIZE, plcCfg, new MemoryMetricsImpl(plcCfg), 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;
InlineIndexHelper ih = new InlineIndexHelper(Value.BYTES, 1, 0);
ih.put(pageAddr, off, ValueBytes.get(new byte[] { 1, 2, 3, 4, 5 }), 3 + 3);
assertFalse(ih.isValueFull(pageAddr, off));
assertTrue(Arrays.equals(new byte[] { 1, 2, 3 }, ih.get(pageAddr, off, 3 + 5).getBytes()));
ih.put(pageAddr, off, ValueBytes.get(new byte[] { 1, 2, 3, 4, 5 }), 3 + 5);
assertTrue(ih.isValueFull(pageAddr, off));
assertTrue(Arrays.equals(new byte[] { 1, 2, 3, 4, 5 }, ih.get(pageAddr, off, 3 + 5).getBytes()));
} finally {
if (page != 0L)
pageMem.releasePage(CACHE_ID, pageId, page);
pageMem.stop();
}
}
use of org.apache.ignite.internal.pagemem.PageMemory in project ignite by apache.
the class PageMemoryNoLoadSelfTest method testPageIdRotation.
/**
* @throws Exception If failed.
*/
public void testPageIdRotation() throws Exception {
PageMemory mem = memory();
mem.start();
try {
int pages = 5;
Collection<FullPageId> old = new ArrayList<>();
Collection<FullPageId> updated = new ArrayList<>();
for (int i = 0; i < pages; i++) old.add(allocatePage(mem));
// Check that initial pages are accessible.
for (FullPageId id : old) {
long pageApsPtr = mem.acquirePage(id.cacheId(), id.pageId());
try {
long pageAddr = mem.writeLock(id.cacheId(), id.pageId(), pageApsPtr);
assertNotNull(pageAddr);
try {
long updId = PageIdUtils.rotatePageId(id.pageId());
PageIO.setPageId(pageAddr, updId);
updated.add(new FullPageId(updId, id.cacheId()));
} finally {
mem.writeUnlock(id.cacheId(), id.pageId(), pageApsPtr, null, true);
}
} finally {
mem.releasePage(id.cacheId(), id.pageId(), pageApsPtr);
}
}
// Check that updated pages are inaccessible using old IDs.
for (FullPageId id : old) {
long pageApsPtr = mem.acquirePage(id.cacheId(), id.pageId());
try {
long pageAddr = mem.writeLock(id.cacheId(), id.pageId(), pageApsPtr);
if (pageAddr != 0L) {
mem.writeUnlock(id.cacheId(), id.pageId(), pageApsPtr, null, false);
fail("Was able to acquire page write lock.");
}
mem.readLock(id.cacheId(), id.pageId(), pageApsPtr);
if (pageAddr != 0) {
mem.readUnlock(id.cacheId(), id.pageId(), pageApsPtr);
fail("Was able to acquire page read lock.");
}
} finally {
mem.releasePage(id.cacheId(), id.pageId(), pageApsPtr);
}
}
// Check that updated pages are accessible using new IDs.
for (FullPageId id : updated) {
long pageApsPtr = mem.acquirePage(id.cacheId(), id.pageId());
try {
long pageAddr = mem.writeLock(id.cacheId(), id.pageId(), pageApsPtr);
assertNotSame(0L, pageAddr);
try {
assertEquals(id.pageId(), PageIO.getPageId(pageAddr));
} finally {
mem.writeUnlock(id.cacheId(), id.pageId(), pageApsPtr, null, false);
}
pageAddr = mem.readLock(id.cacheId(), id.pageId(), pageApsPtr);
assertNotSame(0L, pageAddr);
try {
assertEquals(id.pageId(), PageIO.getPageId(pageAddr));
} finally {
mem.readUnlock(id.cacheId(), id.pageId(), pageApsPtr);
}
} finally {
mem.releasePage(id.cacheId(), id.pageId(), pageApsPtr);
}
}
} finally {
mem.stop();
}
}
Aggregations