[zeromq-dev] expose dead/slow zyre peer to application layer

Johan Philips johan.philips at kuleuven.be
Wed Sep 2 12:09:13 CEST 2015



On 2015-09-02 09:32, Pieter Hintjens wrote:
> This could be done, with a new event. The problem is that on WiFi, the
> rate of lost pings is high, so you will get lots of these events and
> not be able to do much with them.
>
> Can you explain what you would do with "peer is being evasive" events?

Our use case is search & rescue robotics and we want to be able to 
determine the quality of service of the communication channel. If WiFI 
gets bad, we might want to temporarily switch to DRM for critical messages.

Maybe we should rely on QoS measurements done lower in the communication 
stack, but since in Zyre you are sending pings around we thought we 
could benefit from this info :)

Johan

>
> On Tue, Sep 1, 2015 at 11:23 PM, Johan Philips
> <Johan.Philips at kuleuven.be> wrote:
>>
>>> On 01 Sep 2015, at 16:56, Pieter Hintjens <ph at imatix.com> wrote:
>>>
>>> If a peer becomes unreachable and removed, there's a LEAVE event. Is
>>> this not what you need?
>>
>> We would like to detect pings that fail, i.e. the evasive not only the expired.
>>
>>>
>>> On Tue, Sep 1, 2015 at 4:39 PM, Johan Philips <johan.philips at kuleuven.be> wrote:
>>>> Dear all
>>>>
>>>> We are using Zyre/Pyre in our application and it would be great if we
>>>> could expose the pings sent between peers to our application layer,
>>>> especially if one of the peers becomes unreachable.
>>>>
>>>> In the current Zyre implementation, in zyre_node.c it is only logged
>>>> with zsys, if in verbose mode. In zyre_node_ping_peerm you have:
>>>>
>>>> if (zclock_time () >= zyre_peer_evasive_at (peer)) {
>>>>          //  If peer is being evasive, force a TCP ping.
>>>>          //  TODO: do this only once for a peer in this state;
>>>>          //  it would be nicer to use a proper state machine
>>>>          //  for peer management.
>>>>          if (self->verbose)
>>>>              zsys_info ("(%s) peer seems dead/slow name=%s endpoint=%s",
>>>>                  self->name, zyre_peer_name (peer), zyre_peer_endpoint
>>>> (peer));
>>>>          zre_msg_t *msg = zre_msg_new (ZRE_MSG_PING);
>>>>          zyre_peer_send (peer, &msg);
>>>>
>>>>
>>>> How could we benefit from this peer management to either send an event
>>>> to our application (using zyre.c) or do we need to do the timing ourselves?
>>>>
>>>> Johan
>>>> _______________________________________________
>>>> zeromq-dev mailing list
>>>> zeromq-dev at lists.zeromq.org
>>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>> _______________________________________________
>>> zeromq-dev mailing list
>>> zeromq-dev at lists.zeromq.org
>>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>>
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>



More information about the zeromq-dev mailing list