Browse Source

Replace files in stats/ rather than appending to them.

Right now, we append statistics to files in the stats/ directory for
half of the statistics, whereas we overwrite these files for the other
half. In particular, we append buffer, dirreq, and entry stats and
overwrite exit, connection, and bridge stats.

Appending to files was useful when we didn't include stats in extra-info
descriptors, because otherwise we'd have to copy them away to prevent
Tor from overwriting them.

But now that we include statistics in extra-info descriptors, it makes
no sense to keep the old statistics forever. We should change the
behavior to overwriting instead of appending for all statistics.

Implements #2930.
Karsten Loesing 13 years ago
parent
commit
a6a127c833
3 changed files with 8 additions and 3 deletions
  1. 5 0
      changes/bug2930
  2. 2 2
      src/or/geoip.c
  3. 1 1
      src/or/rephist.c

+ 5 - 0
changes/bug2930

@@ -0,0 +1,5 @@
+  o Minor features:
+    - Replace files in stats/ rather than appending to them.  Now that we
+      include statistics in extra-info descriptors, it makes no sense to
+      keep old statistics forever.  Implements #2930.
+

+ 2 - 2
src/or/geoip.c

@@ -996,7 +996,7 @@ geoip_dirreq_stats_write(time_t now)
   data_v2 = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
   data_v3 = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS);
   format_iso_time(written, now);
-  out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND | O_TEXT,
+  out = start_writing_to_stdio_file(filename, OPEN_FLAGS_REPLACE | O_TEXT,
                                     0600, &open_file);
   if (!out)
     goto done;
@@ -1329,7 +1329,7 @@ geoip_entry_stats_write(time_t now)
   filename = get_datadir_fname2("stats", "entry-stats");
   data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
   format_iso_time(written, now);
-  out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND | O_TEXT,
+  out = start_writing_to_stdio_file(filename, OPEN_FLAGS_REPLACE | O_TEXT,
                                     0600, &open_file);
   if (!out)
     goto done;

+ 1 - 1
src/or/rephist.c

@@ -2490,7 +2490,7 @@ rep_hist_buffer_stats_write(time_t now)
   if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0)
     goto done;
   filename = get_datadir_fname2("stats", "buffer-stats");
-  out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND | O_TEXT,
+  out = start_writing_to_stdio_file(filename, OPEN_FLAGS_REPLACE | O_TEXT,
                                     0600, &open_file);
   if (!out)
     goto done;