view src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java @ 159:a0391cfdcef6

update topologymanager
author akahori
date Mon, 21 Jan 2019 18:02:49 +0900
parents src/main/java/christie/test/Paxos/proposer/ReceivePromiseCodeGear.java@7a2108775da7
children c6250ad544e0
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.isAccepted()){
            if(sendedProposal.isAccepted()){
                if(receivePromise.getNumber() > sendedProposal.getNumber()){
                    put("sendedProposal", receivePromise);
                }else{
                    put("sendedProposal", sendedProposal);
                }
            }else{
                sendedProposal.setValue(receivePromise.getValue());
                put("sendedProposal", sendedProposal);
            }
        }else{
            if(receivePromise.getNumber() > sendedProposal.getNumber()){
                promiseCount = 0;
                sendedProposal.incrementNumber();
                put("sendProposal", sendedProposal);
                cgm.setup(new SendPrepareRequestCodeGear());
            }else{
                put("sendedProposal", sendedProposal);
            }
        }

        System.out.println("recieve");

        put("promiseCount", promiseCount);


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