From d820490376742bb1b08c12d75cffafa05108459c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 7 May 2012 15:37:39 +0200 Subject: Remove some network metadata from State. Remove .masterUrl, .masterLocation and networkName. --- same/src/main/java/com/orbekk/same/Client.java | 7 +++--- same/src/main/java/com/orbekk/same/Master.java | 26 +++++----------------- .../java/com/orbekk/same/MasterController.java | 2 +- .../main/java/com/orbekk/same/SameController.java | 7 +++--- same/src/main/java/com/orbekk/same/State.java | 4 +--- .../test/java/com/orbekk/same/FunctionalTest.java | 19 +++++++--------- same/src/test/java/com/orbekk/same/MasterTest.java | 4 ++-- .../java/com/orbekk/same/VariableFactoryTest.java | 2 +- 8 files changed, 26 insertions(+), 45 deletions(-) diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index 2479591..5f9cfd4 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -154,9 +154,7 @@ public class Client { if (masterInfo != null && request.getMasterId() <= masterInfo.getMasterId()) { logger.warn("{} tried to take over, but current master is " + - "{}:{}. Ignoring", new Object[]{request, - state.getDataOf(".masterUrl"), - masterInfo.getMasterId()}); + "{}. Ignoring", masterInfo); return; } abortMasterElection(); @@ -223,7 +221,8 @@ public class Client { } if (!currentMasterProposal.isCancelled() && result != null && masterInfo.getMasterId() <= failedMaster.getMasterId()) { - masterController.enableMaster(new State(state), result); + masterController.enableMaster(failedMaster.getNetworkName(), + new State(state), result); } else { logger.info("Master election aborted. Master already chosen."); } diff --git a/same/src/main/java/com/orbekk/same/Master.java b/same/src/main/java/com/orbekk/same/Master.java index 4327a7a..473fd1e 100644 --- a/same/src/main/java/com/orbekk/same/Master.java +++ b/same/src/main/java/com/orbekk/same/Master.java @@ -17,7 +17,6 @@ package com.orbekk.same; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import org.slf4j.Logger; @@ -28,15 +27,14 @@ import com.google.protobuf.RpcController; import com.orbekk.protobuf.Rpc; import com.orbekk.same.Services.ClientState; import com.orbekk.same.Services.Empty; -import com.orbekk.same.Services.UpdateComponentResponse; import com.orbekk.same.State.Component; import com.orbekk.util.WorkQueue; public class Master { private Logger logger = LoggerFactory.getLogger(getClass()); private final ConnectionManager connections; - private String myUrl; private String myLocation; // Protobuf server location, i.e., myIp:port + private String networkName; private AtomicLong revision = new AtomicLong(1); State state; private volatile int masterId = 1; @@ -65,36 +63,29 @@ public class Master { public static Master create(ConnectionManager connections, String myUrl, String networkName, String myLocation, RpcFactory rpcf) { - State state = new State(networkName); - state.update(".masterUrl", myUrl, 1); - state.update(".masterLocation", myLocation, 1); - return new Master(state, connections, myUrl, myLocation, rpcf); + State state = new State(); + return new Master(state, connections, networkName, myLocation, rpcf); } Master(State initialState, ConnectionManager connections, - String myUrl, String myLocation, RpcFactory rpcf) { + String networkName, String myLocation, RpcFactory rpcf) { this.state = initialState; this.connections = connections; - this.myUrl = myUrl; this.myLocation = myLocation; + this.networkName = networkName; this.rpcf = rpcf; } public String getNetworkName() { - return state.getDataOf(".networkName"); + return networkName; } public String getLocation() { return myLocation; } - public String getUrl() { - return myUrl; - } - public Services.MasterState getMasterInfo() { return Services.MasterState.newBuilder() - .setMasterUrl(getUrl()) .setMasterLocation(getLocation()) .setNetworkName(getNetworkName()) .setMasterId(masterId) @@ -247,9 +238,6 @@ public class Master { /** This master should take over from an earlier master. */ public void resumeFrom(State lastKnownState, final int masterId) { state = lastKnownState; - state.update(".masterUrl", myUrl, state.getRevision(".masterUrl") + 100); - state.update(".masterLocation", myLocation, - state.getRevision(".masterLocation") + 100); this.masterId = masterId; for (final String location : state.getList(State.PARTICIPANTS)) { @@ -268,7 +256,5 @@ public class Master { } client.masterTakeover(rpc, getMasterInfo(), done); } - updateStateRequestThread.add(".masterUrl"); - updateStateRequestThread.add(".masterLocation"); } } diff --git a/same/src/main/java/com/orbekk/same/MasterController.java b/same/src/main/java/com/orbekk/same/MasterController.java index 712524d..59cbfcc 100644 --- a/same/src/main/java/com/orbekk/same/MasterController.java +++ b/same/src/main/java/com/orbekk/same/MasterController.java @@ -16,6 +16,6 @@ package com.orbekk.same; public interface MasterController { - void enableMaster(State lastKnownState, int masterId); + void enableMaster(String networkName, State lastKnownState, int masterId); void disableMaster(); } diff --git a/same/src/main/java/com/orbekk/same/SameController.java b/same/src/main/java/com/orbekk/same/SameController.java index 9f1f9d2..6a0456d 100644 --- a/same/src/main/java/com/orbekk/same/SameController.java +++ b/same/src/main/java/com/orbekk/same/SameController.java @@ -93,7 +93,8 @@ public class SameController { private MasterController masterController = new MasterController() { @Override - public void enableMaster(State lastKnownState, int masterId) { + public void enableMaster(String networkName, + State lastKnownState, int masterId) { String myLocation = configuration.get("localIp") + ":" + configuration.get("pport"); String masterUrl = configuration.get("baseUrl") + @@ -140,7 +141,7 @@ public class SameController { timeout, timeout); RpcFactory rpcf = new RpcFactory(timeout); - State clientState = new State(".InvalidClientNetwork"); + State clientState = new State(); String baseUrl = String.format("http://%s:%s/", configuration.get("localIp"), configuration.getInt("port")); String clientUrl = baseUrl + "ClientService.json"; @@ -204,7 +205,7 @@ public class SameController { public void createNetwork(String networkName) { masterController.disableMaster(); - masterController.enableMaster(new State(networkName), 1); + masterController.enableMaster(networkName, new State(), 1); joinNetwork(master.getMasterInfo()); } diff --git a/same/src/main/java/com/orbekk/same/State.java b/same/src/main/java/com/orbekk/same/State.java index 262fef0..d9f3cc0 100644 --- a/same/src/main/java/com/orbekk/same/State.java +++ b/same/src/main/java/com/orbekk/same/State.java @@ -41,9 +41,7 @@ public class State { public static final String PARTICIPANTS = ".participants0"; - public State(String networkName) { - update(".networkName", networkName, 1); - updateFromObject(".participants", new ArrayList(), 1); + public State() { updateFromObject(PARTICIPANTS, new ArrayList(), 1); } diff --git a/same/src/test/java/com/orbekk/same/FunctionalTest.java b/same/src/test/java/com/orbekk/same/FunctionalTest.java index 078de58..0d13796 100644 --- a/same/src/test/java/com/orbekk/same/FunctionalTest.java +++ b/same/src/test/java/com/orbekk/same/FunctionalTest.java @@ -82,7 +82,7 @@ public class FunctionalTest { } Client newClient(String clientName, String clientUrl, String location) { - Client client = new Client(new State(clientName), connections, + Client client = new Client(new State(), connections, clientUrl, location, rpcf, executor); connections.clientMap0.put(location, client.getNewService()); clients.add(client); @@ -127,7 +127,6 @@ public class FunctionalTest { } for (Client c : clients) { assertThat(c.getConnectionState(), is(ConnectionState.STABLE)); - assertThat(c.getMaster().getMasterUrl(), is(masterUrl)); assertThat(c.getMaster().getMasterLocation(), is(masterLocation)); } } @@ -152,7 +151,7 @@ public class FunctionalTest { joinClients(); MasterController controller = new MasterController() { @Override - public void enableMaster(State lastKnownState, int masterId) { + public void enableMaster(String networkName, State lastKnownState, int masterId) { newMaster.resumeFrom(lastKnownState, masterId); } @Override @@ -170,15 +169,14 @@ public class FunctionalTest { } @Test public void onlyOneNewMaster() throws Exception { - String newMasterUrl = "http://newMaster/MasterService.json"; String newMasterLocation = "newMaster:1"; final Master newMaster = Master.create(connections, - newMasterUrl, "TestMaster", newMasterLocation, rpcf); + "NetworkName", "TestMaster", newMasterLocation, rpcf); joinClients(); MasterController controller = new MasterController() { boolean firstMaster = true; @Override - public synchronized void enableMaster(State lastKnownState, + public synchronized void enableMaster(String networkName, State lastKnownState, int masterId) { assertThat(firstMaster, is(true)); newMaster.resumeFrom(lastKnownState, masterId); @@ -194,8 +192,7 @@ public class FunctionalTest { client1.startMasterElection(master.getMasterInfo()); awaitExecution(); newMaster.performWork(); - assertThat(client1.getMaster().getMasterUrl(), is(newMasterUrl)); - assertThat(client2.getMaster().getMasterUrl(), is(newMasterUrl)); + assertThat(client2.getMaster().getMasterLocation(), is(newMasterLocation)); } @Test public void masterFails() throws Exception { @@ -206,7 +203,7 @@ public class FunctionalTest { joinClients(); MasterController controller = new MasterController() { @Override - public synchronized void enableMaster(State lastKnownState, + public synchronized void enableMaster(String networkName, State lastKnownState, int masterId) { newMaster.resumeFrom(lastKnownState, masterId); } @@ -224,7 +221,7 @@ public class FunctionalTest { awaitExecution(); performWork(); newMaster.performWork(); - assertThat(client1.getMaster().getMasterUrl(), is(newMasterUrl)); - assertThat(client2.getMaster().getMasterUrl(), is(newMasterUrl)); + assertThat(client1.getMaster().getMasterLocation(), is(newMasterLocation)); + assertThat(client2.getMaster().getMasterLocation(), is(newMasterLocation)); } } diff --git a/same/src/test/java/com/orbekk/same/MasterTest.java b/same/src/test/java/com/orbekk/same/MasterTest.java index e6f9686..85f737a 100644 --- a/same/src/test/java/com/orbekk/same/MasterTest.java +++ b/same/src/test/java/com/orbekk/same/MasterTest.java @@ -27,7 +27,7 @@ import org.junit.Test; public class MasterTest { private ExecutorService executor = Executors.newCachedThreadPool(); - private State state = new State("TestNetwork"); + private State state = new State(); private TestConnectionManager connections = new TestConnectionManager(); private Master master; private RpcFactory rpcf = new RpcFactory(5000); @@ -45,7 +45,7 @@ public class MasterTest { @Test public void clientJoin() throws Exception { Client client = new Client( - new State("ClientNetwork"), connections, + new State(), connections, "http://client/ClientService.json", "clientLocation", rpcf, executor); connections.clientMap0.put("clientLocation", client.getNewService()); diff --git a/same/src/test/java/com/orbekk/same/VariableFactoryTest.java b/same/src/test/java/com/orbekk/same/VariableFactoryTest.java index c60ceab..e96bba8 100644 --- a/same/src/test/java/com/orbekk/same/VariableFactoryTest.java +++ b/same/src/test/java/com/orbekk/same/VariableFactoryTest.java @@ -46,7 +46,7 @@ public class VariableFactoryTest { } public void initializeSampleState() { - sampleState = new State("TestState"); + sampleState = new State(); sampleState.update("TestVariable", "1", 1); sampleState.update("TestList", "[]", 1); } -- cgit v1.2.3