From f0ec603696bcec885f74bf5a8ce69d2ea07776f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Tue, 20 Mar 2012 15:34:54 +0100 Subject: Various fixes related to takeover. --- same/src/main/java/com/orbekk/same/Client.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'same/src/main/java/com/orbekk/same/Client.java') diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index 1927731..e789f2e 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -126,14 +126,14 @@ public class Client implements DiscoveryListener { @Override public synchronized void masterTakeover(String masterUrl, String networkName, int masterId) throws Exception { + logger.info("MasterTakeover({}, {}, {})", + new Object[]{masterUrl, networkName, masterId}); if (masterId <= Client.this.masterId) { logger.warn("{}:{} tried to take over, but current master is " + "{}:{}. Ignoring", new Object[]{masterUrl, masterId, state.getDataOf(".masterUrl"), Client.this.masterId}); } - logger.info("MasterTakeover({}, {}, {})", - new Object[]{masterUrl, networkName, masterId}); abortMasterElection(); Client.this.masterUrl = masterUrl; Client.this.masterId = masterId; @@ -195,7 +195,7 @@ public class Client implements DiscoveryListener { this.masterController = masterController; } - private void reset() { + private synchronized void reset() { state.clear(); masterId = 0; } @@ -265,16 +265,22 @@ public class Client implements DiscoveryListener { return serviceImpl; } - private List getPaxosUrls() { + private List getPaxosUrlsNoMaster() { List paxosUrls = new ArrayList(); for (String participant : state.getList(".participants")) { - paxosUrls.add(participant.replace("ClientService", "PaxosService")); + String masterPaxos = state.getDataOf(".masterUrl") + .replace("MasterService", "PaxosService"); + String paxos = participant.replace("ClientService", "PaxosService"); + if (!paxos.equals(masterPaxos)) { + paxosUrls.add(participant.replace("ClientService", "PaxosService")); + } } + logger.info("Paxos urls: {}", paxosUrls); return paxosUrls; } private void tryBecomeMaster(int failedMasterId) { - List paxosUrls = getPaxosUrls(); + List paxosUrls = getPaxosUrlsNoMaster(); MasterProposer proposer = new MasterProposer(getUrl(), paxosUrls, connections); if (masterController == null) { -- cgit v1.2.3