# HG changeset patch # User shoshi # Date 1295595221 -32400 # Node ID 7392f7ed45d212d4534a1562b41595b80222e38f # Parent ba136d01f304eb831970b5301dab4d51290218e1 added SimpleIncNodeID SimpleIncNodeIDTest diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/cassandra/test/CassGetSliceTest.java --- a/src/treecms/proto/cassandra/test/CassGetSliceTest.java Fri Jan 21 03:03:54 2011 +0900 +++ b/src/treecms/proto/cassandra/test/CassGetSliceTest.java Fri Jan 21 16:33:41 2011 +0900 @@ -1,7 +1,12 @@ package treecms.proto.cassandra.test; +/* + * Cassandra get_slice , get_range_slice test + * + * 2011/01/19 Shoshi TAMAKI + */ + import java.util.List; - import org.apache.cassandra.thrift.Cassandra; import org.apache.cassandra.thrift.ColumnOrSuperColumn; import org.apache.cassandra.thrift.ColumnParent; diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/id/DecrementalNodeID.java --- a/src/treecms/proto/id/DecrementalNodeID.java Fri Jan 21 03:03:54 2011 +0900 +++ b/src/treecms/proto/id/DecrementalNodeID.java Fri Jan 21 16:33:41 2011 +0900 @@ -18,6 +18,12 @@ @Override public abstract String getVersion(); + + @Override + public String toString() + { + return getUUID()+"@"+getVersion(); + } @Override public boolean isFamily(NodeID id) diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/id/IncrementalNodeID.java --- a/src/treecms/proto/id/IncrementalNodeID.java Fri Jan 21 03:03:54 2011 +0900 +++ b/src/treecms/proto/id/IncrementalNodeID.java Fri Jan 21 16:33:41 2011 +0900 @@ -4,60 +4,33 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; -public class IncrementalNodeID implements NodeID +public abstract class IncrementalNodeID implements NodeID { - private String m_inheritedID; - private long m_version; - - private AtomicLong m_tip; - - public IncrementalNodeID() - { - this(UUID.randomUUID().toString()); - m_tip = new AtomicLong(); - m_version = 0; - } - - private IncrementalNodeID(String _id) - { - m_inheritedID = _id; - } + @Override + public abstract NodeID create(); @Override - public NodeID create() - { - return new IncrementalNodeID(); - } + public abstract NodeID update(); @Override - public NodeID update() - { - IncrementalNodeID id = new IncrementalNodeID(m_inheritedID); - id.m_tip = m_tip; - id.m_version = m_tip.incrementAndGet(); - return id; - } - + public abstract NodeID getTip(); + @Override - public NodeID getTip() - { - IncrementalNodeID id = new IncrementalNodeID(m_inheritedID); - id.m_tip = m_tip; - id.m_version = m_tip.get(); - return id; - } + public abstract String getUUID(); + + @Override + public abstract String getVersion(); @Override public String toString() { - return m_inheritedID + "@" + m_version; + return getUUID()+"@"+getVersion(); } @Override public boolean equals(NodeID _id) { - IncrementalNodeID id = (IncrementalNodeID)_id; - if(isFamily(id) && m_version == id.m_version){ + if(isFamily(_id) && getVersion() == _id.getVersion()){ return true; } return false; @@ -66,8 +39,7 @@ @Override public boolean isFamily(NodeID _id) { - IncrementalNodeID id = (IncrementalNodeID)_id; - if(m_inheritedID.equals(id.m_inheritedID)){ + if(getUUID().equals(_id.getUUID())){ return true; } return false; @@ -76,22 +48,9 @@ @Override public boolean isOrderThen(NodeID _id) { - IncrementalNodeID id = (IncrementalNodeID)_id; - if(isFamily(id) && m_version > id.m_version){ + if(isFamily(_id) && Long.parseLong(getVersion()) > Long.parseLong(_id.getVersion())){ return true; } return false; } - - @Override - public String getUUID() - { - return m_inheritedID; - } - - @Override - public String getVersion() - { - return Long.toString(m_version); - } } diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/id/test/IncrementalNodeIDTest1.java --- a/src/treecms/proto/id/test/IncrementalNodeIDTest1.java Fri Jan 21 03:03:54 2011 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -package treecms.proto.id.test; - -/** - * IncrementalNodeIDTest1 - * - * testIDstartsWithZero() - * the id must be start from zero. - * - * testUpdateIDFromLatestID() - * check that id able to update correctly from latest node id. - * - * testUpdateIDFromOldID() - * check that id able to update correctly from old node id. - * - * testMultiThreadUpdateID() - * execute concurrent update using shared object. - */ - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import org.junit.Test; -import org.junit.Assert; -import org.junit.runner.JUnitCore; -import treecms.proto.api.NodeID; -import treecms.proto.id.IncrementalNodeID; -import treecms.proto.test.NodeIDTest; - -public class IncrementalNodeIDTest1 extends NodeIDTest -{ - public static void main(String _args[]) - { - JUnitCore.main(IncrementalNodeIDTest1.class.getName()); - } - - public IncrementalNodeIDTest1() - { - super(new IncrementalNodeID()); - } - - @Test - public void testIDstartsWithZero() - { - NodeID id = new IncrementalNodeID(); - long ver = Long.parseLong(id.toString().split("@")[1]); - Assert.assertEquals(ver,0); - } - - @Test - public void testUpdateIDFromLatestID() - { - int count = 100; - NodeID id = new IncrementalNodeID(); - - for(int i = 1;i <= count;i ++){ - id = id.update(); - long ver = Long.parseLong(id.toString().split("@")[1]); - Assert.assertEquals(ver,i); - } - } - - @Test - public void testUpdateIDFromOldID() - { - int count = 100; - NodeID id0 = new IncrementalNodeID(); - - for(int i = 1;i <= count;i ++){ - NodeID id = id0.update(); - long ver = Long.parseLong(id.toString().split("@")[1]); - Assert.assertEquals(ver,i); - } - } - - @Test - public void testMultiThreadedUpdateID() - { - final int threads = 10; //number of threads - final int count = 100; //modification count - ExecutorService service = Executors.newFixedThreadPool(threads); - - final NodeID id = new IncrementalNodeID(); - - for(int i = 0;i < threads;i ++){ - service.execute(new Runnable(){ - @Override - public void run() - { - for(int j = 0;j < count;j ++){ - id.update(); - } - } - }); - } - - service.shutdown(); - - try { - service.awaitTermination(Long.MAX_VALUE,TimeUnit.DAYS); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - //check id - NodeID tip = id.update(); - long ver = Long.parseLong(tip.toString().split("@")[1]); - Assert.assertEquals(ver,threads*count + 1); - } -} diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/marge/ReplaceMarger.java --- a/src/treecms/proto/marge/ReplaceMarger.java Fri Jan 21 03:03:54 2011 +0900 +++ b/src/treecms/proto/marge/ReplaceMarger.java Fri Jan 21 16:33:41 2011 +0900 @@ -8,7 +8,8 @@ @Override public Node merge(Node _from, Node _to) { - return _from; + Node newRoot = _from.cloneNode(); + return newRoot; } } diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/simple/SimpleBrowser.java --- a/src/treecms/proto/simple/SimpleBrowser.java Fri Jan 21 03:03:54 2011 +0900 +++ b/src/treecms/proto/simple/SimpleBrowser.java Fri Jan 21 16:33:41 2011 +0900 @@ -46,7 +46,7 @@ public SimpleNode createNode() { - SimpleNode node = new SimpleNode(new IncrementalNodeID()); + SimpleNode node = new SimpleNode(new SimpleDecNodeID()); m_table.put(node.getID().toString(),node); return node; } @@ -69,7 +69,7 @@ public SimpleLink createLink(Node _target) { - SimpleLink link = new SimpleLink(new IncrementalNodeID(),_target); + SimpleLink link = new SimpleLink(new SimpleDecNodeID(),_target); m_table.put(link.getID().toString(),link); return link; } diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/simple/SimpleDecNodeID.java --- a/src/treecms/proto/simple/SimpleDecNodeID.java Fri Jan 21 03:03:54 2011 +0900 +++ b/src/treecms/proto/simple/SimpleDecNodeID.java Fri Jan 21 16:33:41 2011 +0900 @@ -63,5 +63,5 @@ { return new SimpleDecNodeID(m_uuid,m_tip,false); } - + } diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/simple/SimpleIncNodeID.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/simple/SimpleIncNodeID.java Fri Jan 21 16:33:41 2011 +0900 @@ -0,0 +1,99 @@ +package treecms.proto.simple; + +import treecms.proto.api.NodeID; +import treecms.proto.id.IncrementalNodeID; + +import java.util.UUID; +import java.util.concurrent.atomic.AtomicLong; + +public class SimpleIncNodeID extends IncrementalNodeID +{ + private String m_inheritedID; + private long m_version; + + private AtomicLong m_tip; + + public SimpleIncNodeID() + { + this(UUID.randomUUID().toString()); + m_tip = new AtomicLong(); + m_version = 0; + } + + private SimpleIncNodeID(String _id) + { + m_inheritedID = _id; + } + + @Override + public NodeID create() + { + return new SimpleIncNodeID(); + } + + @Override + public NodeID update() + { + SimpleIncNodeID id = new SimpleIncNodeID(m_inheritedID); + id.m_tip = m_tip; + id.m_version = m_tip.incrementAndGet(); + return id; + } + + @Override + public NodeID getTip() + { + SimpleIncNodeID id = new SimpleIncNodeID(m_inheritedID); + id.m_tip = m_tip; + id.m_version = m_tip.get(); + return id; + } + + @Override + public String toString() + { + return m_inheritedID + "@" + m_version; + } + + @Override + public boolean equals(NodeID _id) + { + SimpleIncNodeID id = (SimpleIncNodeID)_id; + if(isFamily(id) && m_version == id.m_version){ + return true; + } + return false; + } + + @Override + public boolean isFamily(NodeID _id) + { + SimpleIncNodeID id = (SimpleIncNodeID)_id; + if(m_inheritedID.equals(id.m_inheritedID)){ + return true; + } + return false; + } + + @Override + public boolean isOrderThen(NodeID _id) + { + SimpleIncNodeID id = (SimpleIncNodeID)_id; + if(isFamily(id) && m_version > id.m_version){ + return true; + } + return false; + } + + @Override + public String getUUID() + { + return m_inheritedID; + } + + @Override + public String getVersion() + { + return Long.toString(m_version); + } +} diff -r ba136d01f304 -r 7392f7ed45d2 src/treecms/proto/simple/test/SimpleIncNodeIDTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/simple/test/SimpleIncNodeIDTest.java Fri Jan 21 16:33:41 2011 +0900 @@ -0,0 +1,110 @@ +package treecms.proto.simple.test; + +/** + * IncrementalNodeIDTest1 + + * + * testIDstartsWithZero() + * the id must be start from zero. + * + * testUpdateIDFromLatestID() + * check that id able to update correctly from latest node id. + * + * testUpdateIDFromOldID() + * check that id able to update correctly from old node id. + * + * testMultiThreadUpdateID() + * execute concurrent update using shared object. + */ + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import org.junit.Test; +import org.junit.Assert; +import org.junit.runner.JUnitCore; +import treecms.proto.api.NodeID; +import treecms.proto.simple.SimpleIncNodeID; +import treecms.proto.test.NodeIDTest; + +public class SimpleIncNodeIDTest extends NodeIDTest +{ + public static void main(String _args[]) + { + JUnitCore.main(SimpleIncNodeIDTest.class.getName()); + } + + public SimpleIncNodeIDTest() + { + super(new SimpleIncNodeID()); + } + + @Test + public void testIDstartsWithZero() + { + NodeID id = new SimpleIncNodeID(); + long ver = Long.parseLong(id.toString().split("@")[1]); + Assert.assertEquals(ver,0); + } + + @Test + public void testUpdateIDFromLatestID() + { + int count = 100; + NodeID id = new SimpleIncNodeID(); + + for(int i = 1;i <= count;i ++){ + id = id.update(); + long ver = Long.parseLong(id.toString().split("@")[1]); + Assert.assertEquals(ver,i); + } + } + + @Test + public void testUpdateIDFromOldID() + { + int count = 100; + NodeID id0 = new SimpleIncNodeID(); + + for(int i = 1;i <= count;i ++){ + NodeID id = id0.update(); + long ver = Long.parseLong(id.toString().split("@")[1]); + Assert.assertEquals(ver,i); + } + } + + @Test + public void testMultiThreadedUpdateID() + { + final int threads = 10; //number of threads + final int count = 100; //modification count + ExecutorService service = Executors.newFixedThreadPool(threads); + + final NodeID id = new SimpleIncNodeID(); + + for(int i = 0;i < threads;i ++){ + service.execute(new Runnable(){ + @Override + public void run() + { + for(int j = 0;j < count;j ++){ + id.update(); + } + } + }); + } + + service.shutdown(); + + try { + service.awaitTermination(Long.MAX_VALUE,TimeUnit.DAYS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + //check id + NodeID tip = id.update(); + long ver = Long.parseLong(tip.toString().split("@")[1]); + Assert.assertEquals(ver,threads*count + 1); + } +}