summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-04-28 21:15:14 -0400
committerNick Mathewson <nickm@torproject.org>2011-04-28 21:15:14 -0400
commitf0d9e2d6507adcc069b38cd9e0aaf6702f576314 (patch)
treef1b92172fbe67fade7a1484316d6f707d8e6d449
parent4010427b519c3727351905bbe5a75e85a055dd58 (diff)
parent66de6f7eb8e2948f6c3849dbca20c7b31969b5b7 (diff)
downloadtor-f0d9e2d6507adcc069b38cd9e0aaf6702f576314.tar.gz
tor-f0d9e2d6507adcc069b38cd9e0aaf6702f576314.zip
Merge remote-tracking branch 'arma/bug3012' into maint-0.2.2
-rw-r--r--changes/bug30125
-rw-r--r--src/or/config.c11
2 files changed, 15 insertions, 1 deletions
diff --git a/changes/bug3012 b/changes/bug3012
new file mode 100644
index 0000000000..dfde5fa90c
--- /dev/null
+++ b/changes/bug3012
@@ -0,0 +1,5 @@
+ o Minor features:
+ - Relays can go for weeks without writing out their state file. A
+ relay that crashes would lose its bandwidth history (including
+ capacity estimate), client country statistics, and so on. Now relays
+ checkpoint the file at least every 12 hours. Addresses bug 3012.
diff --git a/src/or/config.c b/src/or/config.c
index 7534cc7f69..867182224f 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -5134,6 +5134,11 @@ did_last_state_file_write_fail(void)
/** If writing the state to disk fails, try again after this many seconds. */
#define STATE_WRITE_RETRY_INTERVAL 3600
+/** If we're a relay, how often should we checkpoint our state file even
+ * if nothing else dirties it? This will checkpoint ongoing stats like
+ * bandwidth used, per-country user stats, etc. */
+#define STATE_RELAY_CHECKPOINT_INTERVAL (12*60*60)
+
/** Write the persistent state to disk. Return 0 for success, <0 on failure. */
int
or_state_save(time_t now)
@@ -5186,7 +5191,11 @@ or_state_save(time_t now)
tor_free(fname);
tor_free(contents);
- global_state->next_write = TIME_MAX;
+ if (server_mode(get_options()))
+ global_state->next_write = now + STATE_RELAY_CHECKPOINT_INTERVAL;
+ else
+ global_state->next_write = TIME_MAX;
+
return 0;
}