[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