summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/frontend
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-28 10:37:30 -0500
committerGitHub <noreply@github.com>2024-11-28 10:37:30 -0500
commit0cae203edc71b0285d2971f9124f24cb543b8e39 (patch)
treea16d0137d60d813c6ff06f2029ad8a935d2a804e /src/main/java/derms/frontend
parentb7dabf61e2f4deea23c9a4cbf33da419d031c5e8 (diff)
parentfe384df239711ad0990e39d585e64292816bf24f (diff)
downloadsoen423-0cae203edc71b0285d2971f9124f24cb543b8e39.zip
Merge pull request #1 from sam-rba/ReplicaManager
merge replicas
Diffstat (limited to 'src/main/java/derms/frontend')
-rw-r--r--src/main/java/derms/frontend/DERMSServerImpl.java137
-rw-r--r--src/main/java/derms/frontend/FE.java20
-rw-r--r--src/main/java/derms/frontend/FEInterface.java9
-rw-r--r--src/main/java/derms/frontend/MyRequest.java131
-rw-r--r--src/main/java/derms/frontend/RmResponse.java147
5 files changed, 85 insertions, 359 deletions
diff --git a/src/main/java/derms/frontend/DERMSServerImpl.java b/src/main/java/derms/frontend/DERMSServerImpl.java
index 67dd8c5..4008278 100644
--- a/src/main/java/derms/frontend/DERMSServerImpl.java
+++ b/src/main/java/derms/frontend/DERMSServerImpl.java
@@ -21,7 +21,8 @@ import javax.jws.soap.SOAPBinding.Style;
//import constants.PortConstants;
//import validation.ValidationService;
//import interfaces.DERMSInterface;
-
+import derms.Request;
+import derms.Response;
@WebService(endpointInterface = "derms.frontend.DERMSInterface")
public class DERMSServerImpl implements DERMSInterface {
@@ -38,7 +39,7 @@ public class DERMSServerImpl implements DERMSInterface {
private long startTime;
private CountDownLatch latch;
private FEInterface inter = null;
- private final List<RmResponse> responses = new ArrayList<>();
+ private final List<Response> responses = new ArrayList<>();
public DERMSServerImpl() {
super();
@@ -51,72 +52,72 @@ public class DERMSServerImpl implements DERMSInterface {
@Override
public synchronized String addResource(String resourceID, String resourceName, int duration) {
- MyRequest myRequest = new MyRequest("addResource", "");
- myRequest.setResourceID(resourceID);
- myRequest.setResourceType(resourceName);
- myRequest.setDuration(duration);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:addEvent>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("addResource", "");
+ request.setResourceID(resourceID);
+ request.setResourceType(resourceName);
+ request.setDuration(duration);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:addEvent>>>" + request.toString());
+ return validateResponses(request);
}
@Override
public synchronized String removeResource(String resourceID, int duration) {
- MyRequest myRequest = new MyRequest("removeResource", "");
- myRequest.setResourceID(resourceID);
- myRequest.setDuration(duration);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:removeEvent>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("removeResource", "");
+ request.setResourceID(resourceID);
+ request.setDuration(duration);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:removeEvent>>>" + request.toString());
+ return validateResponses(request);
}
@Override
public synchronized String listResourceAvailability(String resourceName) {
- MyRequest myRequest = new MyRequest("listEventAvailability", "");
- myRequest.setResourceType(resourceName);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:listEventAvailability>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("listEventAvailability", "");
+ request.setResourceType(resourceName);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:listEventAvailability>>>" + request.toString());
+ return validateResponses(request);
}
@Override
public synchronized String requestResource(String coordinatorID, String resourceID, int duration) {
- MyRequest myRequest = new MyRequest("requestResource", coordinatorID);
- myRequest.setResourceID(resourceID);
- myRequest.setDuration(duration);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:bookEvent>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("requestResource", coordinatorID);
+ request.setResourceID(resourceID);
+ request.setDuration(duration);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:bookEvent>>>" + request.toString());
+ return validateResponses(request);
}
@Override
public synchronized String findResource(String coordinatorID, String resourceName) {
- MyRequest myRequest = new MyRequest("findResource", coordinatorID);
- myRequest.setResourceType(resourceName);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:bookEvent>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("findResource", coordinatorID);
+ request.setResourceType(resourceName);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:bookEvent>>>" + request.toString());
+ return validateResponses(request);
}
@Override
public synchronized String returnResource(String coordinatorID, String resourceID) {
- MyRequest myRequest = new MyRequest("findResource", coordinatorID);
- myRequest.setResourceID(resourceID);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:bookEvent>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("findResource", coordinatorID);
+ request.setResourceID(resourceID);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:bookEvent>>>" + request.toString());
+ return validateResponses(request);
}
@Override
public synchronized String swapResource(String coordinatorID, String oldResourceID, String oldResourceType, String newResourceID, String newResourceType) {
- MyRequest myRequest = new MyRequest("swapResource", coordinatorID);
- myRequest.setResourceID(newResourceID);
- myRequest.setResourceType(newResourceType);
- myRequest.setOldResourceID(oldResourceID);
- myRequest.setOldResourceType(oldResourceType);
- myRequest.setSequenceNumber(sendUdpUnicastToSequencer(myRequest));
- System.out.println("FE Implementation:swapEvent>>>" + myRequest.toString());
- return validateResponses(myRequest);
+ Request request = new Request("swapResource", coordinatorID);
+ request.setResourceID(newResourceID);
+ request.setResourceType(newResourceType);
+ request.setOldResourceID(oldResourceID);
+ request.setOldResourceType(oldResourceType);
+ request.setSequenceNumber(sendUdpUnicastToSequencer(request));
+ System.out.println("FE Implementation:swapEvent>>>" + request.toString());
+ return validateResponses(request);
}
public void waitForResponse() {
@@ -128,26 +129,26 @@ public class DERMSServerImpl implements DERMSInterface {
}
} catch (InterruptedException e) {
e.printStackTrace();
-// inter.sendRequestToSequencer(myRequest);
+// inter.sendRequestToSequencer(request);
}
// check result and react correspondingly
}
- private String validateResponses(MyRequest myRequest) {
+ private String validateResponses(Request request) {
String resp;
switch ((int) latch.getCount()) {
case 0:
case 1:
case 2:
case 3:
- resp = findMajorityResponse(myRequest);
+ resp = findMajorityResponse(request);
break;
case 4:
resp = "Fail: No response from any server";
System.out.println(resp);
- if (myRequest.haveRetries()) {
- myRequest.countRetry();
- resp = retryRequest(myRequest);
+ if (request.haveRetries()) {
+ request.countRetry();
+ resp = retryRequest(request);
}
rmDown(1);
rmDown(2);
@@ -155,20 +156,20 @@ public class DERMSServerImpl implements DERMSInterface {
rmDown(4);
break;
default:
- resp = "Fail: " + myRequest.noRequestSendError();
+ resp = "Fail: " + request.noRequestSendError();
break;
}
System.out.println("FE Implementation:validateResponses>>>Responses remain:" + latch.getCount() + " >>>Response to be sent to client " + resp);
return resp;
}
- private String findMajorityResponse(MyRequest myRequest) {
- RmResponse res1 = null;
- RmResponse res2 = null;
- RmResponse res3 = null;
- RmResponse res4 = null;
- for (RmResponse response :responses) {
- if (response.getSequenceID() == myRequest.getSequenceNumber()) {
+ private String findMajorityResponse(Request request) {
+ Response res1 = null;
+ Response res2 = null;
+ Response res3 = null;
+ Response res4 = null;
+ for (Response response :responses) {
+ if (response.getSequenceID() == request.getSequenceNumber()) {
switch (response.getRmNumber()) {
case 1:
res1 = response;
@@ -197,12 +198,12 @@ public class DERMSServerImpl implements DERMSInterface {
if (res4 == null) rmDown(4);
// Majority voting logic
- List<RmResponse> validResponses = Arrays.asList(res1, res2, res3, res4).stream()
+ List<Response> validResponses = Arrays.asList(res1, res2, res3, res4).stream()
.filter(Objects::nonNull)
.collect(Collectors.toList());
Map<String, Long> responseCounts = validResponses.stream()
- .collect(Collectors.groupingBy(RmResponse::getResponse, Collectors.counting()));
+ .collect(Collectors.groupingBy(Response::getResponse, Collectors.counting()));
// Find the response with the highest count
Optional<Map.Entry<String, Long>> majorityEntry = responseCounts.entrySet().stream()
@@ -319,7 +320,7 @@ public class DERMSServerImpl implements DERMSInterface {
System.out.println("FE Implementation:notifyOKCommandReceived>>>Response Received: Remaining responses" + latch.getCount());
}
- public void addReceivedResponse(RmResponse res) {
+ public void addReceivedResponse(Response res) {
long endTime = System.nanoTime();
responseTime = (endTime - startTime) / 1000000;
System.out.println("Current Response time is: " + responseTime);
@@ -327,22 +328,22 @@ public class DERMSServerImpl implements DERMSInterface {
notifyOKCommandReceived();
}
- private int sendUdpUnicastToSequencer(MyRequest myRequest) {
+ private int sendUdpUnicastToSequencer(Request request) {
startTime = System.nanoTime();
- int sequenceNumber = inter.sendRequestToSequencer(myRequest);
- myRequest.setSequenceNumber(sequenceNumber);
+ int sequenceNumber = inter.sendRequestToSequencer(request);
+ request.setSequenceNumber(sequenceNumber);
latch = new CountDownLatch(4);
waitForResponse();
return sequenceNumber;
}
- private String retryRequest(MyRequest myRequest) {
- System.out.println("FE Implementation:retryRequest>>>" + myRequest.toString());
+ private String retryRequest(Request request) {
+ System.out.println("FE Implementation:retryRequest>>>" + request.toString());
startTime = System.nanoTime();
- inter.retryRequest(myRequest);
+ inter.retryRequest(request);
latch = new CountDownLatch(4);
waitForResponse();
- return validateResponses(myRequest);
+ return validateResponses(request);
}
diff --git a/src/main/java/derms/frontend/FE.java b/src/main/java/derms/frontend/FE.java
index e49dd61..decea07 100644
--- a/src/main/java/derms/frontend/FE.java
+++ b/src/main/java/derms/frontend/FE.java
@@ -7,6 +7,8 @@ import java.net.InetAddress;
import java.net.SocketException;
import javax.xml.ws.Endpoint;
+import derms.Request;
+import derms.Response;
//import constants.Constants;
@@ -20,8 +22,8 @@ public class FE {
private static final int RM_Multicast_Port = 1234;
public static String FE_Address = "http://localhost:8067/service/FE";
private static final String FE_IP_Address = "";
-
-
+
+
// public static String FE_IP_Address = "localhost";
public static void main(String[] args) {
@@ -30,7 +32,7 @@ public class FE {
@Override
public void informRmHasBug(int RmNumber) {
// String errorMessage = new MyRequest(RmNumber, "1").toString();
- MyRequest errorMessage = new MyRequest(RmNumber, "1");
+ Request errorMessage = new Request(RmNumber, "1");
System.out.println("Rm:" + RmNumber + "has bug");
// sendMulticastFaultMessageToRms(errorMessage);
sendUnicastToSequencer(errorMessage);
@@ -39,21 +41,21 @@ public class FE {
@Override
public void informRmIsDown(int RmNumber) {
// String errorMessage = new MyRequest(RmNumber, "2").toString();
- MyRequest errorMessage = new MyRequest(RmNumber, "2");
+ Request errorMessage = new Request(RmNumber, "2");
System.out.println("Rm:" + RmNumber + "is down");
// sendMulticastFaultMessageToRms(errorMessage);
sendUnicastToSequencer(errorMessage);
}
@Override
- public int sendRequestToSequencer(MyRequest myRequest) {
+ public int sendRequestToSequencer(Request myRequest) {
return sendUnicastToSequencer(myRequest);
}
@Override
- public void retryRequest(MyRequest myRequest) {
+ public void retryRequest(Request request) {
System.out.println("No response from all Rms, Retrying request...");
- sendUnicastToSequencer(myRequest);
+ sendUnicastToSequencer(request);
}
};
DERMSServerImpl servant = new DERMSServerImpl(inter);
@@ -75,7 +77,7 @@ public class FE {
}
- private static int sendUnicastToSequencer(MyRequest requestFromClient) {
+ private static int sendUnicastToSequencer(Request requestFromClient) {
DatagramSocket aSocket = null;
String dataFromClient = requestFromClient.toString();
System.out.println("FE:sendUnicastToSequencer>>>" + dataFromClient);
@@ -154,7 +156,7 @@ public class FE {
String sentence = new String(response.getData(), 0,
response.getLength()).trim();
System.out.println("FE:Response received from Rm>>>" + sentence);
- RmResponse rmResponse = new RmResponse(sentence);
+ Response rmResponse = new Response(sentence);
// String[] parts = sentence.split(";");
System.out.println("Adding response to FrontEndImplementation:");
diff --git a/src/main/java/derms/frontend/FEInterface.java b/src/main/java/derms/frontend/FEInterface.java
index 5a4e6f1..292f960 100644
--- a/src/main/java/derms/frontend/FEInterface.java
+++ b/src/main/java/derms/frontend/FEInterface.java
@@ -1,11 +1,12 @@
package derms.frontend;
+import derms.Request;
public interface FEInterface {
- void informRmHasBug(int RmNumber);
+ void informRmHasBug(int replicaId);
- void informRmIsDown(int RmNumber);
+ void informRmIsDown(int replicaId);
- int sendRequestToSequencer(MyRequest myRequest);
+ int sendRequestToSequencer(Request request);
- void retryRequest(MyRequest myRequest);
+ void retryRequest(Request request);
} \ No newline at end of file
diff --git a/src/main/java/derms/frontend/MyRequest.java b/src/main/java/derms/frontend/MyRequest.java
deleted file mode 100644
index b0f2758..0000000
--- a/src/main/java/derms/frontend/MyRequest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package derms.frontend;
-
-public class MyRequest {
- private String function = "";
- private String clientID = "";
- private String resourceType = "";
- private String OldResourceType = "";
- private String resourceID = "";
- private String OldResourceID = "";
- private String FeIpAddress = "FE.FE_IP_Address";
- private int duration = 0;
- private int sequenceNumber = 0;
- private String MessageType = "00";
- private int retryCount = 1;
-
- public MyRequest(String function, String clientID) {
- setFunction(function);
- setClientID(clientID);
- }
-
- public MyRequest(int rmNumber, String bugType) {
- setMessageType(bugType + rmNumber);
- }
-
- public String getFunction() {
- return function;
- }
-
- public void setFunction(String function) {
- this.function = function;
- }
-
- public String getClientID() {
- return clientID;
- }
-
- public void setClientID(String clientID) {
- this.clientID = clientID;
- }
-
- public String getResourceType() {
- return resourceType;
- }
-
- public void setResourceType(String resourceType) {
- this.resourceType = resourceType;
- }
-
- public String getOldResourceType() {
- return OldResourceType;
- }
-
- public void setOldResourceType(String OldResourceType) {
- this.OldResourceType = OldResourceType;
- }
-
- public String getResourceID() {
- return resourceID;
- }
-
- public void setResourceID(String resourceID) {
- this.resourceID = resourceID;
- }
-
- public String getOldResourceID() {
- return OldResourceID;
- }
-
- public void setOldResourceID(String OldResourceID) {
- this.OldResourceID = OldResourceID;
- }
-
- public int getDuration() {
- return duration;
- }
-
- public void setDuration(int duration) {
- this.duration = duration;
- }
-
- public String noRequestSendError() {
- return "request: " + getFunction() + " from " + getClientID() + " not sent";
- }
-
- public int getSequenceNumber() {
- return sequenceNumber;
- }
-
- public void setSequenceNumber(int sequenceNumber) {
- this.sequenceNumber = sequenceNumber;
- }
-
- public String getFeIpAddress() {
- return FeIpAddress;
- }
-
- public void setFeIpAddress(String feIpAddress) {
- FeIpAddress = feIpAddress;
- }
-
- public String getMessageType() {
- return MessageType;
- }
-
- public void setMessageType(String messageType) {
- MessageType = messageType;
- }
-
- public boolean haveRetries() {
- return retryCount > 0;
- }
-
- public void countRetry() {
- retryCount--;
- }
-
- //Message Format: Sequence_id;FrontIpAddress;Message_Type;function(addResource,...);userID; newEventID;newEventType; oldEventID; oldEventType;bookingCapacity
- @Override
- public String toString() {
- return getSequenceNumber() + ";" +
- getFeIpAddress().toUpperCase() + ";" +
- getMessageType().toUpperCase() + ";" +
- getFunction().toUpperCase() + ";" +
- getClientID().toUpperCase() + ";" +
- getResourceID().toUpperCase() + ";" +
- getResourceType().toUpperCase() + ";" +
- getOldResourceID().toUpperCase() + ";" +
- getOldResourceType().toUpperCase() + ";" +
- getDuration();
- }
-}
diff --git a/src/main/java/derms/frontend/RmResponse.java b/src/main/java/derms/frontend/RmResponse.java
deleted file mode 100644
index f693375..0000000
--- a/src/main/java/derms/frontend/RmResponse.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package derms.frontend;
-
-public class RmResponse {
- private int sequenceID = 0;
- private String response = "";
- private int rmNumber = 0;
- private String function = "";
- private String userID = "";
- private String newResourceID = "";
- private String newResourceType = "";
- private String oldResourceID = "";
- private String oldResourceType = "";
- private int duration = 0;
- private String udpMessage = "";
- private boolean isSuccess = false;
-
- public RmResponse(String udpMessage) {
- setUdpMessage(udpMessage.trim());
- String[] messageParts = getUdpMessage().split(";");
- setSequenceID(Integer.parseInt(messageParts[0]));
- setResponse(messageParts[1].trim());
- setRmNumber(messageParts[2]);
- setFunction(messageParts[3]);
- setUserID(messageParts[4]);
- setNewResourceID(messageParts[5]);
- setNewResourceType(messageParts[6]);
- setOldResourceID(messageParts[7]);
- setOldResourceType(messageParts[8]);
- setDuration(Integer.parseInt(messageParts[9]));
- }
-
- public int getSequenceID() {
- return sequenceID;
- }
-
- public void setSequenceID(int sequenceID) {
- this.sequenceID = sequenceID;
- }
-
- public String getResponse() {
- return response;
- }
-
- public void setResponse(String response) {
- isSuccess = response.contains("Success:");
- this.response = response;
- }
-
- public int getRmNumber() {
- return rmNumber;
- }
-
- public void setRmNumber(String rmNumber) {
- if (rmNumber.equalsIgnoreCase("RM1")) {
- this.rmNumber = 1;
- } else if (rmNumber.equalsIgnoreCase("RM2")) {
- this.rmNumber = 2;
- } else if (rmNumber.equalsIgnoreCase("RM3")) {
- this.rmNumber = 3;
- } else {
- this.rmNumber = 0;
- }
- }
-
- public String getFunction() {
- return function;
- }
-
- public void setFunction(String function) {
- this.function = function;
- }
-
- public String getUserID() {
- return userID;
- }
-
- public void setUserID(String userID) {
- this.userID = userID;
- }
-
- public String getNewResourceID() {
- return newResourceID;
- }
-
- public void setNewResourceID(String newEventID) {
- this.newResourceID = newEventID;
- }
-
- public String getNewResourceType() {
- return newResourceType;
- }
-
- public void setNewResourceType(String newEventType) {
- this.newResourceType = newEventType;
- }
-
- public String getOldResourceID() {
- return oldResourceID;
- }
-
- public void setOldResourceID(String oldEventID) {
- this.oldResourceID = oldEventID;
- }
-
- public String getOldResourceType() {
- return oldResourceType;
- }
-
- public void setOldResourceType(String oldEventType) {
- this.oldResourceType = oldEventType;
- }
-
- public int getDuration() {
- return duration;
- }
-
- public void setDuration(int bookingCapacity) {
- this.duration = bookingCapacity;
- }
-
- public String getUdpMessage() {
- return udpMessage;
- }
-
- public void setUdpMessage(String udpMessage) {
- this.udpMessage = udpMessage;
- }
-
- public boolean isSuccess() {
- return isSuccess;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj != null) {
- if (obj instanceof RmResponse) {
- RmResponse obj1 = (RmResponse) obj;
- return obj1.getFunction().equalsIgnoreCase(this.getFunction())
- && obj1.getSequenceID() == this.getSequenceID()
- && obj1.getUserID().equalsIgnoreCase(this.getUserID())
- && obj1.isSuccess() == this.isSuccess();
-// && obj1.getResponse().equalsIgnoreCase(this.getResponse());
- }
- }
- return false;
- }
-}