[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