Loading ChangeLog +2 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,8 @@ Changes in version 0.1.2.7-alpha - 2007-??-?? - Servers decline directory requests much more aggressively when - Servers decline directory requests much more aggressively when they're low on bandwidth. Otherwise they end up queueing more and they're low on bandwidth. Otherwise they end up queueing more and more directory responses, which can't be good for latency. more directory responses, which can't be good for latency. - Be willing to read or write on local connections (e.g. controller connections) even when the global rate limiting buckets are empty. o Minor bugfixes: o Minor bugfixes: - When computing clock skew from directory HTTP headers, consider what - When computing clock skew from directory HTTP headers, consider what Loading src/or/connection.c +17 −1 Original line number Original line Diff line number Diff line Loading @@ -1099,8 +1099,16 @@ retry_all_listeners(int force, smartlist_t *replaced_conns, extern int global_read_bucket, global_write_bucket; extern int global_read_bucket, global_write_bucket; /** Did our global write bucket run dry last second? If so, we are * likely to run dry again this second, so be stingy with the tokens * we just put in. */ static int global_write_bucket_empty_last_second = 0; static int global_write_bucket_empty_last_second = 0; /** Helper function to decide how many bytes out of <b>global_bucket</b> * we're willing to use for this transaction. <b>base</b> is the size * of a cell on the network; <b>priority</b> says whether we should * write many of them or just a few; and <b>conn_bucket</b> (if * non-negative) provides an upper limit for our answer. */ static int static int connection_bucket_round_robin(int base, int priority, connection_bucket_round_robin(int base, int priority, int global_bucket, int conn_bucket) int global_bucket, int conn_bucket) Loading Loading @@ -1142,6 +1150,10 @@ connection_bucket_read_limit(connection_t *conn) or_connection_t *or_conn = TO_OR_CONN(conn); or_connection_t *or_conn = TO_OR_CONN(conn); conn_bucket = or_conn->read_bucket; conn_bucket = or_conn->read_bucket; } } if (conn_is_internal(conn->addr, 0)) { /* be willing to read on local conns even if our buckets are empty */ return conn_bucket>=0 ? conn_bucket : 2**14; } return connection_bucket_round_robin(base, priority, return connection_bucket_round_robin(base, priority, global_read_bucket, conn_bucket); global_read_bucket, conn_bucket); } } Loading @@ -1154,6 +1166,10 @@ connection_bucket_write_limit(connection_t *conn) CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; int priority = conn->type != CONN_TYPE_DIR; int priority = conn->type != CONN_TYPE_DIR; if (conn_is_internal(conn->addr, 0)) { /* be willing to write to local conns even if our buckets are empty */ return conn->outbuf_flushlen; } return connection_bucket_round_robin(base, priority, global_write_bucket, return connection_bucket_round_robin(base, priority, global_write_bucket, conn->outbuf_flushlen); conn->outbuf_flushlen); } } Loading Loading @@ -1590,7 +1606,7 @@ connection_outbuf_too_full(connection_t *conn) * from connection_write_to_buf() when an entire TLS record is ready. * from connection_write_to_buf() when an entire TLS record is ready. * * * Update conn-\>timestamp_lastwritten to now, and call flush_buf * Update conn-\>timestamp_lastwritten to now, and call flush_buf * or flush_buf_tls appropriately. If it succeeds and there no more * or flush_buf_tls appropriately. If it succeeds and there are no more * more bytes on conn->outbuf, then call connection_finished_flushing * more bytes on conn->outbuf, then call connection_finished_flushing * on it too. * on it too. * * Loading Loading
ChangeLog +2 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,8 @@ Changes in version 0.1.2.7-alpha - 2007-??-?? - Servers decline directory requests much more aggressively when - Servers decline directory requests much more aggressively when they're low on bandwidth. Otherwise they end up queueing more and they're low on bandwidth. Otherwise they end up queueing more and more directory responses, which can't be good for latency. more directory responses, which can't be good for latency. - Be willing to read or write on local connections (e.g. controller connections) even when the global rate limiting buckets are empty. o Minor bugfixes: o Minor bugfixes: - When computing clock skew from directory HTTP headers, consider what - When computing clock skew from directory HTTP headers, consider what Loading
src/or/connection.c +17 −1 Original line number Original line Diff line number Diff line Loading @@ -1099,8 +1099,16 @@ retry_all_listeners(int force, smartlist_t *replaced_conns, extern int global_read_bucket, global_write_bucket; extern int global_read_bucket, global_write_bucket; /** Did our global write bucket run dry last second? If so, we are * likely to run dry again this second, so be stingy with the tokens * we just put in. */ static int global_write_bucket_empty_last_second = 0; static int global_write_bucket_empty_last_second = 0; /** Helper function to decide how many bytes out of <b>global_bucket</b> * we're willing to use for this transaction. <b>base</b> is the size * of a cell on the network; <b>priority</b> says whether we should * write many of them or just a few; and <b>conn_bucket</b> (if * non-negative) provides an upper limit for our answer. */ static int static int connection_bucket_round_robin(int base, int priority, connection_bucket_round_robin(int base, int priority, int global_bucket, int conn_bucket) int global_bucket, int conn_bucket) Loading Loading @@ -1142,6 +1150,10 @@ connection_bucket_read_limit(connection_t *conn) or_connection_t *or_conn = TO_OR_CONN(conn); or_connection_t *or_conn = TO_OR_CONN(conn); conn_bucket = or_conn->read_bucket; conn_bucket = or_conn->read_bucket; } } if (conn_is_internal(conn->addr, 0)) { /* be willing to read on local conns even if our buckets are empty */ return conn_bucket>=0 ? conn_bucket : 2**14; } return connection_bucket_round_robin(base, priority, return connection_bucket_round_robin(base, priority, global_read_bucket, conn_bucket); global_read_bucket, conn_bucket); } } Loading @@ -1154,6 +1166,10 @@ connection_bucket_write_limit(connection_t *conn) CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; int priority = conn->type != CONN_TYPE_DIR; int priority = conn->type != CONN_TYPE_DIR; if (conn_is_internal(conn->addr, 0)) { /* be willing to write to local conns even if our buckets are empty */ return conn->outbuf_flushlen; } return connection_bucket_round_robin(base, priority, global_write_bucket, return connection_bucket_round_robin(base, priority, global_write_bucket, conn->outbuf_flushlen); conn->outbuf_flushlen); } } Loading Loading @@ -1590,7 +1606,7 @@ connection_outbuf_too_full(connection_t *conn) * from connection_write_to_buf() when an entire TLS record is ready. * from connection_write_to_buf() when an entire TLS record is ready. * * * Update conn-\>timestamp_lastwritten to now, and call flush_buf * Update conn-\>timestamp_lastwritten to now, and call flush_buf * or flush_buf_tls appropriately. If it succeeds and there no more * or flush_buf_tls appropriately. If it succeeds and there are no more * more bytes on conn->outbuf, then call connection_finished_flushing * more bytes on conn->outbuf, then call connection_finished_flushing * on it too. * on it too. * * Loading