summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShazaAli <shazamamdouh@aucegypt.edu>2024-12-03 07:29:45 -0500
committerShazaAli <shazamamdouh@aucegypt.edu>2024-12-03 07:29:45 -0500
commit79837dd95a90891943659194c43f732a364ad9ff (patch)
treefccce6d35af92d21d77d825aeaf61502b459b6ed /src
parentbc85d454e6c28638fc075ff37824a87445a8d49f (diff)
downloadsoen423-79837dd95a90891943659194c43f732a364ad9ff.zip
Replica 1 implement all functions
Diffstat (limited to 'src')
-rw-r--r--src/main/java/derms/replica1/CoordinatorClient.java4
-rw-r--r--src/main/java/derms/replica1/Replica1.java47
-rw-r--r--src/main/java/derms/replica1/ResponderClient.java4
3 files changed, 46 insertions, 9 deletions
diff --git a/src/main/java/derms/replica1/CoordinatorClient.java b/src/main/java/derms/replica1/CoordinatorClient.java
index 23b5a01..3793542 100644
--- a/src/main/java/derms/replica1/CoordinatorClient.java
+++ b/src/main/java/derms/replica1/CoordinatorClient.java
@@ -56,13 +56,15 @@ public class CoordinatorClient {
return Collections.emptyList();
}
- public void returnResource(String coordinatorID, String resourceID) {
+ public String returnResource(String coordinatorID, String resourceID) {
try {
String response = server.returnResource(coordinatorID, resourceID);
System.out.println(response);
logOperation("returnResource", coordinatorID, resourceID, response);
+ return response;
} catch (Exception e) {
e.printStackTrace();
+ throw new RuntimeException(e);
}
}
public String swapResource(String coordinatorID, String oldResourceID, String oldResourceType, String newResourceID, String newResourceType) {
diff --git a/src/main/java/derms/replica1/Replica1.java b/src/main/java/derms/replica1/Replica1.java
index 10c0ce5..ef45e80 100644
--- a/src/main/java/derms/replica1/Replica1.java
+++ b/src/main/java/derms/replica1/Replica1.java
@@ -21,6 +21,9 @@ public class Replica1 implements Replica {
private final Logger log;
private final InetAddress localAddr;
private final ResponderClient responderClient;
+ private final CoordinatorClient coordinatorClient;
+ private final String responderClientID = "MTL";
+ private final String coordinatorClientID = "MTLC1111";
private final ReplicaManager replicaManager;
public Replica1(ReplicaManager replicaManager) {
@@ -31,7 +34,8 @@ public class Replica1 implements Replica {
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
- responderClient = new ResponderClient("MTL");
+ responderClient = new ResponderClient(responderClientID);
+ coordinatorClient = new CoordinatorClient(coordinatorClientID);
try {
this.log = DermsLogger.getLogger(getClass());
} catch (IOException e) {
@@ -54,12 +58,41 @@ public class Replica1 implements Replica {
@Override
public void processRequest(Request request) {
- String status = responderClient.addResource(
- request.getResourceID(),
- request.getResourceType(),
- request.getDuration()
- );
- Response response = new Response(request.getSequenceNumber(), status);
+ log.info(request.toString());
+
+ String status = "";
+ try {
+ switch (request.getFunction()) {
+ case "addResource":
+ status = responderClient.addResource(request.getResourceID(), request.getResourceType(), request.getDuration());
+ break;
+ case "removeResource":
+ status = responderClient.removeResource(request.getResourceID(), request.getDuration());
+ break;
+ case "listResourceAvailability":
+ status = String.join(",", responderClient.listResourceAvailability(request.getResourceType()));
+ break;
+ case "requestResource":
+ status = coordinatorClient.requestResource(coordinatorClientID, request.getResourceID(), request.getDuration());
+ break;
+ case "findResource":
+ status = String.join(",", coordinatorClient.findResource(coordinatorClientID, request.getResourceType()));
+ break;
+ case "returnResource":
+ status = coordinatorClient.returnResource(coordinatorClientID, request.getResourceID());
+ break;
+ case "swapResource":
+ status = coordinatorClient.swapResource(coordinatorClientID, request.getOldResourceID(), request.getOldResourceType(), request.getResourceID(), request.getResourceType());
+ break;
+ default:
+ status = "Failure: unknown function '" + request.getFunction() + "'";
+ }
+ } catch (Exception e) {
+ log.warning(e.getMessage());
+ status = "Failure: " + request.getFunction() + ": " + e.getMessage();
+ }
+
+ Response response = new Response(request, replicaManager.getReplicaId(), status, false); // TODO: isSuccess flag
log.info("Processed request " + request + "; response: " + response);
replicaManager.sendResponseToFE(response);
}
diff --git a/src/main/java/derms/replica1/ResponderClient.java b/src/main/java/derms/replica1/ResponderClient.java
index c022fd3..13adc73 100644
--- a/src/main/java/derms/replica1/ResponderClient.java
+++ b/src/main/java/derms/replica1/ResponderClient.java
@@ -59,13 +59,15 @@ public class ResponderClient {
}
}
- public void removeResource(String resourceID, int duration) {
+ public String removeResource(String resourceID, int duration) {
try {
String response = server.removeResource(resourceID, duration);
System.out.println(response);
logOperation("removeResource", resourceID, duration, response);
+ return response;
} catch (Exception e) {
e.printStackTrace();
+ throw new RuntimeException(e);
}
}