diff options
author | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-01-17 16:57:00 +0100 |
---|---|---|
committer | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-01-17 16:57:00 +0100 |
commit | 057ed9266ddfeb4fecd1531f6aa51255a4003b68 (patch) | |
tree | be90807085fc8cafb7704dc8c4ed9eeb8ab61e3f /same/src/main/java/com/orbekk/same/State.java | |
parent | 83213691c461d502809ecd8e7700747b511a7476 (diff) |
Reject old state updates.
Only accept updates from master if revision >= currentRevision.
Client must clear state before joining network.
Diffstat (limited to 'same/src/main/java/com/orbekk/same/State.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/State.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/same/src/main/java/com/orbekk/same/State.java b/same/src/main/java/com/orbekk/same/State.java index 4179dcb..c352990 100644 --- a/same/src/main/java/com/orbekk/same/State.java +++ b/same/src/main/java/com/orbekk/same/State.java @@ -30,6 +30,12 @@ public class State { updateFromObject(".participants", new ArrayList<String>(), 0); } + public synchronized void clear() { + logger.info("Clearing state."); + updatedComponents.clear(); + state.clear(); + } + public synchronized void forceUpdate(String componentName, String data, long revision) { Component oldComponent = state.get(componentName); @@ -48,12 +54,14 @@ public class State { component = state.get(componentName); } - if (revision == component.getRevision()) { + if (revision >= component.getRevision()) { + Component oldComponent = new Component(component); component.setName(componentName); component.setRevision(revision + 1); component.setData(data); state.put(componentName, component); updatedComponents.add(componentName); + logger.info("Updated state: {} => {}", oldComponent, component); return true; } else { return false; |