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

Johan Philips johan.philips at kuleuven.be
Wed Sep 2 12:42:20 CEST 2015



On 2015-09-02 12:09, Johan Philips wrote:
>
>
> On 2015-09-02 09:32, Pieter Hintjens wrote:
>> This could be done, with a new event.

I've added an EVASIVE event, which works fine for our use case at the 
moment. Thanks for making your software so easy to read and adapt! :-)

Here's the minimal change, I had to make:

diff --git a/src/zyre_node.c b/src/zyre_node.c
index c98eec3..a8a6ccc 100644
--- a/src/zyre_node.c
+++ b/src/zyre_node.c
@@ -848,6 +848,10 @@ zyre_node_ping_peer (const char *key, void *item, 
void *argument)
                  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);
+        // Inform the calling application this peer is being evasive
+       zstr_sendm (self->outbox, "EVASIVE");
+       zstr_sendm (self->outbox, zyre_peer_identity (peer));
+       zstr_send (self->outbox, zyre_peer_name (peer));
      }
      return 0;
  }


>> 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
>>
> _______________________________________________
> 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