[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r9176: More changes wrt unnecessary disk writes. (in tor/trunk: . doc src/or)



Author: nickm
Date: 2006-12-23 22:06:03 -0500 (Sat, 23 Dec 2006)
New Revision: 9176

Modified:
   tor/trunk/
   tor/trunk/ChangeLog
   tor/trunk/doc/TODO
   tor/trunk/src/or/hibernate.c
   tor/trunk/src/or/router.c
Log:
 r11686@Kushana:  nickm | 2006-12-23 22:05:57 -0500
 More changes wrt unnecessary disk writes.



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r11686] on c95137ef-5f19-0410-b913-86e773d04f59

Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog	2006-12-24 02:45:53 UTC (rev 9175)
+++ tor/trunk/ChangeLog	2006-12-24 03:06:03 UTC (rev 9176)
@@ -43,7 +43,8 @@
       dirserver has given us a 503, we try not to use it until an hour
       has gone by, or until we have no dirservers that haven't given us
       a 503.
-    - The state file gets saved less often when AvoidDiskWrites is set.
+    - The state file and the bw_accounting file get saved less often when
+      AvoidDiskWrites is set.
     - We no longer look for identity and onion keys in "identity.key" and
       "onion.key" -- these were replaced by secret_id_key and
       secret_onion_key in 0.0.8pre1.
@@ -90,6 +91,8 @@
       user fix resolv.conf or specify nameservers explicitly. (Resolves
       bug 363.)
     - Stop accepting certain malformed ports in configured exit policies.
+    - Don't re-write the fingerprint file every restart, unless it has
+      changed.
 
   o Controller features:
     - Have GETINFO dir/status/* work on hosts with DirPort disabled.

Modified: tor/trunk/doc/TODO
===================================================================
--- tor/trunk/doc/TODO	2006-12-24 02:45:53 UTC (rev 9175)
+++ tor/trunk/doc/TODO	2006-12-24 03:06:03 UTC (rev 9176)
@@ -150,14 +150,14 @@
       - update dir-spec with what we decided for each of these
 
 
-Nd- Have a mode that doesn't write to disk much, so we can run Tor on
+  o Have a mode that doesn't write to disk much, so we can run Tor on
     flash memory (e.g. Linksys routers or USB keys).
     o Add AvoidDiskWrites config option.
-    . only write state file when it's "changed"
+    o only write state file when it's "changed"
       o crank up the numbers if avoiddiskwrites is on.
-      - some things may not want to get written at all.
-    - stop writing identity key / fingerprint / etc every restart
-    - more?
+      D some things may not want to get written at all.
+    o stop writing fingerprint every restart
+    D more?
 
 NR. Write path-spec.txt
 

Modified: tor/trunk/src/or/hibernate.c
===================================================================
--- tor/trunk/src/or/hibernate.c	2006-12-24 02:45:53 UTC (rev 9175)
+++ tor/trunk/src/or/hibernate.c	2006-12-24 03:06:03 UTC (rev 9176)
@@ -544,6 +544,7 @@
   time_t tmp;
   int r;
   uint64_t expected;
+  static time_t last_recorded;
 
   /* First, update bw_accounting. Until 0.1.2.5-x, this was the only place
    * we stored this information. The format is:
@@ -572,7 +573,10 @@
                (unsigned long)expected);
   tor_snprintf(fname, sizeof(fname), "%s/bw_accounting",
                get_options()->DataDirectory);
-  r = write_str_to_file(fname, buf, 0);
+  if (!get_options()->AvoidDiskWrites || (last_recorded + 3600 < now)) {
+    r = write_str_to_file(fname, buf, 0);
+    last_recorded = now;
+  }
 
   /* Now update the state */
   state->AccountingIntervalStart = interval_start_time;

Modified: tor/trunk/src/or/router.c
===================================================================
--- tor/trunk/src/or/router.c	2006-12-24 02:45:53 UTC (rev 9175)
+++ tor/trunk/src/or/router.c	2006-12-24 03:06:03 UTC (rev 9176)
@@ -231,6 +231,7 @@
   const char *mydesc, *datadir;
   crypto_pk_env_t *prkey;
   char digest[20];
+  char *cp;
   or_options_t *options = get_options();
   or_state_t *state = get_or_state();
 
@@ -335,10 +336,17 @@
     log_err(LD_GENERAL,"Error writing fingerprint line");
     return -1;
   }
-  if (write_str_to_file(keydir, fingerprint_line, 0)) {
-    log_err(LD_FS, "Error writing fingerprint line to file");
-    return -1;
+  /* Check whether we need to write the fingerprint file. */
+  cp = NULL;
+  if (file_status(keydir) == FN_FILE)
+    cp = read_str_to_file(keydir, 0, NULL);
+  if (!cp && strcmp(cp, fingerprint_line)) {
+    if (write_str_to_file(keydir, fingerprint_line, 0)) {
+      log_err(LD_FS, "Error writing fingerprint line to file");
+      return -1;
+    }
   }
+  tor_free(cp);
 
   log(LOG_NOTICE, LD_GENERAL,
       "Your Tor server's identity key fingerprint is '%s %s'",