[Mulgara-svn] r859 - projects/xa2/object-pool/src

andrae at mulgara.org andrae at mulgara.org
Mon Apr 28 08:58:13 UTC 2008


Author: andrae
Date: 2008-04-28 01:58:12 -0700 (Mon, 28 Apr 2008)
New Revision: 859

Modified:
   projects/xa2/object-pool/src/CompBlockTrie.java
   projects/xa2/object-pool/src/CompBlockTrieTest.java
   projects/xa2/object-pool/src/CompMemTrie.java
   projects/xa2/object-pool/src/CompMemTrieTest.java
Log:
Profiling suggests that the use of exceptions for flow control was a really bad idea.

 69.9%     0  +  8033    java.lang.Throwable.fillInStackTrace

Altered insert to return a boolean.



Modified: projects/xa2/object-pool/src/CompBlockTrie.java
===================================================================
--- projects/xa2/object-pool/src/CompBlockTrie.java	2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompBlockTrie.java	2008-04-28 08:58:12 UTC (rev 859)
@@ -52,7 +52,7 @@
     this.space = 0; // If this gets modified it will be recalculated automaticly then.
   }
 
-  public void insert(byte[] key, long value) throws CompMemTrie.InsufficientSpace {
+  public boolean insert(byte[] key, long value) {
     // Space was calculated on the basis of worst-case - if we were worst case we have now filled the
     // trie-block, but if we haven't we should recalculate the space available. 
     if (space == 0) {
@@ -61,12 +61,14 @@
       if (space < 0) {
         throw new IllegalStateException("Overfilled CompBlockTrie");
       } else if (space == 0) {
-        throw new CompMemTrie.InsufficientSpace("Trie Node is filled");
+        return false;
       }
     }
 
     super.insert(key, value);
     space--;
+
+    return true;
   }
 
   public void write(ByteBuffer index, FileChannel data) throws InsufficientSpace, IOException {

Modified: projects/xa2/object-pool/src/CompBlockTrieTest.java
===================================================================
--- projects/xa2/object-pool/src/CompBlockTrieTest.java	2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompBlockTrieTest.java	2008-04-28 08:58:12 UTC (rev 859)
@@ -63,17 +63,16 @@
     for (int i = 0; i < limit; i++) {
       // The use of the double loop means we pay the cost of setting up the exception handler only once per
       // block, not once per entry.
-      try {
-        if (name == null) {
-          break;
-        }
-        trie.insert(name.getBytes(), n);
+      if (name == null) {
+        break;
+      }
+      if (trie.insert(name.getBytes(), n)) {
         // Note: exception thrown here if trie is full.  So name will remain valid when we reenter loop with
         // a new trie.
         namesMap.put(name.getBytes(), n);
         name = names.readLine();
         n++;
-      } catch (CompMemTrie.InsufficientSpace ec) {
+      } else {
         trie.write((ByteBuffer)indexBuffer.clear(), dataFile);
         indexFile.write((ByteBuffer)indexBuffer.flip());
         tries.add(trie);

Modified: projects/xa2/object-pool/src/CompMemTrie.java
===================================================================
--- projects/xa2/object-pool/src/CompMemTrie.java	2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompMemTrie.java	2008-04-28 08:58:12 UTC (rev 859)
@@ -35,7 +35,7 @@
     this.root = null;
   }
 
-  public void insert(byte[] key, long value) throws InsufficientSpace {
+  public boolean insert(byte[] key, long value) {
     if (root == null) {
       root = new TrieLeaf(key, value);
     } else {
@@ -45,6 +45,8 @@
         root = new TrieBranch(root, key, value);
       }
     }
+
+    return true;
   }
 
   public long lookup(byte[] key) throws NotFound {

Modified: projects/xa2/object-pool/src/CompMemTrieTest.java
===================================================================
--- projects/xa2/object-pool/src/CompMemTrieTest.java	2008-04-28 08:11:30 UTC (rev 858)
+++ projects/xa2/object-pool/src/CompMemTrieTest.java	2008-04-28 08:58:12 UTC (rev 859)
@@ -48,7 +48,7 @@
     long _endInsert = System.currentTimeMillis();
     names.close();
 
-    System.out.println("Checking lines from " + file);
+    System.out.println("Checking " + n + " lines from " + file);
     long _startLookup = System.currentTimeMillis();
     for (byte[] key : namesMap.keySet()) {
       if (namesTrie.lookup(key) != namesMap.get(key)) {




More information about the Mulgara-svn mailing list