summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica2/Replica2.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/derms/replica2/Replica2.java')
-rw-r--r--src/main/java/derms/replica2/Replica2.java32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/main/java/derms/replica2/Replica2.java b/src/main/java/derms/replica2/Replica2.java
index 3c9f764..cf21d74 100644
--- a/src/main/java/derms/replica2/Replica2.java
+++ b/src/main/java/derms/replica2/Replica2.java
@@ -1,6 +1,7 @@
package derms.replica2;
import derms.*;
+import derms.util.TestLogger;
import derms.util.ThreadPool;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
@@ -24,6 +25,7 @@ public class Replica2 implements Replica {
private final ReplicaManager replicaManager;
private final ExecutorService pool;
private boolean alive = false;
+ private boolean byzFailure;
public Replica2(City city, ReplicaManager replicaManager) throws IOException {
this.city = city;
@@ -57,7 +59,21 @@ public class Replica2 implements Replica {
public boolean isAlive() { return alive; }
@Override
- public void startProcess() {
+ public void startProcess(int byzantine, int crash) {
+ // [TEST] Detect crash
+ if (crash == 1) {
+ alive = false;
+ } else {
+ alive = true;
+ }
+
+ // [TEST] Detect byzantine failure
+ if (byzantine == 1) {
+ byzFailure = true;
+ } else {
+ byzFailure = false;
+ }
+
try {
pool.execute(new ResourceAvailability.Server(localAddr, resources));
} catch (IOException e) {
@@ -105,7 +121,7 @@ public class Replica2 implements Replica {
log.info("Running");
log.config("Local address is "+localAddr.toString());
- alive = true;
+ //alive = true;
log.info(getClass().getSimpleName() + " started.");
}
@@ -113,6 +129,13 @@ public class Replica2 implements Replica {
public void processRequest(Request request) {
log.info(request.toString());
+ // [TEST] Simulate byzantine failure (return incorrect value)
+ if (byzFailure == true) {
+ Response response = new Response(request, replicaManager.getReplicaId(), "BYZANTINE FAILURE", false);
+ replicaManager.sendResponseToFE(response);
+ return;
+ }
+
String status = "";
try {
switch (request.getFunction()) {
@@ -153,7 +176,10 @@ public class Replica2 implements Replica {
@Override
public void restart() {
shutdown();
- startProcess();
+
+ // [TEST] Restart process without byzantine failure or crash
+ TestLogger.log("REPLICA 2: {RESTARTED}");
+ startProcess(0, 0);
}
@Override