You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by ka...@apache.org on 2009/03/15 06:23:11 UTC

svn commit: r754616 - in /labs/bananadb/trunk: ./ src/main/java/org/apache/labs/bananadb/hashtable/ src/main/java/org/apache/labs/bananadb/hashtable/lock/ src/main/java/org/apache/labs/bananadb/hashtable/txn/ src/main/java/org/apache/labs/bananadb/lock...

Author: kalle
Date: Sun Mar 15 05:23:10 2009
New Revision: 754616

URL: http://svn.apache.org/viewvc?rev=754616&view=rev
Log:
BananaDB

replaced commons-logging with slf4j
more documentation
a bunch of name space refactors

Added:
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Benchmark.java
      - copied, changed from r754462, labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/Benchmark.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/
      - copied from r753612, labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/lock/
Removed:
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/lock/
    labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/Benchmark.java
Modified:
    labs/bananadb/trunk/BENCHMARK.txt
    labs/bananadb/trunk/FILES.txt
    labs/bananadb/trunk/pom.xml
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Hashtable.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/HashtableAccessor.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/ValueClassHandler.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Isolation.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Transaction.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/Lock.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockFactory.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockObtainFailedException.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockReleaseFailedException.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockStressTest.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockVerifyServer.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NativeFSLockFactory.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoLockFactory.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoSuchDirectoryException.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SimpleFSLockFactory.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SingleInstanceLockFactory.java
    labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/VerifyingLockFactory.java
    labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/HashtableTest.java
    labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestHashtable.java
    labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestMultiThreaded.java
    labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestRehash.java
    labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestValuePartitions.java

Modified: labs/bananadb/trunk/BENCHMARK.txt
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/BENCHMARK.txt?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/BENCHMARK.txt (original)
+++ labs/bananadb/trunk/BENCHMARK.txt Sun Mar 15 05:23:10 2009
@@ -58,4 +58,24 @@
 
 
 
-kalle@apache.org
\ No newline at end of file
+kalle@apache.org
+
+
+
+capacity	items	random write ms/item	sequencial read ms/items	random read ms/item
+8000	1000	0.805	0.1293	0.15842
+12000	1500	0.683	0.11794	0.15646
+18000	2250	0.877   0.09969	0.33615
+27000	3375	0.691	0.10393	0.21926
+40496	5062	0.786	0.1072	0.25094
+60744	7593	0.724	0.09941	0.3041
+91112	11389	0.817	0.12546	0.31408
+136664	17083	1.065	0.09652	0.48662
+204992	25624	1.145	0.12075	0.72948
+307488	38436	1.560	0.10247	0.92083
+461232	57654	1.223	0.09537	0.61455
+691848	86481	2.614	0.11821	1.35132
+1037768	129721	1.004	9.79918	0.32858
+1556648	194581	2.991	2.49016	0.98731
+2334968	291871	2.382	4.32559	0.58027
+3502448	437806	1.338	5.19182	0.27377
\ No newline at end of file

