view src/main/java/alice/topology/node/PrepareToClose.java @ 599:3284428f525e dispose

add MetaCodeSegment & MetaDSM
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 15 Feb 2016 01:16:35 +0900
parents dca4b392f788
children 8a9fd716c335
line wrap: on
line source

package alice.topology.node;

import java.util.List;

import alice.codesegment.CodeSegment;
import alice.codesegment.MetaCodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.DataSegment;
import alice.datasegment.DataSegmentManager;
import alice.datasegment.Receiver;

public class PrepareToClose extends MetaCodeSegment {

    private Receiver info = ids.create(CommandType.PEEK);
    private Receiver info1 = ids.create(CommandType.TAKE);

    public PrepareToClose() {
        info.setKey("_CLOSEMESSEAGE");
        info1.setKey("_CLIST");
    }

    @SuppressWarnings("unchecked")
    @Override
    public void run() {
        String managerKey = info.asString();
        List<String> list = info1.asClass(List.class);
        if (list.contains(managerKey)) {
            list.remove(managerKey);
            DataSegmentManager manager = DataSegment.get(managerKey);
            manager.setSendError(false);

            ods.put(managerKey, "_CLOSEREADY", managerKey);
            ods.put("_CLOSEREADY", managerKey);

            new CloseRemoteDataSegment();
        } else {
            // lost node is this node's parent, so already removed
            new ReceiveCloseMessage(CommandType.TAKE);
        }
        ods.put(info1.key, list);

    }

}