Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/test/java/jp/ac/u_ryukyu/ie/cr/junglenetwork/logupdate/Logupdator.java @ 348:944baaa4d345
Add debug Message
author | suruga |
---|---|
date | Sat, 16 Sep 2017 18:08:53 +0900 |
parents | ec382195c477 |
children | 1be36ba5ac00 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.junglenetwork.logupdate; import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; import jp.ac.u_ryukyu.ie.cr.jungle.bbs.BBSTest; import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.codesegment.JungleDistributedUpdator; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkTreeOperationLog; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater; import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicInteger; /** * Created by kono on 2017/08/29. */ public class Logupdator implements JungleDistributedUpdator { private BBSTest bbsTest; private AtomicInteger requestCounter = new AtomicInteger(0); public Logupdator(String name, BBSTest bbsTest) { this.bbsTest = bbsTest; } public void init() { } public int requestIncrementAndGet() { return requestCounter.incrementAndGet(); } @Override public Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) { String treeName = netLog.getTreeName(); Jungle jungle = getJungle(); if (jungle.getTreeByName(treeName) == null) { if(null == jungle.createNewTree(treeName)){ throw new IllegalStateException(); } } Either<Error, JungleTreeEditor> either = null; JungleTree tree = jungle.getTreeByName(treeName); long timestamp = System.currentTimeMillis(); ByteBuffer tBuffer = ByteBuffer.allocate(16); DefaultNodePath root = new DefaultNodePath(); tBuffer.putLong(timestamp); do { JungleTreeEditor editor = tree.getJungleTreeEditor(); /* * Merge. */ int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); either = JungleUpdater.edit(editor, netLog, pos); if(either.isA()) { throw new IllegalStateException(); } editor = either.b(); either = editor.putAttribute(root, "renewtime", tBuffer); if(either.isA()) { throw new IllegalStateException(); } editor = either.b(); either = editor.success(); } while(either.isA()); requestIncrementAndGet(); bbsTest.checkMessage(); return either; } private int calculatePosition(TreeNode node, long newNodeTimeStamp) { int count = 0; long childTimeStamp = 0; for(TreeNode n : node.getChildren()) { ByteBuffer timestamp = n.getAttributes().get("timestamp"); if(timestamp == null) { return count; } childTimeStamp = timestamp.getLong(0); if (newNodeTimeStamp < childTimeStamp) { break; } count++; } return count; } public Jungle getJungle() { return bbsTest.getJungle(); } }