[jboss-cvs] JBoss Messaging SVN: r4285 - in trunk: src/main/org/jboss/messaging/core/journal and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu May 22 17:24:41 EDT 2008


Author: clebert.suconic at jboss.com
Date: 2008-05-22 17:24:40 -0400 (Thu, 22 May 2008)
New Revision: 4285

Modified:
   trunk/src/config/jbm-configuration.xml
   trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java
   trunk/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java
   trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
   trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java
Log:
JBMESSAGING-1283 - Opening files in another thread... and aways keeping at least one file opened in a queue.

Modified: trunk/src/config/jbm-configuration.xml
===================================================================
--- trunk/src/config/jbm-configuration.xml	2008-05-22 15:14:14 UTC (rev 4284)
+++ trunk/src/config/jbm-configuration.xml	2008-05-22 21:24:40 UTC (rev 4285)
@@ -80,7 +80,7 @@
       
       <!-- Maximum of simultaneous asynchronous writes accepted by the native layer.
            (parameter ignored on NIO) -->
-      <journal-max-aio>5000</journal-max-aio>
+      <journal-max-aio>9000</journal-max-aio>
       
       
       <!--  Maximum time in seconds an AIO operation could take.

Modified: trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java	2008-05-22 15:14:14 UTC (rev 4284)
+++ trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java	2008-05-22 21:24:40 UTC (rev 4285)
@@ -16,6 +16,8 @@
 	
 	int getFreeFilesCount();
 	
+	int getOpenedFilesCount();
+	
 	int getIDMapSize();
 	
    String debug() throws Exception;

Modified: trunk/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java	2008-05-22 15:14:14 UTC (rev 4284)
+++ trunk/src/main/org/jboss/messaging/core/journal/impl/JournalFileImpl.java	2008-05-22 21:24:40 UTC (rev 4285)
@@ -33,6 +33,7 @@
  * A JournalFileImpl
  * 
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:clebert.suconic at jboss.com">Clebert Suconic</a>
  *
  */
 public class JournalFileImpl implements JournalFile

Modified: trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java	2008-05-22 15:14:14 UTC (rev 4284)
+++ trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java	2008-05-22 21:24:40 UTC (rev 4285)
@@ -35,12 +35,14 @@
 import java.util.Set;
 import java.util.Timer;
 import java.util.TimerTask;
+import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
@@ -160,6 +162,8 @@
 	
 	private final Queue<JournalFile> freeFiles = new ConcurrentLinkedQueue<JournalFile>();
 	
+	private final BlockingQueue<JournalFile> openedFiles = new LinkedBlockingQueue<JournalFile>();
+	
 	private final Map<Long, PosFiles> posFilesMap = new ConcurrentHashMap<Long, PosFiles>();
 	
 	private final Map<Long, TransactionNegPos> transactionInfos = new ConcurrentHashMap<Long, TransactionNegPos>();
@@ -168,8 +172,14 @@
 	
 	private final boolean shouldUseCallback;
 	
