Skip to content
Snippets Groups Projects
Commit 036519de authored by ik1g19's avatar ik1g19
Browse files

fixed bug in remove operation

 - Error - "An established connection
   was aborted by the software in your
   host machine"
 - Cause - Controller was closing connection
   before DStore could respond
parent 936685b4
No related branches found
No related tags found
No related merge requests found
......@@ -64,7 +64,7 @@ public class Controller extends Server {
Integer port = Integer.parseInt(args[1]);
send("LIST", dStoreSock);
send("LIST", dStoreSock, "DataStore");
String files = readSocket(dStoreSock);
......@@ -91,7 +91,7 @@ public class Controller extends Server {
nextID++;
send("JOINED", dStoreSock);
send("JOINED", dStoreSock, "DataStore");
}
else if (command.equals("STORE")) {
......@@ -118,7 +118,7 @@ public class Controller extends Server {
file.setAcksQuota(r);
send("STORE_TO " + ports, client);
send("STORE_TO " + ports, client, "Client");
Boolean fileStored = false;
......@@ -129,7 +129,7 @@ public class Controller extends Server {
threadIDOutput("Store of file " + filename + " complete");
send("STORE_COMPLETE", client);
send("STORE_COMPLETE", client, "Client");
}
}
}
......@@ -147,7 +147,7 @@ public class Controller extends Server {
DStoreFile file = fileIndex.get(filename);
int dStorePort = file.getDstore().getPort();
send("LOAD_FROM " + dStorePort + " " + file.getFilesize(), client);
send("LOAD_FROM " + dStorePort + " " + file.getFilesize(), client, "Client");
}
else if (command.equals("REMOVE")) {
......@@ -164,22 +164,29 @@ public class Controller extends Server {
Socket dStore = connectToDStore(x.getValue());
if (dStore != null) {
send("REMOVE " + filename, dStore);
send("REMOVE " + filename, dStore, "DataStore");
} else threadIDErr("Unable to connect to DataStore");
closeConnection("DataStore", dStore);
x.getValue().removeFile(filename);
});
Boolean fileRemoved = false;
while (!fileRemoved) {
if (file.removeAckCheck()) {
fileIndex.remove(filename);
file.setRemoveInProgress(false);
fileRemoved = true;
threadIDOutput("Remove of file " + filename + " complete");
send("STORE_COMPLETE", client);
send("REMOVE_COMPLETE", client, "Client");
}
}
}
......
......@@ -33,7 +33,7 @@ public class DStore extends Server {
if (controller != null) {
send("JOIN " + port, controller);
send("JOIN " + port, controller, "Controller");
handleRequest(readSocket(controller), controller);
start();
}
......@@ -101,21 +101,21 @@ public class DStore extends Server {
}
send(fileMessage, controller);
send(fileMessage, controller, "Controller");
String response = readSocket(controller);
if (response.equals("JOINED")) threadIDOutput("Successfully joined Controller");
closeConnection("Client", controller);
closeConnection("Controller", controller);
}
else if (command.equals("STORE")) {
String filename = args[1];
Long filesize = Long.parseLong(args[2]);
send("ACK", client);
send("ACK", client, "Client");
try {
......@@ -128,7 +128,7 @@ public class DStore extends Server {
Socket controller = connectToController();
if (controller != null) {
send("STORE_ACK " + filename, controller);
send("STORE_ACK " + filename, controller, "Controller");
} else threadIDErr("Unable to connect to Controller");
closeConnection("Controller", controller);
......@@ -145,14 +145,21 @@ public class DStore extends Server {
}
else if (command.equals("REMOVE")) {
Socket controller = client;
String filename = args[1];
if (deleteFile(file_folder + "\\" + filename)) threadIDOutput("Deleted file " + filename);
else threadIDErr("Failed to delete file " + filename);
send("REMOVE_ACK", controller);
Socket controller = connectToController();
if (controller != null) {
send("REMOVE_ACK " + filename, controller, "Controller");
}
else threadIDErr("Unable to connect to Controller");
closeConnection("Controller", controller);
}
}
......
......@@ -44,6 +44,10 @@ public class DStoreConnection {
public void removeFile(String filename) { file_index.remove(filename); }
public int getPort() { return port; }
......
......@@ -50,25 +50,25 @@ public abstract class Server {
protected void send(String msg, Socket socket) {
protected void send(String msg, Socket socket, String destinationName) {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(msg);
out.flush();
threadIDOutput("Sent: " + msg);
threadIDOutput("Sent: \"" + msg + "\" to " + destinationName + " on port: " + socket.getPort());
}
catch (IOException e) {
threadIDErr("Error: " + e);
}
}
protected void send(String msg, String hostname, int port) {
protected void send(String msg, String hostname, int port, String destinationName) {
try {
Socket socket = new Socket(hostname, port);
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(msg);
out.flush();
threadIDOutput("Sent: " + msg);
threadIDOutput("Sent: \"" + msg + "\" to " + destinationName);
}
catch (IOException e) {
threadIDErr("Error: " + e);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment