Mercurial > hg > Database > Christie
view src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java @ 198:dd3c0ba6a0a6
fix topology manager
author | akahori |
---|---|
date | Sat, 09 Mar 2019 21:53:37 +0900 |
parents | 3a4f77778d90 |
children |
line wrap: on
line source
package christie.test.topology.paxos.proposer; import christie.annotation.Take; import christie.codegear.CodeGear; import christie.codegear.CodeGearManager; import christie.test.topology.paxos.Proposal; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ReceivePromiseCodeGear extends CodeGear{ //@Take Proposal sendedProposal; @Take Proposal receivePromise; //@Take int promiseCount; int maxRecvProposalNumber; Logger logger = LogManager.getLogger(RecieveAcceptedCodeGear.class); public ReceivePromiseCodeGear(Proposal sendedProposal){ this(0, sendedProposal, 0); } public ReceivePromiseCodeGear(int promiseCount, Proposal sendedProposal, int maxRecvProposalNumber){ this.promiseCount = promiseCount; this.sendedProposal = sendedProposal; this.maxRecvProposalNumber = maxRecvProposalNumber; } @Override protected void run(CodeGearManager cgm) { promiseCount++; if(receivePromise.getNumber() > sendedProposal.getNumber()){ cgm.setup(new SendPrepareRequestCodeGear(sendedProposal)); }else{ if(receivePromise.isAccepted()){ int recvProposalNumber = receivePromise.getNumber(); if(maxRecvProposalNumber < recvProposalNumber) { maxRecvProposalNumber = recvProposalNumber; sendedProposal.setValue(receivePromise.getValue()); } } if(promiseCount > sendedProposal.getAcceptorNum()/2){ cgm.setup(new SendAcceptRequestCodeGear(sendedProposal)); }else { cgm.setup(new ReceivePromiseCodeGear(promiseCount, sendedProposal, maxRecvProposalNumber)); } } } }