-	private final ExecutorService closingExecutor = Executors.newSingleThreadExecutor();
-   		
+   private final ExecutorService closingExecutor = Executors.newSingleThreadExecutor();
+   
+   /** 
+    * We have a separated executor for open, as if we used the same executor this would still represent
+    * a point of wait between the closing and open.
+    * */
+   private final ExecutorService openExecutor = Executors.newSingleThreadExecutor();
+   
 	/*
     * We use a semaphore rather than synchronized since it performs better when
     * contended
@@ -709,7 +719,7 @@
       
       for (JournalFile file: orderedFiles)
       {  
-         file.getFile().open();
+         file.getFile().open();//aki
             
          ByteBuffer bb = fileFactory.newBuffer(fileSize);
          
@@ -1095,19 +1105,16 @@
             }
          }
          
+         file.getFile().close();          
+
          if (hasData)
          {        
             dataFiles.add(file);
-            
-            file.getFile().close();          
          }
          else
          {           
             //Empty dataFiles with no data
             freeFiles.add(file);
-            
-            //Position it ready for writing
-            file.getFile().position(file.getFile().calculateBlockStart(SIZE_LONG));
          }                       
       }        
       
@@ -1121,7 +1128,7 @@
       for (int i = 0; i < filesToCreate; i++)
       {
          // Keeping all files opened can be very costly (mainly on AIO)
-         freeFiles.add(createFile());
+         freeFiles.add(createFile(false));
       }
       
       //The current file is the last one
@@ -1149,8 +1156,11 @@
       else
       {
          currentFile = freeFiles.remove();
-      }           
+         openFile(currentFile);
+      }
       
+      pushOpenedFile();
+      
       for (RecordInfo record: records)
       {
          if (!recordsToDelete.contains(record.id))
@@ -1191,7 +1201,7 @@
       
       return maxMessageID;
    }
-	
+
 	public int getAlignment() throws Exception
 	{
 		return this.currentFile.getFile().getAlignment();
@@ -1250,6 +1260,23 @@
          
          latch.await();
       }
+
+      if (!openExecutor.isShutdown())
+      {
+         // Send something to the closingExecutor, just to make sure we went until its end
+         final CountDownLatch latch = new CountDownLatch(1);
+
+         this.openExecutor.execute(new Runnable()
+         {
+            public void run()
+            {
+               latch.countDown();
+            }
+         });
+         
+         latch.await();
+      }
+   
    }
 
    // TestableJournal implementation --------------------------------------------------------------
@@ -1297,6 +1324,8 @@
 					
 					jf.setOffset(bytesWritten);
 					
+					sf.close();
+					
 					freeFiles.add(jf);  
 				}
 				else
@@ -1319,6 +1348,11 @@
 		return freeFiles.size();
 	}
 	
+	public int getOpenedFilesCount()
+	{
+	   return openedFiles.size();
+	}
+	
 	public int getIDMapSize()
 	{
 		return posFilesMap.size();
@@ -1346,7 +1380,7 @@
 		stopReclaimer();
 		
 		closingExecutor.shutdown();
-		if (!closingExecutor.awaitTermination(120, TimeUnit.SECONDS))
+		if (!closingExecutor.awaitTermination(aioTimeout, TimeUnit.SECONDS))
 		{
 		   throw new IllegalStateException("Time out waiting for closing executor to finish");
 		}
@@ -1355,8 +1389,15 @@
 		{
 			currentFile.getFile().close();
 		}
-		
-		for (JournalFile file: freeFiles)
+
+		openExecutor.shutdown();
+      if (!closingExecutor.awaitTermination(aioTimeout, TimeUnit.SECONDS))
+      {
+         throw new IllegalStateException("Time out waiting for open executor to finish");
+      }
+      
+
+		for (JournalFile file: openedFiles)
 		{
 			file.getFile().close();
 		}
@@ -1365,8 +1406,10 @@
 		
 		dataFiles.clear();
 		
-		freeFiles.clear();      
+		freeFiles.clear();
 		
+		openedFiles.clear();
+		
 		state = STATE_STOPPED;
 	}
 	
@@ -1448,7 +1491,7 @@
 		file.getFile().position(pos);
 	}
 	
-	private JournalFile createFile() throws Exception
+	private JournalFile createFile(boolean keepOpened) throws Exception
 	{
 		long orderingID = generateOrderingID();
 		
@@ -1472,12 +1515,22 @@
 		
 		JournalFile info = new JournalFileImpl(sequentialFile, orderingID);
 		
-		
 		info.extendOffset(bytesWritten);
 		
+		if (!keepOpened)
+      {
+         sequentialFile.close();
+      }
+		
 		return info;
 	}
 	
+	private void openFile(JournalFile file) throws Exception
+	{
+	   file.getFile().open();
+	   file.getFile().position(file.getFile().calculateBlockStart(SIZE_LONG));
+	}
+	
 	private long generateOrderingID()
 	{
 		long orderingID = System.currentTimeMillis();
@@ -1498,7 +1551,7 @@
 		
 		return orderingID;
 	}
-	
+
 	private void checkFile(final int size) throws Exception
 	{		
 		if (size % currentFile.getFile().getAlignment() != 0)
@@ -1515,19 +1568,67 @@
 		if (currentFile == null || fileSize - currentFile.getOffset() < size)
 		{
 		   closeFile(currentFile);
-			
-			try
-			{
-			   currentFile = freeFiles.remove();
-			}
-			catch (NoSuchElementException e)
-			{
-            currentFile = createFile();
-			}
 
+		   enqueueOpenFile();
+		   
+		   currentFile = openedFiles.poll(aioTimeout, TimeUnit.SECONDS);
+		   
+		   if (currentFile == null)
+		   {
+		      throw new IllegalStateException("Timed out waiting for an opened file");
+		   }
+
 		}     
 	}
 	
+	private void enqueueOpenFile()
+	{
+	   if (trace) log.trace("enqueueOpenFile with openedFiles.size=" + openedFiles.size());
+	   openExecutor.execute(new Runnable()
+      {
+         public void run()
+         {
+            try
+            {
+               pushOpenedFile();
+            }
+            catch (Exception e)
+            {
+               log.error(e.getMessage(), e);
+            }
+         }
+      });
+	}
+	
+	
+   /** 
+    * 
+    * Open a file an place it into the openedFiles queue
+    * */
+   private void pushOpenedFile() throws Exception
+   {
+      JournalFile nextOpenedFile = null;
+      try
+      {
+         nextOpenedFile = freeFiles.remove();
+      }
+      catch (NoSuchElementException ignored)
+      {
+      }
+
+      if (nextOpenedFile == null)
+      {
+         nextOpenedFile = createFile(true);
+      }
+      else
+      {
+         openFile(nextOpenedFile);
+      }
+
+      openedFiles.offer(nextOpenedFile);
+   }
+   
+	
 	private void closeFile(final JournalFile file)
 	{
 	   this.closingExecutor.execute(new Runnable() { public void run()

Modified: trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java	2008-05-22 15:14:14 UTC (rev 4284)
+++ trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java	2008-05-22 21:24:40 UTC (rev 4285)
@@ -157,6 +157,7 @@
    protected ConnectionParamsImpl createParameters()
    {
       ConnectionParamsImpl param = new ConnectionParamsImpl();
+      param.setTcpNoDelay(true);
       param.setTimeout(50000);
       return param;
    }

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java	2008-05-22 15:14:14 UTC (rev 4284)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java	2008-05-22 21:24:40 UTC (rev 4285)
@@ -442,7 +442,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		//Fill all the files
@@ -460,8 +461,11 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(numberOfFiles + 1, files2.size());
+		// The Journal will aways have a file ready to be opened
+		assertEquals(numberOfFiles + 2, files2.size());
 		
+		assertEquals(1, journal.getOpenedFilesCount());
+		
 		for (String file: files1)
 		{
 			assertTrue(files2.contains(file));
@@ -482,7 +486,8 @@
 		
 		List<String> files3 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(numberOfFiles + 1, files3.size());
+		assertEquals(numberOfFiles + 2, files3.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -504,7 +509,8 @@
 		
 		List<String> files4 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(numberOfFiles + 1, files4.size());
+		assertEquals(numberOfFiles + 2, files4.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -540,7 +546,8 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+		assertEquals(8, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		
@@ -561,7 +568,8 @@
 		
 		List<String> files4 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(10, files4.size());
+		assertEquals(11, files4.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -621,7 +629,8 @@
 		
 		List<String> files5 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(10, files5.size());
+		assertEquals(11, files5.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		//Now delete the rest
 		
@@ -646,7 +655,8 @@
 		
 		List<String> files6 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(10, files6.size());
+		assertEquals(11, files6.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		stopJournal(); 
 	}
@@ -664,7 +674,8 @@
 		
 		List<String> files1 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files1.size());
+		assertEquals(4, files1.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -674,7 +685,9 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files2.size());
+		// 1 file for nextOpenedFile
+		assertEquals(3, files2.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		//1 gets deleted and 1 gets reclaimed
 		
@@ -698,7 +711,8 @@
 		
 		List<String> files1 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files1.size());
+		assertEquals(4, files1.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -708,7 +722,8 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files2.size());
+		assertEquals(4, files2.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -742,7 +757,8 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+		assertEquals(8, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		for (int i = 0; i < 100; i++)
@@ -756,7 +772,8 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 100, recordLength) + 1, files2.size());
+		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 100, recordLength) + 2, files2.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -773,7 +790,8 @@
 		
 		List<String> files3 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 100, recordLength) + 1, files3.size());
+		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 100, recordLength) + 2, files3.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -793,7 +811,8 @@
 		
 		List<String> files4 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 200, recordLength) + 1, files4.size());
+		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 200, recordLength) + 2, files4.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -810,7 +829,8 @@
 		
 		List<String> files5 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(23, files5.size());
+		assertEquals(24, files5.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -831,7 +851,8 @@
 		
 		List<String> files7 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 200, recordLength, 200, JournalImpl.SIZE_DELETE_RECORD_TX) + 1, files7.size());
