view src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/codesegment/LogUpdateCodeSegment.java @ 347:ae75a2d618f4

stop loop but not correct work
author nozomi
date Fri, 15 Sep 2017 18:10:54 +0900
parents 7d40ac7e693f
children 944baaa4d345
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungleNetwork.codesegment;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
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.operations.NetworkTreeOperationLog;

import java.util.List;

/**
 * Created by kono on 2017/08/27.
 */
public class LogUpdateCodeSegment extends CodeSegment {

    Receiver log = ids.create(CommandType.TAKE);
    Receiver clist = ids.create(CommandType.PEEK);
    Receiver updator = ids.create(CommandType.TAKE);

    public LogUpdateCodeSegment() {
        log.setKey("log");
        clist.setKey("_CLIST");
        updator.setKey("updator");
    }

    public LogUpdateCodeSegment(int index) {
        log.setKey("log", index);
        clist.setKey("_CLIST");;
        updator.setKey("updator");
    }

    public void run() {
        int index = log.index;

        NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
        @SuppressWarnings("unchecked")
        List<String> list = clist.asClass(List.class);
        for (String node : list) {//他ノードへlogの書き込み
            if (!node.equals(log.from)) {
                ods.put(node, log.key, log.getVal());
                new LogUpdateCodeSegment();
            }
        }

        JungleDistributedUpdator u = updator.asClass(JungleDistributedUpdator.class);
        if (!log.from.equals("local")) {//ほかノードからのlogの更新
            Either<Error, JungleTreeEditor> either = u.update(netLog);
            if(either.isA()) {
                new LogUpdateCodeSegment(index);
                throw new IllegalStateException();
            }
        }
        ods.put("updator",u);
    }
}