summaryrefslogtreecommitdiff
path: root/same/src/main/java/com/orbekk/same/Master.java
diff options
context:
space:
mode:
Diffstat (limited to 'same/src/main/java/com/orbekk/same/Master.java')
-rw-r--r--same/src/main/java/com/orbekk/same/Master.java30
1 files changed, 29 insertions, 1 deletions
diff --git a/same/src/main/java/com/orbekk/same/Master.java b/same/src/main/java/com/orbekk/same/Master.java
index d1f27e9..b2adea1 100644
--- a/same/src/main/java/com/orbekk/same/Master.java
+++ b/same/src/main/java/com/orbekk/same/Master.java
@@ -23,7 +23,7 @@ public class Master {
State state;
private Broadcaster broadcaster;
private volatile int masterId = 1;
-
+
public static Master create(ConnectionManager connections,
Broadcaster broadcaster, String myUrl, String networkName,
String myLocation) {
@@ -67,6 +67,8 @@ public class Master {
@Override public void joinNetworkRequest(RpcController controller,
ClientState request, RpcCallback<Empty> done) {
logger.info("joinNetworkRequest({})", request);
+
+ /** Old participant code. */
List<String> participants = state.getList(".participants");
sendFullStateThread.add(request.getUrl());
if (!participants.contains(request.getUrl())) {
@@ -79,9 +81,14 @@ public class Master {
} else {
logger.warn("Client {} joining: Already part of network");
}
+
+ /** New participant code. */
+ addParticipant(request);
+
done.run(Empty.getDefaultInstance());
}
+
@Override public void updateStateRequest(RpcController controller,
Services.Component request,
RpcCallback<Services.UpdateComponentResponse> done) {
@@ -192,7 +199,19 @@ public class Master {
return serviceImpl;
}
+ private synchronized void addParticipant(ClientState client) {
+ List<String> participants = state.getList(State.PARTICIPANTS);
+ if (!participants.contains(client.getUrl())) {
+ participants.add(client.getUrl());
+ state.updateFromObject(State.PARTICIPANTS, participants,
+ state.getRevision(State.PARTICIPANTS) + 1);
+ updateStateRequestThread.add(State.PARTICIPANTS);
+ }
+
+ }
+
private synchronized void removeParticipant(String url) {
+ /** TODO: Remove this code. */
List<String> participants = state.getList(".participants");
if (participants.contains(url)) {
logger.info("removeParticipant({})", url);
@@ -201,6 +220,15 @@ public class Master {
state.getRevision(".participants") + 1);
updateStateRequestThread.add(".participants");
}
+
+ List<String> participants0 = state.getList(State.PARTICIPANTS);
+ if (participants0.contains(url)) {
+ logger.info("removeParticipant({})", url);
+ participants0.remove(url);
+ state.updateFromObject(State.PARTICIPANTS, participants0,
+ state.getRevision(State.PARTICIPANTS) + 1);
+ updateStateRequestThread.add(State.PARTICIPANTS);
+ }
}
private void broadcastNewComponents(List<String> destinations,