From 55be062da68cd74214e24801adfe86244d608c3e Mon Sep 17 00:00:00 2001 From: ShazaAli Date: Tue, 3 Dec 2024 09:39:18 -0500 Subject: Replica 1 Failing SHE MTL QUE Comm --- MTL_log.txt | 7 +++++ src/main/java/derms/replica1/DERMSServer.java | 23 +++++++------- .../java/derms/replica1/DERMSServerPublisher.java | 4 +-- src/main/java/derms/replica1/Replica1.java | 36 ++++++++++++++++------ 4 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 MTL_log.txt diff --git a/MTL_log.txt b/MTL_log.txt new file mode 100644 index 0000000..36d7665 --- /dev/null +++ b/MTL_log.txt @@ -0,0 +1,7 @@ +2024-12-03T08:07:04.053 - listResourceAvailability - ambulance - [] +2024-12-03T08:07:44.514 - listResourceAvailability - ambulance - [] +2024-12-03T08:36:28.057 - listResourceAvailability - ambulance - [] +2024-12-03T08:36:42.466 - listResourceAvailability - ambulance - [] +2024-12-03T08:37:05.489 - listResourceAvailability - ambulance - [] +2024-12-03T08:57:57.627 - addResource - MTL1233 - ambulance - 10 - Invalid resource type. +2024-12-03T08:58:39.878 - addResource - MTL1223 - AMBULANCE - 10 - derms.Resource added successfully. diff --git a/src/main/java/derms/replica1/DERMSServer.java b/src/main/java/derms/replica1/DERMSServer.java index 72849a1..585a946 100644 --- a/src/main/java/derms/replica1/DERMSServer.java +++ b/src/main/java/derms/replica1/DERMSServer.java @@ -22,17 +22,22 @@ public class DERMSServer implements DERMSInterface { private static List cities = Arrays.asList("MTL", "QUE", "SHE"); private static List resourceNames = Arrays.asList("AMBULANCE", "FIRETRUCK", "PERSONNEL"); + private final Random r = new Random(); + private final Map portsMap = new HashMap() {{ + put("MTL", r.nextInt(60000-8000) + 8000); + put("QUE", r.nextInt(60000-8000) + 8000); + put("SHE", r.nextInt(60000-8000) + 8000); + }}; public DERMSServer() { // Default constructor to support JAX-WS - super(); - this.serverID = "MTL"; - resources = new HashMap<>(); - new Thread(this::listenForMessages).start(); +// super(); +// this.serverID = "MTL"; +// resources = new HashMap<>(); +// new Thread(this::listenForMessages).start(); } public DERMSServer(String serverID) throws InterruptedException { - super(); this.serverID = serverID; resources = new HashMap<>(); new Thread(this::listenForMessages).start(); @@ -40,7 +45,7 @@ public class DERMSServer implements DERMSInterface { } private void listenForMessages() { - try (DatagramSocket socket = new DatagramSocket()) { + try (DatagramSocket socket = new DatagramSocket(getServerPortsFromCentralRepo().get(serverID))) { this.serverPort.set(socket.getLocalPort()); byte[] buffer = new byte[1024]; @@ -216,11 +221,7 @@ public class DERMSServer implements DERMSInterface { private Map getServerPortsFromCentralRepo() { // Mocking response as web services since no derms.CentralRepoInterface. - return new HashMap() {{ - put("MTL", 4321); - put("QUE", 4322); - put("SHE", 4323); - }}; + return new HashMap<>(portsMap); } @Override diff --git a/src/main/java/derms/replica1/DERMSServerPublisher.java b/src/main/java/derms/replica1/DERMSServerPublisher.java index df175b6..3edf16c 100644 --- a/src/main/java/derms/replica1/DERMSServerPublisher.java +++ b/src/main/java/derms/replica1/DERMSServerPublisher.java @@ -6,8 +6,8 @@ public class DERMSServerPublisher { public static void main(String[] args) { try { Endpoint.publish("http://localhost:8387/ws/derms", new DERMSServer("MTL")); -// Endpoint.publish("http://localhost:8081/ws/derms", new DERMSServer("QUE")); -// Endpoint.publish("http://localhost:8082/ws/derms", new DERMSServer("SHE")); + Endpoint.publish("http://localhost:8081/ws/derms", new DERMSServer("QUE")); + Endpoint.publish("http://localhost:8082/ws/derms", new DERMSServer("SHE")); } catch (InterruptedException e) { throw new RuntimeException(e); } diff --git a/src/main/java/derms/replica1/Replica1.java b/src/main/java/derms/replica1/Replica1.java index ef45e80..a59ed4c 100644 --- a/src/main/java/derms/replica1/Replica1.java +++ b/src/main/java/derms/replica1/Replica1.java @@ -25,6 +25,7 @@ public class Replica1 implements Replica { private final String responderClientID = "MTL"; private final String coordinatorClientID = "MTLC1111"; private final ReplicaManager replicaManager; + private DERMSServer server; public Replica1(ReplicaManager replicaManager) { this.replicaManager = replicaManager; @@ -50,7 +51,21 @@ public class Replica1 implements Replica { @Override public void startProcess() { - pool.execute(DERMSServer::new); + try { + server = new DERMSServer("MTL"); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + try { + new DERMSServer("SHE"); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + try { + new DERMSServer("QUE"); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } alive = true; log.info(getClass().getSimpleName() + " started."); log.config("Local address is "+localAddr.toString()); @@ -61,28 +76,30 @@ public class Replica1 implements Replica { log.info(request.toString()); String status = ""; + boolean isSuccess = true; try { switch (request.getFunction()) { case "addResource": - status = responderClient.addResource(request.getResourceID(), request.getResourceType(), request.getDuration()); + status = server.addResource(request.getResourceID(), request.getResourceType(), request.getDuration()); break; case "removeResource": - status = responderClient.removeResource(request.getResourceID(), request.getDuration()); + status = server.removeResource(request.getResourceID(), request.getDuration()); break; case "listResourceAvailability": - status = String.join(",", responderClient.listResourceAvailability(request.getResourceType())); +// status = String.join(",", responderClient.listResourceAvailability(request.getResourceType())); + status = String.join(",", server.listResourceAvailability(request.getResourceType())); break; case "requestResource": - status = coordinatorClient.requestResource(coordinatorClientID, request.getResourceID(), request.getDuration()); + status = server.requestResource(coordinatorClientID, request.getResourceID(), request.getDuration()); break; case "findResource": - status = String.join(",", coordinatorClient.findResource(coordinatorClientID, request.getResourceType())); + status = String.join(",", server.findResource(coordinatorClientID, request.getResourceType())); break; case "returnResource": - status = coordinatorClient.returnResource(coordinatorClientID, request.getResourceID()); + status = server.returnResource(coordinatorClientID, request.getResourceID()); break; case "swapResource": - status = coordinatorClient.swapResource(coordinatorClientID, request.getOldResourceID(), request.getOldResourceType(), request.getResourceID(), request.getResourceType()); + status = server.swapResource(coordinatorClientID, request.getOldResourceID(), request.getOldResourceType(), request.getResourceID(), request.getResourceType()); break; default: status = "Failure: unknown function '" + request.getFunction() + "'"; @@ -90,9 +107,10 @@ public class Replica1 implements Replica { } catch (Exception e) { log.warning(e.getMessage()); status = "Failure: " + request.getFunction() + ": " + e.getMessage(); + isSuccess = false; } - Response response = new Response(request, replicaManager.getReplicaId(), status, false); // TODO: isSuccess flag + Response response = new Response(request, replicaManager.getReplicaId(), status, isSuccess); // TODO: isSuccess flag log.info("Processed request " + request + "; response: " + response); replicaManager.sendResponseToFE(response); } -- cgit v1.2.3