From d3b2283ff191e67dbe258b65375ed99c0f064ebf Mon Sep 17 00:00:00 2001 From: laa Date: Fri, 13 Mar 2015 17:39:25 +0200 Subject: [PATCH] Issue #2874, cluster page tests are partially fixed. --- .../impl/local/paginated/ClusterPageTest.java | 187 +++++++++++------- 1 file changed, 114 insertions(+), 73 deletions(-) diff --git a/core/src/test/java/com/orientechnologies/orient/core/storage/impl/local/paginated/ClusterPageTest.java b/core/src/test/java/com/orientechnologies/orient/core/storage/impl/local/paginated/ClusterPageTest.java index 30250b0bed9..79b43ccbbe7 100755 --- a/core/src/test/java/com/orientechnologies/orient/core/storage/impl/local/paginated/ClusterPageTest.java +++ b/core/src/test/java/com/orientechnologies/orient/core/storage/impl/local/paginated/ClusterPageTest.java @@ -30,76 +30,104 @@ public void testAddOneRecord() throws Exception { cachePointer.incrementReferrer(); OCacheEntry cacheEntry = new OCacheEntry(0, 0, cachePointer, false); - try { - OClusterPage localPage = new OClusterPage(cacheEntry, true, new OWALChangesTree()); - - int freeSpace = localPage.getFreeSpace(); - Assert.assertEquals(localPage.getRecordsCount(), 0); - ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); - recordVersion.increment(); + ODirectMemoryPointer directPagePointer = new ODirectMemoryPointer(new byte[OClusterPage.PAGE_SIZE + ODurablePage.PAGE_PADDING]); + OCachePointer directCachePointer = new OCachePointer(directPagePointer, new OLogSequenceNumber(0, 0)); + directCachePointer.incrementReferrer(); - int position = localPage.appendRecord(recordVersion, new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }, false); - Assert.assertEquals(localPage.getRecordsCount(), 1); - Assert.assertEquals(localPage.getRecordSize(0), 11); - Assert.assertEquals(position, 0); - Assert.assertEquals(localPage.getFreeSpace(), freeSpace - (27 + OVersionFactory.instance().getVersionSize())); - Assert.assertFalse(localPage.isDeleted(0)); - Assert.assertEquals(localPage.getRecordVersion(0), recordVersion); + OCacheEntry directCacheEntry = new OCacheEntry(0, 0, directCachePointer, false); + try { + OClusterPage localPage = new OClusterPage(cacheEntry, true, new OWALChangesTree()); + OClusterPage directLocalPage = new OClusterPage(directCacheEntry, true, null); - Assert.assertEquals(localPage.getRecordBinaryValue(0, 0, 11), new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }); + addOneRecord(localPage); + addOneRecord(directLocalPage); - assertChangesTracking(localPage, pagePointer); + assertChangesTracking(localPage, directPagePointer); } finally { cachePointer.decrementReferrer(); + directCachePointer.decrementReferrer(); } } - public void testAddTreeRecords() throws Exception { + private void addOneRecord(OClusterPage localPage) throws IOException { + int freeSpace = localPage.getFreeSpace(); + Assert.assertEquals(localPage.getRecordsCount(), 0); + + ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); + recordVersion.increment(); + + int position = localPage.appendRecord(recordVersion, new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }, false); + Assert.assertEquals(localPage.getRecordsCount(), 1); + Assert.assertEquals(localPage.getRecordSize(0), 11); + Assert.assertEquals(position, 0); + Assert.assertEquals(localPage.getFreeSpace(), freeSpace - (27 + OVersionFactory.instance().getVersionSize())); + Assert.assertFalse(localPage.isDeleted(0)); + Assert.assertEquals(localPage.getRecordVersion(0), recordVersion); + + Assert.assertEquals(localPage.getRecordBinaryValue(0, 0, 11), new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }); + } + + public void testAddThreeRecords() throws Exception { ODirectMemoryPointer pagePointer = new ODirectMemoryPointer(new byte[OClusterPage.PAGE_SIZE + ODurablePage.PAGE_PADDING]); OCachePointer cachePointer = new OCachePointer(pagePointer, new OLogSequenceNumber(0, 0)); cachePointer.incrementReferrer(); OCacheEntry cacheEntry = new OCacheEntry(0, 0, cachePointer, false); + + ODirectMemoryPointer directPagePointer = new ODirectMemoryPointer(new byte[OClusterPage.PAGE_SIZE + ODurablePage.PAGE_PADDING]); + OCachePointer directCachePointer = new OCachePointer(directPagePointer, new OLogSequenceNumber(0, 0)); + directCachePointer.incrementReferrer(); + + OCacheEntry directCacheEntry = new OCacheEntry(0, 0, directCachePointer, false); + try { OClusterPage localPage = new OClusterPage(cacheEntry, true, new OWALChangesTree()); - int freeSpace = localPage.getFreeSpace(); + OClusterPage directLocalPage = new OClusterPage(directCacheEntry, true, null); - Assert.assertEquals(localPage.getRecordsCount(), 0); + addThreeRecords(localPage); + addThreeRecords(directLocalPage); - ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); - recordVersion.increment(); + assertChangesTracking(localPage, directPagePointer); + } finally { + cachePointer.decrementReferrer(); + directCachePointer.decrementReferrer(); + } + } - int positionOne = localPage.appendRecord(recordVersion, new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }, false); - int positionTwo = localPage.appendRecord(recordVersion, new byte[] { 2, 2, 3, 4, 5, 6, 5, 4, 3, 2, 2 }, false); - int positionThree = localPage.appendRecord(recordVersion, new byte[] { 3, 2, 3, 4, 5, 6, 5, 4, 3, 2, 3 }, false); + private void addThreeRecords(OClusterPage localPage) throws IOException { + int freeSpace = localPage.getFreeSpace(); - Assert.assertEquals(localPage.getRecordsCount(), 3); - Assert.assertEquals(positionOne, 0); - Assert.assertEquals(positionTwo, 1); - Assert.assertEquals(positionThree, 2); + Assert.assertEquals(localPage.getRecordsCount(), 0); - Assert.assertEquals(localPage.getFreeSpace(), freeSpace - (3 * (27 + OVersionFactory.instance().getVersionSize()))); - Assert.assertFalse(localPage.isDeleted(0)); - Assert.assertFalse(localPage.isDeleted(1)); - Assert.assertFalse(localPage.isDeleted(2)); + ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); + recordVersion.increment(); - Assert.assertEquals(localPage.getRecordBinaryValue(0, 0, 11), new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }); - Assert.assertEquals(localPage.getRecordSize(0), 11); - Assert.assertEquals(localPage.getRecordVersion(0), recordVersion); + int positionOne = localPage.appendRecord(recordVersion, new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }, false); + int positionTwo = localPage.appendRecord(recordVersion, new byte[] { 2, 2, 3, 4, 5, 6, 5, 4, 3, 2, 2 }, false); + int positionThree = localPage.appendRecord(recordVersion, new byte[] { 3, 2, 3, 4, 5, 6, 5, 4, 3, 2, 3 }, false); - Assert.assertEquals(localPage.getRecordBinaryValue(1, 0, 11), new byte[] { 2, 2, 3, 4, 5, 6, 5, 4, 3, 2, 2 }); - Assert.assertEquals(localPage.getRecordSize(0), 11); - Assert.assertEquals(localPage.getRecordVersion(1), recordVersion); + Assert.assertEquals(localPage.getRecordsCount(), 3); + Assert.assertEquals(positionOne, 0); + Assert.assertEquals(positionTwo, 1); + Assert.assertEquals(positionThree, 2); - Assert.assertEquals(localPage.getRecordBinaryValue(2, 0, 11), new byte[] { 3, 2, 3, 4, 5, 6, 5, 4, 3, 2, 3 }); - Assert.assertEquals(localPage.getRecordSize(0), 11); - Assert.assertEquals(localPage.getRecordVersion(2), recordVersion); + Assert.assertEquals(localPage.getFreeSpace(), freeSpace - (3 * (27 + OVersionFactory.instance().getVersionSize()))); + Assert.assertFalse(localPage.isDeleted(0)); + Assert.assertFalse(localPage.isDeleted(1)); + Assert.assertFalse(localPage.isDeleted(2)); - assertChangesTracking(localPage, pagePointer); - } finally { - cachePointer.decrementReferrer(); - } + Assert.assertEquals(localPage.getRecordBinaryValue(0, 0, 11), new byte[] { 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1 }); + Assert.assertEquals(localPage.getRecordSize(0), 11); + Assert.assertEquals(localPage.getRecordVersion(0), recordVersion); + + Assert.assertEquals(localPage.getRecordBinaryValue(1, 0, 11), new byte[] { 2, 2, 3, 4, 5, 6, 5, 4, 3, 2, 2 }); + Assert.assertEquals(localPage.getRecordSize(0), 11); + Assert.assertEquals(localPage.getRecordVersion(1), recordVersion); + + Assert.assertEquals(localPage.getRecordBinaryValue(2, 0, 11), new byte[] { 3, 2, 3, 4, 5, 6, 5, 4, 3, 2, 3 }); + Assert.assertEquals(localPage.getRecordSize(0), 11); + Assert.assertEquals(localPage.getRecordVersion(2), recordVersion); } public void testAddFullPage() throws Exception { @@ -108,41 +136,54 @@ public void testAddFullPage() throws Exception { cachePointer.incrementReferrer(); OCacheEntry cacheEntry = new OCacheEntry(0, 0, cachePointer, false); - try { - OClusterPage localPage = new OClusterPage(cacheEntry, true, new OWALChangesTree()); - ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); - recordVersion.increment(); + ODirectMemoryPointer directPagePointer = new ODirectMemoryPointer(new byte[OClusterPage.PAGE_SIZE + ODurablePage.PAGE_PADDING]); + OCachePointer directCachePointer = new OCachePointer(directPagePointer, new OLogSequenceNumber(0, 0)); + directCachePointer.incrementReferrer(); - List positions = new ArrayList(); - int lastPosition; - byte counter = 0; - int freeSpace = localPage.getFreeSpace(); - do { - lastPosition = localPage.appendRecord(recordVersion, new byte[] { counter, counter, counter }, false); - if (lastPosition >= 0) { - Assert.assertEquals(lastPosition, positions.size()); - positions.add(lastPosition); - counter++; + OCacheEntry directCacheEntry = new OCacheEntry(0, 0, directCachePointer, false); - Assert.assertEquals(localPage.getFreeSpace(), freeSpace - (19 + OVersionFactory.instance().getVersionSize())); - freeSpace = localPage.getFreeSpace(); - } - } while (lastPosition >= 0); + try { + OClusterPage localPage = new OClusterPage(cacheEntry, true, new OWALChangesTree()); + OClusterPage directLocalPage = new OClusterPage(directCacheEntry, true, new OWALChangesTree()); - Assert.assertEquals(localPage.getRecordsCount(), positions.size()); + addFullPage(localPage); + addFullPage(directLocalPage); - counter = 0; - for (int position : positions) { - Assert.assertEquals(localPage.getRecordBinaryValue(position, 0, 3), new byte[] { counter, counter, counter }); - Assert.assertEquals(localPage.getRecordSize(position), 3); - Assert.assertEquals(localPage.getRecordVersion(position), recordVersion); + assertChangesTracking(localPage, directPagePointer); + } finally { + cachePointer.decrementReferrer(); + } + } + + private void addFullPage(OClusterPage localPage) throws IOException { + ORecordVersion recordVersion = OVersionFactory.instance().createVersion(); + recordVersion.increment(); + + List positions = new ArrayList(); + int lastPosition; + byte counter = 0; + int freeSpace = localPage.getFreeSpace(); + do { + lastPosition = localPage.appendRecord(recordVersion, new byte[] { counter, counter, counter }, false); + if (lastPosition >= 0) { + Assert.assertEquals(lastPosition, positions.size()); + positions.add(lastPosition); counter++; + + Assert.assertEquals(localPage.getFreeSpace(), freeSpace - (19 + OVersionFactory.instance().getVersionSize())); + freeSpace = localPage.getFreeSpace(); } + } while (lastPosition >= 0); - assertChangesTracking(localPage, pagePointer); - } finally { - cachePointer.decrementReferrer(); + Assert.assertEquals(localPage.getRecordsCount(), positions.size()); + + counter = 0; + for (int position : positions) { + Assert.assertEquals(localPage.getRecordBinaryValue(position, 0, 3), new byte[] { counter, counter, counter }); + Assert.assertEquals(localPage.getRecordSize(position), 3); + Assert.assertEquals(localPage.getRecordVersion(position), recordVersion); + counter++; } } @@ -939,7 +980,7 @@ private void assertChangesTracking(OClusterPage localPage, ODirectMemoryPointer OCacheEntry cacheEntry = new OCacheEntry(0, 0, cachePointer, false); try { - OClusterPage restoredPage = new OClusterPage(cacheEntry, false, new OWALChangesTree()); + OClusterPage restoredPage = new OClusterPage(cacheEntry, false, null); OWALChangesTree changesTree = localPage.getChangesTree(); restoredPage.restoreChanges(changesTree);