# HG changeset patch # User one # Date 1413677738 -32400 # Node ID ba5370090393d6a140c52ce9304c38db4a7d147d # Parent 1c3c3300716ca7e575cee96478498bc008f66f0e index commit Prototype diff -r 1c3c3300716c -r ba5370090393 src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Fri Oct 17 17:21:03 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Sun Oct 19 09:15:38 2014 +0900 @@ -1,5 +1,7 @@ package jp.ac.u_ryukyu.ie.cr.shoshi.jungle; +import java.util.concurrent.atomic.AtomicReference; + import org.omg.CORBA.TCKind; import fj.data.List; @@ -71,12 +73,11 @@ @Override public InterfaceTraverser getTraverser() { - TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - TreeMap>>> index = cs.getIndex(); + AtomicReservableReference.Reservation reservation = repository.getReservation(); + TreeMap>>> index = getIndex(); if (index != null) - return new InterfaceTraverser(getRootNode(), index, getIndexTreeEditor()); - return new InterfaceTraverser(getRootNode(),getIndexTreeEditor()); + return new InterfaceTraverser(getRootNode(), index, reservation); + return new InterfaceTraverser(getRootNode(),reservation); } @Override diff -r 1c3c3300716c -r ba5370090393 src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java Fri Oct 17 17:21:03 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java Sun Oct 19 09:15:38 2014 +0900 @@ -46,6 +46,10 @@ reservation.set(new Reservation(_value,null,true)); } + public Reservation getReservation(){ + return reservation.get(); + } + public V get() { Reservation r = reservation.get(); @@ -65,6 +69,10 @@ flagConfirmed = new AtomicBoolean(_confirmed); } + public void set(V object){ + ref.set(object); + } + public V get() { return ref.get(); diff -r 1c3c3300716c -r ba5370090393 src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java Fri Oct 17 17:21:03 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java Sun Oct 19 09:15:38 2014 +0900 @@ -1,6 +1,7 @@ package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser; import java.util.Iterator; +import java.util.concurrent.atomic.AtomicReference; import fj.Ord; import fj.data.List; @@ -8,9 +9,15 @@ import fj.data.TreeMap; 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.persistent.ChangeList; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultChangeSet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query; @@ -20,25 +27,35 @@ //InterfaceTraverser traverser; TreeNode node; TreeMap>>> index; - IndexJungleTreeEditor editor; + AtomicReservableReference.Reservation reservation; - public InterfaceTraverser(TreeNode _root, IndexJungleTreeEditor editor) { + public InterfaceTraverser(TreeNode _root, AtomicReservableReference.Reservation reservation) { this.node = _root; this.index = TreeMap.empty(Ord.stringOrd); - this.editor = editor; + this.reservation = reservation; } public InterfaceTraverser( TreeNode _root, TreeMap>>> index, - IndexJungleTreeEditor editor) { + AtomicReservableReference.Reservation reservation) { this.node = _root; this.index = index; - this.editor = editor; + this.reservation = reservation; } - public IndexJungleTreeEditor getEditor() { - return editor; + public void commitIndex(){ + TreeContext tc = reservation.get(); + ChangeSet cs = tc.getChangeSet(); + TreeNode root = cs.getRoot(); + ChangeSet prev = cs.prev(); + ChangeList cl = cs.getChangeList(); + String uuid = cs.uuid(); + String treeName = cs.getTreeName(); + long revision = cs.revision(); + ChangeSet newCs = new DefaultChangeSet(root, prev,cl, uuid, treeName, revision, index); + TreeContext newTc = new DefaultTreeContext(root, newCs); + reservation.set(newTc); } public TreeMap>>> getIndex() { @@ -52,10 +69,10 @@ - public InterfaceTraverser getTraverser(JungleTree tree) { +/* public InterfaceTraverser getTraverser(JungleTree tree) { return new InterfaceTraverser(tree.getRootNode(), tree.getIndex(), tree.getIndexTreeEditor()); - } + }*/ public void set(TreeNode root) { this.node = root; diff -r 1c3c3300716c -r ba5370090393 src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexPushThread.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexPushThread.java Fri Oct 17 17:21:03 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexPushThread.java Sun Oct 19 09:15:38 2014 +0900 @@ -21,62 +21,60 @@ TreeMap>>> index; JungleTree tree; - IndexJungleTreeEditor editor; int logSize; - public IndexPushThread( - TreeMap>>> index, - JungleTree tree,IndexJungleTreeEditor editor, int logSize) { + public IndexPushThread(TreeMap>>> index, int logSize) { this.index = index; this.tree = tree; - this.editor = editor; this.logSize = logSize; } public void run() { - while (true) { - - if (logSize == tree.getLogSize()) { - editor.setIndex(index); - if (editor.success().isB()) - break; - } else { - editor = tree.getIndexTreeEditor(); - Iterable Changeset = tree.getLog(); - int loopCount = 0; - - for(TreeOperation treeOp : Changeset) { - loopCount++; - if (loopCount >= logSize) { - NodePath path = treeOp.getNodePath(); - NodeOperation NodeOperation = treeOp.getNodeOperation(); - Command c = NodeOperation.getCommand(); - - switch (c) { - case PUT_ATTRIBUTE://ここ以下でIndexEditorを使ってindexの更新を行う - String key = NodeOperation.getKey(); - ByteBuffer value = NodeOperation.getValue(); - - //return editor.putAttribute(path, key, value); - case DELETE_ATTRIBUTE: - key = NodeOperation.getKey(); - //return editor.deleteAttribute(path, key); - case APPEND_CHILD: - //return editor.addNewChildAt(path, pos); - case DELETE_CHILD: - //return editor.deleteChildAt(path, 0); - } - } - } - - logSize = loopCount; - editor.setIndex(index); - if (editor.success().isB()) - break; - - } - editor = tree.getIndexTreeEditor(); - } + //editor.setIndex(index); + //editor.success().isB(); +// while (true) { +// +// if (logSize == tree.getLogSize()) { +// editor.setIndex(index); +// if (editor.success().isB()) +// break; +// } else { +// editor = tree.getIndexTreeEditor(); +// Iterable Changeset = tree.getLog(); +// int loopCount = 0; +// +// for(TreeOperation treeOp : Changeset) { +// loopCount++; +// if (loopCount >= logSize) { +// NodePath path = treeOp.getNodePath(); +// NodeOperation NodeOperation = treeOp.getNodeOperation(); +// Command c = NodeOperation.getCommand(); +// +// switch (c) { +// case PUT_ATTRIBUTE://ここ以下でIndexEditorを使ってindexの更新を行う +// String key = NodeOperation.getKey(); +// ByteBuffer value = NodeOperation.getValue(); +// +// //return editor.putAttribute(path, key, value); +// case DELETE_ATTRIBUTE: +// key = NodeOperation.getKey(); +// //return editor.deleteAttribute(path, key); +// case APPEND_CHILD: +// //return editor.addNewChildAt(path, pos); +// case DELETE_CHILD: +// //return editor.deleteChildAt(path, 0); +// } +// } +// } +// +// logSize = loopCount; +// editor.setIndex(index); +// if (editor.success().isB()) +// break; +// +// } +// editor = tree.getIndexTreeEditor(); +// } } } diff -r 1c3c3300716c -r ba5370090393 src/test/java/ip/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/IndexCommitTest.java --- a/src/test/java/ip/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/IndexCommitTest.java Fri Oct 17 17:21:03 2014 +0900 +++ b/src/test/java/ip/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/IndexCommitTest.java Sun Oct 19 09:15:38 2014 +0900 @@ -11,6 +11,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; @@ -21,6 +22,8 @@ import java.nio.ByteBuffer; +import javax.swing.tree.DefaultTreeCellEditor.EditorContainer; + import org.junit.Test; import org.junit.experimental.theories.suppliers.TestedOn; @@ -41,8 +44,7 @@ tree.getRootNode(); InterfaceTraverser ifTraverser = tree.getTraverser(); - Iterator> searchNode = ifTraverser.find(( - TreeNode node) -> { + ifTraverser.find((TreeNode node) -> { ByteBuffer attribute = node.getAttributes().get(key); if (attribute != null) { byte[] byteAttribute = attribute.array(); @@ -60,13 +62,18 @@ TreeMap>> innerIndex = opIndex.some(); Assert.assertTrue(!innerIndex.get("<-1,0,0>").isNone()); - IndexPushThread wt = new IndexPushThread(index, tree,ifTraverser.getEditor(), 0); - wt.start(); - wt.join(); + JungleTreeEditor editor = tree.getTreeEditor(); + Either either = editor.addNewChildAt(new DefaultNodePath(), 0); + editor = either.b(); + editor.success(); + + ifTraverser.commitIndex(); JungleTree newTree = jungle.getTreeByName("tree"); InterfaceTraverser newIfTraverser = newTree.getTraverser(); TreeMap>>> newIndex = newIfTraverser.getIndex(); - Assert.assertFalse(newIndex.isEmpty()); + Assert.assertTrue(newIndex.isEmpty()); + + }