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));
            }
        }
    }
}