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

Logupdate terminate
author suruga
date Fri, 02 Feb 2018 19:01:52 +0900
parents 944baaa4d345
children
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;

        @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());
                System.out.println("LogUpdator: write to node " + node + " from " + log.from );
            }
        }
        JungleDistributedUpdator u = updator.asClass(JungleDistributedUpdator.class);
        if (log.getVal() == null) {
            ods.put("finish", 0);
            return;
        }
        NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);

        if (!log.from.equals("local")) {//ほかノードからのlogの更新
            Either<Error, JungleTreeEditor> either = u.update(netLog);
            System.out.println("LogUpdator: Update from " + log.from);
            if(either.isA()) {
                // throw new IllegalStateException();
            }
        }
        ods.put("updator",u);
        new LogUpdateCodeSegment();
    }
}