site: transport peers update: avoid nearly-trivial debug
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 17 May 2019 22:10:03 +0000 (23:10 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 18 May 2019 01:11:53 +0000 (02:11 +0100)
When the order of peers changes, but not the total set, we probably
don't want to log it.  Actually comparing the before and after lists
setwise is rather too hard.  But we can do it fairly easily when
there's only one peer being recorded.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
---
v2: New patch

site.c

diff --git a/site.c b/site.c
index 39520dd..681e595 100644 (file)
--- a/site.c
+++ b/site.c
@@ -2262,11 +2262,18 @@ static void transport_record_peers(struct site *st, transport_peers *peers,
      *
      * Caller must first call transport_peers_expire. */
 
-    if (naddrs==1 && peers->npeers>=1 &&
-       comm_addr_equal(&addrs[0], &peers->peers[0].addr)) {
-       /* optimisation, also avoids debug for trivial updates */
-       peers->peers[0].last = *tv_now;
-       return;
+    if (naddrs==1) {
+       /* avoids debug for uninteresting updates */
+       int i;
+       for (i=0; i<peers->npeers; i++) {
+           if (comm_addr_equal(&addrs[0], &peers->peers[i].addr)) {
+               memmove(peers->peers+1, peers->peers,
+                       sizeof(peers->peers[0]) * i);
+               peers->peers[0].addr = addrs[0];
+               peers->peers[0].last = *tv_now;
+               return;
+           }
+       }
     }
 
     int old_npeers=peers->npeers;