summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-02-21 03:38:46 +0000
committerNick Mathewson <nickm@torproject.org>2008-02-21 03:38:46 +0000
commit1df0647c668645268b1b9c0246b91cad709e3708 (patch)
tree5665c29c7daa5aaee70dc18d33019e9fd576346e
parent7b022eda9c43c897e50c3b03a8201c132f76229c (diff)
downloadtor-1df0647c668645268b1b9c0246b91cad709e3708.tar.gz
tor-1df0647c668645268b1b9c0246b91cad709e3708.zip
r18291@catbus: nickm | 2008-02-20 22:35:32 -0500
Resolve all DOCDOC issues, and document some other undocumented code, and fix a changelog entry. svn:r13638
-rw-r--r--ChangeLog6
-rw-r--r--src/common/compat.c5
-rw-r--r--src/common/compat.h3
-rw-r--r--src/or/config.c2
-rw-r--r--src/or/connection_edge.c2
-rw-r--r--src/or/dirserv.c35
-rw-r--r--src/or/main.c5
7 files changed, 37 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index f3feac32d2..a771ba0b0f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,9 +14,9 @@ Changes in version 0.2.0.20-?? - 2008-02-??
by nwf; bugfix on 0.1.2.x.
- When counting the number of open sockets, count not only the number
of sockets we have received from the socket() call, but also the
- number we've gotten from accept(). This bug made us fail to count
- all sockets that we were using for incoming connections. Bugfix on
- 0.2.0.x
+ number we've gotten from accept() and socketpair(). This bug made us
+ fail to count all sockets that we were using for incoming
+ connections. Bugfix on 0.2.0.x.
- Fix code used to find strings within buffers, when those strings
are not in the first chunk of the buffer.
- Fix potential segfault when parsing HTTP headers. Bugfix on 0.2.0.x.
diff --git a/src/common/compat.c b/src/common/compat.c
index cb88864f27..f789b8310d 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -489,7 +489,10 @@ touch_file(const char *fname)
#undef DEBUG_SOCKET_COUNTING
#ifdef DEBUG_SOCKET_COUNTING
+/** A bitarray of all fds that should be passed to tor_socket_close(). Only
+ * used if DEBUG_SOCKET_COUNTING is defined. */
static bitarray_t *open_sockets = NULL;
+/** The size of <b>open_sockets</b>, in bits. */
static int max_socket = -1;
#endif
@@ -547,6 +550,8 @@ tor_close_socket(int s)
}
#ifdef DEBUG_SOCKET_COUNTING
+/** Helper: if DEBUG_SOCKET_COUNTING is enabled, remember that <b>s</b> is
+ * now an open socket. */
static INLINE void
mark_socket_open(int s)
{
diff --git a/src/common/compat.h b/src/common/compat.h
index 0d6fd87dde..3ac38d7dac 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -331,7 +331,8 @@ struct sockaddr_in6 {
typedef uint8_t maskbits_t;
struct in_addr;
-/** DOCDOC */
+/** Holds an IPv4 or IPv6 address. (Uses less memory than struct
+ * sockaddr_storage.) */
typedef struct tor_addr_t
{
sa_family_t family;
diff --git a/src/or/config.c b/src/or/config.c
index 5903d25b15..b838eadc3e 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -2446,7 +2446,7 @@ options_init(or_options_t *options)
config_init(&options_format, options);
}
-/* Set all vars in the configuration object 'options' to their default
+/** Set all vars in the configuration object 'options' to their default
* values. */
static void
config_init(config_format_t *fmt, void *options)
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 6c6850d04d..a36e7cbe66 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -2593,7 +2593,7 @@ connection_exit_connect(edge_connection_t *edge_conn)
* conn, and join them together. Return 0 on success (or if there was an
* error we could send back an end cell for). Return -(some circuit end
* reason) if the circuit needs to be torn down. Either connects
- * <b>exitconn<b/>, frees it, or marks it, as appropriate.
+ * <b>exitconn</b>, frees it, or marks it, as appropriate.
*/
static int
connection_exit_connect_dir(edge_connection_t *exitconn)
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 48e7508612..a3e7bcf5db 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -1614,6 +1614,7 @@ should_generate_v2_networkstatus(void)
/* Thresholds for server performance: set by
* dirserv_compute_performance_thresholds, and used by
* generate_v2_networkstatus */
+/* XXXX stick these all in a struct. */
static uint32_t stable_uptime = 0; /* start at a safe value */
static double stable_mtbf = 0.0;
static int enough_mtbf_info = 0;
@@ -1687,12 +1688,14 @@ dirserv_thinks_router_is_hs_dir(routerinfo_t *router, time_t now)
router->is_running);
}
-/** Look through the routerlist, and assign the median uptime of running valid
- * servers to stable_uptime, and the relative bandwidth capacities to
- * fast_bandwidth and guard_bandwidth. Set total_bandwidth to the total
- * capacity of all running valid servers and total_exit_bandwidth to the
- * capacity of all running valid exits. Set the is_exit flag of each router
- * appropriately. */
+/** Look through the routerlist, the Mean Time Between Failure history, and
+ * the Weighted Fractional Uptime history, and use them to set thresholds for
+ * the Stable, Fast, and Guard flags. Update the fields stable_uptime,
+ * stable_mtbf, enough_mtbf_info, guard_wfu, guard_tk, fast_bandwidth,
+ * guard_bandwidh_including_exits, guard_bandwidth_excluding_exits,
+ * total_bandwidth, and total_exit_bandwidth.
+ *
+ * Also, set the is_exit flag of each router appropriately. */
static void
dirserv_compute_performance_thresholds(routerlist_t *rl)
{
@@ -1702,8 +1705,6 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
double *mtbfs, *wfus;
time_t now = time(NULL);
- /* DOCDOC this is a litle tricky; comment this function better. */
-
/* initialize these all here, in case there are no routers */
stable_uptime = 0;
stable_mtbf = 0;
@@ -1712,19 +1713,27 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
guard_bandwidth_excluding_exits = 0;
guard_tk = 0;
guard_wfu = 0;
-
total_bandwidth = 0;
total_exit_bandwidth = 0;
+ /* Initialize arrays that will hold values for each router. We'll
+ * sort them and use that to compute thresholds. */
n_active = n_active_nonexit = 0;
+ /* Uptime for every active router. */
uptimes = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
+ /* Bandwidth for every active router. */
bandwidths = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
+ /* Bandwidth for every active non-exit router. */
bandwidths_excluding_exits =
tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
+ /* Weighted mean time between failure for each active router. */
mtbfs = tor_malloc(sizeof(double)*smartlist_len(rl->routers));
+ /* Time-known for each active router. */
tks = tor_malloc(sizeof(long)*smartlist_len(rl->routers));
+ /* Weighted fractional uptime for each active router. */
wfus = tor_malloc(sizeof(double)*smartlist_len(rl->routers));
+ /* Now, fill in the arrays. */
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, {
if (router_is_active(ri, now)) {
const char *id = ri->cache_info.identity_digest;
@@ -1745,11 +1754,15 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
}
});
+ /* Now, compute thresholds. */
if (n_active) {
+ /* The median uptime is stable. */
stable_uptime = median_uint32(uptimes, n_active);
+ /* The median mtbf is stable, if we have enough mtbf info */
stable_mtbf = median_double(mtbfs, n_active);
+ /* The 12.5th percentile bandwidth is fast. */
fast_bandwidth = find_nth_uint32(bandwidths, n_active, n_active/8);
- /* Now bandwidths is sorted. */
+ /* (Now bandwidths is sorted.) */
if (fast_bandwidth < ROUTER_REQUIRED_MIN_BANDWIDTH)
fast_bandwidth = bandwidths[n_active/4];
guard_bandwidth_including_exits = bandwidths[(n_active-1)/2];
@@ -1762,6 +1775,8 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
if (fast_bandwidth > BANDWIDTH_TO_GUARANTEE_FAST)
fast_bandwidth = BANDWIDTH_TO_GUARANTEE_FAST;
+ /* Now that we have a time-known that 7/8 routers are known longer than,
+ * fill wfus with the wfu of every such "familiar" router. */
n_familiar = 0;
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, {
if (router_is_active(ri, now)) {
diff --git a/src/or/main.c b/src/or/main.c
index 53d8adad30..eb0e438dd0 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1473,11 +1473,6 @@ do_main_loop(void)
continue;
}
}
-
- /* refilling buckets and sending cells happens at the beginning of the
- * next iteration of the loop, inside prepare_for_poll()
- * DOCDOC No longer so; fix comment.
- */
}
}