Mercurial > hg > Members > nobuyasu > jungle-network
changeset 86:bcaf28f8244d
Added PersistentChageList and PersistentJournalTest
author | one |
---|---|
date | Tue, 29 Oct 2013 16:52:12 +0900 |
parents | e641f559559c |
children | f142dd4abc74 |
files | pom.xml src/alice/jungle/operations/NetworkTreeOperationLog.java src/alice/jungle/persistence/PersistentChangeList.java src/alice/jungle/persistence/PersistentChangeListReader.java src/alice/jungle/persistence/PersistentChangeListWriter.java src/alice/jungle/persistence/PersistentJournal.java src/test/alice/jungle/PersistenJournalTest.java |
diffstat | 7 files changed, 195 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/pom.xml Mon Oct 28 17:21:56 2013 +0900 +++ b/pom.xml Tue Oct 29 16:52:12 2013 +0900 @@ -61,7 +61,20 @@ <artifactId>functionaljava</artifactId> <version>3.1</version> </dependency> + +<!-- + <dependency> + <groupId>org.msgpack</groupId> + <artifactId>msgpack</artifactId> + <version>0.6.8</version> + </dependency> + <dependency> + <groupId>alice</groupId> + <artifactId>alice</artifactId> + <version>0.1</version> + </dependency> + --> <dependency> <groupId>jungle</groupId> <artifactId>jungle-core</artifactId>
--- a/src/alice/jungle/operations/NetworkTreeOperationLog.java Mon Oct 28 17:21:56 2013 +0900 +++ b/src/alice/jungle/operations/NetworkTreeOperationLog.java Tue Oct 29 16:52:12 2013 +0900 @@ -15,6 +15,7 @@ { public LinkedList<NetworkTreeOperation> list; public int size; + String uuid; String treeName; public NetworkTreeOperationLog() { @@ -23,8 +24,9 @@ treeName = ""; } - public NetworkTreeOperationLog(String _treeName, Iterable<TreeOperation> _list) + public NetworkTreeOperationLog(String _uuid, String _treeName, Iterable<TreeOperation> _list) { + uuid = _uuid; treeName = _treeName; list = new LinkedList<NetworkTreeOperation>(); for(TreeOperation op: _list) { @@ -79,6 +81,10 @@ return size; } + public String getUUID() { + return uuid; + } + public String getTreeName() { return treeName; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/jungle/persistence/PersistentChangeList.java Tue Oct 29 16:52:12 2013 +0900 @@ -0,0 +1,46 @@ +package alice.jungle.persistence; + +import java.util.Iterator; + +import alice.jungle.operations.NetworkTreeOperationLog; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; + +public class PersistentChangeList implements ChangeList { + + public NetworkTreeOperationLog log; + public String treeName; + public String uuid; + + public PersistentChangeList(NetworkTreeOperationLog _log) { + log = _log; + treeName = _log.getTreeName(); + uuid = _log.getUUID(); + } + + public PersistentChangeList(PersistentChangeSet cs) { + treeName = cs.getTreeName(); + uuid = cs.uuid(); + log = new NetworkTreeOperationLog(cs.getChangeList()); + } + + @Override + public Iterator<TreeOperation> iterator() { + return log.iterator(); + } + + public NetworkTreeOperationLog getTreeOperationLog() { + return log; + } + + public String getTreeName() { + return treeName; + } + + public String getUUID() { + return uuid; + } + + +}
--- a/src/alice/jungle/persistence/PersistentChangeListReader.java Mon Oct 28 17:21:56 2013 +0900 +++ b/src/alice/jungle/persistence/PersistentChangeListReader.java Tue Oct 29 16:52:12 2013 +0900 @@ -3,14 +3,12 @@ import java.io.EOFException; import java.io.IOException; import java.io.InputStream; -import java.util.Iterator; import org.msgpack.MessagePack; import alice.jungle.operations.NetworkTreeOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; public class PersistentChangeListReader implements ChangeListReader { @@ -36,12 +34,7 @@ { try { final NetworkTreeOperationLog readLog = msgpack.read(in, NetworkTreeOperationLog.class); - ChangeList cl = new ChangeList() { - @Override - public Iterator<TreeOperation> iterator() { - return readLog.iterator(); - } - }; + PersistentChangeList cl = new PersistentChangeList(readLog); return cl; } catch (EOFException e){ @@ -49,5 +42,4 @@ } return null; } - }
--- a/src/alice/jungle/persistence/PersistentChangeListWriter.java Mon Oct 28 17:21:56 2013 +0900 +++ b/src/alice/jungle/persistence/PersistentChangeListWriter.java Tue Oct 29 16:52:12 2013 +0900 @@ -34,9 +34,8 @@ public Result write(PersistentChangeSet cs) { - NetworkTreeOperationLog log = new NetworkTreeOperationLog(cs.uuid(),cs.getChangeList()); + NetworkTreeOperationLog log = new NetworkTreeOperationLog(cs.uuid(), cs.getTreeName(),cs.getChangeList()); try { - msgpack.write(out, cs.getTreeName()); msgpack.write(out, log); out.flush(); } catch (IOException e) {
--- a/src/alice/jungle/persistence/PersistentJournal.java Mon Oct 28 17:21:56 2013 +0900 +++ b/src/alice/jungle/persistence/PersistentJournal.java Tue Oct 29 16:52:12 2013 +0900 @@ -19,8 +19,12 @@ private static PersistentChangeListWriter WRITER; private static PersistentChangeListReader READER; private static MessagePack msgpack; - private static OutputStream out; - private static InputStream in; + private static OutputStream out = null; + private static InputStream in = null; + + public PersistentJournal() { + msgpack = new MessagePack(); + } public PersistentJournal(File file) throws FileNotFoundException { out = new FileOutputStream(file, true); @@ -40,6 +44,16 @@ return WRITER; } + public void setOutputFile(File file) throws FileNotFoundException { + out = new FileOutputStream(file); + WRITER = new PersistentChangeListWriter(out); + } + + public void setInputFile(File file) throws FileNotFoundException { + in = new FileInputStream(file); + READER = new PersistentChangeListReader(in); + } + public void close() throws IOException { out.close(); in.close();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/alice/jungle/PersistenJournalTest.java Tue Oct 29 16:52:12 2013 +0900 @@ -0,0 +1,111 @@ +package test.alice.jungle; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; +import alice.jungle.operations.NetworkNodePath; +import alice.jungle.persistence.JungleUpdater; +import alice.jungle.persistence.PersistentChangeList; +import alice.jungle.persistence.PersistentJournal; +import alice.jungle.persistence.PersistentJungle; + +public class PersistenJournalTest { + + public static void main(String[] args) throws IOException { + PersistentJournal journal = new PersistentJournal( + new File("./log/commit.log")); + Jungle jungle = new PersistentJungle(journal, "uuid",new DefaultTreeEditor(new DefaultTraverser())); + jungle.createNewTree("hoge"); + JungleTree tree = jungle.getTreeByName("hoge"); + JungleTreeEditor editor = tree.getTreeEditor(); + NetworkNodePath path = new NetworkNodePath(); + String key = "key"; + ByteBuffer value = ByteBuffer.wrap("value".getBytes()); + int pos = 0; + Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos); + if(either.isA()){ + System.out.println("Failed addNewChildAt"); + System.exit(0); + } + editor = either.b(); + either = editor.putAttribute(path, key, value); + + JungleTreeEditor e = either.b(); + e.success(); + journal.close(); + + PersistentJournal journal2 = new PersistentJournal(); + journal2.setInputFile(new File("./log/commit.log")); + journal2.setOutputFile(new File("./log/commit2.log")); + Jungle jungle2 = new PersistentJungle(journal, "uuid2", new DefaultTreeEditor(new DefaultTraverser())); + ChangeListReader reader = journal2.getReader(); + PersistentChangeList chList = (PersistentChangeList) reader.read(); + for (; chList != null; chList = (PersistentChangeList) reader.read()) { + String treeName = chList.getTreeName(); + JungleTree tree2 = jungle2.getTreeByName(treeName); + if(tree2 == null) { + tree2 = jungle2.createNewTree(treeName); + } + JungleTreeEditor editor2 = tree2.getTreeEditor(); + Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList.getTreeOperationLog()); + if (either2.isA()) { + System.err.println("JungleUpdater Error"); + System.exit(0); + } + editor2 = either2.b(); + editor2.success(); + + for (TreeOperation op : chList) { + NodePath p = op.getNodePath(); + NodeOperation nodeOp = op.getNodeOperation(); + Command c = nodeOp.getCommand(); + String str = ""; + switch (c) { + case PUT_ATTRIBUTE: + String opKey = nodeOp.getKey(); + ByteBuffer opValue = nodeOp.getValue(); + if (value.limit() < 100) { + str = String.format("key:%s,value:%s", opKey, + new String(opValue.array())); + } else { + str = String.format("key:%s,value:%d", opKey, + opValue.limit()); + } + break; + case DELETE_ATTRIBUTE: + str = String.format("key:%s", nodeOp.getKey()); + break; + case APPEND_CHILD: + str = String.format("pos:%d", nodeOp.getPosition()); + break; + case DELETE_CHILD: + str = String.format("pos:%d", nodeOp.getPosition()); + break; + } + System.out.println(String.format("[%s:%s:%s]", c, p, str)); + } + System.out.println(); + } + JungleTree tree2 = jungle2.getTreeByName("hoge"); + Node node = tree2.getRootNode(); + System.out.println("Children size : "+node.getChildren().size()); + + journal2.close(); + + } + +}