summaryrefslogtreecommitdiff
path: root/same/src/main/java/com/orbekk/same/State.java
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-17 16:57:00 +0100
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-17 16:57:00 +0100
commit057ed9266ddfeb4fecd1531f6aa51255a4003b68 (patch)
treebe90807085fc8cafb7704dc8c4ed9eeb8ab61e3f /same/src/main/java/com/orbekk/same/State.java
parent83213691c461d502809ecd8e7700747b511a7476 (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.java10
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;