+		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 200, recordLength, 200, JournalImpl.SIZE_DELETE_RECORD_TX) + 2, files7.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -846,7 +867,8 @@
 		
 		List<String> files8 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 200, recordLength, 200, JournalImpl.SIZE_DELETE_RECORD_TX) + 1, files8.size());
+		assertEquals(calculateNumberOfFiles(fileSize , journal.getAlignment(), 200, recordLength, 200, JournalImpl.SIZE_DELETE_RECORD_TX) + 2, files8.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -891,7 +913,8 @@
 				200, recordLength, 
 				200, JournalImpl.SIZE_DELETE_RECORD_TX, 
 				1, JournalImpl.SIZE_COMMIT_RECORD,
-				10, JournalImpl.SIZE_ADD_RECORD + recordLength) + 1, files9.size());
+				10, JournalImpl.SIZE_ADD_RECORD + recordLength) + 2, files9.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		for (String file: files1)
 		{
@@ -908,7 +931,9 @@
 		
 		List<String> files10 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(10, files10.size());   
+		// The journal will aways keep one file opened (even if there are no more files on freeFiles)
+		assertEquals(11, files10.size());   
+		assertEquals(1, journal.getOpenedFilesCount());
 	}
 	
 	public void testReclaimTransactionalSimple() throws Exception
