summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@fscked.org>2010-06-15 18:02:19 -0700
committerMike Perry <mikeperry-git@fscked.org>2010-06-15 20:04:49 -0700
commit2abe1ceccfacaa8deca3b7bb4caeb550572efd7f (patch)
tree121a7b7ab45ff3c0f7e9b40d4cd53921e5492e0d
parent82922ea45a24e7f79ac4c1ddf4d9de02c604546d (diff)
downloadtor-2abe1ceccfacaa8deca3b7bb4caeb550572efd7f.tar.gz
tor-2abe1ceccfacaa8deca3b7bb4caeb550572efd7f.zip
Add CLOSE_MS and CLOSE_RATE keywords to buildtimeout event.
-rw-r--r--doc/spec/control-spec.txt8
-rw-r--r--src/or/circuitbuild.c19
-rw-r--r--src/or/control.c6
-rw-r--r--src/or/or.h1
4 files changed, 30 insertions, 4 deletions
diff --git a/doc/spec/control-spec.txt b/doc/spec/control-spec.txt
index 1938fa226c..419db3a715 100644
--- a/doc/spec/control-spec.txt
+++ b/doc/spec/control-spec.txt
@@ -1670,14 +1670,18 @@
The syntax is:
"650" SP "BUILDTIMEOUT_SET" SP Type SP "TOTAL_TIMES=" Total SP
"TIMEOUT_MS=" Timeout SP "XM=" Xm SP "ALPHA=" Alpha SP
- "CUTOFF_QUANTILE=" Quantile SP "TIMEOUT_RATE=" Rate CRLF
+ "CUTOFF_QUANTILE=" Quantile SP "TIMEOUT_RATE=" TimeoutRate SP
+ "CLOSE_MS=" CloseTimeout SP "CLOSE_RATE=" CloseRate
+ CRLF
Type = "COMPUTED" / "RESET" / "SUSPENDED" / "DISCARD" / "RESUME"
Total = Integer count of timeouts stored
Timeout = Integer timeout in milliseconds
Xm = Estimated integer Pareto parameter Xm in milliseconds
Alpha = Estimated floating point Paredo paremter alpha
Quantile = Floating point CDF quantile cutoff point for this timeout
- Rate = Floating point ratio of circuits that timeout
+ TimeoutRate = Floating point ratio of circuits that timeout
+ CloseTimeout = How long to keep measurement circs in milliseconds
+ CloseRate = Floating point ratio of measurement circuits that are closed
A new circuit build timeout time has been set. If Type is "COMPUTED",
Tor has computed the value based on historical data. If Type is "RESET",
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index f244aeaff0..ddc7da4b38 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -1089,6 +1089,25 @@ circuit_build_times_timeout_rate(const circuit_build_times_t *cbt)
}
/**
+ * Count the number of closed circuits in a set of cbt data.
+ */
+double
+circuit_build_times_close_rate(const circuit_build_times_t *cbt)
+{
+ int i=0,closed=0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) {
+ closed++;
+ }
+ }
+
+ if (!cbt->total_build_times)
+ return 0;
+
+ return ((double)closed)/cbt->total_build_times;
+}
+
+/**
* Store a timeout as a synthetic value.
*
* Returns true if the store was successful and we should possibly
diff --git a/src/or/control.c b/src/or/control.c
index b5cc6c7b6d..8cfebe6477 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -3530,11 +3530,13 @@ control_event_buildtimeout_set(const circuit_build_times_t *cbt,
send_control_event(EVENT_BUILDTIMEOUT_SET, ALL_FORMATS,
"650 BUILDTIMEOUT_SET %s TOTAL_TIMES=%lu "
"TIMEOUT_MS=%lu XM=%lu ALPHA=%lf CUTOFF_QUANTILE=%lf "
- "TIMEOUT_RATE=%lf\r\n",
+ "TIMEOUT_RATE=%lf CLOSE_MS=%lu CLOSE_RATE=%lf\r\n",
type_string, (unsigned long)cbt->total_build_times,
(unsigned long)cbt->timeout_ms,
(unsigned long)cbt->Xm, cbt->alpha, qnt,
- circuit_build_times_timeout_rate(cbt));
+ circuit_build_times_timeout_rate(cbt),
+ (unsigned long)cbt->close_ms,
+ circuit_build_times_close_rate(cbt));
return 0;
}
diff --git a/src/or/or.h b/src/or/or.h
index cd6841522b..65468cfe38 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3173,6 +3173,7 @@ void circuit_build_times_init(circuit_build_times_t *cbt);
void circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
networkstatus_t *ns);
double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt);
+double circuit_build_times_close_rate(const circuit_build_times_t *cbt);
#ifdef CIRCUIT_PRIVATE
double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,