Commit 6bfa96bf authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Fix bug noted by roger: rebuild extrainfo store from time to time, even if we...

Fix bug noted by roger: rebuild extrainfo store from time to time, even if we have never actually downloaded an extrainfo.  Bridge authorities need this, or they never clean the extrainfo store.

svn:r14792
parent 932ef054
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@ Changes in version 0.2.1.1-alpha - 2008-??-??
    - When tunneling an encrypted directory connection, and its first circuit
      fails do not leave it unattached and ask the controller to deal.  Fixes
      the second part of bug 681.
    - Make bridge authorities correctly clean extrainfo store from time to
      time.  Bugfix on 0.2.0.x.

  o Minor features:
    - Allow separate log levels to be configured for different logging
+13 −6
Original line number Diff line number Diff line
@@ -559,15 +559,18 @@ _compare_signed_descriptors_by_age(const void **_a, const void **_b)
  return (int)(r1->published_on - r2->published_on);
}

/** If the journal is too long, or if <b>force</b> is true, then atomically
 * replace the router store with the routers currently in our routerlist, and
 * clear the journal.  Return 0 on success, -1 on failure.
#define RRS_FORCE 1
#define RRS_DONT_REMOVE_OLD 2

/** If the journal is too long, or if RRS_FORCE is set in <b>flags</b>, then
 * atomically replace the router store with the routers currently in our
 * routerlist, and clear the journal.  Return 0 on success, -1 on failure.
 *
 * If <b>extrainfo</b> is true, rebuild the extrainfo store; else rebuild the
 * router descriptor store.
 */
static int
router_rebuild_store(int force, desc_store_t *store)
router_rebuild_store(int flags, desc_store_t *store)
{
  smartlist_t *chunk_list = NULL;
  char *fname = NULL, *fname_tmp = NULL;
@@ -577,6 +580,7 @@ router_rebuild_store(int force, desc_store_t *store)
  int nocache=0;
  size_t total_expected_len = 0;
  int had_any;
  int force = flags & RRS_FORCE;

  if (!force && !router_should_rebuild_store(store))
    return 0;
@@ -590,6 +594,7 @@ router_rebuild_store(int force, desc_store_t *store)
               smartlist_len(routerlist->old_routers))>0;

  /* Don't save deadweight. */
  if (!(flags & RRS_DONT_REMOVE_OLD))
    routerlist_remove_old_routers();

  log_info(LD_DIR, "Rebuilding %s cache", store->description);
@@ -781,7 +786,7 @@ router_reload_router_list_impl(desc_store_t *store)

  if (store->journal_len || read_from_old_location) {
    /* Always clear the journal on startup.*/
    router_rebuild_store(1, store);
    router_rebuild_store(RRS_FORCE, store);
  } else if (!extrainfo) {
    /* Don't cache expired routers. (This is in an else because
     * router_rebuild_store() also calls remove_old_routers().) */
@@ -3193,6 +3198,8 @@ routerlist_remove_old_routers(void)

 done:
  digestset_free(retain);
  router_rebuild_store(RRS_DONT_REMOVE_OLD, &routerlist->desc_store);
  router_rebuild_store(RRS_DONT_REMOVE_OLD,&routerlist->extrainfo_store);
}

/** We just added a new set of descriptors. Take whatever extra steps