From ae90f29fa3463fa2ede52ac11c9e76eef6ec37c0 Mon Sep 17 00:00:00 2001 From: "roberto@quantal64" Date: Fri, 31 Aug 2012 09:30:33 +0200 Subject: [PATCH] refactored mules and farms initialization --- core/mule.c | 64 +++++++++++++++++++++++++++++++++++++++++++++ core/uwsgi.c | 73 +++------------------------------------------------- uwsgi.h | 2 ++ 3 files changed, 69 insertions(+), 70 deletions(-) diff --git a/core/mule.c b/core/mule.c index 54b9355d..eee84c7b 100644 --- a/core/mule.c +++ b/core/mule.c @@ -382,3 +382,67 @@ void uwsgi_opt_add_farm(char *opt, char *value, void *foobar) { uwsgi_string_new_list(&uwsgi.farms_list, value); } + +void uwsgi_setup_mules_and_farms() { + int i; + if (uwsgi.mules_cnt > 0) { + uwsgi.mules = (struct uwsgi_mule *) uwsgi_calloc_shared(sizeof(struct uwsgi_mule) * uwsgi.mules_cnt); + + create_signal_pipe(uwsgi.shared->mule_signal_pipe); + create_signal_pipe(uwsgi.shared->mule_queue_pipe); + + for (i = 0; i < uwsgi.mules_cnt; i++) { + // create the socket pipe + create_signal_pipe(uwsgi.mules[i].signal_pipe); + create_signal_pipe(uwsgi.mules[i].queue_pipe); + + uwsgi.mules[i].id = i + 1; + + snprintf(uwsgi.mules[i].name, 0xff, "uWSGI mule %d", i + 1); + } + } + + if (uwsgi.farms_cnt > 0) { + uwsgi.farms = (struct uwsgi_farm *) uwsgi_calloc_shared(sizeof(struct uwsgi_farm) * uwsgi.farms_cnt); + + struct uwsgi_string_list *farm_name = uwsgi.farms_list; + for (i = 0; i < uwsgi.farms_cnt; i++) { + + char *farm_value = uwsgi_str(farm_name->value); + + char *mules_list = strchr(farm_value, ':'); + if (!mules_list) { + uwsgi_log("invalid farm value (%s) must be in the form name:mule[,muleN].\n", farm_value); + exit(1); + } + + mules_list[0] = 0; + mules_list++; + + strncpy(uwsgi.farms[i].name, farm_value, 0xff); + + // create the socket pipe + create_signal_pipe(uwsgi.farms[i].signal_pipe); + create_signal_pipe(uwsgi.farms[i].queue_pipe); + + char *p = strtok(mules_list, ","); + while (p != NULL) { + struct uwsgi_mule *um = get_mule_by_id(atoi(p)); + if (!um) { + uwsgi_log("invalid mule id: %s\n", p); + exit(1); + } + + uwsgi_mule_farm_new(&uwsgi.farms[i].mules, um); + + p = strtok(NULL, ","); + } + uwsgi_log("created farm %d name: %s mules:%s\n", i + 1, uwsgi.farms[i].name, strchr(farm_name->value, ':') + 1); + + farm_name = farm_name->next; + + } + + } + +} diff --git a/core/uwsgi.c b/core/uwsgi.c index dc7ef1a6..5453f9d5 100644 --- a/core/uwsgi.c +++ b/core/uwsgi.c @@ -2571,80 +2571,13 @@ nextsock: } } + // set masterpid uwsgi.mypid = getpid(); masterpid = uwsgi.mypid; - uwsgi.workers[0].pid = masterpid; - if (uwsgi.mules_cnt > 0) { - uwsgi.mules = (struct uwsgi_mule *) mmap(NULL, sizeof(struct uwsgi_mule) * uwsgi.mules_cnt, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); - if (!uwsgi.mules) { - uwsgi_error("mmap()"); - exit(1); - } - memset(uwsgi.mules, 0, sizeof(struct uwsgi_mule) * uwsgi.mules_cnt); - - create_signal_pipe(uwsgi.shared->mule_signal_pipe); - create_signal_pipe(uwsgi.shared->mule_queue_pipe); - - for (i = 0; i < uwsgi.mules_cnt; i++) { - // create the socket pipe - create_signal_pipe(uwsgi.mules[i].signal_pipe); - create_signal_pipe(uwsgi.mules[i].queue_pipe); - - uwsgi.mules[i].id = i + 1; - - snprintf(uwsgi.mules[i].name, 0xff, "uWSGI mule %d", i + 1); - } - } - - if (uwsgi.farms_cnt > 0) { - uwsgi.farms = (struct uwsgi_farm *) mmap(NULL, sizeof(struct uwsgi_farm) * uwsgi.farms_cnt, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); - if (!uwsgi.farms) { - uwsgi_error("mmap()"); - exit(1); - } - memset(uwsgi.farms, 0, sizeof(struct uwsgi_farm) * uwsgi.farms_cnt); - - struct uwsgi_string_list *farm_name = uwsgi.farms_list; - for (i = 0; i < uwsgi.farms_cnt; i++) { - - char *farm_value = uwsgi_str(farm_name->value); - - char *mules_list = strchr(farm_value, ':'); - if (!mules_list) { - uwsgi_log("invalid farm value (%s) must be in the form name:mule[,muleN].\n", farm_value); - exit(1); - } - - mules_list[0] = 0; - mules_list++; - - strncpy(uwsgi.farms[i].name, farm_value, 0xff); - - // create the socket pipe - create_signal_pipe(uwsgi.farms[i].signal_pipe); - create_signal_pipe(uwsgi.farms[i].queue_pipe); - - char *p = strtok(mules_list, ","); - while (p != NULL) { - struct uwsgi_mule *um = get_mule_by_id(atoi(p)); - if (!um) { - uwsgi_log("invalid mule id: %s\n", p); - exit(1); - } - - uwsgi_mule_farm_new(&uwsgi.farms[i].mules, um); - - p = strtok(NULL, ","); - } - uwsgi_log("created farm %d name: %s mules:%s\n", i + 1, uwsgi.farms[i].name, strchr(farm_name->value, ':') + 1); - - farm_name = farm_name->next; - - } - - } + // initialize mules and farms + uwsgi_setup_mules_and_farms(); if (uwsgi.command_mode) { uwsgi_log("*** Operational MODE: command ***\n"); diff --git a/uwsgi.h b/uwsgi.h index be289336..1eb3f576 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -3185,6 +3185,8 @@ void uwsgi_setup_log_master(void); void uwsgi_setup_shared_sockets(void); +void uwsgi_setup_mules_and_farms(void); + #ifdef UWSGI_AS_SHARED_LIBRARY int uwsgi_init(int, char **, char **); #endif