[jboss-cvs] JBoss Messaging SVN: r5166 - in branches/Branch_Chunk_Clebert: src/main/org/jboss/messaging/core/journal/impl and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Oct 21 19:27:29 EDT 2008


Author: clebert.suconic at jboss.com
Date: 2008-10-21 19:27:28 -0400 (Tue, 21 Oct 2008)
New Revision: 5166

Modified:
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalServerLargeMessageImpl.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageServerLargeMessageImpl.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/ServerLargeMessage.java
   branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/impl/ServerSessionPacketHandler.java
   branches/Branch_Chunk_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java
Log:
Treating temporary files on sending files and big messages

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -77,5 +77,7 @@
    void sync() throws Exception;
 
    long size() throws Exception;
+   
+   void renameTo(SequentialFile file) throws Exception;
 
 }

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -179,6 +179,14 @@
       open(maxIO);
    }
 
+   /* (non-Javadoc)
+    * @see org.jboss.messaging.core.journal.SequentialFile#renameTo(org.jboss.messaging.core.journal.SequentialFile)
+    */
+   public void renameTo(SequentialFile file) throws Exception
+   {
+      throw new IllegalStateException ("method rename not supported on AIO");
+      
+   }
    public synchronized void open(final int currentMaxIO) throws Exception
    {
       opened = true;
@@ -368,4 +376,5 @@
          return;
       }
    }
+
 }

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -43,13 +43,8 @@
 public class NIOSequentialFile implements SequentialFile
 {
    private static final Logger log = Logger.getLogger(NIOSequentialFile.class);
+   private File file;
 
-   private final String journalDir;
-
-   private final String fileName;
-
-   private final File file;
-
    private FileChannel channel;
 
    private RandomAccessFile rfile;
@@ -58,12 +53,7 @@
 
    public NIOSequentialFile(final String journalDir, final String fileName)
    {
-      this.journalDir = journalDir;
-
-      this.fileName = fileName;
-
-      this.file = new File(journalDir + "/" + fileName);
-
+       this.file = new File(journalDir + "/" + fileName);
    }
 
    public int getAlignment()
@@ -78,7 +68,7 @@
 
    public String getFileName()
    {
-      return fileName;
+      return file.getName();
    }
    
    public synchronized boolean isOpen()
@@ -125,9 +115,15 @@
 
    public void close() throws Exception
    {
-      channel.close();
+      if (channel != null)
+      {
+         channel.close();
+      }
 
-      rfile.close();
+      if (rfile != null)
+      {
+         rfile.close();
+      }
 
       channel = null;
 
@@ -214,7 +210,8 @@
          throw e;
       }
    }
-
+   
+   
    public void sync() throws Exception
    {
       channel.force(false);
@@ -234,10 +231,21 @@
    {
       return channel.position();
    }
+
+   public void renameTo(SequentialFile newFile) throws Exception
+   {
+      close();
+      this.file.renameTo(((NIOSequentialFile)newFile).file);
+      file = ((NIOSequentialFile)newFile).file;
+   }
    
+   
+   
    public String toString()
    {
-      return "NIOSequentialFile " + this.fileName;
+      return "NIOSequentialFile " + this.file;
    }
 
+   
+   
 }

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalServerLargeMessageImpl.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalServerLargeMessageImpl.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalServerLargeMessageImpl.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -26,6 +26,7 @@
 
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.journal.SequentialFile;
+import org.jboss.messaging.core.journal.impl.NIOSequentialFile;
 import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.remoting.spi.MessagingBuffer;
 import org.jboss.messaging.core.server.ServerLargeMessage;
@@ -51,7 +52,10 @@
 
    private final JournalStorageManager storageManager;
 
-   private SequentialFile file;
+   // We should only use the NIO implementation on the Journal
+   private volatile SequentialFile file;
+   
+   private volatile boolean complete = false;
 
    // Static --------------------------------------------------------
 
@@ -151,6 +155,8 @@
    @Override
    public void decode(final MessagingBuffer buffer)
    {
+      file = null;
+      complete = true;
       decodeProperties(buffer);
    }
 
@@ -187,6 +193,17 @@
       // The body won't be on memory (aways on-file), so we don't consider this for paging
       return super.getPropertiesEncodeSize();
    }
+   
+   public synchronized void complete() throws Exception
+   {
+      releaseResources();
+      
+      if (!complete)
+      {
+         SequentialFile fileToRename = storageManager.createFileForLargeMessage(this.getMessageID(), true);
+         file.renameTo(fileToRename);         
+      }
+   }
 
    public synchronized void releaseResources() throws Exception
    {
@@ -210,8 +227,9 @@
          {
             throw new RuntimeException("MessageID not set on LargeMessage");
          }
-
-         file = storageManager.createFileForLargeMessage(this.getMessageID());
+         
+         file = storageManager.createFileForLargeMessage(this.getMessageID(), complete);
+         
       }
    }
 

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/journal/JournalStorageManager.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -749,9 +749,16 @@
     * @param messageID
     * @return
     */
-   SequentialFile createFileForLargeMessage(long messageID)
+   SequentialFile createFileForLargeMessage(final long messageID, final boolean completeFile)
    {
-      return largeMessagesFactory.createSequentialFile(messageID + ".msg", -1);
+      if (completeFile)
+      {
+         return largeMessagesFactory.createSequentialFile(messageID + ".msg", -1);
+      }
+      else
+      {
+         return largeMessagesFactory.createSequentialFile(messageID + ".tmp", -1);
+      }
    }
 
    // Private ----------------------------------------------------------------------------------

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageServerLargeMessageImpl.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageServerLargeMessageImpl.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/persistence/impl/nullpm/NullStorageServerLargeMessageImpl.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -94,6 +94,15 @@
       // nothing to be done here.. we don really have a file on this Storage
    }
 
+   /* (non-Javadoc)
+    * @see org.jboss.messaging.core.server.ServerLargeMessage#complete()
+    */
+   public void complete() throws Exception
+   {
+      // nothing to be done here.. we don really have a file on this Storage
+      
+   }
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/ServerLargeMessage.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/ServerLargeMessage.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/ServerLargeMessage.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -38,6 +38,8 @@
    /** Close the files if opened */
    void releaseResources() throws Exception;
    
+   void complete() throws Exception;
+   
    void deleteFile() throws Exception;
 
 }

Modified: branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/impl/ServerSessionPacketHandler.java
===================================================================
--- branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/impl/ServerSessionPacketHandler.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/src/main/org/jboss/messaging/core/server/impl/ServerSessionPacketHandler.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -410,6 +410,7 @@
                
                if (!message.isContinues())
                {
+                  largeMessage.complete();
                   session.clearCurrentLargeMessage(message.getTargetID());
                   session.sendProducerMessage(message.getTargetID(), largeMessage);
                }

Modified: branches/Branch_Chunk_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java
===================================================================
--- branches/Branch_Chunk_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java	2008-10-21 22:38:02 UTC (rev 5165)
+++ branches/Branch_Chunk_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java	2008-10-21 23:27:28 UTC (rev 5166)
@@ -528,6 +528,14 @@
          }
       }
 
+      /* (non-Javadoc)
+       * @see org.jboss.messaging.core.journal.SequentialFile#renameTo(org.jboss.messaging.core.journal.SequentialFile)
+       */
+      public void renameTo(SequentialFile file) throws Exception
+      {
+         throw new IllegalStateException("Method rename not supoprted on FakeSequentialFile");
+      }
+
    }
 
 }




More information about the jboss-cvs-commits mailing list