It seems like we have a bug after we updated our connectiong tracking code to track incoming connections earlier. We don't handle the transport name parameter of our eager call to geoip_note_client_seen().
@trinity-1686a may potentially have a patch for this. I think it would be good if we could get some testing on this before we merge it.
Would you be up for running your Tor instance with a patch that potentially fixes this issue, @dcf ?
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items 0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
Linked items 0
Link issues together to show that they're related.
Learn more.
I'll make a merge request of it once I've seen it does indeed fix the issue. It's currently deployed on 2BFC64E5E97508554BFAF52B03C5044385861209, which has a firewalled ORPort, and enough clients that I should be able to see the result once the stats gets updated
Reducing the number of unique IP addresses by half is what I would expect. Currently every unique IP address is being double-counted; with the fix each one is only counted once. I'm a little surprised that it extends even to bridge-ips and bridge-ip-versions, but I can imagine how that might happen.
Note that user count estimates come from counting directory requests, not unique IP addresses. bridge-ip-transports doesn't influence the estimate of the number of users. The total number of users, rather, comes from the "ok" part of dirreq-v3-resp. If you look at the before-and-after of dirreq-v3-resp, you will probably not see a 50% change. The only effect of bridge-ip-transports is deciding what fractions of the total number of users should be attributed to each transport. Only the ratio of transports in bridge-ip-transports matters, not the absolute numbers.
Parse successful requests from the "ok" part of the "dirreq-v3-resp" line, subtract 4 to undo the binning operation that has been applied by the bridge, and discard the resulting number if it's zero or negative. ... Bridges do not report directory requests by transport or IP version. We approximate these numbers by multiplying the total number of requests with the fraction of unique IP addresses by transport or IP version.
Someone who knows the code better than me should confirm, but I don't think there is a double-counting in either case. Before my patch, we would count a connection either early (in channeltls.c), and with the wrong transport, or late (in channel.c), and with the right transport, but not both. And with the patch, we count with the right transport both on the early and late codepath.
If you look at the before-and-after of dirreq-v3-resp, you will probably not see a 50% change.
I don't know, it looks like double counting in bridge-ip-transports to me: once with the proper transport, once with a null transport.
Otherwise why would the split be so close to 50/50? "With the patch, we count with the right transport both on the early and late codepath": that makes sense, because bridge-ip-tranports counts unique IP addresses (not connections); the same IP address seen twice with the same transport would be deduplicated and only count as one.
Here's the history of one of the tor instances on the snowflake-01 bridge
before and after the upgrade at 2023-10-03 23:00.
See how the snowflake count remains steady, while <OR> rises up
to become approximately equal to it:
published
<OR>
snowflake
2023-10-01 13:36:42
4
24996
2023-10-02 14:36:43
4
25276
2023-10-03 13:36:43
4
25260
2023-10-04 15:24:09
4
25692
2023-10-06 05:09:20
28092
27316
2023-10-07 05:17:28
26732
25972
2023-10-08 05:27:34
27324
26572
2023-10-09 04:04:42
28284
27500
I got these numbers from the intermediate data file (not versioned) transport_ips/bridge-extra-infos-2023-10.transport_ips.csv in snowflake-graphs.