From 61905932565a8ff426981d77bf162f85e7f6c3ea Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Mon, 2 Apr 2018 01:00:31 -0400 Subject: [PATCH] use channel_is_client for create cell counts When a relay is collecting internal statistics about how many create cell requests it has seen of each type, accurately count the requests from relays that temporarily fall out of the consensus. (To be extra conservative, we were already ignoring requests from clients in our counts, and we continue ignoring them here.) Fixes bug 24910; bugfix on 0.2.4.17-rc. --- changes/bug24910 | 7 +++++++ src/or/command.c | 4 +++- src/or/cpuworker.c | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 changes/bug24910 diff --git a/changes/bug24910 b/changes/bug24910 new file mode 100644 index 0000000000..58574c0069 --- /dev/null +++ b/changes/bug24910 @@ -0,0 +1,7 @@ + o Minor bugfixes (relay statistics): + - When a relay is collecting internal statistics about how many + create cell requests it has seen of each type, accurately count the + requests from relays that temporarily fall out of the consensus. (To + be extra conservative, we were already ignoring requests from + clients in our counts, and we continue ignoring them here.) Fixes + bug 24910; bugfix on 0.2.4.17-rc. diff --git a/src/or/command.c b/src/or/command.c index 7280be1396..4f99462f38 100644 --- a/src/or/command.c +++ b/src/or/command.c @@ -339,7 +339,9 @@ command_process_create_cell(cell_t *cell, channel_t *chan) return; } - if (connection_or_digest_is_known_relay(chan->identity_digest)) { + if (!channel_is_client(chan)) { + /* remember create types we've seen, but don't remember them from + * clients, to be extra conservative about client statistics. */ rep_hist_note_circuit_handshake_requested(create_cell->handshake_type); } diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c index 50761dd4d3..7da7dc5f8b 100644 --- a/src/or/cpuworker.c +++ b/src/or/cpuworker.c @@ -547,7 +547,7 @@ assign_onionskin_to_cpuworker(or_circuit_t *circ, return 0; } - if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest)) + if (!channel_is_client(circ->p_chan)) rep_hist_note_circuit_handshake_assigned(onionskin->handshake_type); should_time = should_time_request(onionskin->handshake_type);