[jboss-cvs] JBoss Messaging SVN: r4761 - in trunk: src/main/org/jboss/messaging/core/journal/impl and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jul 31 15:19:13 EDT 2008
Author: clebert.suconic at jboss.com
Date: 2008-07-31 15:19:13 -0400 (Thu, 31 Jul 2008)
New Revision: 4761
Modified:
trunk/src/main/org/jboss/messaging/core/journal/Journal.java
trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java
trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/AlignedJournalImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestBase.java
Log:
Journal: few tweaks and adding a new test on reloading prepared transactions
Modified: trunk/src/main/org/jboss/messaging/core/journal/Journal.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/Journal.java 2008-07-31 14:37:28 UTC (rev 4760)
+++ trunk/src/main/org/jboss/messaging/core/journal/Journal.java 2008-07-31 19:19:13 UTC (rev 4761)
@@ -73,8 +73,6 @@
long load(List<RecordInfo> committedRecords,
List<PreparedTransactionInfo> preparedTransactions) throws Exception;
- long load(LoadManager reloadManager) throws Exception;
-
int getAlignment() throws Exception;
}
Modified: trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java 2008-07-31 14:37:28 UTC (rev 4760)
+++ trunk/src/main/org/jboss/messaging/core/journal/TestableJournal.java 2008-07-31 19:19:13 UTC (rev 4761)
@@ -60,7 +60,15 @@
int getMaxAIO();
+ /** This method could be promoted to Journal interface when we decide to use the loadManager
+ * instead of load(List,List)
+ */
+ long load(LoadManager reloadManager) throws Exception;
+
+
void forceMoveNextFile() throws Exception;
- void disableAutoReclaiming();
+ void setAutoReclaim(boolean autoReclaim);
+
+ boolean isAutoReclaim();
}
Modified: trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java 2008-07-31 14:37:28 UTC (rev 4760)
+++ trunk/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java 2008-07-31 19:19:13 UTC (rev 4761)
@@ -1049,7 +1049,6 @@
else
{
log.warn("Prepared transaction " + healthy + " wasn't considered completed, it will be ignored");
- journalTransaction.setInvalid(true);
tx.invalid = true;
}
@@ -1247,13 +1246,19 @@
return this.fileFactory.getAlignment();
}
- public void checkReclaimStatus() throws Exception
+ // TestableJournal implementation --------------------------------------------------------------
+
+
+ public void setAutoReclaim(boolean autoReclaim)
{
- JournalFile[] files = new JournalFile[dataFiles.size()];
-
- reclaimer.scan(dataFiles.toArray(files));
+ this.autoReclaim = autoReclaim;
}
+ public boolean isAutoReclaim()
+ {
+ return this.autoReclaim;
+ }
+
public String debug() throws Exception
{
this.checkReclaimStatus();
@@ -1294,8 +1299,6 @@
return builder.toString();
}
- // TestableJournal implementation --------------------------------------------------------------
-
/** Method for use on testcases.
* It will call waitComplete on every transaction, so any assertions on the file system will be correct after this */
public void debugWait() throws Exception
@@ -1428,11 +1431,6 @@
debugWait();
}
- public void disableAutoReclaiming()
- {
- this.autoReclaim = false;
- }
-
// MessagingComponent implementation ---------------------------------------------------
public synchronized boolean isStarted()
@@ -1490,6 +1488,13 @@
// Private -----------------------------------------------------------------------------
+ private void checkReclaimStatus() throws Exception
+ {
+ JournalFile[] files = new JournalFile[dataFiles.size()];
+
+ reclaimer.scan(dataFiles.toArray(files));
+ }
+
// Discard the old JournalFile and set it with a new ID
private JournalFile reinitializeFile(final JournalFile file) throws Exception
{
@@ -1516,7 +1521,6 @@
return jf;
}
- @SuppressWarnings("unchecked")
private Pair<Integer, Integer>[] readReferencesOnTransaction(final int variableSize, final ByteBuffer bb)
{
int numberOfFiles = variableSize / (SIZE_INT * 2);
@@ -1525,7 +1529,7 @@
for (int i = 0; i < numberOfFiles; i++)
{
- values[i] = new Pair(bb.getInt(), bb.getInt());
+ values[i] = new Pair<Integer, Integer>(bb.getInt(), bb.getInt());
}
return values;
@@ -1736,7 +1740,7 @@
String fileName = filePrefix + "-" + orderingID + "." + fileExtension;
- if (trace) log.trace("Creating file " + fileName);
+ if (trace) trace("Creating file " + fileName);
SequentialFile sequentialFile = fileFactory.createSequentialFile(fileName, maxAIO);
@@ -1772,7 +1776,7 @@
private int generateOrderingID()
{
- return nextOrderingId.addAndGet(1);
+ return nextOrderingId.incrementAndGet();
}
// You need to guarantee lock.acquire() over currentFile before calling this method
@@ -1807,7 +1811,7 @@
// You need to guarantee lock.acquire() before calling this method
private JournalFile enqueueOpenFile() throws InterruptedException
{
- if (trace) log.trace("enqueueOpenFile with openedFiles.size=" + openedFiles.size());
+ if (trace) trace("enqueueOpenFile with openedFiles.size=" + openedFiles.size());
filesExecutor.execute(new Runnable()
{
@@ -2030,18 +2034,6 @@
// Used to verify completion on reload
private final Map<Integer, AtomicInteger> numberOfElements = new HashMap<Integer, AtomicInteger>();
- private boolean invalid = false;
-
- public void setInvalid(boolean b)
- {
- this.invalid = b;
- }
-
- public boolean isInvalid()
- {
- return this.invalid;
- }
-
public Map<Integer, AtomicInteger> getElementsSummary()
{
return numberOfElements;
@@ -2104,10 +2096,8 @@
if (posFiles != null)
{
- //throw new IllegalStateException("Cannot find add info " + n.b);
posFiles.addDelete(n.a);
}
-
}
}
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/AlignedJournalImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/AlignedJournalImplTest.java 2008-07-31 14:37:28 UTC (rev 4760)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/AlignedJournalImplTest.java 2008-07-31 19:19:13 UTC (rev 4761)
@@ -77,12 +77,10 @@
FakeSequentialFileFactory factory = new FakeSequentialFileFactory(200, true);
- SequentialFile file = factory.createSequentialFile("test1", 100);
+ SequentialFile file = factory.createSequentialFile("test1", 1);
file.open();
-
-
try
{
ByteBuffer buffer = ByteBuffer.allocateDirect(57);
@@ -273,7 +271,7 @@
setupJournal(JOURNAL_SIZE, 100);
- journalImpl.disableAutoReclaiming();
+ journalImpl.setAutoReclaim(false);
journalImpl.checkAndReclaimFiles();
@@ -318,7 +316,7 @@
setupJournal(JOURNAL_SIZE, 100);
- journalImpl.disableAutoReclaiming();
+ journalImpl.setAutoReclaim(false);
journalImpl.checkAndReclaimFiles();
@@ -416,7 +414,7 @@
setupJournal(JOURNAL_SIZE, 100);
- journalImpl.disableAutoReclaiming();
+ journalImpl.setAutoReclaim(false);
assertEquals(0, records.size());
assertEquals(0, transactions.size());
@@ -562,7 +560,7 @@
journalImpl.appendCommitRecord(1l);
- SequentialFile file = factory.createSequentialFile("tt-1.tt", 10000);
+ SequentialFile file = factory.createSequentialFile("tt-1.tt", 1);
file.open();
@@ -631,7 +629,7 @@
journalImpl.appendCommitRecord(2l);
- SequentialFile file = factory.createSequentialFile("tt-1.tt", 10000);
+ SequentialFile file = factory.createSequentialFile("tt-1.tt", 1);
file.open();
@@ -744,7 +742,7 @@
journalImpl.appendCommitRecord(1l);
- SequentialFile file = factory.createSequentialFile("tt-1.tt", 10000);
+ SequentialFile file = factory.createSequentialFile("tt-1.tt", 1);
file.open();
@@ -925,6 +923,56 @@
}
+ public void testReloadInvalidPrepared() throws Exception
+ {
+ final int JOURNAL_SIZE = 3000;
+
+ setupJournal(JOURNAL_SIZE, 100);
+
+ assertEquals(0, records.size());
+ assertEquals(0, transactions.size());
+
+ for (int i = 0; i < 10; i++)
+ {
+ journalImpl.appendAddRecordTransactional(1, i, (byte) 1, new SimpleEncoding(50,(byte) 1));
+ journalImpl.forceMoveNextFile();
+ }
+ journalImpl.appendPrepareRecord(1l);
+
+ setupJournal(JOURNAL_SIZE, 100);
+ assertEquals(0, records.size());
+ assertEquals(1, transactions.size());
+
+ SequentialFile file = factory.createSequentialFile("tt-1.tt", 1);
+
+ file.open();
+
+ ByteBuffer buffer = ByteBuffer.allocate(100);
+
+ // Messing up with the first record (removing the position)
+ file.position(100);
+
+ file.read(buffer);
+
+ buffer.position(1);
+
+ buffer.putInt(-1);
+
+ buffer.rewind();
+
+ // Messing up with the first record (changing the fileID, so Journal reload will think the record came from a different journal usage)
+ file.position(100);
+
+ file.write(buffer, true);
+
+ file.close();
+
+ setupJournal(JOURNAL_SIZE, 100);
+
+ assertEquals(0, records.size());
+ assertEquals(0, transactions.size());
+ }
+
public void testReclaimAfterRollabck() throws Exception
{
final int JOURNAL_SIZE = 2000;
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestBase.java 2008-07-31 14:37:28 UTC (rev 4760)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestBase.java 2008-07-31 19:19:13 UTC (rev 4761)
@@ -140,9 +140,8 @@
public void createJournal() throws Exception
{
- journal =
- new JournalImpl(fileSize, minFiles, sync, sync, fileFactory, filePrefix, fileExtension, maxAIO);
- journal.disableAutoReclaiming();
+ journal = new JournalImpl(fileSize, minFiles, sync, sync, fileFactory, filePrefix, fileExtension, maxAIO);
+ journal.setAutoReclaim(false);
}
protected void startJournal() throws Exception
More information about the jboss-cvs-commits
mailing list