From a2f0a58484bdfc22a8af7b16df051c1e611fc83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Tue, 17 Jan 2012 17:11:12 +0100 Subject: Fix revision update. Change State to take the *new* revision when updating. --- same/src/main/java/com/orbekk/same/MasterServiceImpl.java | 6 +++--- same/src/main/java/com/orbekk/same/State.java | 8 ++++---- .../test/java/com/orbekk/same/MasterServiceImplTest.java | 13 +++++++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/same/src/main/java/com/orbekk/same/MasterServiceImpl.java b/same/src/main/java/com/orbekk/same/MasterServiceImpl.java index d7a9e53..a8acc52 100644 --- a/same/src/main/java/com/orbekk/same/MasterServiceImpl.java +++ b/same/src/main/java/com/orbekk/same/MasterServiceImpl.java @@ -31,7 +31,7 @@ public class MasterServiceImpl implements MasterService, UrlReceiver, Runnable { _fullStateReceivers.add(clientUrl); synchronized(this) { state.updateFromObject(".participants", participants, - state.getRevision(".participants")); + state.getRevision(".participants") + 1); notifyAll(); } } else { @@ -79,7 +79,7 @@ public class MasterServiceImpl implements MasterService, UrlReceiver, Runnable { @Override public synchronized boolean updateStateRequest(String component, String newData, long revision) { - boolean updated = state.update(component, newData, revision); + boolean updated = state.update(component, newData, revision + 1); if (updated) { notifyAll(); } @@ -90,7 +90,7 @@ public class MasterServiceImpl implements MasterService, UrlReceiver, Runnable { public void setUrl(String url) { String myUrl = url + "MasterService.json"; logger.info("Master URL is " + myUrl); - state.update(".masterUrl", myUrl, 0); + state.update(".masterUrl", myUrl, 1); } boolean _performWork() { diff --git a/same/src/main/java/com/orbekk/same/State.java b/same/src/main/java/com/orbekk/same/State.java index c352990..19b67e5 100644 --- a/same/src/main/java/com/orbekk/same/State.java +++ b/same/src/main/java/com/orbekk/same/State.java @@ -26,8 +26,8 @@ public class State { private Set updatedComponents = new TreeSet(); public State(String networkName) { - update(".networkName", networkName, 0); - updateFromObject(".participants", new ArrayList(), 0); + update(".networkName", networkName, 1); + updateFromObject(".participants", new ArrayList(), 1); } public synchronized void clear() { @@ -54,10 +54,10 @@ 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.setRevision(revision); component.setData(data); state.put(componentName, component); updatedComponents.add(componentName); diff --git a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java index 583e464..9c72319 100644 --- a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java +++ b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java @@ -15,6 +15,11 @@ public class MasterServiceImplTest { private MasterServiceImpl master = new MasterServiceImpl(state, connections, broadcaster); + @Before + public void setUp() { + connections.masterMap.put("http://master", master); + } + @Test public void setsMasterUrl() { master.setUrl("http://10.0.0.54:10050/"); @@ -53,7 +58,7 @@ public class MasterServiceImplTest { new State("ClientNetwork"), connections); client.setUrl("http://client/"); connections.clientMap.put("http://client/ClientService.json", client); - master.joinNetworkRequest("http://client/ClientService.json"); + client.joinNetwork("http://master"); assertTrue(master._performWork()); assertTrue(state.getList(".participants").contains("http://client/ClientService.json")); assertEquals(state, client.testGetState()); @@ -68,11 +73,11 @@ public class MasterServiceImplTest { connections.clientMap.put("http://client/ClientService.json", client1); ClientServiceImpl client2 = new ClientServiceImpl( new State("ClientNetwork"), connections); - client1.setUrl("http://client2/"); + client2.setUrl("http://client2/"); connections.clientMap.put("http://client2/ClientService.json", client2); - master.joinNetworkRequest("http://client/ClientService.json"); - master.joinNetworkRequest("http://client2/ClientService.json"); + client1.joinNetwork("http://master"); + client2.joinNetwork("http://master"); assertTrue(master._performWork()); assertTrue(state.getList(".participants").contains("http://client/ClientService.json")); -- cgit v1.2.3