From 32ec378e3b5e9c584d45c7316142c73c362dd032 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 9 Nov 2015 18:01:23 -0800 Subject: Announce that we have peers on the cluster when we first see them to improve startup times, and add a result crunching script to tests/http. --- node/Cluster.cpp | 11 +++++++++++ node/Cluster.hpp | 9 +++++++++ node/Peer.cpp | 5 +++++ 3 files changed, 25 insertions(+) (limited to 'node') diff --git a/node/Cluster.cpp b/node/Cluster.cpp index a819372e..ab074b6d 100644 --- a/node/Cluster.cpp +++ b/node/Cluster.cpp @@ -363,6 +363,17 @@ void Cluster::handleIncomingStateMessage(const void *msg,unsigned int len) } } +void Cluster::broadcastHavePeer(const Identity &id) +{ + Buffer<1024> buf; + id.serialize(buf); + Mutex::Lock _l(_memberIds_m); + for(std::vector::const_iterator mid(_memberIds.begin());mid!=_memberIds.end();++mid) { + Mutex::Lock _l2(_members[*mid].lock); + _send(*mid,CLUSTER_MESSAGE_HAVE_PEER,buf.data(),buf.size()); + } +} + void Cluster::sendViaCluster(const Address &fromPeerAddress,const Address &toPeerAddress,const void *data,unsigned int len,bool unite) { if (len > ZT_PROTO_MAX_PACKET_LENGTH) // sanity check diff --git a/node/Cluster.hpp b/node/Cluster.hpp index 1c4331b4..6a7cf7ad 100644 --- a/node/Cluster.hpp +++ b/node/Cluster.hpp @@ -244,6 +244,15 @@ public: */ void handleIncomingStateMessage(const void *msg,unsigned int len); + /** + * Broadcast that we have a given peer + * + * This should be done when new peers are first contacted. + * + * @param id Identity of peer + */ + void broadcastHavePeer(const Identity &id); + /** * Send this packet via another node in this cluster if another node has this peer * diff --git a/node/Peer.cpp b/node/Peer.cpp index de6f00c2..d728cf4c 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -187,6 +187,11 @@ void Peer::received( _sortPaths(now); } +#ifdef ZT_ENABLE_CLUSTER + if ((RR->cluster)&&(!suboptimalPath)) + RR->cluster->broadcastHavePeer(_id); +#endif + } else { /* If this path is not known, send a HELLO. We don't learn -- cgit v1.2.3