提交 f72177ab 编写于 作者: L liquidsnake@sapo.pt

Added the patch produced by Andre Nogueira, that fixes the case of when a...

Added the patch produced by Andre Nogueira, that fixes the case of when a replica joins the group, the information about its ip address and port not being broadcasted to the other replicas.
上级 de9d3d8c
无法预览此类型文件
java -cp bin\SMaRt_com_Vista.jar;lib\slf4j-api-1.5.8.jar;lib\slf4j-jdk14-1.5.8.jar;lib\netty-3.1.1.GA.jar %1 %2 %3 %4 %5 %6 %7 java -cp bin\SMaRt.jar;lib\slf4j-api-1.5.8.jar;lib\slf4j-jdk14-1.5.8.jar;lib\netty-3.1.1.GA.jar %1 %2 %3 %4 %5 %6 %7
\ No newline at end of file \ No newline at end of file
java -cp bin\SMaRt_com_Vista.jar;lib\slf4j-api-1.5.8.jar;lib\slf4j-jdk14-1.5.8.jar;lib\netty-3.1.1.GA.jar %1 %2 %3 %4 %5 %6 %7 > output_replica_%2.txt 2>&1 java -cp bin\SMaRt.jar;lib\slf4j-api-1.5.8.jar;lib\slf4j-jdk14-1.5.8.jar;lib\netty-3.1.1.GA.jar %1 %2 %3 %4 %5 %6 %7 > output_replica_%2.txt 2>&1
\ No newline at end of file \ No newline at end of file
...@@ -118,7 +118,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne ...@@ -118,7 +118,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
//******* EDUARDO BEGIN **************// //******* EDUARDO BEGIN **************//
// Start the connection attempt. // Start the connection attempt.
ChannelFuture future = bootstrap.connect(manager.getStaticConf().getRemoteAddress(currV[i])); ChannelFuture future = bootstrap.connect(manager.getRemoteAddress(currV[i]));
//creates MAC stuff //creates MAC stuff
Mac macSend = Mac.getInstance(manager.getStaticConf().getHmacAlgorithm()); Mac macSend = Mac.getInstance(manager.getStaticConf().getHmacAlgorithm());
...@@ -129,7 +129,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne ...@@ -129,7 +129,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
macReceive, currV[i], manager.getStaticConf().getRSAPublicKey(currV[i]), new ReentrantLock()); macReceive, currV[i], manager.getStaticConf().getRSAPublicKey(currV[i]), new ReentrantLock());
sessionTable.put(currV[i], cs); sessionTable.put(currV[i], cs);
System.out.println("Connecting to replica " + currV[i] + " at " + manager.getStaticConf().getRemoteAddress(currV[i])); System.out.println("Connecting to replica " + currV[i] + " at " + manager.getRemoteAddress(currV[i]));
//******* EDUARDO END **************// //******* EDUARDO END **************//
...@@ -241,7 +241,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne ...@@ -241,7 +241,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
//******* EDUARDO BEGIN **************// //******* EDUARDO BEGIN **************//
// Start the connection attempt. // Start the connection attempt.
ChannelFuture future = bootstrap.connect(manager.getStaticConf().getRemoteAddress(currV[i])); ChannelFuture future = bootstrap.connect(manager.getRemoteAddress(currV[i]));
//creates MAC stuff //creates MAC stuff
Mac macSend = Mac.getInstance(manager.getStaticConf().getHmacAlgorithm()); Mac macSend = Mac.getInstance(manager.getStaticConf().getHmacAlgorithm());
...@@ -251,7 +251,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne ...@@ -251,7 +251,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
NettyClientServerSession cs = new NettyClientServerSession(future.getChannel(), macSend, macReceive, currV[i], manager.getStaticConf().getRSAPublicKey(currV[i]), new ReentrantLock()); NettyClientServerSession cs = new NettyClientServerSession(future.getChannel(), macSend, macReceive, currV[i], manager.getStaticConf().getRSAPublicKey(currV[i]), new ReentrantLock());
sessionTable.put(currV[i], cs); sessionTable.put(currV[i], cs);
System.out.println("Connecting to replica " + currV[i] + " at " + manager.getStaticConf().getRemoteAddress(currV[i])); System.out.println("Connecting to replica " + currV[i] + " at " + manager.getRemoteAddress(currV[i]));
//******* EDUARDO END **************// //******* EDUARDO END **************//
...@@ -321,7 +321,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne ...@@ -321,7 +321,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
// Set up the default event pipeline. // Set up the default event pipeline.
bootstrap.setPipelineFactory(new NettyClientPipelineFactory(this, true, sessionTable, authKey, macDummy.getMacLength(), manager, rl, TOMUtil.getSignatureSize(manager), new ReentrantLock())); bootstrap.setPipelineFactory(new NettyClientPipelineFactory(this, true, sessionTable, authKey, macDummy.getMacLength(), manager, rl, TOMUtil.getSignatureSize(manager), new ReentrantLock()));
// Start the connection attempt. // Start the connection attempt.
ChannelFuture future = bootstrap.connect(manager.getStaticConf().getRemoteAddress(ncss.getReplicaId())); ChannelFuture future = bootstrap.connect(manager.getRemoteAddress(ncss.getReplicaId()));
//******* EDUARDO END **************// //******* EDUARDO END **************//
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*/ */
package navigators.smart.reconfiguration; package navigators.smart.reconfiguration;
import java.net.InetSocketAddress;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
...@@ -194,7 +195,12 @@ public class ReconfigurationManager extends ViewManager { ...@@ -194,7 +195,12 @@ public class ReconfigurationManager extends ViewManager {
f = currentView.getF(); f = currentView.getF();
} }
View newV = new View(currentView.getId() + 1, nextV, f); InetSocketAddress[] addresses = new InetSocketAddress[nextV.length];
for(int i = 0 ;i < nextV.length ;i++)
addresses[i] = getStaticConf().getRemoteAddress(nextV[i]);
View newV = new View(currentView.getId() + 1, nextV, f,addresses);
System.out.println("new view: " + newV); System.out.println("new view: " + newV);
System.out.println("lastJoinSet: " + jSet); System.out.println("lastJoinSet: " + jSet);
......
...@@ -7,6 +7,9 @@ package navigators.smart.reconfiguration; ...@@ -7,6 +7,9 @@ package navigators.smart.reconfiguration;
import java.io.Serializable; import java.io.Serializable;
import java.util.Arrays; import java.util.Arrays;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
/** /**
* *
...@@ -14,61 +17,68 @@ import java.util.Arrays; ...@@ -14,61 +17,68 @@ import java.util.Arrays;
*/ */
public class View implements Serializable { public class View implements Serializable {
private int id; private int id;
private int f; private int f;
private int[] processes; private int[] processes;
private Map<Integer,InetSocketAddress> addresses;
public View(int id, int[] processes, int f){
this.id = id;
this.processes = processes;
Arrays.sort(this.processes);
this.f = f;
}
public boolean isMember(int id){ public View(int id, int[] processes, int f, InetSocketAddress[] addresses){
for(int i = 0; i < this.processes.length;i++){ this.id = id;
if(this.processes[i] == id){ this.processes = processes;
return true; this.addresses = new HashMap<Integer, InetSocketAddress>();
}
}
return false;
}
public int getPos(int id){
for(int i = 0; i < this.processes.length;i++){
if(this.processes[i] == id){
return i;
}
}
return -1;
}
public int getId() {
return id;
}
public int getF() { for(int i = 0; i < this.processes.length;i++)
return f; this.addresses.put(processes[i],addresses[i]);
} Arrays.sort(this.processes);
this.f = f;
public int getN(){ }
return this.processes.length;
} public boolean isMember(int id){
for(int i = 0; i < this.processes.length;i++){
public int[] getProcesses() { if(this.processes[i] == id){
return processes; return true;
} }
}
@Override return false;
public String toString(){ }
String ret = "ID:"+id+"; F:"+f+"; Processes:";
for(int i = 0; i < processes.length;i++){
ret = ret+processes[i]+","; public int getPos(int id){
} for(int i = 0; i < this.processes.length;i++){
if(this.processes[i] == id){
return i;
return ret; }
} }
return -1;
}
public int getId() {
return id;
}
public int getF() {
return f;
}
public int getN(){
return this.processes.length;
}
public int[] getProcesses() {
return processes;
}
@Override
public String toString(){
String ret = "ID:"+id+"; F:"+f+"; Processes:";
for(int i = 0; i < processes.length;i++){
ret = ret+processes[i]+"("+addresses.get(processes[i])+"),";
}
return ret;
}
public InetSocketAddress getAddress(int id) {
return addresses.get(id);
}
} }
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
package navigators.smart.reconfiguration; package navigators.smart.reconfiguration;
import navigators.smart.reconfiguration.util.TOMConfiguration; import navigators.smart.reconfiguration.util.TOMConfiguration;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
...@@ -23,18 +25,31 @@ public class ViewManager { ...@@ -23,18 +25,31 @@ public class ViewManager {
public ViewManager(int procId){ public ViewManager(int procId){
this.initialConf = new TOMConfiguration(procId); this.initialConf = new TOMConfiguration(procId);
initialView = new View(0,initialConf.getInitialView(),initialConf.getF()); initialView = new View(0,initialConf.getInitialView(),initialConf.getF(),getAdddresses(initialConf));
reconfigureTo(initialView); reconfigureTo(initialView);
} }
public ViewManager(int procId,String configHome){ public ViewManager(int procId,String configHome){
this.initialConf = new TOMConfiguration(procId,configHome); this.initialConf = new TOMConfiguration(procId,configHome);
initialView = new View(0,initialConf.getInitialView(),initialConf.getF()); initialView = new View(0,initialConf.getInitialView(),initialConf.getF(),getAdddresses(initialConf));
reconfigureTo(initialView); reconfigureTo(initialView);
} }
private InetSocketAddress[] getAdddresses(TOMConfiguration initialConf){
int nextV[] = initialConf.getInitialView();
InetSocketAddress[] addresses = new InetSocketAddress[nextV.length];
for(int i = 0 ;i < nextV.length ;i++)
addresses[i] = initialConf.getRemoteAddress(nextV[i]);
return addresses;
}
public SocketAddress getRemoteAddress(int id) {
return currentView.getAddress(id);
}
/* public void reconfigureTo(byte[] reply, boolean isAView){ /* public void reconfigureTo(byte[] reply, boolean isAView){
ByteArrayInputStream bInp = new ByteArrayInputStream(reply); ByteArrayInputStream bInp = new ByteArrayInputStream(reply);
try { try {
......
/** /**
* Copyright (c) 2007-2009 Alysson Bessani, Eduardo Alchieri, Paulo Sousa, and the authors indicated in the @author tags * Copyright (c) 2007-2009 Alysson Bessani, Eduardo Alchieri, Paulo Sousa, and the authors indicated in the @author tags
* *
* This file is part of SMaRt. * This file is part of SMaRt.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册