[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