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

Reply via email to