Skip to content
  • Roger Dingledine's avatar
    fetch missing bridge descriptors without delay · d66549c2
    Roger Dingledine authored
    Without this change, if we have a working bridge, and we add a new bridge,
    we will schedule the fetch attempt for that new bridge descriptor for
    three hours(!) in the future.
    
    This change is especially needed because of bug #40396, where if you have
    one working bridge and one bridge whose descriptor you haven't fetched
    yet, your Tor will stall until you have successfully fetched that new
    descriptor -- in this case for hours.
    
    In the old design, we would put off all further bridge descriptor fetches
    once we had any working bridge descriptor. In this new design, we make the
    decision per bridge based on whether we successfully got *its* descriptor.
    
    To make this work, we need to also call learned_bridge_descriptor() every
    time we get a bridge descriptor, not just when it's a novel descriptor.
    
    Fixes bug 40396.
    
    Also happens to fix bug 40495 (redundant descriptor fetches for every
    bridge) since now we delay fetches once we succeed.
    
    A side effect of this change is that if we have any configured bridges
    that *aren't* working, we will keep trying to fetch their descriptors
    on the modern directory retry schedule -- every couple of seconds for
    the first half minute, then backing off after that -- which is a lot
    faster than before.
    d66549c2