diff options
author | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-03-20 15:34:54 +0100 |
---|---|---|
committer | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-03-20 15:34:54 +0100 |
commit | f0ec603696bcec885f74bf5a8ce69d2ea07776f1 (patch) | |
tree | d05dc46ca0398dde8ba2285616d054863898dee6 /same/src/main/java/com/orbekk/same/Client.java | |
parent | e622d72a9d1cf7dbf5e2eaf5290aef073233c545 (diff) |
Various fixes related to takeover.
Diffstat (limited to 'same/src/main/java/com/orbekk/same/Client.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/Client.java | 18 |
1 files changed, 12 insertions, 6 deletions
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<String> getPaxosUrls() { + private List<String> getPaxosUrlsNoMaster() { List<String> paxosUrls = new ArrayList<String>(); 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<String> paxosUrls = getPaxosUrls(); + List<String> paxosUrls = getPaxosUrlsNoMaster(); MasterProposer proposer = new MasterProposer(getUrl(), paxosUrls, connections); if (masterController == null) { |