[jboss-cvs] JBoss Messaging SVN: r4020 - in trunk: 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
Tue Apr 8 07:35:11 EDT 2008


Author: timfox
Date: 2008-04-08 07:35:11 -0400 (Tue, 08 Apr 2008)
New Revision: 4020

Modified:
   trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
   trunk/src/main/org/jboss/messaging/core/journal/impl/Reclaimer.java
   trunk/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java
Log:
More journal work


Modified: trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java	2008-04-08 11:21:28 UTC (rev 4019)
+++ trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java	2008-04-08 11:35:11 UTC (rev 4020)
@@ -762,7 +762,9 @@
 								throw new IllegalStateException("Cannot find tx " + txID);
 							}
 							
-							tnp.prepare(file);		
+							tnp.prepare(file);	
+							
+							hasData = true;			
 						}
 						
 						break;
@@ -781,22 +783,22 @@
 						{
 							TransactionHolder tx = transactions.remove(txID);
 							
-							if (tx == null)
+							if (tx != null)
 							{
-								throw new IllegalStateException("Cannot find tx with id " + txID);
+   							records.addAll(tx.recordInfos);							
+   							recordsToDelete.addAll(tx.recordsToDelete);	
+   							
+   							TransactionNegPos tnp = transactionInfos.remove(txID);
+   							
+   							if (tnp == null)
+   							{
+   								throw new IllegalStateException("Cannot find tx " + txID);
+   							}
+   							
+   							tnp.commit(file);			
+   							
+   							hasData = true;			
 							}
-							
-							records.addAll(tx.recordInfos);							
-							recordsToDelete.addAll(tx.recordsToDelete);	
-							
-							TransactionNegPos tnp = transactionInfos.remove(txID);
-							
-							if (tnp == null)
-							{
-								throw new IllegalStateException("Cannot find tx " + txID);
-							}
-							
-							tnp.commit(file);							
 						}
 						
 						break;
