Mercurial > hg > Database > Christie
view src/main/java/christie/test/topology/paxos/acceptor/AcceptCodeGear.java @ 190:2d0d41b648fa
add PromiseProposal and refactor acceptor
author | akahori |
---|---|
date | Tue, 12 Feb 2019 16:10:15 +0900 |
parents | 1bffd8151c6a |
children | f4343de364da |
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; public class AcceptCodeGear extends CodeGear { @Peek TopologyDataGear topoDG; @Take Proposal acceptProposal; //PromiseProposal promiseProposal; //@Take //Proposal promisedProposal; Logger logger = LogManager.getLogger(AcceptCodeGear.class); @Override protected void run(CodeGearManager cgm) { List<String> _CLIST = topoDG.getConnectionList(); // promise codegearでも使うので, lock PromiseProposal.getInstance().lock(); PromiseProposal promiseProposal = PromiseProposal.getInstance(); Proposal promisedProposal = promiseProposal.getPromiseProposal(); if(acceptProposal.getNumber() >= promisedProposal.getNumber()) { logger.debug(acceptProposal + " >= " + promisedProposal); acceptProposal.setAccepted(true); acceptProposal.setAcceptorName(topoDG.getNodeName()); promisedProposal = acceptProposal; for (String connectionNodeName : _CLIST){ if(connectionNodeName.matches("learner" + ".*")) { //logger.debug("send " + topoDG.getNodeName() + " to " // + connectionNodeName + " " + promisedProposal); getDGM(connectionNodeName).put("acceptedProposal", promisedProposal); } } } promiseProposal.setPromiseProposal(promisedProposal); promiseProposal.unLock(); logger.debug("accept " + topoDG.getNodeName() + " " + promisedProposal); put(acceptProposal.getProposerName(), "acceptedProposal", promisedProposal); put("promisedProposal", promisedProposal); cgm.setup(new AcceptCodeGear()); } }