Quantcast

[infinispan-dev] XSite route status listener in server - ISPN-7230/ISPN-7231

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[infinispan-dev] XSite route status listener in server - ISPN-7230/ISPN-7231

Galder Zamarreño
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
[hidden email]
https://lists.jboss.org/mailman/listinfo/infinispan-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [infinispan-dev] XSite route status listener in server - ISPN-7230/ISPN-7231

Paul Ferraro
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 <[hidden email]> 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
[hidden email]
https://lists.jboss.org/mailman/listinfo/infinispan-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [infinispan-dev] XSite route status listener in server - ISPN-7230/ISPN-7231

Galder Zamarreño
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 <[hidden email]> 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 <[hidden email]> 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
[hidden email]
https://lists.jboss.org/mailman/listinfo/infinispan-dev
Loading...