From 1c558588dbc7834bcae1d54dc9b9084d48d0ebe3 Mon Sep 17 00:00:00 2001 From: "isaacklugman@gmail.com" <ik1g19@soton.ac.uk> Date: Thu, 6 May 2021 18:59:15 +0100 Subject: [PATCH] start work on rebalance --- src/ftp/Controller.java | 45 +++++++++++++++++++++++++++++++++-- src/ftp/DStore.java | 10 ++++---- src/ftp/DStoreConnection.java | 4 ++++ 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/ftp/Controller.java b/src/ftp/Controller.java index c8ae27f..a7b6525 100644 --- a/src/ftp/Controller.java +++ b/src/ftp/Controller.java @@ -64,9 +64,9 @@ public class Controller extends Server { Integer port = Integer.parseInt(args[1]); - send("LIST", dStoreSock, "DataStore"); - String files = readSocket(dStoreSock); + rebalance(); + DStoreConnection dStore; @@ -227,4 +227,45 @@ public class Controller extends Server { return dStore; } + + + public void rebalance() { + Integer nODS = dStoreIndex.entrySet().size(); + + Boolean rCopies = fileIndex.entrySet().stream(). + map(x -> x.getValue().getDStores().size() == r). + reduce(true, (a,b) -> a && b); + + + List<DStoreConnection> lightDStores = dStoreIndex.entrySet().stream(). + map(x -> x.getValue()). + filter(x -> { + Integer nOF = x.getFileIndex().size(); + return nOF < Math.floor(r * nOF / nODS); + }). + collect(Collectors.toList()); + + + List<DStoreConnection> bloatedDStores = dStoreIndex.entrySet().stream(). + map(x -> x.getValue()). + filter(x -> { + Integer nOF = x.getFileIndex().size(); + return nOF < Math.ceil(r * nOF / nODS); + }). + collect(Collectors.toList()); + + + if (rCopies && lightDStores.isEmpty() && bloatedDStores.isEmpty()) { + + } + else { + DStoreConnection dStore = bloatedDStores.get(0); + String firstFilename = (String) dStore.getFileIndex().values().toArray()[0]; + dStore.removeFile(firstFilename); + + DStoreConnection dStore2 = lightDStores.get(0); + dStore2.addFile(); + } + } + } \ No newline at end of file diff --git a/src/ftp/DStore.java b/src/ftp/DStore.java index 89d6a60..aa4f913 100644 --- a/src/ftp/DStore.java +++ b/src/ftp/DStore.java @@ -33,6 +33,7 @@ public class DStore extends Server { if (controller != null) { + for(File file: new File(file_folder).listFiles()) file.delete(); send("JOIN " + port, controller, "Controller"); handleRequest(readSocket(controller), controller); start(); @@ -92,16 +93,13 @@ public class DStore extends Server { if (folder.listFiles().length > 0) { - List<String> files = Arrays.stream(folder.listFiles()). + fileMessage = Arrays.stream(folder.listFiles()). map(x -> x.getName() + " " + x.length()). - collect(Collectors.toList()); - - - fileMessage = files.stream().collect(Collectors.joining("|")); + collect(Collectors.joining("|")); } - send(fileMessage, controller, "Controller"); + send("LIST " + fileMessage, controller, "Controller"); String response = readSocket(controller); diff --git a/src/ftp/DStoreConnection.java b/src/ftp/DStoreConnection.java index 94e0fda..ee5a274 100644 --- a/src/ftp/DStoreConnection.java +++ b/src/ftp/DStoreConnection.java @@ -54,4 +54,8 @@ public class DStoreConnection { public int getID() { return id; } + + + public FileIndex getFileIndex() { return file_index; } + } -- GitLab