@@ -924,7 +949,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);           // in file 0
@@ -933,7 +959,8 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files2.size());
+		assertEquals(3, files2.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(1, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -945,7 +972,8 @@
 		
 		List<String> files3 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files3.size());
+		assertEquals(4, files3.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		log.info("data files count "+ journal.getDataFilesCount());
 		log.info("free files count "+ journal.getFreeFilesCount());
@@ -958,7 +986,8 @@
 		
 		List<String> files4 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(4, files4.size());
+		assertEquals(5, files4.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -970,7 +999,8 @@
 		
 		List<String> files5 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(5, files5.size());
+		assertEquals(6, files5.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(4, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -982,7 +1012,8 @@
 		
 		//Three should get deleted (files 0, 1, 3)
 		
-		assertEquals(2, files6.size());
+		assertEquals(3, files6.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(1, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -995,7 +1026,8 @@
 		startJournal();
 		loadAndCheck();
 		
-		assertEquals(2, files6.size());
+		assertEquals(3, files6.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(1, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -1014,25 +1046,29 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+		assertEquals(8, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+		assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		deleteTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		commit(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());           
 	}
 	
@@ -1048,19 +1084,22 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		commit(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());           
 	}
 	
@@ -1076,25 +1115,29 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		add(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		deleteTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		commit(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());           
 	}
 	
@@ -1111,25 +1154,29 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		deleteTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		rollback(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());           
 	}
 	
@@ -1145,19 +1192,22 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		rollback(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());           
 	}
 	
@@ -1173,25 +1223,29 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		add(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		deleteTx(1, 1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		rollback(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());           
 	}
 	
@@ -1207,19 +1261,22 @@
 		assertEquals(10, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		add(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		delete(1);
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(9, journal.getFreeFilesCount());
+      assertEquals(8, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 	}
@@ -1236,7 +1293,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);
@@ -1246,7 +1304,8 @@
 		assertEquals(2, files2.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		//Make sure we move on to the next file
@@ -1255,10 +1314,11 @@
 		
 		List<String> files3 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files3.size());
+		assertEquals(3, files3.size());
 		
 		assertEquals(1, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		addWithSize(recordLength - JournalImpl.SIZE_ADD_RECORD, 2);
@@ -1267,10 +1327,11 @@
 		
 		List<String> files4 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files4.size());
+		assertEquals(4, files4.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());
 		
 		checkAndReclaimFiles();
@@ -1279,10 +1340,11 @@
 		
 		List<String> files5 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files5.size());
+		assertEquals(4, files5.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());     
 	}
 	
@@ -1303,7 +1365,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);           // in file 0
@@ -1314,10 +1377,11 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files2.size());
+		assertEquals(3, files2.size());
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 2, recordLength), journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		commit(1);            // in file 1
@@ -1326,7 +1390,8 @@
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
-				1, JournalImpl.SIZE_COMMIT_RECORD) +1, files3.size());
+				1, JournalImpl.SIZE_COMMIT_RECORD) +2, files3.size());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
@@ -1341,8 +1406,9 @@
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_COMMIT_RECORD,
-				1, JournalImpl.SIZE_DELETE_RECORD)+1, files4.size());
-		
+				1, JournalImpl.SIZE_DELETE_RECORD)+2, files4.size());
+	    assertEquals(1, journal.getOpenedFilesCount());
+
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_COMMIT_RECORD,
@@ -1356,20 +1422,22 @@
 		
 		List<String> files5 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files5.size());
