From 2c0ee9bde3b735aec09ab7ad3991b1661f97a216 Mon Sep 17 00:00:00 2001 From: Bela Ban Date: Wed, 7 Jun 2017 09:06:41 +0200 Subject: [PATCH] Use View.getCoord() to determine coordinator (https://issues.jboss.org/browse/JGRP-2193) --- conf/JGROUPS_VERSION.properties | 2 +- pom.xml | 2 +- src/org/jgroups/demos/ReplicatedHashMapDemo.java | 2 +- src/org/jgroups/protocols/CENTRAL_EXECUTOR.java | 2 +- src/org/jgroups/protocols/CENTRAL_LOCK.java | 2 +- src/org/jgroups/protocols/FORWARD_TO_COORD.java | 3 +-- src/org/jgroups/protocols/MERGE3.java | 3 +-- src/org/jgroups/protocols/RELAY.java | 5 ++--- src/org/jgroups/protocols/SEQUENCER.java | 7 ++----- src/org/jgroups/protocols/SEQUENCER2.java | 7 ++----- src/org/jgroups/protocols/pbcast/STABLE.java | 2 +- src/org/jgroups/protocols/relay/RELAY2.java | 6 +++--- src/org/jgroups/util/Util.java | 10 ++-------- tests/perf/org/jgroups/tests/perf/MPerf.java | 2 +- tests/perf/org/jgroups/tests/perf/MPerfRpc.java | 2 +- 15 files changed, 21 insertions(+), 36 deletions(-) diff --git a/conf/JGROUPS_VERSION.properties b/conf/JGROUPS_VERSION.properties index 8ff5e7ee863..1e35b9ba0f3 100644 --- a/conf/JGROUPS_VERSION.properties +++ b/conf/JGROUPS_VERSION.properties @@ -1,5 +1,5 @@ ## Defines the JGroups version ## This file should be the *only place* to change when changing the version number -jgroups.version=4.0.3.Final +jgroups.version=4.0.4-SNAPSHOT jgroups.codename=Schiener Berg \ No newline at end of file diff --git a/pom.xml b/pom.xml index 01b05a52d53..3289a0708a7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ jgroups bundle JGroups - 4.0.3.Final + 4.0.4-SNAPSHOT http://www.jgroups.org diff --git a/src/org/jgroups/demos/ReplicatedHashMapDemo.java b/src/org/jgroups/demos/ReplicatedHashMapDemo.java index f9b69c74267..31962d5c622 100644 --- a/src/org/jgroups/demos/ReplicatedHashMapDemo.java +++ b/src/org/jgroups/demos/ReplicatedHashMapDemo.java @@ -218,7 +218,7 @@ public void viewChange(View view, java.util.List
new_mbrs, java.util.Li } private void _setTitle() { - int num=map.getChannel().getView().getMembers().size(); + int num=map.getChannel().getView().size(); setTitle("ReplicatedHashMapDemo: " + num + " server(s)"); } diff --git a/src/org/jgroups/protocols/CENTRAL_EXECUTOR.java b/src/org/jgroups/protocols/CENTRAL_EXECUTOR.java index 75af274a947..2e55ef67a3b 100644 --- a/src/org/jgroups/protocols/CENTRAL_EXECUTOR.java +++ b/src/org/jgroups/protocols/CENTRAL_EXECUTOR.java @@ -65,7 +65,7 @@ public String getBackups() { public void handleView(View view) { Address oldCoord = coord; if(view.size() > 0) { - coord=view.getMembers().iterator().next(); + coord=view.getCoord(); is_coord=coord.equals(local_addr); if(log.isDebugEnabled()) log.debug("local_addr=" + local_addr + ", coord=" + coord + ", is_coord=" + is_coord); diff --git a/src/org/jgroups/protocols/CENTRAL_LOCK.java b/src/org/jgroups/protocols/CENTRAL_LOCK.java index c4701cfd824..0bc8a019fe9 100644 --- a/src/org/jgroups/protocols/CENTRAL_LOCK.java +++ b/src/org/jgroups/protocols/CENTRAL_LOCK.java @@ -120,7 +120,7 @@ public void handleView(View view) { super.handleView(view); Address old_coord=coord; if(view.size() > 0) { - coord=view.getMembers().iterator().next(); + coord=view.getCoord(); is_coord=coord.equals(local_addr); if(log.isDebugEnabled()) log.debug("local_addr=" + local_addr + ", coord=" + coord + ", is_coord=" + is_coord); diff --git a/src/org/jgroups/protocols/FORWARD_TO_COORD.java b/src/org/jgroups/protocols/FORWARD_TO_COORD.java index 23626007eba..d1dba2746ea 100644 --- a/src/org/jgroups/protocols/FORWARD_TO_COORD.java +++ b/src/org/jgroups/protocols/FORWARD_TO_COORD.java @@ -6,7 +6,6 @@ import org.jgroups.stack.Protocol; import org.jgroups.util.Bits; import org.jgroups.util.ForwardQueue; -import org.jgroups.util.Util; import java.io.DataInput; import java.io.DataOutput; @@ -156,7 +155,7 @@ public Object up(Message msg) { protected void handleViewChange(View view) { - Address new_coord=Util.getCoordinator(view); + Address new_coord=view.getCoord(); boolean coord_changed=!Objects.equals(coord, new_coord); if(coord_changed || received_not_coord) { diff --git a/src/org/jgroups/protocols/MERGE3.java b/src/org/jgroups/protocols/MERGE3.java index 1d1d67381c5..1495eeff12a 100644 --- a/src/org/jgroups/protocols/MERGE3.java +++ b/src/org/jgroups/protocols/MERGE3.java @@ -248,8 +248,7 @@ public Object down(Event evt) { if(only_coords_run_consistency_checker == false) startViewConsistencyChecker(); - List
mbrs=view.getMembers(); - Address coord=mbrs.isEmpty()? null : mbrs.get(0); + Address coord=view.getCoord(); if(Objects.equals(coord, local_addr)) { is_coord=true; if(only_coords_run_consistency_checker) diff --git a/src/org/jgroups/protocols/RELAY.java b/src/org/jgroups/protocols/RELAY.java index 61ab1bf286f..b533f948800 100644 --- a/src/org/jgroups/protocols/RELAY.java +++ b/src/org/jgroups/protocols/RELAY.java @@ -15,7 +15,6 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -import java.util.stream.Collectors; /** * Simple relaying protocol: RELAY is added to the top of the stack, creates a channel to a bridge cluster, @@ -541,7 +540,7 @@ public void receive(Message msg) { msg.getOffset(), msg.getLength()); // replace addrs with proxies if(data.remote_view != null) { - List
mbrs=data.remote_view.getMembers().stream().collect(Collectors.toCollection(LinkedList::new)); + List
mbrs=new LinkedList<>(data.remote_view.getMembers()); data.remote_view=new View(data.remote_view.getViewId(), mbrs); } boolean merge=remote_view == null; @@ -571,7 +570,7 @@ public void viewAccepted(View view) { switch(view.size()) { case 1: // the remote cluster disappeared, remove all of its addresses from the view - if(prev_members > 1 && view.getMembers().iterator().next().equals(bridge.getAddress())) { + if(prev_members > 1 && view.getCoord().equals(bridge.getAddress())) { remote_view=null; View new_global_view=generateGlobalView(local_view, null); sendViewOnLocalCluster(null, new_global_view, false, null); diff --git a/src/org/jgroups/protocols/SEQUENCER.java b/src/org/jgroups/protocols/SEQUENCER.java index 96db08baefa..9f61d833a99 100644 --- a/src/org/jgroups/protocols/SEQUENCER.java +++ b/src/org/jgroups/protocols/SEQUENCER.java @@ -294,11 +294,8 @@ protected void flush(final Address new_coord) throws InterruptedException { // If we're becoming coordinator, we need to handle TMP_VIEW as // an immediate change of view. See JGRP-1452. private void handleTmpView(View v) { - List
mbrs=v.getMembers(); - if(mbrs.isEmpty()) return; - - Address new_coord=mbrs.get(0); - if(!new_coord.equals(coord) && local_addr != null && local_addr.equals(new_coord)) + Address new_coord=v.getCoord(); + if(new_coord != null && !new_coord.equals(coord) && local_addr != null && local_addr.equals(new_coord)) handleViewChange(v); } diff --git a/src/org/jgroups/protocols/SEQUENCER2.java b/src/org/jgroups/protocols/SEQUENCER2.java index 4047d4c577a..57caabd65a8 100644 --- a/src/org/jgroups/protocols/SEQUENCER2.java +++ b/src/org/jgroups/protocols/SEQUENCER2.java @@ -307,11 +307,8 @@ protected void handleViewChange(View v) { // If we're becoming coordinator, we need to handle TMP_VIEW as // an immediate change of view. See JGRP-1452. private void handleTmpView(View v) { - List
mbrs=v.getMembers(); - if(mbrs.isEmpty()) return; - - Address new_coord=mbrs.get(0); - if(!new_coord.equals(coord) && local_addr != null && local_addr.equals(new_coord)) + Address new_coord=v.getCoord(); + if(new_coord != null && !new_coord.equals(coord) && local_addr != null && local_addr.equals(new_coord)) handleViewChange(v); } diff --git a/src/org/jgroups/protocols/pbcast/STABLE.java b/src/org/jgroups/protocols/pbcast/STABLE.java index ab20849f110..5112554d7a0 100644 --- a/src/org/jgroups/protocols/pbcast/STABLE.java +++ b/src/org/jgroups/protocols/pbcast/STABLE.java @@ -361,7 +361,7 @@ protected void handleViewChange(View v) { lock.lock(); try { this.view=v; - coordinator=v.getMembers().get(0); + coordinator=v.getCoord(); resetDigest(); if(!initialized) initialized=true; diff --git a/src/org/jgroups/protocols/relay/RELAY2.java b/src/org/jgroups/protocols/relay/RELAY2.java index 70055555007..deee0dcc440 100644 --- a/src/org/jgroups/protocols/relay/RELAY2.java +++ b/src/org/jgroups/protocols/relay/RELAY2.java @@ -725,9 +725,9 @@ protected List
determineSiteMasters(View view) { } if(retval.isEmpty()) { - Address tmp=Util.getCoordinator(view); - if(tmp != null) - retval.add(Util.getCoordinator(view)); + Address coord=view.getCoord(); + if(coord != null) + retval.add(coord); } return retval; } diff --git a/src/org/jgroups/util/Util.java b/src/org/jgroups/util/Util.java index bc31267bea5..7b44174cfe9 100644 --- a/src/org/jgroups/util/Util.java +++ b/src/org/jgroups/util/Util.java @@ -4109,16 +4109,10 @@ public static boolean isCoordinator(JChannel ch) { public static boolean isCoordinator(View view,Address local_addr) { if(view == null || local_addr == null) return false; - List
mbrs=view.getMembers(); - return !(mbrs == null || mbrs.isEmpty()) && local_addr.equals(mbrs.iterator().next()); + Address coord=view.getCoord(); + return coord != null && local_addr.equals(coord); } - public static Address getCoordinator(View view) { - if(view == null) - return null; - List
mbrs=view.getMembers(); - return !mbrs.isEmpty()? mbrs.get(0) : null; - } public static MBeanServer getMBeanServer() { List servers=MBeanServerFactory.findMBeanServer(null); diff --git a/tests/perf/org/jgroups/tests/perf/MPerf.java b/tests/perf/org/jgroups/tests/perf/MPerf.java index 6daaa127c3e..cf89b2f072d 100644 --- a/tests/perf/org/jgroups/tests/perf/MPerf.java +++ b/tests/perf/org/jgroups/tests/perf/MPerf.java @@ -92,7 +92,7 @@ public void start(String props, String name) throws Exception { JmxConfigurator.registerChannel(channel, Util.getMBeanServer(), "jgroups", "mperf", true); // send a CONFIG_REQ to the current coordinator, so we can get the current config - Address coord=channel.getView().getMembers().get(0); + Address coord=channel.getView().getCoord(); if(coord != null && !local_addr.equals(coord)) send(coord,null,MPerfHeader.CONFIG_REQ, Message.Flag.RSVP); } diff --git a/tests/perf/org/jgroups/tests/perf/MPerfRpc.java b/tests/perf/org/jgroups/tests/perf/MPerfRpc.java index 272a24e818a..5f477cb3b49 100644 --- a/tests/perf/org/jgroups/tests/perf/MPerfRpc.java +++ b/tests/perf/org/jgroups/tests/perf/MPerfRpc.java @@ -120,7 +120,7 @@ public void start(String props, String name) throws Exception { JmxConfigurator.registerChannel(channel, Util.getMBeanServer(), "jgroups", "mperf", true); // send a CONFIG_REQ to the current coordinator, so we can get the current config - Address coord=channel.getView().getMembers().get(0); + Address coord=channel.getView().getCoord(); if(coord != null && !local_addr.equals(coord)) invokeRpc(configReq, coord, RequestOptions.ASYNC().flags(Message.Flag.RSVP), local_addr); }