view src/main/java/christie/test/topology/paxos/acceptor/AcceptCodeGear.java @ 193:f4343de364da

fix paxos
author akahori
date Tue, 26 Feb 2019 18:33:49 +0900
parents 2d0d41b648fa
children
line wrap: on
line source

package christie.test.topology.paxos.acceptor;

import christie.annotation.Peek;
import christie.annotation.Take;
import christie.codegear.CodeGear;
import christie.codegear.CodeGearManager;
import christie.test.topology.paxos.Proposal;
import christie.topology.TopologyDataGear;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AcceptCodeGear extends CodeGear {

    @Peek
    TopologyDataGear topoDG;

    @Take
    Proposal acceptProposal;

    @Take
    Proposal promisedProposal;

    Logger logger = LogManager.getLogger(AcceptCodeGear.class);

    @Override
    protected void run(CodeGearManager cgm) {
        List<String> _CLIST = topoDG.getConnectionList();

        if(acceptProposal.getNumber() >= promisedProposal.getNumber()) {
            acceptProposal.setAccepted(true);
            acceptProposal.setAcceptorName(topoDG.getNodeName());

            promisedProposal = acceptProposal;

            for (String connectionNodeName : _CLIST){
                if(connectionNodeName.matches("learner" + ".*")) {
                    logger.debug("send " + connectionNodeName + " " + promisedProposal);
                    getDGM(connectionNodeName).put("acceptedProposal", promisedProposal);
                }
            }
        }

        put(acceptProposal.getProposerName(), "acceptedProposal", promisedProposal);
        put("promisedProposal", promisedProposal);

        cgm.setup(new AcceptCodeGear());

    }
}