+		assertEquals(4, files5.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());
 		
 		checkAndReclaimFiles();
 		
 		List<String> files6 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files6.size());
+		assertEquals(4, files6.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());  
 		
 		//Restart
@@ -1381,10 +1449,11 @@
 		
 		List<String> files7 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files7.size());
+		assertEquals(4, files7.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());
 	}
 	
@@ -1400,7 +1469,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);          // in file 0
@@ -1411,10 +1481,11 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files2.size());
+		assertEquals(3, files2.size());
 		
 		assertEquals(1, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		rollback(1);          // in file 1
@@ -1423,8 +1494,10 @@
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
-				1, JournalImpl.SIZE_ROLLBACK_RECORD) +1, files3.size());
+				1, JournalImpl.SIZE_ROLLBACK_RECORD) +2, files3.size());
+      assertEquals(1, journal.getOpenedFilesCount());
 		
+		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_ROLLBACK_RECORD), journal.getDataFilesCount());
@@ -1438,8 +1511,10 @@
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_ROLLBACK_RECORD,
-				1, JournalImpl.SIZE_DELETE_RECORD)+1, files4.size());
+				1, JournalImpl.SIZE_DELETE_RECORD)+2, files4.size());
+      assertEquals(1, journal.getOpenedFilesCount());
 		
+		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_ROLLBACK_RECORD,
@@ -1457,7 +1532,9 @@
 				2, recordLength,
 				1, JournalImpl.SIZE_ROLLBACK_RECORD,
 				1, JournalImpl.SIZE_DELETE_RECORD,
-				1, recordLength)+1, files5.size());
+				1, recordLength)+2, files5.size());
+
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
@@ -1473,10 +1550,11 @@
 		
 		// files 0 and 1 should be deleted
 		
-		assertEquals(2, files6.size());
+		assertEquals(3, files6.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
 		assertEquals(1, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());  
 		
 		//Restart
@@ -1488,10 +1566,11 @@
 		
 		List<String> files7 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files7.size());
+		assertEquals(3, files7.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
 		assertEquals(1, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 	}
 	
@@ -1507,7 +1586,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);          // in file 0
@@ -1518,23 +1598,25 @@
 		
 		List<String> files2 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files2.size());
+		assertEquals(3, files2.size());
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 2, recordLength), journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		prepare(1);          // in file 1
 		
 		List<String> files3 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files3.size());
+		assertEquals(3, files3.size());
 		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD), journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(1, journal.getIDMapSize());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		delete(2);            // in file 1
 		
@@ -1543,8 +1625,10 @@
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD,
-				1, JournalImpl.SIZE_DELETE_RECORD) + 1, files4.size());
+				1, JournalImpl.SIZE_DELETE_RECORD) + 2, files4.size());
 		
+		assertEquals(1, journal.getOpenedFilesCount());
+		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD,
@@ -1562,8 +1646,10 @@
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD,
 				1, JournalImpl.SIZE_DELETE_RECORD,
-				1, recordLength) + 1, files5.size());
+				1, recordLength) + 2, files5.size());
 		
+		assertEquals(1, journal.getOpenedFilesCount());
+		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD,
@@ -1577,30 +1663,33 @@
 		
 		List<String> files6 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files6.size());
