-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathControlPlane.java
More file actions
74 lines (58 loc) · 2.05 KB
/
ControlPlane.java
File metadata and controls
74 lines (58 loc) · 2.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package ControlPlane;
import utils.NetworkAddress;
import utils.PortManager;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
public class ControlPlane {
private HashRing ring;
private static ControlPlane cp = null;
private ControlPlaneServer cpServer;
public static synchronized ControlPlane getControlPlane(ArrayList<NetworkAddress> init_list) throws IOException {
if(cp == null){
cp = new ControlPlane(init_list);
}
return cp;
}
private ControlPlane(ArrayList<NetworkAddress> init_list) throws IOException {
ring = new HashRing();
for(NetworkAddress add : init_list){
ring.addWorker(add);
}
RemoveWorkerCallback removeWorkerCallback = (NetworkAddress networkAddress) ->
{
this.removeWorker(networkAddress);
};
AddWorkerCallback addWorkerCallback = (NetworkAddress worker) ->
{
this.addWorker(worker);
};
GetStateCallback getStateCallback = (String word) ->
{
return this.findState(word);
};
RoutingTableCallback routingTableCallback = () ->
{
return getRoutingTable();
};
this.cpServer = new ControlPlaneServer(new NetworkAddress("LOCALHOST", PortManager.getFreePort()), removeWorkerCallback
, addWorkerCallback, routingTableCallback, getStateCallback);
cpServer.startServer();
}
/**
*
* For each incoming word, find the worker that's responsible for the word
* (not neccessarily where the state is stored based on configuration)
* */
public NetworkAddress findState(String word){
return ring.findState(word);
}
public void addWorker(NetworkAddress nworker){
ring.addWorker(nworker);
}
public void removeWorker(NetworkAddress oworker){
ring.removeWorker(oworker);
}
public HashMap<NetworkAddress, ArrayList<int[]>> getRoutingTable(){return ring.RoutingTable();}
public void printRing(){ring.printRing();}
}