[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