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/17 11:14:04 UTC

svn commit: r755179 [3/3] - in /labs/bananadb/trunk: ./ src/main/java/org/apache/labs/bananadb/entity/ src/main/java/org/apache/labs/bananadb/entity/isolation/ src/main/java/org/apache/labs/bananadb/entity/serialization/ src/main/java/org/apache/labs/b...

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockStressTest.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockStressTest.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockStressTest.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockStressTest.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.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.lock.LockStressTest myID verifierHostOrIP verifierPort lockFactoryClassName lockDirName sleepTime\n" +
+      System.out.println("\nUsage: java org.apache.labs.bananadb.store.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/store/lock/LockVerifyServer.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockVerifyServer.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockVerifyServer.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/LockVerifyServer.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.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.lock.LockVerifyServer port\n");
+      System.out.println("\nUsage: java org.apache.labs.bananadb.store.lock.LockVerifyServer port\n");
       System.exit(1);
     }
 

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NativeFSLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NativeFSLockFactory.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NativeFSLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NativeFSLockFactory.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -148,9 +148,9 @@
 
   public void clearLock(String lockName) throws IOException {
     // Note that this isn't strictly required anymore
-    // because the existence of these files does not mean
+    // because the existence of these file does not mean
     // they are locked, but, still do this in case people
-    // really want to see the files go away:
+    // really want to see the file go away:
     if (lockDir.exists()) {
       if (lockPrefix != null) {
         lockName = lockPrefix + "-n-" + lockName;

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoLockFactory.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoLockFactory.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoSuchDirectoryException.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoSuchDirectoryException.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoSuchDirectoryException.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/NoSuchDirectoryException.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SimpleFSLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SimpleFSLockFactory.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SimpleFSLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SimpleFSLockFactory.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SingleInstanceLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SingleInstanceLockFactory.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SingleInstanceLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/SingleInstanceLockFactory.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/VerifyingLockFactory.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/VerifyingLockFactory.java?rev=755179&r1=754666&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/VerifyingLockFactory.java (original)
+++ labs/bananadb/trunk/src/main/java/org/apache/labs/bananadb/store/lock/VerifyingLockFactory.java Tue Mar 17 10:14:03 2009
@@ -1,4 +1,4 @@
-package org.apache.labs.bananadb.lock;
+package org.apache.labs.bananadb.store.lock;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more

Modified: labs/bananadb/trunk/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/site/apt/index.apt?rev=755179&r1=755178&r2=755179&view=diff
==============================================================================
--- labs/bananadb/trunk/src/site/apt/index.apt (original)
+++ labs/bananadb/trunk/src/site/apt/index.apt Tue Mar 17 10:14:03 2009
@@ -1,42 +1,57 @@
     -----
-    Hashtable persistent on filesystem.
+    embedded key/value pair database for java
 
 BananaDB
 
-    BananaDB is a persistent Hashtable for Java that resides on the filesystem.
+    BananaDB is a small (100k) embedded key/value pair database for Java
+    featuring an API similar to working with any Map<K, V>
+        
 
+* Main features
 
-* Features
+    * Thread safe and write locking over multiple JVMs
 
-    * Thread safe, even when read/write accessed from multiple JVMs
+    * Atomic access
 
-    * Optionally transactional with multiple isolation level strategies
+    * Transactional access with multiple isolation level strategies
 
-    * Relative speedy, depending on persistencey hardware
+    * Annotational API
 
-        * Normally ~3ms to put and ~0.1ms to get() when file cache is available
+    * Pluggable serialization strategies (java.io.Serialization as default)
 
-        * Depends on IO seek, i.e. SSD can make even a huge DB fair to use
 
 
-* Features planned for the future include
+* Upcoming features
 
-    * Annotational API
+    * Secondary indices
+
+    * Incrementing sequences for key postings
 
-        * Automatic serialization of key and value classes
+    * Generic serialization
 
-        * Secondary indices
 
-    * Top level API to handle multiple hashtable instances
 
-        * Transactions spanning multiple hashtables
+* Speed and size limitations
+
+    * Relies heavy on media I/O seek
+
+        * Normally ~3ms to put and ~0.1ms to get() when file cache is available
+
+        * Relies on IO seek, i.e. SSD can make even a huge DB fair to use
+
+    * No speed penalty for deleting or updating key/value postings
+
+    * No limit on number of key/value postings in database.
+
+    * Up to 180 petabytes of value postings data
+
+    * Up to 140 petabytes of key postings dat
 
-        * Et c
 
 
 * Releases
 
-    There are no official releases! You'll need to check it out from the Apache SVN, compile and install it by your self.
+    There is no official release! You'll have to check it out from SVN, compile and install:
 
 +-------------------------------+
 
@@ -51,20 +66,73 @@
 +-------------------------------+
 
 
-Example use
+API examples
 
 +-------------------------------+
 
-Hashtable<Integer, String> hashtable = new Hashtable<Integer, String>(
-    new ConfigurationImpl<Integer, String>(new File("./bananadb"), new IntegerHandler(), new StringValueHandler()));
+{
+  EntityStore store = new EntityStore(new File("./bananadb"));
+
+  PrimaryIndex<Long, User> users = store.getPrimaryIndex(Long.class, User.class);
+  PrimaryIndex<Long, Message> messages = store.getPrimaryIndex(Long.class, Message.class);
+
+  store.getTxn().begin();
+
+  User user = new User();
+  user.setPK(0l);
+  user.setEmailAdress("foo@bar.org");
+  user.setPassword("secret");
+
+  users.put(user);
+  assert users.containsKey(0l);
+
+  Message message = new Message();
+  message.setPK(0l);
+  message.setFromUserFK(0l);
+  message.setToUserFK(1l);
+  message.setSubject("Hello, world.");
+
+  messages.put(message);
+  store.getTxn().commit();
+
+  store.getTxn().begin();
+  assert store.getMessages(0l).getToUserFK() == 1l;
+  store.getTxn().abort();
+
+}
+
+@Entity
+public static class User implements Serializable {
+
+private static final long serialVersionUID = 1l;
+
+  @PrimaryKey
+  private Long PK;
+
+  private String emailAdress;
+  private String password;
+
+  public Long getPK() {
+    return PK;
+
+  ...
+}
+
+@Entity
+public static class Message implements Serializable {
+
+  private static final long serialVersionUID = 1l;
+
+  @PrimaryKey
+  private Long PK;
+
+  private Long fromUserFK;
+  private Long toUserFK;
+  private String subject;
+  private String text;
 
-hashtable.getTxn().begin();
-hashtable.put(0, "Hello, world");
-hashtable.getTxn().commit();
-
-hashtable.getTxn().begin();
-System.out.println(hashtable.getTxn().get(0));
-hashtable.getTxn().abort();
+  ...
+}
 
 +-------------------------------+
 

Added: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/entity/TestEntityStore.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/entity/TestEntityStore.java?rev=755179&view=auto
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/entity/TestEntityStore.java (added)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/entity/TestEntityStore.java Tue Mar 17 10:14:03 2009
@@ -0,0 +1,179 @@
+package org.apache.labs.bananadb.entity;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import org.apache.labs.bananadb.store.StoreTest;
+import org.junit.Test;
+
+import java.io.Serializable;
+
+/**
+ * @author kalle
+ * @since 2009-mar-17 07:13:35
+ */
+public class TestEntityStore extends StoreTest {
+
+  @Test
+  public void testSimple() throws Exception {
+
+    EntityStore store = new EntityStore(getDirectory("entityStore/testSimple"));
+
+    PrimaryIndex<Long, User> users = store.getPrimaryIndex(Long.class, User.class);
+    PrimaryIndex<Long, Message> messages = store.getPrimaryIndex(Long.class, Message.class);
+
+    store.getTxn().begin();
+
+    User user = new User();
+    user.setPK(0l);
+    user.setEmailAdress("foo@bar.org");
+    user.setPassword("secret");
+
+    assertNull(users.put(user));
+
+    user.setPassword("new secret");
+
+    User oldUser = users.put(user);
+
+    assertEquals(new Long(0l), oldUser.getPK());
+    assertEquals("foo@bar.org", oldUser.getEmailAdress());
+    assertEquals("secret", oldUser.getPassword());
+
+    store.getTxn().commit();
+
+    store.getTxn().begin();
+    assertEquals("foo@bar.org", users.get(0l).getEmailAdress());
+    assertEquals("new secret", users.get(0l).getPassword());
+    store.getTxn().abort();
+
+    store.getTxn().begin();
+
+    Message message = new Message();
+    message.setPK(0l);
+    message.setFromUserFK(0l);
+    message.setToUserFK(1l);
+    message.setSubject("A second index containg an entity with the same PK as the first index.");
+    message.setText("After commiting this there should be no problems still reading from both indices.");
+    assertNull(messages.put(message));
+
+    assertEquals("new secret", users.get(0l).getPassword());
+    assertEquals(new Long(1l), messages.get(0l).getToUserFK());
+    
+    store.getTxn().commit();
+
+    store.getTxn().begin();
+    assertEquals("new secret", users.get(0l).getPassword());
+    assertEquals(new Long(1l), messages.get(0l).getToUserFK());
+    store.getTxn().abort();
+
+    store.close();
+  }
+
+  @Entity
+  public static class User implements Serializable {
+
+    private static final long serialVersionUID = 1l;
+
+    @PrimaryKey
+    private Long PK;
+
+    private String emailAdress;
+    private String password;
+
+    public Long getPK() {
+      return PK;
+    }
+
+    public void setPK(Long PK) {
+      this.PK = PK;
+    }
+
+    public String getEmailAdress() {
+      return emailAdress;
+    }
+
+    public void setEmailAdress(String emailAdress) {
+      this.emailAdress = emailAdress;
+    }
+
+    public String getPassword() {
+      return password;
+    }
+
+    public void setPassword(String password) {
+      this.password = password;
+    }
+  }
+
+  @Entity
+  public static class Message implements Serializable {
+
+    private static final long serialVersionUID = 1l;
+
+    @PrimaryKey
+    private Long PK;
+
+    private Long fromUserFK;
+    private Long toUserFK;
+    private String subject;
+    private String text;
+
+
+    public Long getPK() {
+      return PK;
+    }
+
+    public void setPK(Long PK) {
+      this.PK = PK;
+    }
+
+    public Long getFromUserFK() {
+      return fromUserFK;
+    }
+
+    public void setFromUserFK(Long fromUserFK) {
+      this.fromUserFK = fromUserFK;
+    }
+
+    public Long getToUserFK() {
+      return toUserFK;
+    }
+
+    public void setToUserFK(Long toUserFK) {
+      this.toUserFK = toUserFK;
+    }
+
+    public String getSubject() {
+      return subject;
+    }
+
+    public void setSubject(String subject) {
+      this.subject = subject;
+    }
+
+    public String getText() {
+      return text;
+    }
+
+    public void setText(String text) {
+      this.text = text;
+    }
+  }
+
+
+}

Added: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/StoreTest.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/StoreTest.java?rev=755179&view=auto
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/StoreTest.java (added)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/StoreTest.java Tue Mar 17 10:14:03 2009
@@ -0,0 +1,53 @@
+package org.apache.labs.bananadb.store;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import junit.framework.TestCase;
+
+import java.io.File;
+
+import org.apache.commons.io.FileUtils;
+
+/**
+ * @author kalle
+ * @since 2009-mar-17 00:59:03
+ */
+public abstract class StoreTest extends TestCase {
+
+  private File path;
+
+  protected StoreTest() {
+    path = new File("target/test-data/stores");
+    if (!path.exists() && !path.mkdirs()) {
+      throw new RuntimeException("Could not create path " + path);
+    }
+  }
+
+  protected File getDirectory(String name) {
+    File path = new File(this.path, name);
+    if (path.exists()) {
+      FileUtils.deleteQuietly(path);
+    }
+    if (!path.mkdirs()) {
+      throw new RuntimeException("Could not create path " + path);
+    }
+    return path;
+  }
+
+}

Added: labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/TestStore.java
URL: http://svn.apache.org/viewvc/labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/TestStore.java?rev=755179&view=auto
==============================================================================
--- labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/TestStore.java (added)
+++ labs/bananadb/trunk/src/test/java/org/apache/labs/bananadb/store/TestStore.java Tue Mar 17 10:14:03 2009
@@ -0,0 +1,128 @@
+package org.apache.labs.bananadb.store;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+/**
+ * @author kalle
+ * @since 2009-mar-17 00:48:33
+ */
+public class TestStore extends StoreTest {
+
+  @Test
+  public void testSimple() throws IOException {
+
+    Configuration configuration = new Configuration(getDirectory("testSimple"));
+    Store store = new Store(configuration);
+    store.open();
+
+    Accessor accessor;
+
+    // set read only
+    try {
+      store.createAccessor(true);
+      fail("Accessor is set read only! Store should be be created");
+    } catch (IOException ioe) {
+      // all good
+    }
+
+    // create the store
+    accessor = store.createAccessor(false);
+    accessor.close();
+
+    byte[] key;
+    long hash;
+    byte[] value;
+
+
+    key = new byte[10];
+    Arrays.fill(key, (byte) 1);
+    hash = 10l;
+    value = new byte[100];
+    Arrays.fill(value, (byte) 2);
+
+
+    // open read only again
+    accessor = store.createAccessor(true);
+
+    assertFalse(store.containsKey(accessor, key, hash));
+    try {
+      assertNull(store.put(accessor, key, hash, value));
+      fail("Accessor is set read only and should not be able to add entiteis!");
+    } catch (IOException ioe) {
+      // all good
+      accessor.close();
+    }
+
+    // open read/write
+    accessor = store.createAccessor(false);
+
+    // simple general put/get/containsKey/remove tests
+
+    assertNull(store.put(accessor, key, hash, value));    
+    assertTrue(store.containsKey(accessor, key, hash));
+    assertTrue(Arrays.equals(value, store.get(accessor, key, hash)));
+    // add again with alternative values
+    byte[] value2 = new byte[100];
+    Arrays.fill(value2, (byte)3);
+    assertTrue(Arrays.equals(value, store.put(accessor, key, hash, value2)));
+    assertTrue("It is probable that the byte array in ValuePartition.Posting (value2) was attempted to be cached and thus overwritten",
+        Arrays.equals(value2, store.remove(accessor, key, hash)));
+    assertFalse(store.containsKey(accessor, key, hash));
+
+    assertNull(store.put(accessor, key, hash, value2));
+    assertTrue(store.containsKey(accessor, key, hash));
+
+    // alternative values, new hash
+
+    key = new byte[10];
+    Arrays.fill(key, (byte) 4);
+    hash = 11l;
+    value = new byte[100];
+    Arrays.fill(value, (byte) 5);
+
+    assertFalse(store.containsKey(accessor, key, hash));
+    assertNull(store.put(accessor, key, hash, value));
+    assertTrue(store.containsKey(accessor, key, hash));
+    assertTrue(Arrays.equals(value, store.get(accessor, key, hash)));
+    
+
+    key = new byte[10];
+    Arrays.fill(key, (byte) 5);
+    hash = 12l;
+    value = new byte[100];
+    Arrays.fill(value, (byte) 6);
+
+    assertFalse(store.containsKey(accessor, key, hash));
+    assertNull(store.put(accessor, key, hash, value));
+    assertTrue(store.containsKey(accessor, key, hash));
+    assertTrue(Arrays.equals(value, store.get(accessor, key, hash)));
+    assertTrue(Arrays.equals(value, store.remove(accessor, key, hash)));
+    assertFalse(store.containsKey(accessor, key, hash));
+
+
+    store.close();
+
+  }
+
+}



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