Hi Ed, This is bug indeed. I have just fixed it in CAMEL-9029 [1]. The bug was not detected so far, because channels used for cluster configuration usually don't exchange non-view messages.
Thanks for catching this! Cheers! [1] https://issues.apache.org/jira/browse/CAMEL-9029 wt., 28.07.2015 o 12:45 użytkownik Ed Welch <e...@edjusted.com> napisał: > Was looking at using the jgroups component to coordinate some master/slave > routes, and was digging into the source for the example to see how it works. > > Everything seems straight forward to me with one issue: the > dropNonCoordinatorViews method in JGroupsFilters looks like it may have a > bug: > > public static Predicate dropNonCoordinatorViews() { > return new Predicate() { > public boolean matches(Exchange exchange) { > Object body = exchange.getIn().getBody(); > JGroupsFilters.LOG.debug("Filtering message {}.", body); > if(body instanceof View) { > View view = (View)body; > Address coordinatorNodeAddress = > (Address)view.getMembers().get(0); > Address channelAddress = > (Address)exchange.getIn().getHeader("JGROUPS_CHANNEL_ADDRESS", > Address.class); > JGroupsFilters.LOG.debug("Comparing endpoint channel > address {} against the coordinator node address {}.", channelAddress, > coordinatorNodeAddress); > return channelAddress.equals(coordinatorNodeAddress); > } else { > JGroupsFilters.LOG.debug("Body {} is not an instance > of org.jgroups.View . Skipping filter.", body); > return true; > } > } > }; > } > > > So if the message from the jgroups component is a View, and the > coordinator address matches this channel address, return true, indicating > we are the coordinator, and we can start the route. > > However, if the message which was received on the Channel was not a View > object, this method returns true. > > If this is used according to the example: > > from("jgroups:clusterName?enableViewMessages=true"). > filter(dropNonCoordinatorViews()). > threads().delay(delayIfContextNotStarted(SECONDS.toMillis(5))). > to("controlbus:route?routeId=masterRoute&action=start&async=true"); > > Wouldn't that mean any non View type message would cause the route to > start?? > > Shouldn't that default case for non View type messages return false? > > Thanks, > Ed