Skip to content

Commit

Permalink
Issue #2874, cluster page tests are partially fixed.
Browse files Browse the repository at this point in the history
  • Loading branch information
laa committed Mar 13, 2015
1 parent 7130d6a commit d3b2283
Showing 1 changed file with 114 additions and 73 deletions.
Expand Up @@ -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 {
Expand All @@ -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<Integer> positions = new ArrayList<Integer>();
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<Integer> positions = new ArrayList<Integer>();
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++;
}
}

Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit d3b2283

Please sign in to comment.