public void testRemoveHalfRecords() throws IOException { final int records = 10000; long seed = System.currentTimeMillis(); MersenneTwisterFast mersenneTwisterFast = new MersenneTwisterFast(seed); System.out.println("testRemoveHalfRecords seed : " + seed); Map<OClusterPosition, byte[]> positionRecordMap = new HashMap<OClusterPosition, byte[]>(); ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); recordVersion.increment(); recordVersion.increment(); for (int i = 0; i < records; i++) { int recordSize = mersenneTwisterFast.nextInt(3 * OClusterPage.MAX_RECORD_SIZE) + 1; byte[] bigRecord = new byte[recordSize]; mersenneTwisterFast.nextBytes(bigRecord); final OPhysicalPosition physicalPosition = paginatedCluster.createRecord(bigRecord, recordVersion, (byte) 2); positionRecordMap.put(physicalPosition.clusterPosition, bigRecord); } int deletedRecords = 0; Assert.assertEquals(records, paginatedCluster.getEntries()); Set<OClusterPosition> deletedPositions = new HashSet<OClusterPosition>(); Iterator<OClusterPosition> positionIterator = positionRecordMap.keySet().iterator(); while (positionIterator.hasNext()) { OClusterPosition clusterPosition = positionIterator.next(); if (mersenneTwisterFast.nextBoolean()) { deletedPositions.add(clusterPosition); Assert.assertTrue(paginatedCluster.deleteRecord(clusterPosition)); deletedRecords++; Assert.assertEquals(records - deletedRecords, paginatedCluster.getEntries()); positionIterator.remove(); } } Assert.assertEquals(paginatedCluster.getEntries(), records - deletedRecords); for (OClusterPosition deletedPosition : deletedPositions) { Assert.assertNull(paginatedCluster.readRecord(deletedPosition)); Assert.assertFalse(paginatedCluster.deleteRecord(deletedPosition)); } for (Map.Entry<OClusterPosition, byte[]> entry : positionRecordMap.entrySet()) { ORawBuffer rawBuffer = paginatedCluster.readRecord(entry.getKey()); Assert.assertNotNull(rawBuffer); Assert.assertEquals(rawBuffer.version, recordVersion); Assert.assertEquals(rawBuffer.buffer, entry.getValue()); Assert.assertEquals(rawBuffer.recordType, 2); } }
public void testRemoveHalfRecordsAndAddAnotherHalfAgain() throws IOException { final int records = 10000; long seed = System.currentTimeMillis(); MersenneTwisterFast mersenneTwisterFast = new MersenneTwisterFast(seed); System.out.println("testRemoveHalfRecordsAndAddAnotherHalfAgain seed : " + seed); Map<OClusterPosition, byte[]> positionRecordMap = new HashMap<OClusterPosition, byte[]>(); ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); recordVersion.increment(); recordVersion.increment(); for (int i = 0; i < records; i++) { int recordSize = mersenneTwisterFast.nextInt(3 * OClusterPage.MAX_RECORD_SIZE) + 1; byte[] bigRecord = new byte[recordSize]; mersenneTwisterFast.nextBytes(bigRecord); final OPhysicalPosition physicalPosition = paginatedCluster.createRecord(bigRecord, recordVersion, (byte) 2); positionRecordMap.put(physicalPosition.clusterPosition, bigRecord); } int deletedRecords = 0; Assert.assertEquals(records, paginatedCluster.getEntries()); Iterator<OClusterPosition> positionIterator = positionRecordMap.keySet().iterator(); while (positionIterator.hasNext()) { OClusterPosition clusterPosition = positionIterator.next(); if (mersenneTwisterFast.nextBoolean()) { Assert.assertTrue(paginatedCluster.deleteRecord(clusterPosition)); deletedRecords++; Assert.assertEquals(paginatedCluster.getEntries(), records - deletedRecords); positionIterator.remove(); } } Assert.assertEquals(paginatedCluster.getEntries(), records - deletedRecords); for (int i = 0; i < records / 2; i++) { int recordSize = mersenneTwisterFast.nextInt(3 * OClusterPage.MAX_RECORD_SIZE) + 1; byte[] bigRecord = new byte[recordSize]; mersenneTwisterFast.nextBytes(bigRecord); final OPhysicalPosition physicalPosition = paginatedCluster.createRecord(bigRecord, recordVersion, (byte) 2); positionRecordMap.put(physicalPosition.clusterPosition, bigRecord); } Assert.assertEquals(paginatedCluster.getEntries(), (long) (1.5 * records - deletedRecords)); }
public void testBackwardIteration() throws IOException { final int records = 10000; long seed = System.currentTimeMillis(); MersenneTwisterFast mersenneTwisterFast = new MersenneTwisterFast(1381162033616L); System.out.println("testBackwardIteration seed : " + seed); NavigableMap<OClusterPosition, byte[]> positionRecordMap = new TreeMap<OClusterPosition, byte[]>(); ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); recordVersion.increment(); recordVersion.increment(); for (int i = 0; i < records; i++) { int recordSize = mersenneTwisterFast.nextInt(2 * OClusterPage.MAX_RECORD_SIZE) + 1; byte[] record = new byte[recordSize]; mersenneTwisterFast.nextBytes(record); final OPhysicalPosition physicalPosition = paginatedCluster.createRecord(record, recordVersion, (byte) 2); positionRecordMap.put(physicalPosition.clusterPosition, record); } Iterator<OClusterPosition> positionIterator = positionRecordMap.keySet().iterator(); while (positionIterator.hasNext()) { OClusterPosition clusterPosition = positionIterator.next(); if (mersenneTwisterFast.nextBoolean()) { Assert.assertTrue(paginatedCluster.deleteRecord(clusterPosition)); positionIterator.remove(); } } OPhysicalPosition physicalPosition = new OPhysicalPosition(); physicalPosition.clusterPosition = OClusterPositionFactory.INSTANCE.valueOf(Long.MAX_VALUE); OPhysicalPosition[] positions = paginatedCluster.floorPositions(physicalPosition); Assert.assertTrue(positions.length > 0); positionIterator = positionRecordMap.descendingKeySet().iterator(); int counter = 0; while (positionIterator.hasNext()) { Assert.assertTrue(positions.length > 0); OClusterPosition testedPosition = positionIterator.next(); Assert.assertEquals(positions[positions.length - 1].clusterPosition, testedPosition); OPhysicalPosition positionToFind = positions[positions.length - 1]; positions = paginatedCluster.lowerPositions(positionToFind); counter++; } Assert.assertEquals(paginatedCluster.getEntries(), counter); Assert.assertEquals(paginatedCluster.getFirstPosition(), positionRecordMap.firstKey()); Assert.assertEquals(paginatedCluster.getLastPosition(), positionRecordMap.lastKey()); }