From 0a37852c5fb7c7c96fc047bab4ca52e16e2fcf79 Mon Sep 17 00:00:00 2001 From: "roberto@maverick64" Date: Sat, 29 Jan 2011 10:08:35 +0100 Subject: [PATCH] ready to port the spooler to the new api --- plugins/python/python_plugin.c | 8 +++- spooler.c | 72 ++++++++++------------------------ 2 files changed, 28 insertions(+), 52 deletions(-) diff --git a/plugins/python/python_plugin.c b/plugins/python/python_plugin.c index 5b654d65..e0a9387b 100644 --- a/plugins/python/python_plugin.c +++ b/plugins/python/python_plugin.c @@ -823,6 +823,11 @@ uint16_t uwsgi_python_rpc(void * func, uint8_t argc, char **argv, char *buffer) } +int uwsgi_python_spooler(int argc, char *argv[]) { + + return 0; +} + void uwsgi_python_resume(struct wsgi_request *wsgi_req) { PyThreadState* tstate = PyThreadState_GET(); @@ -859,7 +864,8 @@ void uwsgi_python_resume(struct wsgi_request *wsgi_req) { .signal_handler = uwsgi_python_signal_handler, .rpc = uwsgi_python_rpc, - //.spooler = uwsgi_python_spooler, + + .spooler = uwsgi_python_spooler, /* .help = uwsgi_python_help, */ diff --git a/spooler.c b/spooler.c index 5029e659..8553b8f7 100644 --- a/spooler.c +++ b/spooler.c @@ -26,7 +26,7 @@ pid_t spooler_start() { } -int spool_request(char *filename, int rn, char *buffer, int size) { +int spool_request(char *filename, int rn, int core_id, char *buffer, int size) { struct timeval tv; int fd; @@ -34,7 +34,7 @@ int spool_request(char *filename, int rn, char *buffer, int size) { gettimeofday(&tv, NULL); - if (snprintf(filename, 1024, "%s/uwsgi_spoolfile_on_%s_%d_%d_%llu_%llu", uwsgi.spool_dir, uwsgi.hostname, (int) getpid(), rn, (unsigned long long) tv.tv_sec, (unsigned long long) tv.tv_usec) <= 0) { + if (snprintf(filename, 1024, "%s/uwsgi_spoolfile_on_%s_%d_%d_%d_%llu_%llu", uwsgi.spool_dir, uwsgi.hostname, (int) getpid(), rn, core_id, (unsigned long long) tv.tv_sec, (unsigned long long) tv.tv_usec) <= 0) { return 0; } @@ -90,27 +90,26 @@ void spooler() { DIR *sdir; struct dirent *dp; - //PyObject *spooler_callable, *spool_result, *spool_tuple, *spool_env; int spool_fd; uint16_t uwstrlen; int rlen = 0; int datasize; - // prevent process blindly reading stdin to make mess - int nullfd; + // prevent process blindly reading stdin to make mess + int nullfd; - struct uwsgi_header uh; + struct uwsgi_header uh; - char *key; - char *val; + char *key; + char *val; - if (chdir(uwsgi.spool_dir)) { - uwsgi_error("chdir()"); - exit(1); - } + if (chdir(uwsgi.spool_dir)) { + uwsgi_error("chdir()"); + exit(1); + } - // asked by Marco Beri + // asked by Marco Beri #ifdef __HAIKU__ uwsgi_log( "lowering spooler priority to %d\n", B_LOW_PRIORITY); set_thread_priority(find_thread(NULL), B_LOW_PRIORITY); @@ -119,11 +118,11 @@ void spooler() { setpriority(PRIO_PROCESS, getpid(), PRIO_MAX); #endif - nullfd = open("/dev/null", O_RDONLY); - if (nullfd < 0) { - uwsgi_error("open()"); - exit(1); - } + nullfd = open("/dev/null", O_RDONLY); + if (nullfd < 0) { + uwsgi_error("open()"); + exit(1); + } if (nullfd != 0) { dup2(nullfd, 0); @@ -148,14 +147,6 @@ void spooler() { if (!access(dp->d_name, R_OK | W_OK)) { uwsgi_log( "managing spool request %s ...\n", dp->d_name); - /* - spooler_callable = PyDict_GetItemString(uwsgi.embedded_dict, "spooler"); - if (!spooler_callable) { - uwsgi_log( "you have to define uwsgi.spooler to use the spooler !!!\n"); - continue; - } - */ - spool_fd = open(dp->d_name, O_RDONLY); if (spool_fd < 0) { uwsgi_error("open()"); @@ -234,7 +225,6 @@ void spooler() { } datasize += rlen; val[rlen] = 0; - /* ready to add item to the dict */ } /* @@ -256,21 +246,7 @@ void spooler() { /* - spool_result = python_call(spooler_callable, spool_tuple, 0); - if (!spool_result) { - PyErr_Print(); - uwsgi_log( "error detected. spool request canceled.\n"); - goto next_spool; - } - if (PyInt_Check(spool_result)) { - if (PyInt_AsLong(spool_result) == 17) { - Py_DECREF(spool_result); - uwsgi_log( "retry this task later...\n"); - goto retry_later; - } - } - - Py_DECREF(spool_result); + pass request to plugins */ uwsgi_log( "done with task/spool %s\n", dp->d_name); @@ -282,7 +258,6 @@ next_spool: exit(1); } retry_later: - //PyDict_Clear(spool_env); close(spool_fd); } } @@ -296,20 +271,15 @@ retry_later: } } - int uwsgi_request_spooler(struct wsgi_request *wsgi_req) { + +int uwsgi_request_spooler(struct wsgi_request *wsgi_req) { int i; char spool_filename[1024]; if (uwsgi.spool_dir == NULL) { uwsgi_log( "the spooler is inactive !!!...skip\n"); - wsgi_req->uh.modifier1 = 255; - wsgi_req->uh.pktsize = 0; - wsgi_req->uh.modifier2 = 0; - i = write(wsgi_req->poll.fd, wsgi_req, 4); - if (i != 4) { - uwsgi_error("write()"); - } + uwsgi_send_empty_pkt(wsgi_req->poll.fd, NULL, 255, 0); return -1; }