chiark / gitweb /
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 39520dd4f8059b67355745ea64ed9ea288aa6cdf..681e595a4c1e64ab97a50d21a250f57841b31500 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;