changeset 159:a0391cfdcef6

update topologymanager
author akahori
date Mon, 21 Jan 2019 18:02:49 +0900
parents e295cb59e514
children 3b9be156e280
files src/main/java/christie/test/Paxos/Proposal.java src/main/java/christie/test/Paxos/StartLocalPaxos.java src/main/java/christie/test/Paxos/acceptor/AcceptCodeGear.java src/main/java/christie/test/Paxos/acceptor/AcceptorCodeGear.java src/main/java/christie/test/Paxos/acceptor/PromiseCodeGear.java src/main/java/christie/test/Paxos/learner/AggregateProposalCodeGear.java src/main/java/christie/test/Paxos/learner/LearnerCodeGear.java src/main/java/christie/test/Paxos/learner/RecieveAcceptProposalCodeGear.java src/main/java/christie/test/Paxos/proposer/ProposerCodeGear.java src/main/java/christie/test/Paxos/proposer/ReceivePromiseCodeGear.java src/main/java/christie/test/Paxos/proposer/RecieveAcceptedCodeGear.java src/main/java/christie/test/Paxos/proposer/SendAcceptRequestCodeGear.java src/main/java/christie/test/Paxos/proposer/SendPrepareRequestCodeGear.java src/main/java/christie/test/topology/paxos/Proposal.java src/main/java/christie/test/topology/paxos/acceptor/AcceptCodeGear.java src/main/java/christie/test/topology/paxos/acceptor/AcceptorCodeGear.java src/main/java/christie/test/topology/paxos/acceptor/PromiseCodeGear.java src/main/java/christie/test/topology/paxos/learner/AggregateProposalCodeGear.java src/main/java/christie/test/topology/paxos/learner/LearnerCodeGear.java src/main/java/christie/test/topology/paxos/learner/RecieveAcceptProposalCodeGear.java src/main/java/christie/test/topology/paxos/proposer/ProposerCodeGear.java src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java src/main/java/christie/test/topology/paxos/proposer/RecieveAcceptedCodeGear.java src/main/java/christie/test/topology/paxos/proposer/SendAcceptRequestCodeGear.java src/main/java/christie/test/topology/paxos/proposer/SendPrepareRequestCodeGear.java src/main/java/christie/test/topology/paxos/proposer/StartProposer.java src/main/java/christie/topology/manager/ConfigWaiter.java src/main/java/christie/topology/manager/FileParser.java
diffstat 28 files changed, 465 insertions(+), 523 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/christie/test/Paxos/Proposal.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-package christie.test.Paxos;
-
-import christie.codegear.CodeGearManager;
-import org.msgpack.annotation.Message;
-
-@Message
-public class Proposal {
-    private String proposerName = "";
-    private String acceptorName = "";
-    private int nodeNum = 0;
-    private int number = 0;
-    private int value = 0;
-    private int id = 0;
-    private boolean accepted = false;
-
-    public Proposal(){
-
-    }
-
-    public Proposal(String proposerName, int nodeNum, int value, int id){
-        this.proposerName = proposerName;
-        this.nodeNum = nodeNum;
-        this.value = value;
-        this.id = id;
-        incrementNumber();
-
-    }
-
-    public void setValue(int value){
-        this.value = value;
-    }
-
-    public int getValue(){ return this.value; }
-
-    public void setNumber(int number) { this.number = number; }
-
-    public int getNumber(){
-        return this.number;
-    }
-
-    public int incrementNumber() {
-        this.number += nodeNum + id;
-        return this.number;
-    }
-
-    public Proposal getIncrementedProposal(){
-        incrementNumber();
-        return this;
-    }
-
-    public String getProposerName() {
-        return proposerName;
-    }
-
-    public boolean isAccepted() {
-        return accepted;
-    }
-
-    public void setAccepted(boolean accepted) {
-        this.accepted = accepted;
-    }
-
-    public String getAcceptorName() {
-        return acceptorName;
-    }
-
-    public void setAcceptorName(String acceptorName) {
-        this.acceptorName = acceptorName;
-    }
-
-    public boolean equalValue(Proposal proposal){
-        return this.equalValue(proposal.value);
-    }
-
-    public boolean equalValue(int value){
-        if(this.value == value) return true;
-        return false;
-    }
-
-
-}
--- a/src/main/java/christie/test/Paxos/StartLocalPaxos.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-package christie.test.Paxos;
-
-import christie.codegear.CodeGearManager;
-
-import christie.codegear.StartCodeGear;
-import christie.test.Paxos.acceptor.AcceptorCodeGear;
-import christie.test.Paxos.learner.LearnerCodeGear;
-import christie.test.Paxos.proposer.ProposerCodeGear;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class StartLocalPaxos extends StartCodeGear{
-
-    public StartLocalPaxos(CodeGearManager cgm) {
-        super(cgm);
-
-    }
-
-    public static void main(String args[]){
-        int proposerPort = 10000;
-        int proposersNum = 2;
-        int acceptorPort = proposerPort + proposersNum;
-        int acceptorsNum = 3;
-        int learnerPort = acceptorPort + acceptorsNum;
-        int learnersNum = 1;
-        List<CodeGearManager> proposers = new ArrayList<>(proposersNum);
-        List<CodeGearManager> acceptors = new ArrayList<>(acceptorsNum);
-        List<CodeGearManager> learners = new ArrayList<>(learnersNum);
-        List<String> acceptorsName = new ArrayList<>(acceptorsNum);
-        List<String> learnersName = new ArrayList<>(learnersNum);
-
-        for(int i = 0; i < learnersNum; i++){
-            String nodeName = "learner" + i;
-            learnersName.add(nodeName);
-            CodeGearManager learner = createCGM(learnerPort + i);
-            learner.getLocalDGM().put("acceptorsNum", acceptorsNum);
-            learner.setup(new LearnerCodeGear());
-            learners.add(learner);
-        }
-
-        for(int i = 0; i < acceptorsNum; i++){
-            String nodeName = "acceptor" + i;
-            acceptorsName.add(nodeName);
-            CodeGearManager acceptor = createCGM(acceptorPort + i);
-            acceptor.getLocalDGM().put("learnersName", learnersName);
-            acceptor.getLocalDGM().put("acceptorName", nodeName);
-            acceptor.setup(new AcceptorCodeGear());
-            acceptors.add(acceptor);
-        }
-
-        for(int i = 0; i < proposersNum; i++){
-            String nodeName = "proposer" + i;
-            CodeGearManager proposer = createCGM(proposerPort + i);
-            proposer.getLocalDGM().put("sendProposal", new Proposal(nodeName, proposersNum + acceptorsNum, i, i));
-            proposer.getLocalDGM().put("acceptorsName", acceptorsName);
-            proposers.add(proposer);
-        }
-
-
-
-
-        for(int i = 0; i < proposersNum; i++){
-            for(int j = 0; j < acceptorsNum; j++){
-                proposers.get(i).createRemoteDGM(acceptorsName.get(j), "localhost", acceptors.get(j).localPort);
-                acceptors.get(j).createRemoteDGM("proposer" + i, "localhost", proposers.get(i).localPort);
-
-            }
-            proposers.get(i).setup(new ProposerCodeGear());
-        }
-
-        for(int i = 0; i < acceptorsNum; i++){
-            for(int j = 0; j < learnersNum; j++){
-                acceptors.get(i).createRemoteDGM(learnersName.get(j), "localhost", learners.get(j).localPort);
-                learners.get(j).createRemoteDGM(acceptorsName.get(i), "localhost", acceptors.get(i).localPort);
-            }
-        }
-    }
-}
\ No newline at end of file
--- a/src/main/java/christie/test/Paxos/acceptor/AcceptCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-package christie.test.Paxos.acceptor;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-import java.util.List;
-
-public class AcceptCodeGear extends CodeGear {
-
-    @Peek
-    String acceptorName;
-
-    @Peek
-    List<String> learnersName;
-
-    @Take
-    Proposal acceptProposal;
-
-    @Take
-    Proposal promisedProposal;
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-
-        if(acceptProposal.getNumber() >= promisedProposal.getNumber()){
-            acceptProposal.setAccepted(true);
-            acceptProposal.setAcceptorName(acceptorName);
-            for(String learnerName : learnersName)
-                put(learnerName, "acceptedProposal", acceptProposal);
-
-            put("promisedProposal", acceptProposal);
-
-        }else{
-            put("promisedProposal", promisedProposal);
-
-        }
-
-        cgm.setup(new AcceptCodeGear());
-
-    }
-}
--- a/src/main/java/christie/test/Paxos/acceptor/AcceptorCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-package christie.test.Paxos.acceptor;
-
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-import java.util.List;
-
-
-public class AcceptorCodeGear extends CodeGear {
-
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-        cgm.setup(new PromiseCodeGear());
-        cgm.setup(new AcceptCodeGear());
-        put("promisedProposal", new Proposal());
-    }
-}
--- a/src/main/java/christie/test/Paxos/acceptor/PromiseCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-package christie.test.Paxos.acceptor;
-
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-public class PromiseCodeGear extends CodeGear {
-
-    @Take
-    Proposal promisedProposal;
-
-    @Take
-    Proposal prepareProposal;
-
-
-    public PromiseCodeGear(){ }
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-
-        if(promisedProposal.getNumber() < prepareProposal.getNumber()) {
-            // System.out.println("promised < prepare : " + promisedProposal.getNumber() +  " < " + prepareProposal.getNumber());
-            // System.out.println(" Recive Proposal from : " + prepareProposal.getProposerName());
-            if(promisedProposal.isAccepted()){
-                promisedProposal.setNumber(prepareProposal.getNumber());
-            }else{
-                promisedProposal = prepareProposal;
-            }
-        }
-        put("promisedProposal", promisedProposal);
-        put(prepareProposal.getProposerName(),"receivePromise", promisedProposal);
-        cgm.setup(new PromiseCodeGear());
-    }
-
-}
\ No newline at end of file
--- a/src/main/java/christie/test/Paxos/learner/AggregateProposalCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-package christie.test.Paxos.learner;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-import java.util.HashMap;
-
-public class AggregateProposalCodeGear extends CodeGear {
-
-    @Take
-    HashMap<String, Proposal> acceptedMap;
-
-    @Peek
-    int acceptorsNum;
-
-    @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 > acceptorsNum/2) System.out.println(value);
-                proposalValueMap.replace(value, count);
-            }else{
-                proposalValueMap.put(value, 1);
-            }
-        }
-        put("acceptedMap", acceptedMap);
-    }
-}
--- a/src/main/java/christie/test/Paxos/learner/LearnerCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-package christie.test.Paxos.learner;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.annotation.TakeFrom;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.codegear.StartCodeGear;
-import christie.test.Paxos.Proposal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-public class LearnerCodeGear extends CodeGear {
-
-    @Peek
-    int acceptorsNum;
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-
-        cgm.setup(new RecieveAcceptProposalCodeGear());
-        put("acceptedMap", new HashMap<String, Proposal>(acceptorsNum));
-    }
-}
--- a/src/main/java/christie/test/Paxos/learner/RecieveAcceptProposalCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-package christie.test.Paxos.learner;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.annotation.TakeFrom;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-import java.util.HashMap;
-import java.util.List;
-
-public class RecieveAcceptProposalCodeGear extends CodeGear{
-
-    @Take
-    Proposal acceptedProposal;
-
-    @Take
-    HashMap<String, Proposal> acceptedMap;
-
-    @Peek
-    int acceptorsNum;
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-        acceptedMap.put(acceptedProposal.getAcceptorName(),
-                        acceptedProposal);
-        put("acceptedMap", acceptedMap);
-        if(acceptedMap.size() > acceptorsNum/2) cgm.setup(new AggregateProposalCodeGear());
-        cgm.setup(new RecieveAcceptProposalCodeGear());
-    }
-}
--- a/src/main/java/christie/test/Paxos/proposer/ProposerCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-package christie.test.Paxos.proposer;
-
-
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-
-public class ProposerCodeGear extends CodeGear {
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-
-        cgm.setup(new SendPrepareRequestCodeGear());
-        put("promiseCount", 0);
-
-    }
-}
-
-
--- a/src/main/java/christie/test/Paxos/proposer/ReceivePromiseCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-package christie.test.Paxos.proposer;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-import java.util.List;
-
-
-public class ReceivePromiseCodeGear extends CodeGear{
-    @Peek
-    List<String> acceptorsName;
-
-    @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);
-            }
-        }
-
-        put("promiseCount", promiseCount);
-
-
-        if(promiseCount > acceptorsName.size()/2){
-            put("acceptProposal", sendedProposal);
-            cgm.setup(new SendAcceptRequestCodeGear());
-        }else {
-            cgm.setup(new ReceivePromiseCodeGear());
-        }
-    }
-}
--- a/src/main/java/christie/test/Paxos/proposer/RecieveAcceptedCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-package christie.test.Paxos.proposer;
-
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-public class RecieveAcceptedCodeGear extends CodeGear {
-
-    @Take
-    Proposal acceptedProposal;
-
-    @Take
-    Proposal sendedProposal;
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-        if(!acceptedProposal.isAccepted()){
-            sendedProposal.incrementNumber();
-            put("sendProposal", sendedProposal);
-            cgm.setup(new SendPrepareRequestCodeGear());
-        }else{
-            cgm.setup(new RecieveAcceptedCodeGear());
-        }
-    }
-}
--- a/src/main/java/christie/test/Paxos/proposer/SendAcceptRequestCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-package christie.test.Paxos.proposer;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.test.Paxos.Proposal;
-
-import java.util.List;
-
-
-public class SendAcceptRequestCodeGear extends CodeGear {
-
-    @Take
-    Proposal acceptProposal;
-
-    @Peek
-    List<String> acceptorsName;
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-        for(String acceptorName: acceptorsName)
-            put(acceptorName, "acceptProposal", acceptProposal);
-
-        put("sendedProposal", acceptProposal);
-        cgm.setup(new RecieveAcceptedCodeGear());
-    }
-}
--- a/src/main/java/christie/test/Paxos/proposer/SendPrepareRequestCodeGear.java	Wed Jan 16 18:57:04 2019 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-package christie.test.Paxos.proposer;
-
-import christie.annotation.Peek;
-import christie.annotation.Take;
-import christie.codegear.CodeGear;
-import christie.codegear.CodeGearManager;
-import christie.datagear.DataGearManager;
-import christie.test.Paxos.Proposal;
-import org.msgpack.annotation.Message;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class SendPrepareRequestCodeGear extends CodeGear{
-
-    @Take
-    Proposal sendProposal;
-
-    @Peek
-    List<String> acceptorsName;
-
-
-    @Override
-    protected void run(CodeGearManager cgm) {
-
-        for(String acceptorName: acceptorsName)
-            put(acceptorName, "prepareProposal", sendProposal);
-
-        put("sendedProposal", sendProposal);
-        cgm.setup(new ReceivePromiseCodeGear());
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/Proposal.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,88 @@
+package christie.test.topology.paxos;
+
+import org.msgpack.annotation.Message;
+
+@Message
+public class Proposal {
+    private String proposerName = "";
+    private String acceptorName = "";
+    private int acceptorNum = 0;
+    private int nodeNum = 0;
+    private int number = 0;
+    private int value = 0;
+    private int id = 0;
+    private int round = 0;
+    private boolean accepted = false;
+
+    public Proposal(){
+
+    }
+
+    public Proposal(String proposerName, int nodeNum, int value, int id, int acceptorNum){
+        this.proposerName = proposerName;
+        this.nodeNum = nodeNum;
+        this.value = value;
+        this.id = id;
+        this.acceptorNum = acceptorNum;
+
+        incrementNumber();
+
+    }
+
+    public void setValue(int value){
+        this.value = value;
+    }
+
+    public int getValue(){ return this.value; }
+
+    public void setNumber(int number) { this.number = number; }
+
+    public int getNumber(){
+        return this.number;
+    }
+
+    public int incrementRound(){
+        this.round += 1;
+        return this.round;
+    }
+
+    public int incrementNumber() {
+        this.number = incrementRound() * nodeNum + id;
+        return this.number;
+    }
+
+    public int getAcceptorNum(){
+        return this.acceptorNum;
+    }
+
+    public String getProposerName() {
+        return proposerName;
+    }
+
+    public boolean isAccepted() {
+        return accepted;
+    }
+
+    public void setAccepted(boolean accepted) {
+        this.accepted = accepted;
+    }
+
+    public String getAcceptorName() {
+        return acceptorName;
+    }
+
+    public void setAcceptorName(String acceptorName) {
+        this.acceptorName = acceptorName;
+    }
+
+    public boolean equalValue(Proposal proposal){
+        return this.equalValue(proposal.value);
+    }
+
+    public boolean equalValue(int value){
+        if(this.value == value) return true;
+        return false;
+    }
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/acceptor/AcceptCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,44 @@
+package christie.test.topology.paxos.acceptor;
+
+import christie.annotation.Peek;
+import christie.annotation.Take;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+import java.util.List;
+
+public class AcceptCodeGear extends CodeGear {
+
+    @Peek
+    String nodeName;
+
+    @Peek
+    List<String> _CLIST;
+
+    @Take
+    Proposal acceptProposal;
+
+    @Take
+    Proposal promisedProposal;
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+
+        if(acceptProposal.getNumber() >= promisedProposal.getNumber()){
+            acceptProposal.setAccepted(true);
+            acceptProposal.setAcceptorName(nodeName);
+            for(String learnerName : _CLIST)
+                put(learnerName, "acceptedProposal", acceptProposal);
+
+            put("promisedProposal", acceptProposal);
+
+        }else{
+            put("promisedProposal", promisedProposal);
+
+        }
+
+        cgm.setup(new AcceptCodeGear());
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/acceptor/AcceptorCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,17 @@
+package christie.test.topology.paxos.acceptor;
+
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+
+public class AcceptorCodeGear extends CodeGear {
+
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        cgm.setup(new PromiseCodeGear());
+        cgm.setup(new AcceptCodeGear());
+        put("promisedProposal", new Proposal());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/acceptor/PromiseCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,34 @@
+package christie.test.topology.paxos.acceptor;
+
+import christie.annotation.Take;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+public class PromiseCodeGear extends CodeGear {
+
+    @Take
+    Proposal promisedProposal;
+
+    @Take
+    Proposal prepareProposal;
+
+
+    public PromiseCodeGear(){ }
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+
+        if(promisedProposal.getNumber() < prepareProposal.getNumber()) {
+            if(promisedProposal.isAccepted()){
+                promisedProposal.setNumber(prepareProposal.getNumber());
+            }else{
+                promisedProposal = prepareProposal;
+            }
+        }
+        put("promisedProposal", promisedProposal);
+        put(prepareProposal.getProposerName(),"receivePromise", promisedProposal);
+        cgm.setup(new PromiseCodeGear());
+    }
+
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/learner/AggregateProposalCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,35 @@
+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 java.util.HashMap;
+
+public class AggregateProposalCodeGear extends CodeGear {
+
+    @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(value);
+                    break;
+                }
+                proposalValueMap.replace(value, count);
+            }else{
+                proposalValueMap.put(value, 1);
+            }
+        }
+        put("acceptedMap", acceptedMap);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/learner/LearnerCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,18 @@
+package christie.test.topology.paxos.learner;
+
+import christie.annotation.Peek;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+import java.util.HashMap;
+
+public class LearnerCodeGear extends CodeGear {
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+
+        cgm.setup(new RecieveAcceptProposalCodeGear());
+        put("acceptedMap", new HashMap<String, Proposal>());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/learner/RecieveAcceptProposalCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,28 @@
+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 java.util.HashMap;
+
+public class RecieveAcceptProposalCodeGear extends CodeGear{
+
+    @Take
+    Proposal acceptedProposal;
+
+    @Take
+    HashMap<String, Proposal> acceptedMap;
+
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        acceptedMap.put(acceptedProposal.getAcceptorName(),
+                        acceptedProposal);
+        put("acceptedMap", acceptedMap);
+        if(acceptedMap.size() > acceptedProposal.getAcceptorNum()/2) cgm.setup(new AggregateProposalCodeGear());
+        cgm.setup(new RecieveAcceptProposalCodeGear());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/proposer/ProposerCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,31 @@
+package christie.test.topology.paxos.proposer;
+
+
+import christie.annotation.Peek;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+import java.util.List;
+
+public class ProposerCodeGear extends CodeGear {
+
+    @Peek
+    String nodeName;
+
+    @Peek
+    int nodeNum;
+
+    @Peek
+    List<String> _CLIST;
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        cgm.setup(new SendPrepareRequestCodeGear());
+        put("promiseCount", 0);
+        int id = nodeName.charAt(nodeName.length() - 1);
+        put("sendProposal", new Proposal(nodeName, nodeNum, id, id, _CLIST.size()));
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,57 @@
+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());
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/proposer/RecieveAcceptedCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,26 @@
+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 RecieveAcceptedCodeGear extends CodeGear {
+
+    @Take
+    Proposal acceptedProposal;
+
+    @Take
+    Proposal sendedProposal;
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        if(!acceptedProposal.isAccepted()){
+            sendedProposal.incrementNumber();
+            put("sendProposal", sendedProposal);
+            cgm.setup(new SendPrepareRequestCodeGear());
+        }else{
+            cgm.setup(new RecieveAcceptedCodeGear());
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/proposer/SendAcceptRequestCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,28 @@
+package christie.test.topology.paxos.proposer;
+
+import christie.annotation.Peek;
+import christie.annotation.Take;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+import java.util.List;
+
+
+public class SendAcceptRequestCodeGear extends CodeGear {
+
+    @Take
+    Proposal acceptProposal;
+
+    @Peek
+    List<String> _CLIST;
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+        for(String acceptorName: _CLIST)
+            put(acceptorName, "acceptProposal", acceptProposal);
+
+        put("sendedProposal", acceptProposal);
+        cgm.setup(new RecieveAcceptedCodeGear());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/proposer/SendPrepareRequestCodeGear.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,29 @@
+package christie.test.topology.paxos.proposer;
+
+import christie.annotation.Peek;
+import christie.annotation.Take;
+import christie.codegear.CodeGear;
+import christie.codegear.CodeGearManager;
+import christie.test.topology.paxos.Proposal;
+
+import java.util.List;
+
+public class SendPrepareRequestCodeGear extends CodeGear{
+
+    @Take
+    Proposal sendProposal;
+
+    @Peek
+    List<String> _CLIST;
+
+
+    @Override
+    protected void run(CodeGearManager cgm) {
+
+        for(String acceptorName: _CLIST)
+            put(acceptorName, "prepareProposal", sendProposal);
+
+        put("sendedProposal", sendProposal);
+        cgm.setup(new ReceivePromiseCodeGear());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/christie/test/topology/paxos/proposer/StartProposer.java	Mon Jan 21 18:02:49 2019 +0900
@@ -0,0 +1,25 @@
+package christie.test.topology.paxos.proposer;
+
+
+import christie.codegear.CodeGearManager;
+import christie.codegear.StartCodeGear;
+
+import christie.topology.node.StartTopologyNode;
+import christie.topology.node.TopologyNodeConfig;
+
+public class StartProposer extends StartCodeGear {
+
+
+    public StartProposer(CodeGearManager cgm) {
+        super(cgm);
+    }
+
+    public static void main(String[] args){
+        TopologyNodeConfig topologyNodeConfig = new TopologyNodeConfig(args);
+        StartTopologyNode proposer = new StartTopologyNode(topologyNodeConfig, new ProposerCodeGear());
+
+    }
+
+}
+
+
--- a/src/main/java/christie/topology/manager/ConfigWaiter.java	Wed Jan 16 18:57:04 2019 +0900
+++ b/src/main/java/christie/topology/manager/ConfigWaiter.java	Mon Jan 21 18:02:49 2019 +0900
@@ -17,14 +17,14 @@
     String nodePrepareDone;
 
     @Take
-    int nodeNum;
+    int _NODECOUNT;
 
     public ConfigWaiter() { }
 
     @Override
     protected void run(CodeGearManager cgm) {
-        nodeNum--;
-        if (nodeNum == 0) {
+        _NODECOUNT--;
+        if (_NODECOUNT == 0) {
             getLocalDGM().put("start", "start");
             for (String nodeName: waiterNodeNames) getDGM(nodeName).put("start", "start");
             getLocalDGM().put("startTime", System.currentTimeMillis());
@@ -34,7 +34,7 @@
         }
 
         cgm.setup(new ConfigWaiter());
-        getLocalDGM().put("nodeNum", nodeNum);
+        getLocalDGM().put("_NODECOUNT", _NODECOUNT);
     }
 
 }
--- a/src/main/java/christie/topology/manager/FileParser.java	Wed Jan 16 18:57:04 2019 +0900
+++ b/src/main/java/christie/topology/manager/FileParser.java	Mon Jan 21 18:02:49 2019 +0900
@@ -67,6 +67,7 @@
 
         getLocalDGM().put("resultParse", resultParse);
         getLocalDGM().put("nodeNum", nodeNum);
+        getLocalDGM().put("_NODECOUNT", nodeNum);
         getLocalDGM().put("nodeNames", nodeNames);
         getLocalDGM().put("waiterNodeNames", nodeNames.clone());