summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica1/Replica1.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/derms/replica1/Replica1.java')
-rw-r--r--src/main/java/derms/replica1/Replica1.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/main/java/derms/replica1/Replica1.java b/src/main/java/derms/replica1/Replica1.java
new file mode 100644
index 0000000..10c0ce5
--- /dev/null
+++ b/src/main/java/derms/replica1/Replica1.java
@@ -0,0 +1,80 @@
+package derms.replica1;
+
+import derms.Replica;
+import derms.ReplicaManager;
+import derms.Request;
+import derms.Response;
+import derms.replica2.DermsLogger;
+import derms.util.ThreadPool;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Logger;
+
+public class Replica1 implements Replica {
+
+ private boolean alive = false;
+ private final ExecutorService pool;
+ private final Logger log;
+ private final InetAddress localAddr;
+ private final ResponderClient responderClient;
+ private final ReplicaManager replicaManager;
+
+ public Replica1(ReplicaManager replicaManager) {
+ this.replicaManager = replicaManager;
+ pool = Executors.newFixedThreadPool(5);
+ try {
+ localAddr = InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ throw new RuntimeException(e);
+ }
+ responderClient = new ResponderClient("MTL");
+ try {
+ this.log = DermsLogger.getLogger(getClass());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public boolean isAlive() {
+ return alive;
+ }
+
+ @Override
+ public void startProcess() {
+ pool.execute(DERMSServer::new);
+ alive = true;
+ log.info(getClass().getSimpleName() + " started.");
+ log.config("Local address is "+localAddr.toString());
+ }
+
+ @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("Processed request " + request + "; response: " + response);
+ replicaManager.sendResponseToFE(response);
+ }
+
+ @Override
+ public void restart() {
+ log.info("Shutting down...");
+ ThreadPool.shutdown(pool, log);
+ alive = false;
+ log.info("Finished shutting down.");
+ startProcess();
+ }
+
+ @Override
+ public int getId() {
+ return 1;
+ }
+}