view src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java @ 181:33b4966d4d24

update paxos
author akahori
date Sat, 02 Feb 2019 11:42:48 +0900
parents c6250ad544e0
children 9b0a7f8dde81
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;

public class ReceivePromiseCodeGear extends CodeGear{
    @Take
    Proposal sendedProposal;

    @Take
    Proposal receivePromise;

    @Take
    int promiseCount;


    @Override
    protected void run(CodeGearManager cgm) {
        promiseCount++;
        if(receivePromise.getNumber() > sendedProposal.getNumber()){
            promiseCount = 0;
            sendedProposal.incrementNumber();
            put("sendProposal", sendedProposal);
            cgm.setup(new SendPrepareRequestCodeGear());
        }else{
            if(receivePromise.isAccepted()){
                if(!sendedProposal.isAccepted()){
                    sendedProposal.setValue(receivePromise.getValue());
                }
            }
        }

        put("sendedProposal", sendedProposal);
        put("promiseCount", promiseCount);

        if(promiseCount > sendedProposal.getAcceptorNum()/2){
            put("acceptProposal", sendedProposal);
            cgm.setup(new SendAcceptRequestCodeGear());
        }else {
            cgm.setup(new ReceivePromiseCodeGear());
        }
    }
}