diff options
Diffstat (limited to 'same/src/main')
| -rw-r--r-- | same/src/main/java/com/orbekk/same/App.java | 2 | ||||
| -rw-r--r-- | same/src/main/java/com/orbekk/same/Master.java | 30 | ||||
| -rw-r--r-- | same/src/main/java/com/orbekk/same/State.java | 3 | 
3 files changed, 33 insertions, 2 deletions
diff --git a/same/src/main/java/com/orbekk/same/App.java b/same/src/main/java/com/orbekk/same/App.java index 2b2985e..cc8b9ce 100644 --- a/same/src/main/java/com/orbekk/same/App.java +++ b/same/src/main/java/com/orbekk/same/App.java @@ -10,7 +10,7 @@ public class App {      private Services.MasterState getMasterInfo(Configuration configuration) {          return Services.MasterState.newBuilder() -                .setMasterUrl(configuration.get(".masterUrl")) +                .setMasterUrl(configuration.get("masterUrl"))                  .setMasterLocation(configuration.get("masterLocation"))                  .build();      } 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, diff --git a/same/src/main/java/com/orbekk/same/State.java b/same/src/main/java/com/orbekk/same/State.java index f0fee80..9d23d78 100644 --- a/same/src/main/java/com/orbekk/same/State.java +++ b/same/src/main/java/com/orbekk/same/State.java @@ -25,9 +25,12 @@ public class State {      private ObjectMapper mapper = new ObjectMapper();      private Set<String> updatedComponents = new TreeSet<String>(); +    public static final String PARTICIPANTS = ".participants0"; +          public State(String networkName) {          update(".networkName", networkName, 1);          updateFromObject(".participants", new ArrayList<String>(), 1); +        updateFromObject(PARTICIPANTS, new ArrayList<String>(), 1);      }      public State(State other) {  | 
