You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2011/07/30 23:41:18 UTC

svn commit: r1152521 - /activemq/trunk/kahadb/src/main/java/org/apache/kahadb/page/Transaction.java

Author: tabish
Date: Sat Jul 30 21:41:17 2011
New Revision: 1152521

URL: http://svn.apache.org/viewvc?rev=1152521&view=rev
Log:
Apply patch for: https://issues.apache.org/jira/browse/AMQ-3292

Modified:
    activemq/trunk/kahadb/src/main/java/org/apache/kahadb/page/Transaction.java

Modified: activemq/trunk/kahadb/src/main/java/org/apache/kahadb/page/Transaction.java
URL: http://svn.apache.org/viewvc/activemq/trunk/kahadb/src/main/java/org/apache/kahadb/page/Transaction.java?rev=1152521&r1=1152520&r2=1152521&view=diff
==============================================================================
--- activemq/trunk/kahadb/src/main/java/org/apache/kahadb/page/Transaction.java (original)
+++ activemq/trunk/kahadb/src/main/java/org/apache/kahadb/page/Transaction.java Sat Jul 30 21:41:17 2011
@@ -28,7 +28,6 @@ import org.apache.kahadb.util.*;
  */
 public class Transaction implements Iterable<Page> {
 
-
     private RandomAccessFile tmpFile;
     private File txFile;
     private int nextLocation = 0;
@@ -42,7 +41,7 @@ public class Transaction implements Iter
             super(message);
         }
     }
-    
+
     /**
      * The InvalidPageIOException is thrown if try to load/store a a page
      * with an invalid page id.
@@ -58,11 +57,11 @@ public class Transaction implements Iter
         public long getPage() {
             return page;
         }
-    }    
-    
+    }
+
     /**
      * This closure interface is intended for the end user implement callbacks for the Transaction.exectue() method.
-     * 
+     *
      * @param <T> The type of exceptions that operation will throw.
      */
     public interface Closure <T extends Throwable> {
@@ -71,18 +70,18 @@ public class Transaction implements Iter
 
     /**
      * This closure interface is intended for the end user implement callbacks for the Transaction.exectue() method.
-     * 
+     *
      * @param <R> The type of result that the closure produces.
      * @param <T> The type of exceptions that operation will throw.
      */
     public interface CallableClosure<R, T extends Throwable> {
         public R execute(Transaction tx) throws T;
     }
-    
+
 
     // The page file that this Transaction operates against.
     private final PageFile pageFile;
-    // If this transaction is updating stuff.. this is the tx of 
+    // If this transaction is updating stuff.. this is the tx of
     private long writeTransactionId=-1;
     // List of pages that this transaction has modified.
     private TreeMap<Long, PageWrite> writes=new TreeMap<Long, PageWrite>();
@@ -106,10 +105,10 @@ public class Transaction implements Iter
         return this.pageFile;
     }
 