+		assertEquals(4, files6.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		addWithSize(recordLength - JournalImpl.SIZE_ADD_RECORD, 4);    // in file 3
 		
 		List<String> files7 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(4, files7.size());
+		assertEquals(5, files7.size());
 		
 		assertEquals(3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());
 		
 		commit(1);   // in file 4
 		
 		List<String> files8 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(4, files8.size());
+		assertEquals(5, files8.size());
 		
 		assertEquals(3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(3, journal.getIDMapSize());
 		
 		//Restart
@@ -1624,7 +1713,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		addTx(1, 1);          // in file 0
@@ -1634,7 +1724,8 @@
 		assertEquals(2, files1.size());
 		
 		assertEquals(0, journal.getDataFilesCount());
-		assertEquals(1, journal.getFreeFilesCount());
+		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(0, journal.getIDMapSize());
 		
 		//Make sure we move on to the next file
@@ -1653,10 +1744,11 @@
 		
 		List<String> files3 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(2, files3.size());
+		assertEquals(3, files3.size());
 		
 		assertEquals(1, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(1, journal.getIDMapSize());
 		
 		delete(2);            // in file 1
@@ -1666,8 +1758,10 @@
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD,
-				1, JournalImpl.SIZE_DELETE_RECORD) + 1 , files4.size());
+				1, JournalImpl.SIZE_DELETE_RECORD) + 2 , files4.size());
 		
+		assertEquals(1, journal.getOpenedFilesCount());
+		
 		assertEquals(calculateNumberOfFiles(fileSize, journal.getAlignment(), 
 				2, recordLength,
 				1, JournalImpl.SIZE_PREPARE_RECORD,
@@ -1683,57 +1777,62 @@
 		
 		List<String> files5 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files5.size());
+		assertEquals(4, files5.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(1, journal.getIDMapSize());
+		assertEquals(1, journal.getOpenedFilesCount());
 		
 		checkAndReclaimFiles();
 		
 		List<String> files6 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files6.size());
+		assertEquals(4, files6.size());
 		
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(1, journal.getIDMapSize());
+      assertEquals(1, journal.getOpenedFilesCount());
 		
 		addWithSize(1024 - JournalImpl.SIZE_ADD_RECORD,4);    // in file 3
 		
 		List<String> files7 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(4, files7.size());
+		assertEquals(5, files7.size());
 		
 		assertEquals(3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());
 		
 		commit(1);   // in file 3
 		
 		List<String> files8 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(4, files8.size());
+		assertEquals(5, files8.size());
 		
 		assertEquals(3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(3, journal.getIDMapSize());
+      assertEquals(1, journal.getOpenedFilesCount());
 		
 		delete(1);   // in file 3
 		
 		List<String> files9 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(journal.getAlignment()==1?4:5, files9.size());
+		assertEquals(journal.getAlignment()==1?5:6, files9.size());
 		
 		assertEquals(journal.getAlignment()==1?3:4, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getIDMapSize());
 		
 		checkAndReclaimFiles();
 		
 		List<String> files10 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(journal.getAlignment()==1?4:3, files10.size());
+		assertEquals(journal.getAlignment()==1?5:4, files10.size());
 		
 		assertEquals(journal.getAlignment()==1?3:2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
@@ -1743,10 +1842,11 @@
 		
 		List<String> files11 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(journal.getAlignment()==1?5:3, files11.size());
+		assertEquals(journal.getAlignment()==1?6:4, files11.size());
 		
 		assertEquals(journal.getAlignment()==1?4:2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(3, journal.getIDMapSize());
 		
 		checkAndReclaimFiles();
@@ -1755,8 +1855,9 @@
 		
 		//File 0, and File 1  should be deleted
 		
-		assertEquals(3, files12.size());
-		
+		assertEquals(4, files12.size());
+
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(3, journal.getIDMapSize());
@@ -1773,8 +1874,10 @@
 		
 		List<String> files13 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(journal.getAlignment()==1?3:4, files13.size());
+		assertEquals(journal.getAlignment()==1?4:5, files13.size());
 		
+		assertEquals(1, journal.getOpenedFilesCount());
+		
 		assertEquals(journal.getAlignment()==1?2:3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(2, journal.getIDMapSize());
@@ -1785,8 +1888,9 @@
 		
 		log.info("Debug journal on testPrepareReclaim ->\n" + debugJournal());
 		
-		assertEquals(4, files14.size());
+		assertEquals(5, files14.size());
 		
+		assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(3, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(3, journal.getIDMapSize());
@@ -1797,8 +1901,9 @@
 		
 		List<String> files15 = fileFactory.listFiles(fileExtension);
 		
-		assertEquals(3, files15.size());
+		assertEquals(4, files15.size());
 		
+      assertEquals(1, journal.getOpenedFilesCount());
 		assertEquals(2, journal.getDataFilesCount());
 		assertEquals(0, journal.getFreeFilesCount());
 		assertEquals(3, journal.getIDMapSize());




More information about the jboss-cvs-commits mailing list