@@ -815,19 +817,19 @@
 						{
 							TransactionHolder tx = transactions.remove(txID);
 							
-							if (tx == null)
-							{
-								throw new IllegalStateException("Cannot find tx with id " + txID);
-							}				
-							
-							TransactionNegPos tnp = transactionInfos.remove(txID);
-							
-							if (tnp == null)
-							{
-								throw new IllegalStateException("Cannot find tx " + txID);
+							if (tx != null)
+							{								
+   							TransactionNegPos tnp = transactionInfos.remove(txID);
+   							
+   							if (tnp == null)
+   							{
+   								throw new IllegalStateException("Cannot find tx " + txID);
+   							}
+   							
+   							tnp.rollback(file);	
+   							
+   							hasData = true;			
 							}
-							
-							tnp.rollback(file);	
 						}
 						
 						break;
@@ -964,7 +966,7 @@
 		reclaimer.scan(dataFiles.toArray(files));
 				
 		for (JournalFile file: dataFiles)
-		{		
+		{				
    		if (file.isCanReclaim())
    		{
    			//File can be reclaimed or deleted
@@ -1000,7 +1002,7 @@
       			
       			jf.setOffset(SIZE_LONG);
       			
-      			freeFiles.add(jf);   
+      			freeFiles.add(jf);  
    			}
    			else
    			{

Modified: trunk/src/main/org/jboss/messaging/core/journal/impl/Reclaimer.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/impl/Reclaimer.java	2008-04-08 11:21:28 UTC (rev 4019)
+++ trunk/src/main/org/jboss/messaging/core/journal/impl/Reclaimer.java	2008-04-08 11:35:11 UTC (rev 4020)
@@ -59,7 +59,7 @@
 			int posCount = currentFile.getPosCount();
 
 			int totNeg = 0;
-			
+								
 			for (int j = i; j < files.length; j++)
 			{
 				totNeg += files[j].getNegCount(currentFile);

Modified: trunk/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java	2008-04-08 11:21:28 UTC (rev 4019)
+++ trunk/tests/src/org/jboss/messaging/core/journal/impl/test/unit/JournalImplTestUnit.java	2008-04-08 11:35:11 UTC (rev 4020)
@@ -1286,8 +1286,295 @@
 		assertEquals(1, journal.getIDMapSize());
 	}
 	
+	public void testPrepareNoReclaim() throws Exception
+	{
+		setup(2, 1300, true);
+		createJournal();
+		startJournal();
+		load();
+		
+		List<String> files1 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files1.size());
+		
+		assertEquals(0, journal.getDataFilesCount());
+		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getIDMapSize());
+					
+		addTx(1, 1);          // in file 0
+						
+		//Make sure we move on to the next file
+		
+		add(2);               // in file 1
+		
+    	List<String> files2 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files2.size());
+		
+		assertEquals(1, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+		
+		prepare(1);          // in file 1
+		
+		List<String> files3 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files3.size());
+		
+		assertEquals(1, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+		
+		delete(2);            // in file 1
+		
+		List<String> files4 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files4.size());
+		
+		assertEquals(1, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(0, journal.getIDMapSize());
+		
+		//Move on to another file
+		
+		add(3);                // in file 2
+		
+		List<String> files5 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(3, files5.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+				
+		journal.checkAndReclaimFiles();
+		
+		List<String> files6 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(3, files6.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+		
+		add(4);		// in file 3
+		
+		List<String> files7 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files7.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(2, journal.getIDMapSize());
+		
+		commit(1);   // in file 4
+		
+		List<String> files8 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files8.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(3, journal.getIDMapSize());
+		
+		//Restart
+		
+		stopJournal();
+		createJournal();
+		startJournal();
+		loadAndCheck();
 	
+	}
 	
+	public void testPrepareReclaim() throws Exception
+	{
+		setup(2, 1300, true);
+		createJournal();
+		startJournal();
+		load();
+		
+		List<String> files1 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files1.size());
+		
+		assertEquals(0, journal.getDataFilesCount());
+		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getIDMapSize());
+					
+		addTx(1, 1);          // in file 0
+		
+	   files1 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files1.size());
+		
+		assertEquals(0, journal.getDataFilesCount());
+		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getIDMapSize());
+						
+		//Make sure we move on to the next file
+		
+		add(2);               // in file 1
+		
+    	List<String> files2 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files2.size());
+		
+		assertEquals(1, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+		
+		prepare(1);          // in file 1
+		
+		List<String> files3 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files3.size());
+		
+		assertEquals(1, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+		
+		delete(2);            // in file 1
+		
+		List<String> files4 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(2, files4.size());
+		
+		assertEquals(1, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(0, journal.getIDMapSize());
+		
+		//Move on to another file
+		
+		add(3);                // in file 2
+		
+		journal.checkAndReclaimFiles();
+				
+		List<String> files5 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(3, files5.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+				
+		journal.checkAndReclaimFiles();
+		
+		List<String> files6 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(3, files6.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getIDMapSize());
+		
+		add(4);		// in file 3
+		
+		List<String> files7 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files7.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(2, journal.getIDMapSize());
+		
+		commit(1);   // in file 3
+		
+		List<String> files8 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files8.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(3, journal.getIDMapSize());
+		
+		delete(1);   // in file 3
+		
+		List<String> files9 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files9.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(2, journal.getIDMapSize());
+		
+		journal.checkAndReclaimFiles();
+		
+		List<String> files10 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files10.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(2, journal.getIDMapSize());
+		
+		add(5);       // in file 4
+		
+		List<String> files11 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(5, files11.size());
+		
+		assertEquals(4, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(3, journal.getIDMapSize());
+		
+		journal.checkAndReclaimFiles();
+		
+		List<String> files12 = fileFactory.listFiles(fileExtension);
+		
+		//File 0, and File 1  should be deleted
+		
+		assertEquals(3, files12.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(3, journal.getIDMapSize());
+		
+		
+		//Restart
+		
+		stopJournal();
+		createJournal();
+		startJournal();
+		loadAndCheck();
+		
+		delete(4);
+		
+		List<String> files13 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(3, files13.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(2, journal.getIDMapSize());
+		
+		add(6);
+		
+		List<String> files14 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(4, files14.size());
+		
+		assertEquals(3, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(3, journal.getIDMapSize());
+		
+		journal.checkAndReclaimFiles();
+		
+		//file 3 should now be deleted
+		
+		List<String> files15 = fileFactory.listFiles(fileExtension);
+		
+		assertEquals(3, files15.size());
+		
+		assertEquals(2, journal.getDataFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(3, journal.getIDMapSize());
+		
+		stopJournal();
+		createJournal();
+		startJournal();
+		loadAndCheck();	
+	}
+	
 	// Non transactional tests
 	// =======================
 	




More information about the jboss-cvs-commits mailing list