[jboss-cvs] JBoss Messaging SVN: r4094 - in branches/trunk_tmp_aio: tests/src/org/jboss/messaging/core/journal/impl/test/unit and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Apr 21 19:55:18 EDT 2008
Author: clebert.suconic at jboss.com
Date: 2008-04-21 19:55:18 -0400 (Mon, 21 Apr 2008)
New Revision: 4094
Modified:
branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java
branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/FakeJournalImplTest.java
branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java
branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealAIOJournalImplTest.java
branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealNIOJournalImplTest.java
Log:
Fixes on test
Modified: branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java
===================================================================
--- branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java 2008-04-21 14:45:05 UTC (rev 4093)
+++ branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java 2008-04-21 23:55:18 UTC (rev 4094)
@@ -130,5 +130,18 @@
return file;
}
+ public String toString()
+ {
+ try
+ {
+ return "JournalFileImpl: " + file.getFileName();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ return "Error:" + e.toString();
+ }
+ }
+
}
Modified: branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
===================================================================
--- branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java 2008-04-21 14:45:05 UTC (rev 4093)
+++ branches/trunk_tmp_aio/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java 2008-04-21 23:55:18 UTC (rev 4094)
@@ -85,8 +85,12 @@
public static final byte ADD_RECORD = 11;
+ public static final byte SIZE_UPDATE_RECORD = SIZE_BYTE + SIZE_LONG + SIZE_INT + SIZE_BYTE;
+
public static final byte UPDATE_RECORD = 12;
+ public static final int SIZE_DELETE_RECORD = SIZE_BYTE + SIZE_LONG + SIZE_BYTE;
+
public static final byte DELETE_RECORD = 13;
public static final byte ADD_RECORD_TX = 14;
@@ -269,7 +273,7 @@
throw new IllegalStateException("Cannot find add info " + id);
}
- int size = SIZE_BYTE + SIZE_LONG + SIZE_INT + record.length + SIZE_BYTE;
+ int size = SIZE_UPDATE_RECORD + record.length;
ByteBuffer bb = currentFile.getFile().newBuffer(size);
@@ -301,7 +305,7 @@
posFiles.addDelete(currentFile);
- int size = SIZE_BYTE + SIZE_LONG + SIZE_BYTE;
+ int size = SIZE_DELETE_RECORD;
ByteBuffer bb = currentFile.getFile().newBuffer(size);
Modified: branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/FakeJournalImplTest.java
===================================================================
--- branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/FakeJournalImplTest.java 2008-04-21 14:45:05 UTC (rev 4093)
+++ branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/FakeJournalImplTest.java 2008-04-21 23:55:18 UTC (rev 4094)
@@ -37,4 +37,9 @@
{
return new FakeSequentialFileFactory();
}
+
+ protected int getAlignment()
+ {
+ return 0;
+ }
}
Modified: branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java
===================================================================
--- branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java 2008-04-21 14:45:05 UTC (rev 4093)
+++ branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java 2008-04-21 23:55:18 UTC (rev 4094)
@@ -23,6 +23,7 @@
import java.util.List;
+import org.apache.tools.ant.taskdefs.Length;
import org.jboss.messaging.core.journal.RecordInfo;
import org.jboss.messaging.core.journal.impl.JournalImpl;
import org.jboss.messaging.core.logging.Logger;
@@ -344,6 +345,67 @@
stopJournal();
}
+
+ private int calculateRecordsPerFile(int fileSize, int alignment, int recordSize)
+ {
+ recordSize = calculateRecordSize(recordSize, alignment);
+ return fileSize / recordSize;
+ }
+
+ /**
+ *
+ * Use: calculateNumberOfFiles (fileSize, numberOfRecords, recordSize, numberOfRecords2, recordSize2, , ...., numberOfRecordsN, recordSizeN);
+ * */
+ private int calculateNumberOfFiles(int fileSize, int alignment, int ... record) throws Exception
+ {
+
+ System.out.print("Processing calculateNumberOfFiles(" + fileSize + ", " + alignment);
+ for (int recordN: record)
+ {
+ System.out.print(", " + recordN);
+ }
+ System.out.println(");");
+
+ int headerSize = calculateRecordSize(JournalImpl.SIZE_HEADER, alignment);
+ int currentPosition = headerSize;
+ int totalFiles = 0;
+
+ for (int i=0; i<record.length; i+=2)
+ {
+ int numberOfRecords = record[i];
+ int recordSize = calculateRecordSize(record[i+1], alignment);
+
+ System.out.println(" numberOfRecords = " + numberOfRecords + " recordSize=" + recordSize);
+
+ while (numberOfRecords>0)
+ {
+ int recordsFit = (fileSize - currentPosition) / recordSize;
+ if (numberOfRecords < recordsFit)
+ {
+ currentPosition = currentPosition + numberOfRecords*recordSize;
+ numberOfRecords = 0;
+ System.out.println(" Adding " + numberOfRecords + " records of size " + recordSize + " numberOfFiles = " + totalFiles + " Position=" + currentPosition);
+ }
+ else if (recordsFit > 0)
+ {
+ currentPosition = currentPosition + recordsFit*recordSize;
+ numberOfRecords -= recordsFit;
+ System.out.println(" Adding " + recordsFit + " (fitting) of size " + recordSize + " numberOfFiles = " + totalFiles + " Position = " + currentPosition);
+ }
+ else
+ {
+ totalFiles++;
+ currentPosition = headerSize;
+ System.out.println(" Exploded... totalFiles=" + totalFiles);
+ }
+ }
+ }
+
+ System.out.println(" Returning " + totalFiles);
+
+ return totalFiles;
+
+ }
public void testCheckCreateMoreFiles() throws Exception
{
@@ -368,14 +430,8 @@
add(i);
}
+ int numberOfFiles = calculateNumberOfFiles(10*1024, journal.getAlignment(), 91, JournalImpl.SIZE_ADD_RECORD + this.recordLength);
- int calculatedSize = calculateRecordSize(JournalImpl.SIZE_ADD_RECORD + this.recordLength, journal.getAlignment());
- int headerSize = calculateRecordSize(JournalImpl.SIZE_HEADER, journal.getAlignment());
- int recordsPerFile = (fileSize - headerSize)/calculatedSize;
- int fillerSize = fileSize - headerSize - calculatedSize * recordsPerFile;
- int numberOfFiles = calculatedSize * 91 / (fileSize-headerSize-fillerSize);
-
-
assertEquals(numberOfFiles, journal.getDataFilesCount());
assertEquals(0, journal.getFreeFilesCount());
assertEquals(91, journal.getIDMapSize());
@@ -396,7 +452,7 @@
add(i);
}
- numberOfFiles = calculatedSize * 95 / (fileSize-headerSize-fillerSize);
+ numberOfFiles = calculateNumberOfFiles(10*1024,journal.getAlignment(), 95, JournalImpl.SIZE_ADD_RECORD + this.recordLength);
assertEquals(numberOfFiles, journal.getDataFilesCount());
assertEquals(0, journal.getFreeFilesCount());
@@ -418,7 +474,7 @@
add(i);
}
- numberOfFiles = calculatedSize * 200 / (fileSize-headerSize-fillerSize);
+ numberOfFiles = calculateNumberOfFiles(10*1024,journal.getAlignment(), 200, JournalImpl.SIZE_ADD_RECORD + this.recordLength);
assertEquals(numberOfFiles, journal.getDataFilesCount());
assertEquals(0, journal.getFreeFilesCount());
@@ -436,6 +492,20 @@
stopJournal();
}
+ // Validate the methods that are used on assertions
+ public void testCalculations() throws Exception
+ {
+
+ assertEquals(0,calculateNumberOfFiles(10*1024, 1, 1, 10, 2, 20));
+ assertEquals(0,calculateNumberOfFiles(10*1024, 512, 1, 1));
+ assertEquals(0,calculateNumberOfFiles(10*1024, 512, 19, 10));
+ assertEquals(1,calculateNumberOfFiles(10*1024, 512, 20, 10));
+ assertEquals(0,calculateNumberOfFiles(3000, 500, 2, 1000, 1, 500));
+ assertEquals(1,calculateNumberOfFiles(3000, 500, 2, 1000, 1, 1000));
+ assertEquals(9,calculateNumberOfFiles(10240, 1, 90, 1038, 45, 10));
+ assertEquals(11,calculateNumberOfFiles(10*1024, 512, 60, 14 + 1024, 30, 14));
+ }
+
public void testReclaim() throws Exception
{
setup(10, 10 * 1024, true);
@@ -450,19 +520,28 @@
assertEquals(0, journal.getDataFilesCount());
assertEquals(9, journal.getFreeFilesCount());
assertEquals(0, journal.getIDMapSize());
+
+
+ int addRecordsPerFile = calculateRecordsPerFile(10*1024, journal.getAlignment(), JournalImpl.SIZE_ADD_RECORD + this.recordLength);
+
- for (int i = 0; i < 100; i++)
+ // Fills exactly 10 files
+ int initialNumberOfAddRecords = addRecordsPerFile * 10;
+ for (int i = 0; i < initialNumberOfAddRecords; i++)
{
+ System.out.println("adding Record " + i);
add(i);
+ System.out.println("count=" + journal.getDataFilesCount());
}
- assertEquals(11, journal.getDataFilesCount());
+ // We have already 10 files, but since we have the last file on exact size, the counter will be numberOfUsedFiles -1
+ assertEquals(9, journal.getDataFilesCount());
assertEquals(0, journal.getFreeFilesCount());
- assertEquals(100, journal.getIDMapSize());
+ assertEquals(initialNumberOfAddRecords, journal.getIDMapSize());
List<String> files4 = fileFactory.listFiles(fileExtension);
- assertEquals(12, files4.size());
+ assertEquals(10, files4.size());
for (String file: files1)
{
@@ -470,35 +549,56 @@
}
//Now delete half of them
+
+ int deleteRecordsPerFile = calculateRecordsPerFile(10*1024, journal.getAlignment(), JournalImpl.SIZE_DELETE_RECORD);
- for (int i = 0; i < 50; i++)
+ for (int i = 0; i < initialNumberOfAddRecords / 2; i++)
{
+ System.out.println("Deleting record " + i);
delete(i);
}
- assertEquals(11, journal.getDataFilesCount());
+
+
+ int numberOfFiles = calculateNumberOfFiles(10*1024, journal.getAlignment(), initialNumberOfAddRecords, JournalImpl.SIZE_ADD_RECORD + this.recordLength,
+ initialNumberOfAddRecords/2, JournalImpl.SIZE_DELETE_RECORD);
+
+
+ if ((initialNumberOfAddRecords / 2) % deleteRecordsPerFile == 0)
+ {
+ // The file is already full, next add would fix it
+ numberOfFiles --;
+ }
+
+ assertEquals(numberOfFiles, journal.getDataFilesCount());
assertEquals(0, journal.getFreeFilesCount());
- assertEquals(50, journal.getIDMapSize());
+ assertEquals(initialNumberOfAddRecords/2, journal.getIDMapSize());
//Make sure the deletes aren't in the current file
- for (int i = 100; i < 110; i++)
+ for (int i = 0; i < 10; i++)
{
- add(i);
+ add(initialNumberOfAddRecords + i);
}
+
+ numberOfFiles = calculateNumberOfFiles(10*1024, journal.getAlignment(),
+ initialNumberOfAddRecords, JournalImpl.SIZE_ADD_RECORD + this.recordLength,
+ initialNumberOfAddRecords / 2, JournalImpl.SIZE_DELETE_RECORD,
+ 10, JournalImpl.SIZE_ADD_RECORD + this.recordLength);
+
- assertEquals(12, journal.getDataFilesCount());
+ assertEquals(numberOfFiles, journal.getDataFilesCount());
assertEquals(0, journal.getFreeFilesCount());
- assertEquals(60, journal.getIDMapSize());
+ assertEquals(initialNumberOfAddRecords/2 + 10, journal.getIDMapSize());
journal.checkAndReclaimFiles();
//Several of them should be reclaimed - and others deleted - the total number of files should not drop below
//10
- assertEquals(7, journal.getDataFilesCount());
- assertEquals(2, journal.getFreeFilesCount());
- assertEquals(60, journal.getIDMapSize());
+ assertEquals(journal.getAlignment()==1?6:7, journal.getDataFilesCount());
+ assertEquals(journal.getAlignment()==1?3:2, journal.getFreeFilesCount());
+ assertEquals(initialNumberOfAddRecords /2 + 10, journal.getIDMapSize());
List<String> files5 = fileFactory.listFiles(fileExtension);
@@ -506,7 +606,7 @@
//Now delete the rest
- for (int i = 50; i < 110; i++)
+ for (int i = initialNumberOfAddRecords /2; i < initialNumberOfAddRecords + 10; i++)
{
delete(i);
}
@@ -534,7 +634,7 @@
public void testReclaimAddUpdateDeleteDifferentFiles1() throws Exception
{
- setup(2, 1046, true); //Make sure there is one record per file
+ setup(2, calculateRecordSize(8, getAlignment()) + calculateRecordSize(JournalImpl.SIZE_ADD_RECORD + recordLength, getAlignment()), true); //Make sure there is one record per file
createJournal();
startJournal();
load();
@@ -568,7 +668,7 @@
public void testReclaimAddUpdateDeleteDifferentFiles2() throws Exception
{
- setup(2, 1046, true); //Make sure there is one record per file
+ setup(2, calculateRecordSize(8, getAlignment()) + calculateRecordSize(JournalImpl.SIZE_ADD_RECORD + recordLength, getAlignment()), true); //Make sure there is one record per file
createJournal();
startJournal();
load();
@@ -2482,6 +2582,7 @@
commit(3);
}
+ protected abstract int getAlignment();
private int calculateRecordSize(int size, int alignment)
{
Modified: branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealAIOJournalImplTest.java
===================================================================
--- branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealAIOJournalImplTest.java 2008-04-21 14:45:05 UTC (rev 4093)
+++ branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealAIOJournalImplTest.java 2008-04-21 23:55:18 UTC (rev 4094)
@@ -52,5 +52,10 @@
return new AIOSequentialFileFactory(journalDir);
}
+
+ protected int getAlignment()
+ {
+ return 512;
+ }
}
Modified: branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealNIOJournalImplTest.java
===================================================================
--- branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealNIOJournalImplTest.java 2008-04-21 14:45:05 UTC (rev 4093)
+++ branches/trunk_tmp_aio/tests/src/org/jboss/messaging/core/journal/impl/test/unit/RealNIOJournalImplTest.java 2008-04-21 23:55:18 UTC (rev 4094)
@@ -55,6 +55,12 @@
file.mkdir();
return new NIOSequentialFileFactory(journalDir);
- }
+ }
+ protected int getAlignment()
+ {
+ return 1;
+ }
+
+
}
More information about the jboss-cvs-commits
mailing list