diff options
author | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-05-07 14:00:14 +0200 |
---|---|---|
committer | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-05-07 14:00:14 +0200 |
commit | acb7a2cd0794d8ed6f623ad6b279f193aa76188e (patch) | |
tree | dfc13baff049a4e399c84ec2da61c93bb64520da /same/src/main/java/com/orbekk/same/Client.java | |
parent | 9fc7d7a372301715745d4ef85cc2f7eba8a555a9 (diff) |
Client keeps revision field.
Diffstat (limited to 'same/src/main/java/com/orbekk/same/Client.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/Client.java | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index 0ee4c10..2479591 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -21,6 +21,7 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,6 +50,7 @@ public class Client { private final RpcFactory rpcf; private final ExecutorService executor; private final ClientInterface clientInterface = new ClientInterfaceImpl(); + private final AtomicLong revision = new AtomicLong(0); private List<StateChangedListener> stateListeners = new ArrayList<StateChangedListener>(); @@ -136,6 +138,7 @@ public class Client { for (StateChangedListener listener : stateListeners) { listener.stateChanged(state.getComponent(request.getId())); } + updateRevision(request.getRevision()); } else { logger.warn("Ignoring update: {) => {}", state.getComponent(request.getId()), @@ -257,6 +260,7 @@ public class Client { return Services.ClientState.newBuilder() .setUrl(myUrl) .setLocation(myLocation) + .setRevision(revision.get()) .build(); } @@ -337,4 +341,13 @@ public class Client { } } } + + public void updateRevision(long newRevision) { + boolean updated = false; + while (!updated) { + long expected = revision.get(); + long update = Math.max(expected, newRevision); + updated = revision.compareAndSet(expected, update); + } + } } |