Hey Paul, Thanks for the suggestion. I'll give it a go and let you know how it goes.
Btw, if the suggestion works, would it make sense to add it to WF too? Cheers -- Galder Zamarreño Infinispan, Red Hat > On 14 Jan 2017, at 19:22, Paul Ferraro <paul.ferr...@redhat.com> wrote: > > Hi Galder, > > Sorry for the delay. For server-mode, we'd need to set the > RouteStatusListener in the jgroups subsystem before the RELAY2 > protocol is initialized. > e.g. > public class DefaultRouteStatusListener implements > RouteStatusListener, Supplier<Set<String>> { > private final Set<String> view = new ConcurrentSkipListSet<>(); > @Override > public void sitesUp(String... sites) { > this.view.addAll(Arrays.asList(sites)); > log.receivedXSiteClusterView(view); > } > @Override > public void sitesDown(String... sites) { > this.view.removeAll(Arrays.asList(sites)); > log.receivedXSiteClusterView(view); > } > @Override > public Set<String> get() { > return Collections.unmodifiableSet(this.view); > } > } > > We would set the RouteStatusListener following this line from JChannelFactory: > https://github.com/infinispan/infinispan/blob/master/server/integration/jgroups/src/main/java/org/infinispan/server/jgroups/JChannelFactory.java#L136 > e.g. > RELAY2 relay = new RELAY2().site(localSite); > relay.setRouteStatusListener(new DefaultRouteStatusListener()); > > JGroupsTransport can then obtain the site view via: > @Override > public Set<String> getSitesView() { > RELAY2 relay = channel.getProtocolStack().findProtocol(RELAY2.class); > RouteStatusListener listener = (relay != null) ? > relay.getRouteStatusListener() : null; > return (listener instanceof Supplier) ? ((Supplier<Set<String>>) > listener).get() : null; > } > > On Thu, Jan 12, 2017 at 6:10 AM, Galder Zamarreño <gal...@redhat.com> wrote: >> Hi Paul, >> >> Sorry to bother you again :) >> >> Re: https://issues.jboss.org/browse/ISPN-7230 & >> https://issues.jboss.org/browse/ISPN-7231 >> >> The aim of these JIRAs is to have a x-site view exposed as an INFO message >> as well as JMX and DMR operation. >> >> To do that, following Bela's advice, I've extracted RELAY2 protocol of the >> stack and on Infinispan's JGroupsTransport start() method, call >> setRouteStatusListener() with a relay RouteStatusListener implementation >> that allows the x-site view to be tracked [1]. >> >> This works fine in library mode, but in server, on startup >> setRouteStatusListener() sometimes gets called after the Relayer's >> viewAccepted() method has been already called (which is the one that calls >> into RouteStatusListener). These means that the inital x-site view might not >> be registered. >> >> So, what would be the correct place to add the setRouteStatusListener() call >> so that all views are captured? Or given how the server works, do I need to >> avoid using setRouteStatusListener() and use my own, Infinispan level, >> listener for tracking somehow? >> >> Cheers, >> >> [1] >> https://github.com/galderz/infinispan/blob/t_7230/core/src/main/java/org/infinispan/remoting/transport/jgroups/JGroupsTransport.java#L926 >> -- >> Galder Zamarreño >> Infinispan, Red Hat >> _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev