public void testRecordGrowFactor() throws Exception { paginatedCluster.set(OCluster.ATTRIBUTES.COMPRESSION, ONothingCompression.NAME); paginatedCluster.set(OCluster.ATTRIBUTES.RECORD_GROW_FACTOR, 1.5); byte[] record = new byte[100]; Random random = new Random(); random.nextBytes(record); OPhysicalPosition physicalPosition = paginatedCluster .createRecord(record, OVersionFactory.instance().createVersion(), (byte) 1); OCacheEntry cacheEntry = diskCache.load(1, 1, false); OCachePointer pagePointer = cacheEntry.getCachePointer(); OClusterPage page = new OClusterPage(pagePointer.getDataPointer(), false, ODurablePage.TrackMode.NONE); int recordIndex = (int) (physicalPosition.clusterPosition.longValue() & 0xFFFF); Assert.assertEquals(page.getRecordSize(recordIndex), ((int) (record.length * 1.5)) + RECORD_SYSTEM_INFORMATION); diskCache.release(cacheEntry); paginatedCluster.set(OCluster.ATTRIBUTES.RECORD_GROW_FACTOR, 2); physicalPosition = paginatedCluster.createRecord(record, OVersionFactory.instance().createVersion(), (byte) 1); recordIndex = (int) (physicalPosition.clusterPosition.longValue() & 0xFFFF); cacheEntry = diskCache.load(1, 1, false); pagePointer = cacheEntry.getCachePointer(); page = new OClusterPage(pagePointer.getDataPointer(), false, ODurablePage.TrackMode.NONE); Assert.assertEquals(page.getRecordSize(recordIndex), record.length * 2 + RECORD_SYSTEM_INFORMATION); diskCache.release(cacheEntry); }
public void testCompressionSnappy() throws Exception { paginatedCluster.set(OCluster.ATTRIBUTES.COMPRESSION, OSnappyCompression.NAME); paginatedCluster.set(OCluster.ATTRIBUTES.RECORD_GROW_FACTOR, 1); byte[] record = new byte[100]; Random random = new Random(); random.nextBytes(record); OPhysicalPosition physicalPosition = paginatedCluster .createRecord(record, OVersionFactory.instance().createVersion(), (byte) 1); record = OSnappyCompression.INSTANCE.compress(record); OCacheEntry cacheEntry = diskCache.load(1, 1, false); OCachePointer pagePointer = cacheEntry.getCachePointer(); int recordIndex = (int) (physicalPosition.clusterPosition.longValue() & 0xFFFF); OClusterPage page = new OClusterPage(pagePointer.getDataPointer(), false, ODurablePage.TrackMode.NONE); byte[] storedEntity = page.getRecordBinaryValue(recordIndex, 0, page.getRecordSize(recordIndex)); byte[] storedRecord = new byte[record.length]; System.arraycopy(storedEntity, OIntegerSerializer.INT_SIZE + OByteSerializer.BYTE_SIZE, storedRecord, 0, storedRecord.length); Assert.assertEquals(storedRecord, record); diskCache.release(cacheEntry); }
public void testRecordOverflowGrowFactor() throws Exception { paginatedCluster.set(OCluster.ATTRIBUTES.COMPRESSION, ONothingCompression.NAME); paginatedCluster.set(OCluster.ATTRIBUTES.RECORD_GROW_FACTOR, 1.5); paginatedCluster.set(OCluster.ATTRIBUTES.RECORD_OVERFLOW_GROW_FACTOR, 2.5); byte[] record = new byte[100]; Random random = new Random(); random.nextBytes(record); ORecordVersion version = OVersionFactory.instance().createVersion(); OPhysicalPosition physicalPosition = paginatedCluster.createRecord(record, version, (byte) 1); record = new byte[150]; random.nextBytes(record); paginatedCluster.updateRecord(physicalPosition.clusterPosition, record, version, (byte) 1); OCacheEntry cacheEntry = diskCache.load(1, 1, false); int recordIndex = (int) (physicalPosition.clusterPosition.longValue() & 0xFFFF); OCachePointer pagePointer = cacheEntry.getCachePointer(); OClusterPage page = new OClusterPage(pagePointer.getDataPointer(), false, ODurablePage.TrackMode.NONE); Assert.assertEquals(page.getRecordSize(recordIndex), record.length + RECORD_SYSTEM_INFORMATION); diskCache.release(cacheEntry); record = new byte[200]; random.nextBytes(record); paginatedCluster.updateRecord(physicalPosition.clusterPosition, record, version, (byte) 1); cacheEntry = diskCache.load(1, 1, false); pagePointer = cacheEntry.getCachePointer(); page = new OClusterPage(pagePointer.getDataPointer(), false, ODurablePage.TrackMode.NONE); int fullContentSize = 500 + OIntegerSerializer.INT_SIZE + OByteSerializer.BYTE_SIZE; // type + real size Assert.assertEquals(page.getRecordSize(recordIndex), 150 + RECORD_SYSTEM_INFORMATION); fullContentSize -= 150 + RECORD_SYSTEM_INFORMATION - OByteSerializer.BYTE_SIZE - OLongSerializer.LONG_SIZE; Assert.assertEquals(page.getRecordSize(recordIndex + 1), fullContentSize + (OByteSerializer.BYTE_SIZE + OLongSerializer.LONG_SIZE)); diskCache.release(cacheEntry); }
@Override public Void call() throws Exception { long pageIndex = Math.abs(new Random().nextInt() % PAGE_COUNT); int fileNumber = new Random().nextInt(FILE_COUNT); OCacheEntry cacheEntry = buffer.load(fileIds.get(fileNumber), pageIndex, false); OCachePointer pointer = cacheEntry.getCachePointer(); byte[] content = pointer.getDataPointer().get(systemOffset, 8); buffer.release(cacheEntry); Assert.assertTrue(content[0] == 1 || content[0] == 2); Assert.assertEquals( content, new byte[] {content[0], 2, 3, seed, 5, 6, (byte) fileNumber, (byte) (pageIndex & 0xFF)}); return null; }
private void writeToFile(int fileNumber, long pageIndex) throws IOException { OCacheEntry cacheEntry = buffer.load(fileIds.get(fileNumber), pageIndex, false); OCachePointer pointer = cacheEntry.getCachePointer(); pointer.acquireExclusiveLock(); cacheEntry.markDirty(); pointer .getDataPointer() .set( systemOffset, new byte[] { version.byteValue(), 2, 3, seed, 5, 6, (byte) fileNumber, (byte) (pageIndex & 0xFF) }, 0, 8); pointer.releaseExclusiveLock(); buffer.release(cacheEntry); }