Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexPushThread.java @ 127:b2c1fd513feb
push index thread add read log
author | one |
---|---|
date | Mon, 13 Oct 2014 03:22:16 +0900 |
parents | src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/query/IndexPushThread.java@f81ec544a155 |
children | ba5370090393 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index; import java.nio.ByteBuffer; import javax.swing.tree.DefaultTreeCellEditor.EditorContainer; 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.store.ChangeSet; 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.TreeNode; 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.transaction.IndexJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; import fj.data.List; import fj.data.TreeMap; public class IndexPushThread extends Thread { TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index; JungleTree tree; IndexJungleTreeEditor editor; int logSize; public IndexPushThread( TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index, JungleTree tree,IndexJungleTreeEditor editor, 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<TreeOperation> 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(); } } }