From c577b64ba33fca4fb5d879dc94a491b5003b0ae9 Mon Sep 17 00:00:00 2001 From: BMatajsz <90217645+BMatajsz@users.noreply.github.com> Date: Mon, 2 Dec 2024 23:50:26 -0500 Subject: Progress --- src/main/java/derms/ReplicaManager.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/main/java/derms/ReplicaManager.java') diff --git a/src/main/java/derms/ReplicaManager.java b/src/main/java/derms/ReplicaManager.java index 83c1897..d3ca1f9 100644 --- a/src/main/java/derms/ReplicaManager.java +++ b/src/main/java/derms/ReplicaManager.java @@ -21,7 +21,7 @@ import java.io.ObjectInputStream; import java.util.logging.Logger; public class ReplicaManager { - public static final String usage = "Usage: java ReplicaManager "; + public static final String usage = "Usage: java ReplicaManager "; private final int replicaId; private final String city; private Replica replica; @@ -31,12 +31,12 @@ public class ReplicaManager { private ReliableUnicastSender unicastSender; private TotalOrderMulticastReceiver multicastReceiver; - public ReplicaManager(int replicaId, String city, InetAddress frontEndIP) throws IOException { + public ReplicaManager(int replicaId, String city, InetAddress frontEndIP, int byzantine, int crash) throws IOException { this.replicaId = replicaId; this.city = city; this.log = Logger.getLogger(getClass().getName()); initUnicastSender(frontEndIP); - initReplica(); + initReplica(byzantine, crash); initMulticastReceiver(); startHeartbeatThread(); } @@ -47,7 +47,7 @@ public class ReplicaManager { unicastSender = new ReliableUnicastSender<>(frontEndAddress); } - private void initReplica() throws IOException { + private void initReplica(int byzantine, int crash) throws IOException { switch (replicaId) { case 1: replica = new Replica1(this); @@ -62,7 +62,7 @@ public class ReplicaManager { replica = new derms.replica2.Replica2(city, this); break; } - replica.startProcess(); + replica.startProcess(byzantine, crash); } private void initMulticastReceiver() throws IOException { @@ -146,7 +146,9 @@ public class ReplicaManager { int replicaId = Integer.parseInt(args[0]); String city = args[1]; InetAddress frontEndIP = InetAddress.getByName(args[2]); - ReplicaManager replicaManager = new ReplicaManager(replicaId, city, frontEndIP); + int byzantine = Integer.parseInt(args[3]); + int crash = Integer.parseInt(args[4]); + ReplicaManager replicaManager = new ReplicaManager(replicaId, city, frontEndIP, byzantine, crash); System.out.println("ReplicaManager " + replicaId + " is running."); } catch (IOException e) { System.err.println("Failed to start ReplicaManager: " + e.getMessage()); -- cgit v1.2.3 From d6067d28ce2a22c64cb595af6bca48c81b1664da Mon Sep 17 00:00:00 2001 From: BMatajsz <90217645+BMatajsz@users.noreply.github.com> Date: Tue, 3 Dec 2024 03:30:34 -0500 Subject: Test progress --- src/main/java/derms/ReplicaManager.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/main/java/derms/ReplicaManager.java') diff --git a/src/main/java/derms/ReplicaManager.java b/src/main/java/derms/ReplicaManager.java index d3ca1f9..1e89969 100644 --- a/src/main/java/derms/ReplicaManager.java +++ b/src/main/java/derms/ReplicaManager.java @@ -10,6 +10,7 @@ import derms.net.runicast.ReliableUnicastSender; import derms.net.tomulticast.TotalOrderMulticastSender; import derms.replica1.Replica1; import derms.replica2.Replica2; +import derms.util.*; import java.io.IOException; import java.net.InetAddress; @@ -62,6 +63,20 @@ public class ReplicaManager { replica = new derms.replica2.Replica2(city, this); break; } + + // [TEST] Logging + if (byzantine == 0) { + TestLogger.log("REPLICA " + replicaId + ": {BYZANTINE: FALSE}"); + } else { + TestLogger.log("REPLICA " + replicaId + ": {BYZANTINE: TRUE}"); + } + + if (crash == 0) { + TestLogger.log("REPLICA " + replicaId + ": {CRASH: FALSE}"); + } else { + TestLogger.log("REPLICA " + replicaId + ": {CRASH: TRUE}"); + } + replica.startProcess(byzantine, crash); } @@ -92,8 +107,12 @@ public class ReplicaManager { new Thread(() -> { while (true) { if (!replica.isAlive()) { + // [TEST] Logging + TestLogger.log("REPLICA " + replicaId + ": {CRASH: DETECTED}"); + informFrontEndRmIsDown(replica.getId()); replica.restart(); + TestLogger.log("REPLICA " + replicaId + ": {RESTARTED}"); } try { Thread.sleep(5000); // Example 5 seconds. @@ -114,8 +133,13 @@ public class ReplicaManager { public void handleByzantineFailure() { log.severe("Byzantine failure detected in Replica " + replica.getId()); + + // [TEST] Logging + TestLogger.log("REPLICA " + replicaId + ": {BYZANTINE: DETECTED}"); + replica.restart(); informFrontEndRmHasBug(replica.getId()); + TestLogger.log("REPLICA " + replicaId + ": {RESTARTED}"); } private void informFrontEndRmIsDown(int replicaId) { -- cgit v1.2.3 From 44df5df0b65df279aaf471fa8258da218ed7c522 Mon Sep 17 00:00:00 2001 From: BMatajsz <90217645+BMatajsz@users.noreply.github.com> Date: Tue, 3 Dec 2024 09:34:00 -0500 Subject: Added expected test results --- src/main/java/derms/ReplicaManager.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/main/java/derms/ReplicaManager.java') diff --git a/src/main/java/derms/ReplicaManager.java b/src/main/java/derms/ReplicaManager.java index 1e89969..64ceb04 100644 --- a/src/main/java/derms/ReplicaManager.java +++ b/src/main/java/derms/ReplicaManager.java @@ -112,7 +112,7 @@ public class ReplicaManager { informFrontEndRmIsDown(replica.getId()); replica.restart(); - TestLogger.log("REPLICA " + replicaId + ": {RESTARTED}"); + //TestLogger.log("REPLICA " + replicaId + ": {RESTARTED}"); } try { Thread.sleep(5000); // Example 5 seconds. @@ -139,7 +139,7 @@ public class ReplicaManager { replica.restart(); informFrontEndRmHasBug(replica.getId()); - TestLogger.log("REPLICA " + replicaId + ": {RESTARTED}"); + //TestLogger.log("REPLICA " + replicaId + ": {RESTARTED}"); } private void informFrontEndRmIsDown(int replicaId) { @@ -148,6 +148,7 @@ public class ReplicaManager { out.writeObject("RM_DOWN:" + replicaId); } catch (IOException e) { log.severe("Failed to inform FE that RM is down: " + e.getMessage()); + TestLogger.log("[FAILED TO INFORM FE (RM IS DOWN)]"); } } @@ -157,6 +158,7 @@ public class ReplicaManager { out.writeObject("RM_BUG:" + replicaId); } catch (IOException e) { log.severe("Failed to inform FE that RM has a bug: " + e.getMessage()); + TestLogger.log("[FAILED TO INFORM FE (RM HAS A BUG)]"); } } @@ -176,6 +178,7 @@ public class ReplicaManager { System.out.println("ReplicaManager " + replicaId + " is running."); } catch (IOException e) { System.err.println("Failed to start ReplicaManager: " + e.getMessage()); + TestLogger.log("[FAILED TO START RM]"); e.printStackTrace(); } } -- cgit v1.2.3 From 21f4046ae1bf51dfe00f6d481e323f06b4300071 Mon Sep 17 00:00:00 2001 From: BMatajsz <90217645+BMatajsz@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:19:32 -0500 Subject: ByzantineHandler --- src/main/java/derms/ReplicaManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/main/java/derms/ReplicaManager.java') diff --git a/src/main/java/derms/ReplicaManager.java b/src/main/java/derms/ReplicaManager.java index 64ceb04..252953c 100644 --- a/src/main/java/derms/ReplicaManager.java +++ b/src/main/java/derms/ReplicaManager.java @@ -19,6 +19,7 @@ import java.net.NetworkInterface; import java.net.Socket; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; +import java.util.Objects; import java.util.logging.Logger; public class ReplicaManager { @@ -92,7 +93,11 @@ public class ReplicaManager { MessagePayload receivedPayload = multicastReceiver.receive(); Request request = (Request) receivedPayload; log.info("Received request: " + request); - replica.processRequest(request); + if (Objects.equals(request.getMessageType(), "1" + replicaId)) { + handleByzantineFailure(); + } else { + replica.processRequest(request); + } } catch (InterruptedException e) { log.severe("Failed to receive request: " + e.getMessage()); Thread.currentThread().interrupt(); -- cgit v1.2.3 From 19166b8af1bf635f3f11a21abcc22cba46cebd4a Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Tue, 3 Dec 2024 12:38:16 -0500 Subject: pass IP to replica manager --- src/main/java/derms/ReplicaManager.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/main/java/derms/ReplicaManager.java') diff --git a/src/main/java/derms/ReplicaManager.java b/src/main/java/derms/ReplicaManager.java index 252953c..a3008de 100644 --- a/src/main/java/derms/ReplicaManager.java +++ b/src/main/java/derms/ReplicaManager.java @@ -23,7 +23,7 @@ import java.util.Objects; import java.util.logging.Logger; public class ReplicaManager { - public static final String usage = "Usage: java ReplicaManager "; + public static final String usage = "Usage: java ReplicaManager "; private final int replicaId; private final String city; private Replica replica; @@ -33,13 +33,13 @@ public class ReplicaManager { private ReliableUnicastSender unicastSender; private TotalOrderMulticastReceiver multicastReceiver; - public ReplicaManager(int replicaId, String city, InetAddress frontEndIP, int byzantine, int crash) throws IOException { + public ReplicaManager(int replicaId, String city, InetAddress replicaManagerIP, InetAddress frontEndIP, int byzantine, int crash) throws IOException { this.replicaId = replicaId; this.city = city; this.log = Logger.getLogger(getClass().getName()); initUnicastSender(frontEndIP); initReplica(byzantine, crash); - initMulticastReceiver(); + initMulticastReceiver(replicaManagerIP); startHeartbeatThread(); } @@ -81,11 +81,10 @@ public class ReplicaManager { replica.startProcess(byzantine, crash); } - private void initMulticastReceiver() throws IOException { + private void initMulticastReceiver(InetAddress replicaManagerIP) throws IOException { InetSocketAddress group = Config.group; - InetAddress localAddress = InetAddress.getLocalHost(); // Your local address - NetworkInterface netInterface = NetworkInterface.getByInetAddress(localAddress); - multicastReceiver = new TotalOrderMulticastReceiver(group, localAddress, netInterface); + NetworkInterface netInterface = NetworkInterface.getByInetAddress(replicaManagerIP); + multicastReceiver = new TotalOrderMulticastReceiver(group, replicaManagerIP, netInterface); new Thread(() -> { while (true) { @@ -168,7 +167,7 @@ public class ReplicaManager { } public static void main(String[] args) { - if (args.length < 3) { + if (args.length < 4) { System.err.println(usage); System.exit(1); } @@ -176,10 +175,11 @@ public class ReplicaManager { try { int replicaId = Integer.parseInt(args[0]); String city = args[1]; - InetAddress frontEndIP = InetAddress.getByName(args[2]); - int byzantine = Integer.parseInt(args[3]); - int crash = Integer.parseInt(args[4]); - ReplicaManager replicaManager = new ReplicaManager(replicaId, city, frontEndIP, byzantine, crash); + InetAddress replicaManagerIP = InetAddress.getByName(args[2]); + InetAddress frontEndIP = InetAddress.getByName(args[3]); + int byzantine = Integer.parseInt(args[4]); + int crash = Integer.parseInt(args[5]); + ReplicaManager replicaManager = new ReplicaManager(replicaId, city, replicaManagerIP, frontEndIP, byzantine, crash); System.out.println("ReplicaManager " + replicaId + " is running."); } catch (IOException e) { System.err.println("Failed to start ReplicaManager: " + e.getMessage()); -- cgit v1.2.3