[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'",