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]