You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by va...@apache.org on 2006/04/15 00:23:34 UTC

svn commit: r394214 - in /lucene/java/trunk/contrib/db/bdb-je/src: java/org/apache/lucene/store/je/File.java test/org/apache/lucene/store/je/JEStoreTest.java

Author: vajda
Date: Fri Apr 14 15:23:20 2006
New Revision: 394214

URL: http://svn.apache.org/viewcvs?rev=394214&view=rev
Log:
resolved JIRA issue 536

Modified:
    lucene/java/trunk/contrib/db/bdb-je/src/java/org/apache/lucene/store/je/File.java
    lucene/java/trunk/contrib/db/bdb-je/src/test/org/apache/lucene/store/je/JEStoreTest.java

Modified: lucene/java/trunk/contrib/db/bdb-je/src/java/org/apache/lucene/store/je/File.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/contrib/db/bdb-je/src/java/org/apache/lucene/store/je/File.java?rev=394214&r1=394213&r2=394214&view=diff
==============================================================================
--- lucene/java/trunk/contrib/db/bdb-je/src/java/org/apache/lucene/store/je/File.java (original)
+++ lucene/java/trunk/contrib/db/bdb-je/src/java/org/apache/lucene/store/je/File.java Fri Apr 14 15:23:20 2006
@@ -192,8 +192,12 @@
 
                 if (cursor.getSearchKey(cursorKey, cursorData, null) != OperationStatus.NOTFOUND) {
                     cursor.delete();
-
-                    while (cursor.getNextDup(cursorKey, cursorData, null) != OperationStatus.NOTFOUND) {
+                    advance: while (cursor.getNext(cursorKey, cursorData, null) != OperationStatus.NOTFOUND) {
+                        byte[] temp = cursorKey.getData();
+                        for (int i = 0; i < bytes.length; i++)
+                            if (bytes[i] != temp[i]) {
+                                break advance;
+                            }
                         cursor.delete();
                     }
                 }

Modified: lucene/java/trunk/contrib/db/bdb-je/src/test/org/apache/lucene/store/je/JEStoreTest.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/contrib/db/bdb-je/src/test/org/apache/lucene/store/je/JEStoreTest.java?rev=394214&r1=394213&r2=394214&view=diff
==============================================================================
--- lucene/java/trunk/contrib/db/bdb-je/src/test/org/apache/lucene/store/je/JEStoreTest.java (original)
+++ lucene/java/trunk/contrib/db/bdb-je/src/test/org/apache/lucene/store/je/JEStoreTest.java Fri Apr 14 15:23:20 2006
@@ -27,29 +27,34 @@
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
-import org.apache.lucene.store.je.JEDirectory;
 
+import com.sleepycat.je.Cursor;
 import com.sleepycat.je.Database;
 import com.sleepycat.je.DatabaseConfig;
+import com.sleepycat.je.DatabaseEntry;
 import com.sleepycat.je.DatabaseException;
 import com.sleepycat.je.Environment;
 import com.sleepycat.je.EnvironmentConfig;
+import com.sleepycat.je.LockMode;
+import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.Transaction;
 
 /**
  * Tests {@link JEDirectory}.
- *
+ * 
  * Adapted from Andi Vajda's org.apache.lucene.db.DbStoreTest.
+ * 
  * @author Aaron Donovan
  */
 public class JEStoreTest extends TestCase {
     protected File dbHome = new File("index");
+
     protected Environment env;
+
     protected Database index, blocks;
-    
-    public void setUp()
-        throws Exception
-    {
+
+    public void setUp() throws Exception {
+
         if (!dbHome.exists())
             dbHome.mkdir();
         else {
@@ -79,8 +84,7 @@
             index = env.openDatabase(txn, "__index__", dbConfig);
             blocks = env.openDatabase(txn, "__blocks__", dbConfig);
         } catch (DatabaseException e) {
-            if (txn != null)
-            {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -94,9 +98,8 @@
         }
     }
 
-    public void tearDown()
-        throws Exception
-    {
+    public void tearDown() throws Exception {
+
         if (index != null)
             index.close();
         if (blocks != null)
@@ -105,9 +108,7 @@
             env.close();
     }
 
-    public void testBytes()
-        throws Exception
-    {
+    public void tesBytes() throws Exception {
         final int count = 250;
         final int LENGTH_MASK = 0xffff;
 
@@ -115,7 +116,7 @@
         int totalLength = 0;
         int duration;
         Date end;
-    
+
         Date veryStart = new Date();
         Date start = new Date();
         Transaction txn = null;
@@ -135,10 +136,10 @@
                 totalLength += length;
 
                 for (int j = 0; j < length; j++) {
-                    byte b = (byte)(gen.nextInt() & 0x7F);
+                    byte b = (byte) (gen.nextInt() & 0x7F);
                     file.writeByte(b);
                 }
-      
+
                 file.close();
             }
         } catch (IOException e) {
@@ -146,8 +147,7 @@
             txn = null;
             throw e;
         } catch (DatabaseException e) {
-            if (txn != null)
-            {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -183,7 +183,7 @@
                     throw new Exception("length incorrect");
 
                 for (int j = 0; j < length; j++) {
-                    byte b = (byte)(gen.nextInt() & 0x7F);
+                    byte b = (byte) (gen.nextInt() & 0x7F);
 
                     if (file.readByte() != b)
                         throw new Exception("contents incorrect");
@@ -196,8 +196,7 @@
             txn = null;
             throw e;
         } catch (DatabaseException e) {
-            if (txn != null)
-            {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -233,8 +232,202 @@
             txn = null;
             throw e;
         } catch (DatabaseException e) {
+            if (txn != null) {
+                txn.abort();
+                txn = null;
+            }
+            throw e;
+        } finally {
+            if (txn != null)
+                txn.commit();
+
+            store.close();
+        }
+
+        end = new Date();
+
+        System.out.print(end.getTime() - start.getTime());
+        System.out.println(" total milliseconds to delete");
+
+        System.out.print(end.getTime() - veryStart.getTime());
+        System.out.println(" total milliseconds");
+    }
+
+    public void testDelete() throws Exception {
+        final int count = 250;
+        final int LENGTH_MASK = 0xffff;
+
+        Random gen = new Random(1251971);
+        int totalLength = 0;
+        int duration;
+        Date end;
+
+        Date veryStart = new Date();
+        Date start = new Date();
+        Transaction txn = null;
+        Directory store = null;
+
+        System.out.println("Writing files byte by byte");
+
+        try {
+            txn = env.beginTransaction(null, null);
+            store = new JEDirectory(txn, index, blocks);
+
+            for (int i = 0; i < count; i++) {
+                String name = i + ".dat";
+                int length = gen.nextInt() & LENGTH_MASK;
+                IndexOutput file = store.createOutput(name);
+
+                totalLength += length;
+
+                for (int j = 0; j < length; j++) {
+                    byte b = (byte) (gen.nextInt() & 0x7F);
+                    file.writeByte(b);
+                }
+
+                file.close();
+            }
+        } catch (IOException e) {
+            txn.abort();
+            txn = null;
+            throw e;
+        } catch (DatabaseException e) {
+            if (txn != null) {
+                txn.abort();
+                txn = null;
+            }
+            throw e;
+        } finally {
+            if (txn != null)
+                txn.commit();
+
+            store.close();
+        }
+
+        end = new Date();
+
+        duration = (int) (end.getTime() - start.getTime());
+        System.out.print(duration);
+        System.out.print(" total milliseconds to read, ");
+        System.out.print(totalLength / duration);
+        System.out.println(" kb/s");
+
+        try {
+            txn = env.beginTransaction(null, null);
+            store = new JEDirectory(txn, index, blocks);
+
+            gen = new Random(1251971);
+            start = new Date();
+
+            for (int i = 0; i < count; i++) {
+                if (i % 2 == 0) {
+                    String name = i + ".dat";
+                    store.deleteFile(name);
+                }
+            }
+        } catch (IOException e) {
+            txn.abort();
+            txn = null;
+            throw e;
+        } catch (DatabaseException e) {
+            if (txn != null) {
+                txn.abort();
+                txn = null;
+            }
+            throw e;
+        } finally {
+            if (txn != null)
+                txn.commit();
+
+            store.close();
+        }
+
+        end = new Date();
+
+        System.out.print(end.getTime() - start.getTime());
+        System.out.println(" total milliseconds to delete even files");
+
+        duration = (int) (end.getTime() - start.getTime());
+        System.out.print(duration);
+        System.out.print(" total milliseconds to create, ");
+        System.out.print(totalLength / duration);
+        System.out.println(" kb/s");
+
+        try {
+            txn = env.beginTransaction(null, null);
+            store = new JEDirectory(txn, index, blocks);
+
+            gen = new Random(1251971);
+            start = new Date();
+
+            for (int i = 0; i < count; i++) {
+                int length = gen.nextInt() & LENGTH_MASK;
+
+                if (i % 2 != 0) {
+                    String name = i + ".dat";
+                    IndexInput file = store.openInput(name);
+                    if (file.length() != length)
+                        throw new Exception("length incorrect");
+
+                    for (int j = 0; j < length; j++) {
+                        byte b = (byte) (gen.nextInt() & 0x7F);
+
+                        if (file.readByte() != b)
+                            throw new Exception("contents incorrect");
+                    }
+
+                    file.close();
+                } else {
+                    for (int j = 0; j < length; j++) {
+                        gen.nextInt();
+                    }
+                }
+            }
+        } catch (IOException e) {
+            txn.abort();
+            txn = null;
+            throw e;
+        } catch (DatabaseException e) {
+            if (txn != null) {
+                txn.abort();
+                txn = null;
+            }
+            throw e;
+        } finally {
             if (txn != null)
-            {
+                txn.commit();
+
+            store.close();
+        }
+
+        end = new Date();
+
+        duration = (int) (end.getTime() - start.getTime());
+        System.out.print(duration);
+        System.out.print(" total milliseconds to read, ");
+        System.out.print(totalLength / duration);
+        System.out.println(" kb/s");
+
+        try {
+            txn = env.beginTransaction(null, null);
+            store = new JEDirectory(txn, index, blocks);
+
+            gen = new Random(1251971);
+            start = new Date();
+
+            for (int i = 0; i < count; i++) {
+                if (i % 2 != 0) {
+                    String name = i + ".dat";
+                    store.deleteFile(name);
+                }
+            }
+
+        } catch (IOException e) {
+            txn.abort();
+            txn = null;
+            throw e;
+        } catch (DatabaseException e) {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -253,11 +446,43 @@
 
         System.out.print(end.getTime() - veryStart.getTime());
         System.out.println(" total milliseconds");
+
+        Cursor cursor = null;
+        try {
+            cursor = index.openCursor(null, null);
+
+            DatabaseEntry foundKey = new DatabaseEntry();
+            DatabaseEntry foundData = new DatabaseEntry();
+
+            if (cursor.getNext(foundKey, foundData, LockMode.DEFAULT) == OperationStatus.SUCCESS) {
+                fail("index database is not empty");
+            }
+        } catch (DatabaseException e) {
+            throw e;
+        } finally {
+            if (cursor != null)
+                cursor.close();
+        }
+
+        cursor = null;
+        try {
+            cursor = blocks.openCursor(null, null);
+
+            DatabaseEntry foundKey = new DatabaseEntry();
+            DatabaseEntry foundData = new DatabaseEntry();
+
+            if (cursor.getNext(foundKey, foundData, LockMode.DEFAULT) == OperationStatus.SUCCESS) {
+                fail("blocks database is not empty");
+            }
+        } catch (DatabaseException e) {
+            throw e;
+        } finally {
+            if (cursor != null)
+                cursor.close();
+        }
     }
 
-    public void testArrays()
-        throws Exception
-    {
+    public void tesArrays() throws Exception {
         final int count = 250;
         final int LENGTH_MASK = 0xffff;
 
@@ -265,7 +490,7 @@
         int totalLength = 0;
         int duration;
         Date end;
-    
+
         Date veryStart = new Date();
         Date start = new Date();
         Transaction txn = null;
@@ -286,7 +511,7 @@
                 totalLength += length;
                 gen.nextBytes(data);
                 file.writeBytes(data, length);
-      
+
                 file.close();
             }
         } catch (IOException e) {
@@ -294,8 +519,7 @@
             txn = null;
             throw e;
         } catch (DatabaseException e) {
-            if (txn != null)
-            {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -326,7 +550,7 @@
                 String name = i + ".dat";
                 int length = gen.nextInt() & LENGTH_MASK;
                 IndexInput file = store.openInput(name);
-                
+
                 if (file.length() != length)
                     throw new Exception("length incorrect");
 
@@ -345,8 +569,7 @@
             txn = null;
             throw e;
         } catch (DatabaseException e) {
-            if (txn != null)
-            {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -372,18 +595,17 @@
 
             gen = new Random(1251971);
             start = new Date();
-
             for (int i = 0; i < count; i++) {
                 String name = i + ".dat";
                 store.deleteFile(name);
             }
+
         } catch (IOException e) {
             txn.abort();
             txn = null;
             throw e;
         } catch (DatabaseException e) {
-            if (txn != null)
-            {
+            if (txn != null) {
                 txn.abort();
                 txn = null;
             }
@@ -404,4 +626,3 @@
         System.out.println(" total milliseconds");
     }
 }
-