Modified: labs/bananadb/trunk/FILES.txt
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/FILES.txt?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/FILES.txt (original)
+++ labs/bananadb/trunk/FILES.txt Sun Mar 15 05:23:10 2009
@@ -41,10 +41,12 @@
 Posting data:
 {{{
 
+deleted key posting values are all set to -2.
+
 int         offset position in this file to the next entry with the same hash, -1 = null
 int         value partition number, -1 = null value
 int         offset position in value partition, -1 = null
-int         key length in bytes, 0 = null
+int         key length in bytes, 0 = null // todo remove
 byte[]      serialized key (if not null)
 int         key hash, will be used for future rehashing
 

Modified: labs/bananadb/trunk/pom.xml
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/pom.xml?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/pom.xml (original)
+++ labs/bananadb/trunk/pom.xml Sun Mar 15 05:23:10 2009
@@ -9,6 +9,10 @@
     <description>BananaDB, a hashtable living on filesystem and not in memory.</description>
     <url>http://kodapan.se/bananadb</url>
 
+    <properties>
+        <slf4j.version>1.5.3</slf4j.version>
+    </properties>
+
     <dependencies>
 
         <dependency>
@@ -26,16 +30,16 @@
         </dependency>
 
         <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-            <version>1.2.15</version>
-            <scope>test</scope>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
         </dependency>
 
         <dependency>
-            <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.1.1</version>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-jdk14</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
         </dependency>
 
     </dependencies>

Copied: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Benchmark.java (from r754462, labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/Benchmark.java)
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Benchmark.java?p2=labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Benchmark.java&p1=labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/Benchmark.java&r1=754462&r2=754616&rev=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/Benchmark.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Benchmark.java Sun Mar 15 05:23:10 2009
@@ -25,17 +25,15 @@
 
     Benchmark benchmark = new Benchmark();
 
-    for (int capacityfactor = 8; capacityfactor <= 10; capacityfactor += 2) {
-      for (int items = 1000; items <= 1000000; items *= 1.5) {
-        benchmark.test(items, capacityfactor * items, csv);
-        System.out.println("-----");
-        System.out.println(csv.toString());
-        System.out.println("-----");
-        Runtime.getRuntime().gc();
-        Runtime.getRuntime().gc();        
-      }
+    int capacityfactor = 8;
+    for (int items = 1000; items <= 1000000; items *= 1.5) {
+      benchmark.test(items, capacityfactor * items, csv);
+      System.out.println("-----");
+      System.out.println(csv.toString());
+      System.out.println("-----");
+      Runtime.getRuntime().gc();
+      Runtime.getRuntime().gc();
     }
-
   }
 
   public void test(int items, int capacity, StringBuilder csv) throws Exception {

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Hashtable.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Hashtable.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Hashtable.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/Hashtable.java Sun Mar 15 05:23:10 2009
@@ -18,12 +18,12 @@
  */
 
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.labs.bananadb.hashtable.lock.Lock;
-import org.apache.labs.bananadb.hashtable.lock.NativeFSLockFactory;
-import org.apache.labs.bananadb.hashtable.lock.LockFactory;
+import org.apache.labs.bananadb.lock.Lock;
+import org.apache.labs.bananadb.lock.NativeFSLockFactory;
+import org.apache.labs.bananadb.lock.LockFactory;
 import org.apache.labs.bananadb.hashtable.txn.Transaction;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.*;
 import java.util.*;
@@ -38,7 +38,7 @@
  */
 public class Hashtable<K, V> {
 
-  private Log log = LogFactory.getLog(Hashtable.class);
+  private Logger log = LoggerFactory.getLogger(Hashtable.class);
 
   private static final int HASHTABLE_HEADER_BYTE_SIZE = 1024;
 
@@ -405,6 +405,10 @@
     return with.run();
   }
 
+  private boolean automaticGrowing = true;
+  private double automaticGrowingCapacityFactor = 1.7d;
+  private double automaticGrowingThreadshold = 0.8d;
+
   /**
    * EXPERT: This method should only be called when a lock exists.
    *
@@ -419,6 +423,17 @@
     HashtableFileHeader hashtableFileHeader = new HashtableFileHeader(accessor);
     KeyPostingsFileHeader keyPostingsFileHeader = new KeyPostingsFileHeader(accessor);
 
+    if (automaticGrowing) {
+      double bytes = keyPostingsFileHeader.getEndOffset() - keyPostingsFileHeader.getStartOffset();
+      double bytesLeft = keyPostingsFileHeader.getEndOffset() - keyPostingsFileHeader.getNextOffset();
+      double percentLeft = bytesLeft / bytes;
+      if (percentLeft < automaticGrowingThreadshold) {
+        doRehash(accessor, (int) (keyPostingsFileHeader.getCapacity() * automaticGrowingCapacityFactor));
+        hashtableFileHeader = new HashtableFileHeader(accessor);
+        keyPostingsFileHeader = new KeyPostingsFileHeader(accessor);
+      }
+    }
+
     // write key to buf
     ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
     keyClassHandler.write(key, new DataOutputStream(baos));
@@ -686,7 +701,7 @@
   public V remove(final HashtableAccessor accessor, final K key) throws IOException {
     Lock.With<V> with = new Lock.With<V>(writeLock, lockWaitTimeoutMilliseconds) {
       protected V doBody() throws IOException {
-        return doremove(accessor, key);
+        return doRemove(accessor, key);
       }
     };
     return with.run();
@@ -701,7 +716,7 @@
    * @return
    * @throws IOException
    */
-  private V doremove(HashtableAccessor accessor, K key) throws IOException {
+  private V doRemove(HashtableAccessor accessor, K key) throws IOException {
 
     HashtableFileHeader hashtableFileHeader = new HashtableFileHeader(accessor);
     KeyPostingsFileHeader keyPostingsFileHeader = new KeyPostingsFileHeader(accessor);
@@ -759,6 +774,19 @@
             accessor.getHashtableRAF().writeByte(0);
           }
 
+          // remove posting in key file
+          accessor.getKeyPostingsRAF().seek(keyPostingOffset);
+          accessor.getKeyPostingsRAF().writeInt(-2); // int next key posting offset at same hash position
+          accessor.getKeyPostingsRAF().writeInt(-2); // int value partition
+          accessor.getKeyPostingsRAF().writeInt(-2); // int value partition offset
+          accessor.getKeyPostingsRAF().writeInt(-2); // int key length // todo remove
+          for (int i=0; i<keyClassHandler.getByteSize(); i++) {
+            accessor.getKeyPostingsRAF().writeByte(-2); // key
+          }
+          accessor.getKeyPostingsRAF().writeInt(-2); // key hash
+
+          // update key file headers
+
           keyPostingsFileHeader.decreaseEntityCount(1);
           keyPostingsFileHeader.increaseVersion(1);
           keyPostingsFileHeader.save(accessor);
@@ -803,11 +831,15 @@
 
   private void doRehash(HashtableAccessor accessor, int newCapacity) throws IOException {
 
-    // todo append to existing files rather than creating new!
+    log.info("Rehashing..");
+
+    long ms = System.currentTimeMillis();
 
     HashtableFileHeader inputHashtableFileHeader = new HashtableFileHeader(accessor);
     KeyPostingsFileHeader inputKeyPostingsFileHeader = new KeyPostingsFileHeader(accessor);
 
+    log.info("Updating capacity from " + inputKeyPostingsFileHeader.getCapacity() + " to " + newCapacity + ".");
+
     HashtableFileHeader outputHashtableFileHeader = new HashtableFileHeader(inputHashtableFileHeader.getEndOffset() + 1, newCapacity);
     KeyPostingsFileHeader outputKeyPostingsFileHeader = new KeyPostingsFileHeader(inputKeyPostingsFileHeader.getNextOffset() + 1, inputKeyPostingsFileHeader.getEntityCount(), inputKeyPostingsFileHeader.getNextOffset() + 1, newCapacity, inputKeyPostingsFileHeader.getVersion() + 1);
 
@@ -822,6 +854,7 @@
     formatAppend(hashtableOutput, newCapacity * HASHTABLE_RECORD_BYTE_SIZE);
     formatAppend(keyPostingsOutput, newCapacity * keyPostingByteSize);
 
+    int highScore = 0;
 
     int nextKeyListPostingOffset;
     int valuePartition;
@@ -830,11 +863,16 @@
     byte[] keyBuf = new byte[keyClassHandler.getByteSize()];
     int keyHash;
 
-    for (int inputKeyPostingIndex = 0; inputKeyPostingIndex < inputKeyPostingsFileHeader.getEntityCount(); inputKeyPostingIndex++) {
-
+    for (int inputKeyPostingOffset = inputKeyPostingsFileHeader.getStartOffset(); inputKeyPostingOffset < inputKeyPostingsFileHeader.getNextOffset(); inputKeyPostingOffset+=keyPostingByteSize) {
 
       //  int         offset position in this file to the next entry with the same hash, -1 = null
       nextKeyListPostingOffset = keyPostingsInput.readInt();
+
+      if (nextKeyListPostingOffset == -2) {
+        keyPostingsInput.skipBytes(keyPostingByteSize - 4);
+        continue;
+      }
+
       //  int         value partition number, -1 = null value
       valuePartition = keyPostingsInput.readInt();
       //  int         offset position in value partition, -1 = null
@@ -872,7 +910,7 @@
         keyPostingsOutput.write(keyBuf);
 
         // key    hash
-        keyPostingsOutput.write(keyHash);
+        keyPostingsOutput.writeInt(keyHash);
 
         hashtableOutput.seek(outputHashtableOffset);
         hashtableOutput.writeByte(1);
@@ -883,7 +921,7 @@
 
         int firstKeyPostingOffset = hashtableOutput.readInt();
 
-        K compareKey;
+        int depth = 0;
 
         int previousKeyPostingOffset = -1;
         int nextKeyPostingOffset = firstKeyPostingOffset;
@@ -898,6 +936,13 @@
           int keySize = keyPostingsOutput.readInt();
           previousKeyPostingOffset = keyPostingOffset;
 
+          depth++;
+
+        }
+
+        if (depth > highScore) {
+          highScore = depth;
+          log.info("New depth high score: " + highScore);
         }
 
         // this key instance did not exist in entries
@@ -924,7 +969,7 @@
         keyPostingsOutput.write(keyBuf);
 
         // key    hash
-        keyPostingsOutput.write(keyHash);
+        keyPostingsOutput.writeInt(keyHash);
 
         keyPostingsOutput.seek(previousKeyPostingOffset);
         keyPostingsOutput.writeInt(keyPostingOffset);
@@ -939,7 +984,10 @@
     outputKeyPostingsFileHeader.save(accessor);
 
 
-    System.currentTimeMillis();
+    ms = System.currentTimeMillis() - ms;
+
+    log.info("Rehashing took " + ms + " milliseconds.");
+
 
   }
 
@@ -951,6 +999,8 @@
     private int partitionNumber;
     private File file;
 
+    // todo use header class!! read from file each time we access values!!
+
     private long nextPosition = -1;
     private long bytesLeft = -1;
 
@@ -1058,7 +1108,7 @@
 
   public void formatAppend(RandomAccessFile raf, long size) throws IOException {
 
-    log.info("Appending " + size + " bytes..");
+    log.debug("Appending " + size + " bytes to file..");
 
     long ms = System.currentTimeMillis();
 
@@ -1075,8 +1125,7 @@
       raf.write(bytes, 0, (int) leftToWrite);
     }
 
-
-    log.info("It took " + (System.currentTimeMillis() - ms) + " milliseconds to append.");
+    log.debug("It took " + (System.currentTimeMillis() - ms) + " milliseconds to append.");
 
   }
 
@@ -1298,6 +1347,11 @@
     this.lockWaitTimeoutMilliseconds = lockWaitTimeoutMilliseconds;
   }
 
+
+  List<HashtableAccessor> getAccessors() {
+    return accessors;
+  }
+
   public void close() throws IOException {
     if (accessors.size() > 0) {
       log.warn("There are " + accessors.size() + " accessors opened. They will be closed.");
@@ -1326,6 +1380,13 @@
     }
   };
 
+  ThreadLocal<Transaction<K, V>> getTransactions() {
+    return transactions;
+  }
+
+  /**
+   * @return A thread local transaction
+   */
   public Transaction<K, V> getTxn() {
     return transactions.get();
   }

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/HashtableAccessor.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/HashtableAccessor.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/HashtableAccessor.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/HashtableAccessor.java Sun Mar 15 05:23:10 2009
@@ -30,6 +30,7 @@
  */
 public class HashtableAccessor {
 
+  private Hashtable hashtable;
   private String access;
   private RandomAccessFile hashtableRAF;
   private RandomAccessFile keyPostingsRAF;
@@ -43,7 +44,7 @@
    * @throws IOException
    */
   HashtableAccessor(Hashtable<?, ?> hashtable, boolean readOnly) throws IOException {
-    // todo open hashtableRAF, entriesRAF and all partitionRAFs
+    this.hashtable = hashtable;
 
     access = readOnly ? "r" : "rw";
 
@@ -83,6 +84,8 @@
     for (RandomAccessFile partitionRAF : partitionRAFs.values()) {
       partitionRAF.close();
     }
+
+    hashtable.getAccessors().remove(this);
   }
 
 }

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/ValueClassHandler.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/ValueClassHandler.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/ValueClassHandler.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/ValueClassHandler.java Sun Mar 15 05:23:10 2009
@@ -28,5 +28,5 @@
   public abstract Class<C> getEntityClass();
   public abstract void write(C entity, DataOutputStream out) throws IOException;
   public abstract C read(DataInputStream in) throws IOException; 
-  
+
 }

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Isolation.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Isolation.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Isolation.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Isolation.java Sun Mar 15 05:23:10 2009
@@ -3,6 +3,25 @@
 import java.io.IOException;
 
 /**
+ * Consider the following scenario:
+ *
+ * The database contains an entry with the primary key A.
+ *
+ * Transaction T1 begins.
+ * Transaction T2 begins.
+ * T1 removes A.
+ * T2 removes A.
+ * T1 commit.
+ * Transaction T3 begins.
+ * T3 create a new entry with primary key A.
+ * T3 commit
+ * T2 commit.
+ *
+ * Should the entry A that T3 created and commited just before T2 commited still be in the database?
+ * Should perhaps an exception be thrown in T2?
+ *
+ * This is what isolation strategies is all about.
+ * 
  * @author kalle
  * @since 2009-mar-14 15:39:32
  */

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Transaction.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Transaction.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Transaction.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/hashtable/txn/Transaction.java Sun Mar 15 05:23:10 2009
@@ -1,12 +1,11 @@
 package org.apache.labs.bananadb.hashtable.txn;
 
-import org.apache.labs.bananadb.hashtable.lock.Lock;
-import org.apache.labs.bananadb.hashtable.lock.SingleInstanceLockFactory;
+import org.apache.labs.bananadb.lock.Lock;
+import org.apache.labs.bananadb.lock.SingleInstanceLockFactory;
 import org.apache.labs.bananadb.hashtable.*;
 
 import java.io.IOException;
 import java.util.*;
-import java.util.Hashtable;
 
 /**
  * @author kalle
@@ -71,7 +70,7 @@
         created = null;
         replaced = null;
         removed = null;
-
+        
         return null;
       }
     };

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/Lock.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/Lock.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/Lock.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/Lock.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockFactory.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockFactory.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockObtainFailedException.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockObtainFailedException.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockObtainFailedException.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockObtainFailedException.java Sun Mar 15 05:23:10 2009
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 import java.io.IOException;
 

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockReleaseFailedException.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockReleaseFailedException.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockReleaseFailedException.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockReleaseFailedException.java Sun Mar 15 05:23:10 2009
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 import java.io.IOException;
 

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockStressTest.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockStressTest.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockStressTest.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockStressTest.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -34,7 +34,7 @@
   public static void main(String[] args) throws Exception {
 
     if (args.length != 6) {
-      System.out.println("\nUsage: java org.apache.labs.bananadb.hashtable.lock.LockStressTest myID verifierHostOrIP verifierPort lockFactoryClassName lockDirName sleepTime\n" +
+      System.out.println("\nUsage: java org.apache.labs.bananadb.lock.LockStressTest myID verifierHostOrIP verifierPort lockFactoryClassName lockDirName sleepTime\n" +
                          "\n" +
                          "  myID = int from 0 .. 255 (should be unique for test process)\n" +
                          "  verifierHostOrIP = host name or IP address where LockVerifyServer is running\n" +

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockVerifyServer.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockVerifyServer.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockVerifyServer.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/LockVerifyServer.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -42,7 +42,7 @@
   public static void main(String[] args) throws IOException {
 
     if (args.length != 1) {
-      System.out.println("\nUsage: java org.apache.labs.bananadb.hashtable.lock.LockVerifyServer port\n");
+      System.out.println("\nUsage: java org.apache.labs.bananadb.lock.LockVerifyServer port\n");
       System.exit(1);
     }
 

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NativeFSLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NativeFSLockFactory.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NativeFSLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NativeFSLockFactory.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoLockFactory.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoLockFactory.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoSuchDirectoryException.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoSuchDirectoryException.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoSuchDirectoryException.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/NoSuchDirectoryException.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SimpleFSLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SimpleFSLockFactory.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SimpleFSLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SimpleFSLockFactory.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SingleInstanceLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SingleInstanceLockFactory.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SingleInstanceLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/SingleInstanceLockFactory.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/VerifyingLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/VerifyingLockFactory.java?rev=754616&r1=753612&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/VerifyingLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/lock/VerifyingLockFactory.java Sun Mar 15 05:23:10 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.hashtable.lock;
+package org.apache.labs.bananadb.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/HashtableTest.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/HashtableTest.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/HashtableTest.java (original)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/HashtableTest.java Sun Mar 15 05:23:10 2009
@@ -22,8 +22,8 @@
 import java.io.File;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.Log;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
 
 /**
  * @author kalle
@@ -31,7 +31,7 @@
  */
 public abstract class HashtableTest extends TestCase {
 
-  public static final Log log = LogFactory.getLog(HashtableTest.class); 
+  protected Logger log = LoggerFactory.getLogger(HashtableTest.class);
 
   private File path;
 

Modified: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestHashtable.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestHashtable.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestHashtable.java (original)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestHashtable.java Sun Mar 15 05:23:10 2009
@@ -17,18 +17,11 @@
  * limitations under the License.
  */
 
-import junit.framework.TestCase;
 import org.apache.labs.bananadb.hashtable.handlers.IntegerHandler;
 import org.apache.labs.bananadb.hashtable.handlers.StringValueHandler;
-import org.apache.labs.bananadb.hashtable.lock.NoLockFactory;
-import org.apache.labs.bananadb.hashtable.lock.SingleInstanceLockFactory;
 import org.junit.Test;
 
 import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * User: kalle

Modified: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestMultiThreaded.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestMultiThreaded.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestMultiThreaded.java (original)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestMultiThreaded.java Sun Mar 15 05:23:10 2009
@@ -17,11 +17,8 @@
  * limitations under the License.
  */
 
-import junit.framework.TestCase;
 import org.apache.labs.bananadb.hashtable.handlers.IntegerHandler;
 import org.apache.labs.bananadb.hashtable.handlers.StringValueHandler;
-import org.apache.labs.bananadb.hashtable.lock.NoLockFactory;
-import org.apache.labs.bananadb.hashtable.lock.SingleInstanceLockFactory;
 import org.junit.Test;
 
 import java.io.File;

Modified: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestRehash.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestRehash.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestRehash.java (original)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestRehash.java Sun Mar 15 05:23:10 2009
@@ -17,18 +17,11 @@
  * limitations under the License.
  */
 
-import junit.framework.TestCase;
 import org.apache.labs.bananadb.hashtable.handlers.IntegerHandler;
 import org.apache.labs.bananadb.hashtable.handlers.StringValueHandler;
-import org.apache.labs.bananadb.hashtable.lock.NoLockFactory;
-import org.apache.labs.bananadb.hashtable.lock.SingleInstanceLockFactory;
 import org.junit.Test;
 
 import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * User: kalle
@@ -37,6 +30,23 @@
  */
 public class TestRehash extends HashtableTest {
 
+  @Test
+  public void testAutomaticRehash() throws Exception {
+
+    File path = getDirectory("testAutomaticRehash");
+    Hashtable<Integer, String> map = new Hashtable<Integer, String>(path, 100, new IntegerHandler(), new StringValueHandler());
+
+    HashtableAccessor accessor = map.createAccessor(false);
+    for (int i = 0; i < 200000; i++) {
+      map.put(accessor, i, "foo");
+    }
+
+    Hashtable.HashtableFileHeader hashtableFileHeader = map.new HashtableFileHeader(accessor);
+    assertEquals(1417, hashtableFileHeader.getCapacity());
+
+    accessor.close();
+
+  }
 
   @Test
   public void testRehash() throws Exception {
@@ -79,5 +89,5 @@
 
 
   }
-  
+
 }
\ No newline at end of file

Modified: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestValuePartitions.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestValuePartitions.java?rev=754616&r1=754615&r2=754616&view=diff
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestValuePartitions.java (original)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/hashtable/TestValuePartitions.java Sun Mar 15 05:23:10 2009
@@ -17,18 +17,11 @@
  * limitations under the License.
  */
 
-import junit.framework.TestCase;
 import org.apache.labs.bananadb.hashtable.handlers.IntegerHandler;
 import org.apache.labs.bananadb.hashtable.handlers.StringValueHandler;
-import org.apache.labs.bananadb.hashtable.lock.NoLockFactory;
-import org.apache.labs.bananadb.hashtable.lock.SingleInstanceLockFactory;
 import org.junit.Test;
 
 import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * User: kalle



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org