various fastrouter fixes

This commit is contained in:
roberto@mishmash
2012-02-29 10:14:44 +01:00
parent 24e3fea334
commit 3c6de0e84d
3 changed files with 67 additions and 6 deletions
+49
View File
@@ -0,0 +1,49 @@
[uwsgi]
xml = false
ini = true
yaml = false
json = false
sqlite3 = false
zeromq = false
snmp = false
sctp = false
spooler = true
embedded = true
udp = true
multicast = false
threading = true
sendfile = true
minterpreters = true
async = true
evdis = false
ldap = false
pcre = true
routing = true
debug = false
unbit = false
xml_implementation = libxml2
yaml_implementation = auto
malloc_implementation = libc
extras =
plugins =
bin_name = uwsgi
append_version =
plugin_dir = .
embedded_plugins =
as_shared_library = false
locking = auto
event = auto
timer = auto
filemonitor = auto
blacklist =
whitelist =
embed_files =
embed_config =
[python]
paste = true
web3 = true
+16 -5
View File
@@ -37,6 +37,7 @@ struct uwsgi_fastrouter {
int has_subscription_sockets;
int processes;
int quiet;
struct rb_root *timeouts;
@@ -203,6 +204,7 @@ struct uwsgi_option fastrouter_options[] = {
{"fastrouter-to", required_argument, 0, "forward requests to the specified uwsgi server (you can specify it multiple times for load balancing)", uwsgi_opt_add_string_list, &ufr.static_nodes, 0},
{"fastrouter-gracetime", required_argument, 0, "retry connections to dead static nodes after the specified amount of seconds", uwsgi_opt_set_int, &ufr.static_node_gracetime, 0},
{"fastrouter-events", required_argument, 0, "set the maximum number of concurrent events", uwsgi_opt_set_int, &ufr.nevents, 0},
{"fastrouter-quiet", required_argument, 0, "do not report failed connections to instances", uwsgi_opt_true, &ufr.quiet, 0},
{"fastrouter-cheap", no_argument, 0, "run the fastrouter in cheap mode", uwsgi_opt_true, &ufr.cheap, 0},
{"fastrouter-subscription-server", required_argument, 0, "run the fastrouter subscription server on the spcified address", uwsgi_opt_fastrouter_ss, NULL, 0},
{"fastrouter-subscription-slot", required_argument, 0, "*** deprecated ***", uwsgi_opt_deprecated, (void *) "useless thanks to the new implementation", 0},
@@ -293,8 +295,6 @@ static struct uwsgi_rb_timer *reset_timeout(struct fastrouter_session *);
static void close_session(struct fastrouter_session *fr_session) {
if (fr_session->tmp_socket_name)
free(fr_session->buf_file_name);
if (fr_session->instance_fd != -1) {
close(fr_session->instance_fd);
@@ -304,15 +304,17 @@ static void close_session(struct fastrouter_session *fr_session) {
if (fr_session->instance_failed) {
if (fr_session->soopt) {
uwsgi_log("unable to connect() to uwsgi instance \"%.*s\": %s\n", fr_session->instance_address_len, fr_session->instance_address, strerror(fr_session->soopt));
if (!ufr.quiet)
uwsgi_log("unable to connect() to uwsgi instance \"%.*s\": %s\n", (int) fr_session->instance_address_len, fr_session->instance_address, strerror(fr_session->soopt));
}
else if (fr_session->timed_out) {
if (fr_session->instance_address_len > 0) {
if (fr_session->status == FASTROUTER_STATUS_CONNECTING) {
uwsgi_log("unable to connect() to uwsgi instance \"%.*s\": timeout\n", fr_session->instance_address_len, fr_session->instance_address);
if (!ufr.quiet)
uwsgi_log("unable to connect() to uwsgi instance \"%.*s\": timeout\n", (int) fr_session->instance_address_len, fr_session->instance_address);
}
else if (fr_session->status == FASTROUTER_STATUS_RESPONSE) {
uwsgi_log("timeout waiting for instance \"%.*s\"\n", fr_session->instance_address_len, fr_session->instance_address);
uwsgi_log("timeout waiting for instance \"%.*s\"\n", (int) fr_session->instance_address_len, fr_session->instance_address);
}
}
}
@@ -347,6 +349,11 @@ static void close_session(struct fastrouter_session *fr_session) {
}
if (fr_session->tmp_socket_name) {
free(fr_session->tmp_socket_name);
fr_session->tmp_socket_name = NULL;
}
if (ufr.fallback) {
// ok let's try with the fallback nodes
if (!fr_session->fallback) {
@@ -393,6 +400,10 @@ static void close_session(struct fastrouter_session *fr_session) {
end:
if (fr_session->tmp_socket_name) {
free(fr_session->tmp_socket_name);
}
if (fr_session->buf_file)
fclose(fr_session->buf_file);
+2 -1
View File
@@ -339,7 +339,8 @@ int connect_to_unix(char *socket_name, int timeout, int async) {
uwsgi_poll.events = POLLIN;
if (timed_connect(&uwsgi_poll, (const struct sockaddr *) &uws_addr, un_size, timeout, async)) {
uwsgi_error("connect()");
// avoid error storm
//uwsgi_error("connect()");
close(uwsgi_poll.fd);
return -1;
}