# HG changeset patch # User akahori # Date 1552136017 -32400 # Node ID dd3c0ba6a0a6de9cf4980a9fbedc11aa0f97e5b7 # Parent 4d8f90e8a92ceab0d397e69205593bf7c40155fa fix topology manager diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 scripts/Log/paxos.dot --- a/scripts/Log/paxos.dot Sat Mar 09 14:03:25 2019 +0900 +++ b/scripts/Log/paxos.dot Sat Mar 09 21:53:37 2019 +0900 @@ -8,8 +8,11 @@ acceptor2 -> learner0 [label="learner0"] acceptor2 -> proposer0 [label="proposer0"] acceptor2 -> proposer1 [label="proposer1"] + proposer0 -> acceptor0 [label="acceptor0"] proposer0 -> acceptor1 [label="acceptor1"] proposer0 -> acceptor2 [label="acceptor2"] proposer1 -> acceptor0 [label="acceptor0"] proposer1 -> acceptor1 [label="acceptor1"] + proposer1 -> acceptor2 [label="acceptor2"] + } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 scripts/local_test_run.sh --- a/scripts/local_test_run.sh Sat Mar 09 14:03:25 2019 +0900 +++ b/scripts/local_test_run.sh Sat Mar 09 21:53:37 2019 +0900 @@ -17,8 +17,6 @@ #open ./topology/ring.png java -jar ${jar_path}${topo_jarname} --localPort 10000 --confFile Log/ring.dot & -sleep 3 - cnt=0 while [ $cnt -lt $max ] do diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 scripts/paxos.sh --- a/scripts/paxos.sh Sat Mar 09 14:03:25 2019 +0900 +++ b/scripts/paxos.sh Sat Mar 09 21:53:37 2019 +0900 @@ -21,7 +21,7 @@ cnt=0 while (($cnt < $max )) do - (java -cp ${jar_path} christie.test.topology.paxos.StartPaxosNode --managerHost localhost --managerPort 10000 --localPort $(( 10001 + cnt )) --level debug) & + java -cp ${jar_path} christie.test.topology.paxos.StartPaxosNode --managerHost localhost --managerPort 10000 --localPort $(( 10001 + cnt )) --level debug & cnt=$(( cnt + 1 )) done wait \ No newline at end of file diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 scripts/ring.dot --- a/scripts/ring.dot Sat Mar 09 14:03:25 2019 +0900 +++ b/scripts/ring.dot Sat Mar 09 21:53:37 2019 +0900 @@ -1,8 +1,5 @@ digraph test { node0 -> node1 [label="right"] - node0 -> node2 [label="left"] node1 -> node2 [label="right"] - node1 -> node0 [label="left"] node2 -> node0 [label="right"] - node2 -> node1 [label="left"] } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/blockchain/Block.java --- a/src/main/java/christie/blockchain/Block.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/blockchain/Block.java Sat Mar 09 21:53:37 2019 +0900 @@ -1,25 +1,25 @@ package christie.blockchain; +import org.msgpack.annotation.Message; + import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +@Message public class Block { private BlockHeader header; - private String data; - private List transactionsList = new CopyOnWriteArrayList<>(); - public Block(String data, long difficulty, long timestamp){ - this("".getBytes(), difficulty, 0, data, timestamp, null); + public Block(long difficulty, long timestamp){ + this("".getBytes(), difficulty, 0, timestamp, null); } - public Block(byte[] parentHash, long difficulty, long number, String data, long timestamp){ - this(parentHash, difficulty, number, data, timestamp, null); + public Block(byte[] parentHash, long difficulty, long number, long timestamp){ + this(parentHash, difficulty, number, timestamp, null); } - public Block(byte[] parentHash, long difficulty, long number, String data, long timestamp, List transactionsList) { + public Block(byte[] parentHash, long difficulty, long number, long timestamp, List transactionsList) { this.header = new BlockHeader(parentHash, difficulty, number, timestamp); - this.data = data; if (this.transactionsList == null) { this.transactionsList = new CopyOnWriteArrayList<>(); } @@ -41,10 +41,6 @@ return this.header.getParentHash(); } - public String getData(){ - return data; - } - public void setNonce(long nonce) { this.header.setNonce(nonce); } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/blockchain/BlockChain.java --- a/src/main/java/christie/blockchain/BlockChain.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/blockchain/BlockChain.java Sat Mar 09 21:53:37 2019 +0900 @@ -14,36 +14,36 @@ private Block bestBlock; - public static void main(String[] args) { - Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); + /*Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); ECKey ecKeyA = new ECKey(); ECKey ecKeyB = new ECKey(); Transaction transaction = new Transaction(ecKeyA.getPublicKey(), ecKeyB.getPublicKey(), "hello"); transaction.generateSignature(ecKeyA.getPrivateKey()); - System.out.println(transaction.verifiySignature()); + System.out.println(transaction.verifiySignature());*/ + new BlockChain().testBlockMining(); } public void testBlockMining(){ BlockChain blockChain = new BlockChain(); - blockChain.difficulty = 1; + blockChain.difficulty = 2; Miner miner = new Miner(); long startTime = System.currentTimeMillis(); Block genesisBlock = blockChain.createNewBlock("Hi im the first block"); miner.mineBlock(genesisBlock, blockChain.difficulty); - System.out.println("Hash for block 1 : " + genesisBlock.getData() + " Nonce : " + genesisBlock.getNonce()); + //System.out.println("Hash for block 1 : " + genesisBlock.getData() + " Nonce : " + genesisBlock.getNonce()); Block secondBlock = blockChain.createNewBlock(genesisBlock, "Yo im the second block"); miner.mineBlock(secondBlock, blockChain.difficulty); - System.out.println("Hash for block 2 : " + secondBlock.getData() + " Nonce : " + secondBlock.getNonce()); + //System.out.println("Hash for block 2 : " + secondBlock.getData() + " Nonce : " + secondBlock.getNonce()); Block thirdBlock = blockChain.createNewBlock(secondBlock, "Hey im the third block"); miner.mineBlock(thirdBlock, blockChain.difficulty); - System.out.println("Hash for block 3 : " + thirdBlock.getData() + " Nonce : " + thirdBlock.getNonce()); + //System.out.println("Hash for block 3 : " + thirdBlock.getData() + " Nonce : " + thirdBlock.getNonce()); blockChain.blockList.add(genesisBlock); @@ -102,7 +102,6 @@ Block block = new Block(parent.getPresentHash(), difficulty, blockNumber, - data, time); return block; @@ -110,7 +109,7 @@ public synchronized Block createGenesisBlock(String data){ long time = System.currentTimeMillis() / 1000; - Block block = new Block(data, 1, time); + Block block = new Block(1, time); return block; } @@ -118,4 +117,7 @@ return bestBlock; } + public long getSize() { + return bestBlock.getNumber() + 1; + } } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/blockchain/FileData.java --- a/src/main/java/christie/blockchain/FileData.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/blockchain/FileData.java Sat Mar 09 21:53:37 2019 +0900 @@ -4,6 +4,7 @@ import org.msgpack.annotation.Message; import java.io.File; +import java.nio.file.Path; @Message public class FileData { @@ -13,9 +14,8 @@ public FileData(){} - public File read(){ + public File read(Path path){ return this.file; - } public void write(){ diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/blockchain/Miner.java --- a/src/main/java/christie/blockchain/Miner.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/blockchain/Miner.java Sat Mar 09 21:53:37 2019 +0900 @@ -27,7 +27,8 @@ hashStr = new String(HashUtil.sha256(concat), Charset.forName("utf-8")); } newBlock.setNonce(nonce); - System.out.println("Block Mined!!! : " + hashStr); + + System.out.println("Block Mined!!! : " + hashStr.getBytes()); } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/blockchain/Transaction.java --- a/src/main/java/christie/blockchain/Transaction.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/blockchain/Transaction.java Sat Mar 09 21:53:37 2019 +0900 @@ -1,12 +1,14 @@ package christie.blockchain; +import org.msgpack.annotation.Message; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.math.BigInteger; import java.security.PrivateKey; import java.security.PublicKey; -// インターフェイスにしたほうがいいかもしれない. 後からdataの内容変える可能性がある. +@Message public class Transaction { private byte[] hash; diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/daemon/IncomingTcpConnection.java --- a/src/main/java/christie/daemon/IncomingTcpConnection.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/daemon/IncomingTcpConnection.java Sat Mar 09 21:53:37 2019 +0900 @@ -63,7 +63,11 @@ break; case REMOTEPEEK: - cgm.getLocalDGM().runCommand(new RemotePeekCommand(msg, connection)); + try { + cgm.getLocalDGM().runCommand(new RemotePeekCommand(msg, connection)); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } break; case REMOTETAKE: cgm.getLocalDGM().runCommand(new RemoteTakeCommand(msg, connection)); @@ -90,6 +94,8 @@ return; } catch (IOException e) { e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); } } } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/datagear/command/Command.java --- a/src/main/java/christie/datagear/command/Command.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/datagear/command/Command.java Sat Mar 09 21:53:37 2019 +0900 @@ -35,4 +35,7 @@ this.dg.setData(obj); } + //public void removeInputs(){ + //cg.getIdg().removeInputs(key); + //} } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/datagear/command/RemotePeekCommand.java --- a/src/main/java/christie/datagear/command/RemotePeekCommand.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/datagear/command/RemotePeekCommand.java Sat Mar 09 21:53:37 2019 +0900 @@ -4,7 +4,7 @@ import christie.datagear.RemoteMessage; public class RemotePeekCommand extends RemoteTakeCommand { - public RemotePeekCommand(RemoteMessage msg, Connection cn) { + public RemotePeekCommand(RemoteMessage msg, Connection cn) throws ClassNotFoundException { super(msg, cn); this.type = CommandType.REMOTEPEEK; } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/datagear/command/RemoteTakeCommand.java --- a/src/main/java/christie/datagear/command/RemoteTakeCommand.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/datagear/command/RemoteTakeCommand.java Sat Mar 09 21:53:37 2019 +0900 @@ -4,6 +4,7 @@ import christie.datagear.RemoteMessage; import christie.datagear.command.Command; import christie.datagear.command.CommandType; +import christie.datagear.dg.DataGear; import christie.datagear.dg.MessagePackDataGear; import org.msgpack.MessagePack; @@ -12,26 +13,22 @@ public class RemoteTakeCommand extends Command { - public RemoteTakeCommand(RemoteMessage msg, Connection cn) { - this.type = CommandType.REMOTETAKE; - this.fromDgmName = msg.fromDgmName; - this.key = msg.key; - try { - this.clazz = Class.forName(msg.clazz); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - this.dg = new MessagePackDataGear(this.clazz); - this.connection = cn; + public RemoteTakeCommand(RemoteMessage msg, Connection cn) throws ClassNotFoundException { + this(msg.fromDgmName, msg.key, cn, Class.forName(msg.clazz)); } public RemoteTakeCommand(String fromDgmName, Command cm, Connection cn) { + this(fromDgmName, cm.key, cn, cm.clazz); + } + + private RemoteTakeCommand(String fromDgmName, String key, Connection cn, Class clazz){ this.type = CommandType.REMOTETAKE; this.fromDgmName = fromDgmName; - this.key = cm.key; - this.clazz = cm.clazz; - this.dg = new MessagePackDataGear(clazz); + this.key = key; + this.clazz = clazz; + this.dg = new MessagePackDataGear(this.clazz); this.connection = cn; + } @Override diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/test/topology/localTestTopology/StartTorqueTestTopology.java --- a/src/main/java/christie/test/topology/localTestTopology/StartTorqueTestTopology.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/test/topology/localTestTopology/StartTorqueTestTopology.java Sat Mar 09 21:53:37 2019 +0900 @@ -15,6 +15,6 @@ /* Torque */ TopologyNodeConfig topologyNodeConfig = new TopologyNodeConfig(args); StartTopologyNode startTopologyNode = new StartTopologyNode(topologyNodeConfig, new LTRemoteIncrement()); - startTopologyNode.getLocalDGM().put("num", 0); + startTopologyNode.put("num", 0); } } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/test/topology/paxos/CheckMyName.java --- a/src/main/java/christie/test/topology/paxos/CheckMyName.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/test/topology/paxos/CheckMyName.java Sat Mar 09 21:53:37 2019 +0900 @@ -7,6 +7,8 @@ import christie.test.topology.paxos.learner.LearnerCodeGear; import christie.test.topology.paxos.proposer.ProposerCodeGear; import christie.topology.TopologyDataGear; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -16,6 +18,9 @@ @Peek TopologyDataGear topoDG; + Logger logger = LogManager.getLogger(CheckMyName.class); + + Pattern pattern = Pattern.compile("^(proposer|acceptor|learner)([0-9]+)$"); @Override @@ -26,8 +31,17 @@ matcher.find(); String type = matcher.group(1); - if(type.equals("proposer")) cgm.setup(new ProposerCodeGear()); - else if(type.equals("acceptor")) cgm.setup(new AcceptorCodeGear()); - else if(type.equals("learner")) cgm.setup(new LearnerCodeGear()); + if(type.equals("proposer")) { + //logger.debug("proposer : " + nodeName); + cgm.setup(new ProposerCodeGear()); + } + else if(type.equals("acceptor")) { + //logger.debug("acceptor : " + nodeName); + cgm.setup(new AcceptorCodeGear()); + } + else if(type.equals("learner")) { + //logger.debug("learner : " + nodeName); + cgm.setup(new LearnerCodeGear()); + } } } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/test/topology/paxos/Proposal.java --- a/src/main/java/christie/test/topology/paxos/Proposal.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/test/topology/paxos/Proposal.java Sat Mar 09 21:53:37 2019 +0900 @@ -9,7 +9,7 @@ private int acceptorNum = 0; private int nodeNum = 0; private int number = 0; - private int value = 0; + private int value = -1; // not selected value private int id = 0; private int round = 0; private boolean accepted = false; @@ -32,8 +32,6 @@ public int getValue(){ return this.value; } - public void setNumber(int number) { this.number = number; } - public int getNumber(){ return this.number; } @@ -72,19 +70,19 @@ this.acceptorName = acceptorName; } - public boolean equalValue(Proposal proposal){ - return this.equalValue(proposal.value); + public String toString() { + return "Proposal : number = " + number + ", " + + "value = " + value; } - public boolean equalValue(int value){ - if(this.value == value) return true; + public boolean equalNumberAndValue(Proposal proposal){ + if(proposal.getNumber() == this.number && + proposal.getValue() == this.value) + return true; + return false; } - public String toString() { - return "Proposal : number = " + number + ", value = " + value; - } - } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/test/topology/paxos/StartLocalPaxos.java --- a/src/main/java/christie/test/topology/paxos/StartLocalPaxos.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/test/topology/paxos/StartLocalPaxos.java Sat Mar 09 21:53:37 2019 +0900 @@ -2,9 +2,6 @@ import christie.codegear.CodeGearManager; import christie.codegear.StartCodeGear; -import christie.test.topology.paxos.acceptor.AcceptorCodeGear; -import christie.test.topology.paxos.learner.LearnerCodeGear; -import christie.test.topology.paxos.proposer.ProposerCodeGear; import christie.topology.TopologyDataGear; import java.util.ArrayList; diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/test/topology/paxos/proposer/ProposerCodeGear.java --- a/src/main/java/christie/test/topology/paxos/proposer/ProposerCodeGear.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/test/topology/paxos/proposer/ProposerCodeGear.java Sat Mar 09 21:53:37 2019 +0900 @@ -19,11 +19,10 @@ @Override protected void run(CodeGearManager cgm) { String nodeName = topoDG.getNodeName(); - int proposerNum = topoDG.getTotalNodeNum(); - List _CLIST = topoDG.getConnectionList(); + int totalNodeNum = topoDG.getTotalNodeNum(); int id = Character.getNumericValue(nodeName.charAt(nodeName.length() - 1)) + 1; - cgm.setup(new SendPrepareRequestCodeGear(new Proposal(nodeName, proposerNum, id, id, _CLIST.size()))); + cgm.setup(new SendPrepareRequestCodeGear(new Proposal(nodeName, totalNodeNum, id, id, topoDG.getConnectionList().size()))); } } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java --- a/src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/test/topology/paxos/proposer/ReceivePromiseCodeGear.java Sat Mar 09 21:53:37 2019 +0900 @@ -47,13 +47,12 @@ sendedProposal.setValue(receivePromise.getValue()); } } - } - - if(promiseCount > sendedProposal.getAcceptorNum()/2){ + if(promiseCount > sendedProposal.getAcceptorNum()/2){ - cgm.setup(new SendAcceptRequestCodeGear(sendedProposal)); - }else { - cgm.setup(new ReceivePromiseCodeGear(promiseCount, sendedProposal, maxRecvProposalNumber)); + cgm.setup(new SendAcceptRequestCodeGear(sendedProposal)); + }else { + cgm.setup(new ReceivePromiseCodeGear(promiseCount, sendedProposal, maxRecvProposalNumber)); + } } } } diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/topology/manager/CreateTreeTopology.java --- a/src/main/java/christie/topology/manager/CreateTreeTopology.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/topology/manager/CreateTreeTopology.java Sat Mar 09 21:53:37 2019 +0900 @@ -84,7 +84,7 @@ getLocalDGM().put("parentManager", parentManager); getDGM(nodeName).put("connectNodeNum", 1); - getDGM(nodeName).put("remoteNodeInfo", new HostMessage()); + //getDGM(nodeName).put("remoteNodeInfo", new HostMessage()); getDGM(nodeName).put("_CONNECTIONMESSAGE", new Message()); getDGM(nodeName).put("_STARTMESSAGE", new Message()); getLocalDGM().put("startTime", System.currentTimeMillis()); diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/topology/manager/IncomingHosts.java --- a/src/main/java/christie/topology/manager/IncomingHosts.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/topology/manager/IncomingHosts.java Sat Mar 09 21:53:37 2019 +0900 @@ -92,7 +92,7 @@ put(key, "remoteNodeInfo", connection); } } - put(key, "remoteNodeInfo", new HostMessage()); // end mark + //put(key, "remoteNodeInfo", new HostMessage()); // end mark } }else{ cgm.setup(new IncomingHosts()); diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/topology/manager/RecordTopology.java --- a/src/main/java/christie/topology/manager/RecordTopology.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/topology/manager/RecordTopology.java Sat Mar 09 21:53:37 2019 +0900 @@ -10,8 +10,6 @@ import java.util.HashMap; import java.util.LinkedList; - -// Recordだけじゃなく, sendも担っているので名前変えたほうがいいかも public class RecordTopology extends CodeGear { @Take diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/main/java/christie/topology/node/IncomingConnectionInfo.java --- a/src/main/java/christie/topology/node/IncomingConnectionInfo.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/main/java/christie/topology/node/IncomingConnectionInfo.java Sat Mar 09 21:53:37 2019 +0900 @@ -15,8 +15,6 @@ @Take HostMessage remoteNodeInfo; - @Take - TopologyDataGear topoDG; int count; @@ -33,12 +31,6 @@ protected void run(CodeGearManager cgm) { String connectionName = remoteNodeInfo.getConnectionName(); - if (remoteNodeInfo.getHostName().equals("")) { // end case - getLocalDGM().put("topoDG", topoDG); - // returnしないとtopoDGが使えない. - return; - } - cgm.createRemoteDGM(connectionName, remoteNodeInfo.getHostName(), remoteNodeInfo.getPort()); diff -r 4d8f90e8a92c -r dd3c0ba6a0a6 src/test/java/christie/paxos/PaxosTest.java --- a/src/test/java/christie/paxos/PaxosTest.java Sat Mar 09 14:03:25 2019 +0900 +++ b/src/test/java/christie/paxos/PaxosTest.java Sat Mar 09 21:53:37 2019 +0900 @@ -1,10 +1,9 @@ package christie.paxos; import christie.test.topology.paxos.CheckMyName; +import christie.test.topology.paxos.StartPaxosNode; import christie.topology.manager.StartTopologyManager; import christie.topology.manager.TopologyManagerConfig; -import christie.topology.node.StartTopologyNode; -import christie.topology.node.TopologyNodeConfig; public class PaxosTest { @@ -21,10 +20,10 @@ String[] nodeArg = {"--managerPort", String.valueOf(managerPort), "--managerHost", "localhost", - "--localPort", String.valueOf(managerPort + i)}; + "--localPort", String.valueOf(managerPort + i), + "--level", "debug"}; - TopologyNodeConfig topologyNodeConfig = new TopologyNodeConfig(nodeArg); - new StartTopologyNode(topologyNodeConfig, new CheckMyName()); + StartPaxosNode.main(nodeArg); } }