-    /** 
+    /**
      * Allocates a free page that you can write data to.
-     * 
-     * @return a newly allocated page.  
+     *
+     * @return a newly allocated page.
      * @throws IOException
      *         If an disk error occurred.
      * @throws IllegalStateException
@@ -119,18 +118,18 @@ public class Transaction implements Iter
         return allocate(1);
     }
 
-    /** 
+    /**
      * Allocates a block of free pages that you can write data to.
-     * 
+     *
      * @param count the number of sequential pages to allocate
-     * @return the first page of the sequential set. 
+     * @return the first page of the sequential set.
      * @throws IOException
      *         If an disk error occurred.
      * @throws IllegalStateException
      *         if the PageFile is not loaded
      */
     public <T> Page<T> allocate(int count) throws IOException {
-        // TODO: we need to track allocated pages so that they can be returned if the 
+        // TODO: we need to track allocated pages so that they can be returned if the
         // transaction gets rolled back.
         Page<T> rc = pageFile.allocate(count);
         allocateList.add(new Sequence(rc.getPageId(), rc.getPageId()+count-1));
@@ -139,7 +138,7 @@ public class Transaction implements Iter
 
     /**
      * Frees up a previously allocated page so that it can be re-allocated again.
-     * 
+     *
      * @param pageId the page to free up
      * @throws IOException
      *         If an disk error occurred.
@@ -152,10 +151,10 @@ public class Transaction implements Iter
 
     /**
      * Frees up a previously allocated sequence of pages so that it can be re-allocated again.
-     * 
+     *
      * @param pageId the initial page of the sequence that will be getting freed
      * @param count the number of pages in the sequence
-     * 
+     *
      * @throws IOException
      *         If an disk error occurred.
      * @throws IllegalStateException
@@ -167,10 +166,10 @@ public class Transaction implements Iter
 
     /**
      * Frees up a previously allocated sequence of pages so that it can be re-allocated again.
-     * 
+     *
      * @param page the initial page of the sequence that will be getting freed
      * @param count the number of pages in the sequence
-     * 
+     *
      * @throws IOException
      *         If an disk error occurred.
      * @throws IllegalStateException
@@ -187,10 +186,10 @@ public class Transaction implements Iter
             page = null;
         }
     }
-    
+
     /**
      * Frees up a previously allocated page so that it can be re-allocated again.
-     * 
+     *
      * @param page the page to free up
      * @throws IOException
      *         If an disk error occurred.
@@ -227,15 +226,15 @@ public class Transaction implements Iter
     }
 
     /**
-     * 
+     *
      * @param page
      *        the page to write. The Page object must be fully populated with a valid pageId, type, and data.
      * @param marshaller
      *        the marshaler to use to load the data portion of the Page, may be null if you do not wish to write the data.
      * @param overflow
-     *        If true, then if the page data marshalls to a bigger size than can fit in one page, then additional 
+     *        If true, then if the page data marshalls to a bigger size than can fit in one page, then additional
      *        overflow pages are automatically allocated and chained to this page to store all the data.  If false,
-     *        and the overflow condition would occur, then the PageOverflowIOException is thrown. 
+     *        and the overflow condition would occur, then the PageOverflowIOException is thrown.
      * @throws IOException
      *         If an disk error occurred.
      * @throws PageOverflowIOException
@@ -344,8 +343,8 @@ public class Transaction implements Iter
 
     /**
      * Loads a page from disk.
-     * 
-     * @param pageId 
+     *
+     * @param pageId
      *        the id of the page to load
      * @param marshaller
      *        the marshaler to use to load the data portion of the Page, may be null if you do not wish to load the data.
@@ -364,14 +363,14 @@ public class Transaction implements Iter
 
     /**
      * Loads a page from disk.
-     * 
-     * @param page - The pageId field must be properly set 
+     *
+     * @param page - The pageId field must be properly set
      * @param marshaller
      *        the marshaler to use to load the data portion of the Page, may be null if you do not wish to load the data.
      * @throws IOException
      *         If an disk error occurred.
      * @throws InvalidPageIOException
-     *         If the page is is not valid.      
+     *         If the page is is not valid.
      * @throws IllegalStateException
      *         if the PageFile is not loaded
      */
@@ -436,9 +435,9 @@ public class Transaction implements Iter
 
             private Page readPage(Page page) throws IOException {
                 // Read the page data
-                
+
                 pageFile.readPage(page.getPageId(), chunk.getData());
-                
+
                 chunk.setOffset(0);
                 chunk.setLength(pageFile.getPageSize());
 
@@ -542,11 +541,11 @@ public class Transaction implements Iter
     }
 
     /**
-     * Allows you to iterate through all active Pages in this object.  Pages with type Page.FREE_TYPE are 
-     * not included in this iteration. 
-     * 
+     * Allows you to iterate through all active Pages in this object.  Pages with type Page.FREE_TYPE are
+     * not included in this iteration.
+     *
      * Pages removed with Iterator.remove() will not actually get removed until the transaction commits.
-     * 
+     *
      * @throws IllegalStateException
      *         if the PageFile is not loaded
      */
@@ -558,7 +557,7 @@ public class Transaction implements Iter
     /**
      * Allows you to iterate through all active Pages in this object.  You can optionally include free pages in the pages
      * iterated.
-     * 
+     *
      * @param includeFreePages - if true, free pages are included in the iteration
      * @throws IllegalStateException
      *         if the PageFile is not loaded
@@ -623,7 +622,7 @@ public class Transaction implements Iter
                     free(lastPage);
                     lastPage = null;
                 } catch (IOException e) {
-                    new RuntimeException(e);
+                    throw new RuntimeException(e);
                 }
             }
         };
@@ -632,7 +631,7 @@ public class Transaction implements Iter
     ///////////////////////////////////////////////////////////////////
     // Commit / Rollback related methods..
     ///////////////////////////////////////////////////////////////////
-    
+
     /**
      * Commits the transaction to the PageFile as a single 'Unit of Work'. Either all page updates associated
      * with the transaction are written to disk or none will.
@@ -643,7 +642,7 @@ public class Transaction implements Iter
             pageFile.write(writes.entrySet());
             // Release the pages that were freed up in the transaction..
             freePages(freeList);
-            
+
             freeList.clear();
             allocateList.clear();
             writes.clear();
@@ -721,7 +720,7 @@ public class Transaction implements Iter
             write = new PageWrite(page, data);
         }
         writes.put(key, write);
-    }   
+    }
 
     /**
      * @param list
@@ -738,22 +737,22 @@ public class Transaction implements Iter
             seq = seq.getNext();
         }
     }
-    
+
     /**
      * @return true if there are no uncommitted page file updates associated with this transaction.
      */
     public boolean isReadOnly() {
         return writeTransactionId==-1;
     }
-    
+
     ///////////////////////////////////////////////////////////////////
     // Transaction closure helpers...
     ///////////////////////////////////////////////////////////////////
-    
+
     /**
      * Executes a closure and if it does not throw any exceptions, then it commits the transaction.
      * If the closure throws an Exception, then the transaction is rolled back.
-     * 
+     *
      * @param <T>
      * @param closure - the work to get exectued.
      * @throws T if the closure throws it
@@ -776,7 +775,7 @@ public class Transaction implements Iter
     /**
      * Executes a closure and if it does not throw any exceptions, then it commits the transaction.
      * If the closure throws an Exception, then the transaction is rolled back.
-     * 
+     *
      * @param <T>
      * @param closure - the work to get exectued.
      * @throws T if the closure throws it