view src/main/java/christie/test/topology/paxos/learner/AggregateProposalCodeGear.java @ 185:98d9473c5a83

update add return
author akahori
date Tue, 05 Feb 2019 18:05:45 +0900
parents 1bffd8151c6a
children 149d7fb0cfa6
line wrap: on
line source

package christie.test.topology.paxos.learner;

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.Message;
import christie.topology.node.TopologyNodeConfig;

import java.util.HashMap;

public class AggregateProposalCodeGear extends CodeGear {

    @Peek
    TopologyNodeConfig topologyNodeConfig;

    @Take
    HashMap<String, Proposal> acceptedMap;

    @Override
    protected void run(CodeGearManager cgm) {
        HashMap<Integer, Integer> proposalValueMap = new HashMap<>();
        for(Proposal proposal: acceptedMap.values()){
            int value = proposal.getValue();
            if(proposalValueMap.containsKey(value)){
                int count = proposalValueMap.get(value).intValue();
                count++;
                if(count > proposal.getAcceptorNum()/2) {
                    System.out.println("finish " + proposal);
                    getDGM(topologyNodeConfig.getManagerKey()).put("FINISHMESSAGE", new Message());
                    return;
                }
                proposalValueMap.replace(value, count);
            }else{
                proposalValueMap.put(value, 1);
            }
        }
        put("acceptedMap", acceptedMap);
        cgm.setup(new RecieveAcceptProposalCodeGear());
    }
}