Mercurial > hg > Database > Christie
changeset 159:a0391cfdcef6
update topologymanager
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());