You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ie...@apache.org on 2012/03/02 14:29:38 UTC

svn commit: r1296197 - in /james/mailbox/trunk/zoo-seq-provider: ./ src/main/java/org/apache/james/mailbox/store/mail/ src/main/resources/ src/test/java/org/ src/test/java/org/apache/ src/test/java/org/apache/james/ src/test/java/org/apache/james/mailb...

Author: ieugen
Date: Fri Mar  2 13:29:38 2012
New Revision: 1296197

URL: http://svn.apache.org/viewvc?rev=1296197&view=rev
Log:
Issue #MAILBOX-103 - Design and implement Distributed UID generation
MAILBOX-103
- added curator as a zookeeper client
- implement java.io.Closeable
- added stub tests

Added:
    james/mailbox/trunk/zoo-seq-provider/src/main/resources/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/
    james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java   (with props)
Modified:
    james/mailbox/trunk/zoo-seq-provider/   (props changed)
    james/mailbox/trunk/zoo-seq-provider/pom.xml
    james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java

Propchange: james/mailbox/trunk/zoo-seq-provider/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Mar  2 13:29:38 2012
@@ -0,0 +1 @@
+target

Modified: james/mailbox/trunk/zoo-seq-provider/pom.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/zoo-seq-provider/pom.xml?rev=1296197&r1=1296196&r2=1296197&view=diff
==============================================================================
--- james/mailbox/trunk/zoo-seq-provider/pom.xml (original)
+++ james/mailbox/trunk/zoo-seq-provider/pom.xml Fri Mar  2 13:29:38 2012
@@ -32,6 +32,10 @@
     <name>Apache James Zookeeper Sequence Provider</name>
     <description>High performance distribuited sequence provider based on ZooKeepr </description>
 
+    <properties>
+        <curator.version>1.1.2</curator.version>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>junit</groupId>
@@ -55,5 +59,15 @@
             <groupId>${project.groupId}</groupId>
             <artifactId>apache-james-mailbox-store</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.netflix.curator</groupId>
+            <artifactId>curator-recipes</artifactId>
+            <version>${curator.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.netflix.curator</groupId>
+            <artifactId>curator-framework</artifactId>
+            <version>${curator.version}</version>
+        </dependency>
     </dependencies>
 </project>

Modified: james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java?rev=1296197&r1=1296196&r2=1296197&view=diff
==============================================================================
--- james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java (original)
+++ james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java Fri Mar  2 13:29:38 2012
@@ -18,6 +18,9 @@
  ****************************************************************/
 package org.apache.james.mailbox.store.mail;
 
+import com.netflix.curator.framework.CuratorFramework;
+import java.io.Closeable;
+import java.io.IOException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -25,17 +28,38 @@ import org.apache.james.mailbox.store.ma
 /**
  * ZooKeepr based implementation of a distribuited sequential UID generator.
  */
-public class ZooUidProvider<E> implements UidProvider<E> {
+public class ZooUidProvider<E> implements UidProvider<E>, Closeable {
+
+    /** Inject the curator client using srping */
+    private final CuratorFramework client;
+
+    public ZooUidProvider(CuratorFramework client) {
+        this.client = client;
+        client.start();
+    }
 
     @Override
     public long nextUid(MailboxSession session,
                         Mailbox<E> mailbox) throws MailboxException {
-        throw new UnsupportedOperationException("Not supported yet.");
+        if (client.isStarted()) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        } else {
+            throw new IllegalStateException("Curator client is closed.");
+        }
     }
 
     @Override
     public long lastUid(MailboxSession session,
                         Mailbox<E> mailbox) throws MailboxException {
-        throw new UnsupportedOperationException("Not supported yet.");
+        if (client.isStarted()) {
+            throw new UnsupportedOperationException("Not supported yet.");
+        } else {
+            throw new IllegalStateException("Curator client is closed.");
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        client.close();
     }
 }

Added: james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java?rev=1296197&view=auto
==============================================================================
--- james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java (added)
+++ james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java Fri Mar  2 13:29:38 2012
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.                                           *
+ ****************************************************************/
+package org.apache.james.mailbox.store.mail;
+
+import java.util.UUID;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import org.junit.Test;
+
+/**
+ * Test for UID provider.
+ */
+public class ZooUidProviderTest {
+
+    /**
+     * Test of nextUid method, of class ZooUidProvider.
+     */
+    @Test
+    public void testNextUid() throws Exception {
+        System.out.println("nextUid");
+        MailboxSession session = null;
+        Mailbox<UUID> mailbox = null;
+        ZooUidProvider instance = null;
+        long expResult = 0L;
+        long result = instance.nextUid(session, mailbox);
+        assertEquals(expResult, result);
+        // TODO review the generated test code and remove the default call to fail.
+        fail("The test case is a prototype.");
+    }
+
+    /**
+     * Test of lastUid method, of class ZooUidProvider.
+     */
+    @Test
+    public void testLastUid() throws Exception {
+        System.out.println("lastUid");
+        MailboxSession session = null;
+        Mailbox<UUID> mailbox = null;
+        ZooUidProvider instance = null;
+        long expResult = 0L;
+        long result = instance.lastUid(session, mailbox);
+        assertEquals(expResult, result);
+        // TODO review the generated test code and remove the default call to fail.
+        fail("The test case is a prototype.");
+    }
+
+    /**
+     * Test of close method, of class ZooUidProvider.
+     */
+    @Test
+    public void testClose() throws Exception {
+        System.out.println("close");
+        ZooUidProvider instance = null;
+        instance.close();
+        // TODO review the generated test code and remove the default call to fail.
+        fail("The test case is a prototype.");
+    }
+}

Propchange: james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Revision HeadURL



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org