提交 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
\ No newline at end of file
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
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
\ No newline at end of file
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
......@@ -118,7 +118,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
//******* EDUARDO BEGIN **************//
// Start the connection attempt.
ChannelFuture future = bootstrap.connect(manager.getStaticConf().getRemoteAddress(currV[i]));
ChannelFuture future = bootstrap.connect(manager.getRemoteAddress(currV[i]));
//creates MAC stuff
Mac macSend = Mac.getInstance(manager.getStaticConf().getHmacAlgorithm());
......@@ -129,7 +129,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
macReceive, currV[i], manager.getStaticConf().getRSAPublicKey(currV[i]), new ReentrantLock());
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 **************//
......@@ -241,7 +241,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
//******* EDUARDO BEGIN **************//
// Start the connection attempt.
ChannelFuture future = bootstrap.connect(manager.getStaticConf().getRemoteAddress(currV[i]));
ChannelFuture future = bootstrap.connect(manager.getRemoteAddress(currV[i]));
//creates MAC stuff
Mac macSend = Mac.getInstance(manager.getStaticConf().getHmacAlgorithm());
......@@ -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());
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 **************//
......@@ -321,7 +321,7 @@ public class NettyClientServerCommunicationSystemClientSide extends SimpleChanne
// Set up the default event pipeline.
bootstrap.setPipelineFactory(new NettyClientPipelineFactory(this, true, sessionTable, authKey, macDummy.getMacLength(), manager, rl, TOMUtil.getSignatureSize(manager), new ReentrantLock()));
// Start the connection attempt.
ChannelFuture future = bootstrap.connect(manager.getStaticConf().getRemoteAddress(ncss.getReplicaId()));
ChannelFuture future = bootstrap.connect(manager.getRemoteAddress(ncss.getReplicaId()));
//******* EDUARDO END **************//
......
......@@ -4,6 +4,7 @@
*/
package navigators.smart.reconfiguration;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
......@@ -194,7 +195,12 @@ public class ReconfigurationManager extends ViewManager {
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("lastJoinSet: " + jSet);
......
......@@ -7,6 +7,9 @@ package navigators.smart.reconfiguration;
import java.io.Serializable;
import java.util.Arrays;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;
/**
*
......@@ -14,61 +17,68 @@ import java.util.Arrays;
*/
public class View implements Serializable {
private int id;
private int f;
private int[] processes;
public View(int id, int[] processes, int f){
this.id = id;
this.processes = processes;
Arrays.sort(this.processes);
this.f = f;
}
private int id;
private int f;
private int[] processes;
private Map<Integer,InetSocketAddress> addresses;
public boolean isMember(int id){
for(int i = 0; i < this.processes.length;i++){
if(this.processes[i] == id){
return true;
}
}
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 View(int id, int[] processes, int f, InetSocketAddress[] addresses){
this.id = id;
this.processes = processes;
this.addresses = new HashMap<Integer, InetSocketAddress>();
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]+",";
}
return ret;
}
for(int i = 0; i < this.processes.length;i++)
this.addresses.put(processes[i],addresses[i]);
Arrays.sort(this.processes);
this.f = f;
}
public boolean isMember(int id){
for(int i = 0; i < this.processes.length;i++){
if(this.processes[i] == id){
return true;
}
}
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() {
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 @@
package navigators.smart.reconfiguration;
import navigators.smart.reconfiguration.util.TOMConfiguration;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
......@@ -23,18 +25,31 @@ public class ViewManager {
public ViewManager(int 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);
}
public ViewManager(int procId,String 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);
}
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){
ByteArrayInputStream bInp = new ByteArrayInputStream(reply);
try {
......
/**
/**
* Copyright (c) 2007-2009 Alysson Bessani, Eduardo Alchieri, Paulo Sousa, and the authors indicated in the @author tags
*
* This file is part of SMaRt.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册