Author: ieugen
Date: Sat Mar 31 09:40:54 2012
New Revision: 1307750

URL: http://svn.apache.org/viewvc?rev=1307750&view=rev
Log:
MAILBOX-103

- some refactoring to clean things up
- ZK path is mailboxid-uid
- we should use ZK paths to store the UID: mailboxId/uid : this will allow us 
to store more data per each mailboxId ZNode (modSeq, mailbox lock)
- fixed tests
Issue #MAILBOX-103 - Design and implement Distributed UID generation

Modified:
    
james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java
    
james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java

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=1307750&r1=1307749&r2=1307750&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
 Sat Mar 31 09:40:54 2012
@@ -24,8 +24,6 @@ import com.netflix.curator.framework.Cur
 import com.netflix.curator.framework.recipes.atomic.AtomicValue;
 import com.netflix.curator.framework.recipes.atomic.DistributedAtomicLong;
 import com.netflix.curator.retry.RetryOneTime;
-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;
@@ -33,9 +31,10 @@ import org.apache.james.mailbox.store.ma
 /**
  * ZooKeepr based implementation of a distribuited sequential UID generator.
  */
-public class ZooUidProvider<E> implements UidProvider<E>, Closeable {
+public class ZooUidProvider<E> implements UidProvider<E> {
+    // TODO: use ZK paths to store uid and modSeq, etc.
 
-    public final String UID_PATH_SUFIX = "-uid";
+    public static final String UID_PATH_SUFFIX = "-uid";
     private final CuratorFramework client;
     private final RetryPolicy retryPolicy;
 
@@ -53,9 +52,7 @@ public class ZooUidProvider<E> implement
     @Override
     public long nextUid(MailboxSession session, Mailbox mailbox) throws 
MailboxException {
         if (client.isStarted()) {
-            String path = mailbox.getMailboxId().toString() + UID_PATH_SUFIX;
-            System.out.println(path);
-            DistributedAtomicLong uid = new DistributedAtomicLong(client, 
path, retryPolicy);
+            DistributedAtomicLong uid = new DistributedAtomicLong(client, 
pathForMailbox(mailbox), retryPolicy);
             AtomicValue<Long> value = null;
             try {
                 uid.increment();
@@ -76,9 +73,7 @@ public class ZooUidProvider<E> implement
     @Override
     public long lastUid(MailboxSession session, Mailbox<E> mailbox) throws 
MailboxException {
         if (client.isStarted()) {
-            String path = mailbox.getMailboxId().toString() + UID_PATH_SUFIX;
-            System.out.println(path);
-            DistributedAtomicLong uid = new DistributedAtomicLong(client, 
path, retryPolicy);
+            DistributedAtomicLong uid = new DistributedAtomicLong(client, 
pathForMailbox(mailbox), retryPolicy);
             AtomicValue<Long> value = null;
             try {
                 value = uid.get();
@@ -95,10 +90,7 @@ public class ZooUidProvider<E> implement
         throw new MailboxException("Curator client is closed.");
     }
 
-    @Override
-    public void close() throws IOException {
-        if (client.isStarted()) {
-            client.close();
-        }
+    public static String pathForMailbox(Mailbox mailbox) {
+        return mailbox.getMailboxId().toString() + UID_PATH_SUFFIX;
     }
 }

Modified: 
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=1307750&r1=1307749&r2=1307750&view=diff
==============================================================================
--- 
james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java
 (original)
+++ 
james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java
 Sat Mar 31 09:40:54 2012
@@ -24,12 +24,11 @@ import com.netflix.curator.framework.Cur
 import com.netflix.curator.retry.RetryOneTime;
 import com.netflix.curator.test.TestingServer;
 import java.util.UUID;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+import org.junit.After;
 import static org.junit.Assert.*;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
@@ -47,13 +46,9 @@ public class ZooUidProviderTest {
     private SimpleMailbox<Long> mailboxLong;
     private UUID randomUUID = UUID.randomUUID();
 
-    @BeforeClass
-    public static void setUpClass() throws Exception {
-        testServer = new TestingServer(ZOO_TEST_PORT);
-    }
-
     @Before
     public void setUp() throws Exception {
+        testServer = new TestingServer(ZOO_TEST_PORT);
         client = CuratorFrameworkFactory.builder().connectString("localhost:" 
+ ZOO_TEST_PORT).retryPolicy(retryPolicy).
                 namespace("JAMES").build();
         client.start();
@@ -67,6 +62,12 @@ public class ZooUidProviderTest {
         mailboxLong.setMailboxId(123L);
     }
 
+    @After
+    public void tearDown() throws Exception {
+        client.close();
+        testServer.close();
+    }
+
     /**
      * Test of nextUid method, of class ZooUidProvider.
      */
@@ -89,39 +90,17 @@ public class ZooUidProviderTest {
         assertEquals("Next UID is 0", 0, result);
         result = uuidProvider.nextUid(null, mailboxUUID);
         assertEquals("Next UID is 1", 1, result);
-        result = longProvider.lastUid(null, mailboxLong);
-        assertEquals("Next UID is 0", 0, result);
-        result = longProvider.nextUid(null, mailboxLong);
-        assertEquals("Next UID is 1", 1, result);
     }
 
     /**
-     * Test of close method, of class ZooUidProvider.
+     * Test of lastUid method, of class ZooUidProvider.
      */
     @Test
-    public void testClose() throws Exception {
-        System.out.println("Testing close");
-        uuidProvider.close();
-        try {
-            uuidProvider.lastUid(null, mailboxUUID);
-        } catch (MailboxException me) {
-            assertEquals("Curator client is closed.", me.getMessage());
-        }
-        try {
-            uuidProvider.nextUid(null, mailboxUUID);
-        } catch (MailboxException me) {
-            assertEquals("Curator client is closed.", me.getMessage());
-        }
-        longProvider.close();
-        try {
-            longProvider.lastUid(null, mailboxLong);
-        } catch (MailboxException me) {
-            assertEquals("Curator client is closed.", me.getMessage());
-        }
-        try {
-            longProvider.nextUid(null, mailboxLong);
-        } catch (MailboxException me) {
-            assertEquals("Curator client is closed.", me.getMessage());
-        }
+    public void testLongLastUid() throws Exception {
+        System.out.println("Testing long lastUid");
+        long result = longProvider.lastUid(null, mailboxLong);
+        assertEquals("Next UID is 0", 0, result);
+        result = longProvider.nextUid(null, mailboxLong);
+        assertEquals("Next UID is 1", 1, result);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to