Skip to content
Snippets Groups Projects
Commit 1c558588 authored by ik1g19's avatar ik1g19
Browse files

start work on rebalance

parent d162ed18
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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);
......
......@@ -54,4 +54,8 @@ public class DStoreConnection {
public int getID() { return id; }
public FileIndex getFileIndex() { return file_index; }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment