scheduler timeout should be configurable

This commit is contained in:
lxsang 2021-10-08 22:47:27 +02:00
parent e9cd1addf7
commit 0daef95c25
4 changed files with 22 additions and 9 deletions

View File

@ -165,6 +165,10 @@ static int config_handler(void *conf, const char *section, const char *name,
{ {
pconfig->debug_enable = atoi(value); pconfig->debug_enable = atoi(value);
} }
else if (MATCH("SERVER", "scheduler_timeout"))
{
pconfig->scheduler_timeout = atoi(value);
}
#ifdef USE_ZLIB #ifdef USE_ZLIB
else if (MATCH("SERVER", "gzip_enable")) else if (MATCH("SERVER", "gzip_enable"))
{ {
@ -274,6 +278,7 @@ void load_config(const char *file)
server_config.gzip_enable = 0; server_config.gzip_enable = 0;
server_config.gzip_types = NULL; server_config.gzip_types = NULL;
server_config.debug_enable = 0; server_config.debug_enable = 0;
server_config.scheduler_timeout = 30; // 30 s
// put it default mimes // put it default mimes
for (int i = 0; _mimes[i].type != NULL; i++) for (int i = 0; _mimes[i].type != NULL; i++)
{ {

21
httpd.c
View File

@ -21,7 +21,7 @@
snprintf(buff, BUFFLEN, ##__VA_ARGS__); \ snprintf(buff, BUFFLEN, ##__VA_ARGS__); \
ret = write(fd, buff, strlen(buff)); ret = write(fd, buff, strlen(buff));
static antd_scheduler_t* scheduler; static antd_scheduler_t *scheduler;
#ifdef USE_OPENSSL #ifdef USE_OPENSSL
@ -241,7 +241,7 @@ static void antd_monitor(port_config_t *pcnf)
antd_scheduler_unlock(scheduler); antd_scheduler_unlock(scheduler);
// create callback for the server // create callback for the server
task = antd_create_task(accept_request, (void *)request, finish_request, client->last_io); task = antd_create_task(accept_request, (void *)request, finish_request, client->last_io);
antd_task_bind_event(task,client->sock,0, TASK_EVT_ON_WRITABLE| TASK_EVT_ON_READABLE); antd_task_bind_event(task, client->sock, 0, TASK_EVT_ON_WRITABLE | TASK_EVT_ON_READABLE);
antd_scheduler_add_task(scheduler, task); antd_scheduler_add_task(scheduler, task);
} }
} }
@ -299,19 +299,26 @@ void antd_scheduler_destroy_data(void *data)
{ {
antd_request_t *rq = (antd_request_t *)data; antd_request_t *rq = (antd_request_t *)data;
antd_client_t *proxy = (antd_client_t *)dvalue(rq->request, "PROXY_HANDLE"); antd_client_t *proxy = (antd_client_t *)dvalue(rq->request, "PROXY_HANDLE");
if(proxy) if (proxy)
{ {
close(proxy->sock); close(proxy->sock);
} }
finish_request(data); finish_request(data);
} }
int antd_scheduler_validate_data(antd_task_t *task)
{
config_t *conf = config();
LOG("Use server configured scheduler timeout %d", conf->scheduler_timeout);
return !(difftime(time(NULL), task->access_time) > conf->scheduler_timeout);
}
int antd_task_data_id(void *data) int antd_task_data_id(void *data)
{ {
antd_request_t *rq = (antd_request_t *)data; antd_request_t *rq = (antd_request_t *)data;
if(!rq) if (!rq)
return 0; return 0;
return antd_scheduler_next_id(scheduler,rq->client->sock); return antd_scheduler_next_id(scheduler, rq->client->sock);
/*UNUSED(data); /*UNUSED(data);
return antd_scheduler_next_id(scheduler,0);*/ return antd_scheduler_next_id(scheduler,0);*/
} }
@ -339,7 +346,7 @@ int main(int argc, char *argv[])
config_t *conf = config(); config_t *conf = config();
// start syslog // start syslog
if(conf->debug_enable == 1) if (conf->debug_enable == 1)
{ {
setlogmask(LOG_UPTO(LOG_NOTICE)); setlogmask(LOG_UPTO(LOG_NOTICE));
} }
@ -361,7 +368,7 @@ int main(int argc, char *argv[])
#endif #endif
// enable scheduler // enable scheduler
// default to 4 workers // default to 4 workers
scheduler = antd_scheduler_init( conf->n_workers, conf->stat_fifo_path); scheduler = antd_scheduler_init(conf->n_workers, conf->stat_fifo_path);
if (scheduler == NULL) if (scheduler == NULL)
{ {
ERROR("Unable to initialise scheduler. Exit"); ERROR("Unable to initialise scheduler. Exit");

View File

@ -86,6 +86,7 @@ typedef struct
int maxcon; int maxcon;
int connection; int connection;
int n_workers; int n_workers;
int scheduler_timeout;
int max_upload_size; int max_upload_size;
// ssl // ssl
int enable_ssl; int enable_ssl;

View File

@ -11,7 +11,7 @@
#include "utils.h" #include "utils.h"
#include "bst.h" #include "bst.h"
#define MAX_VALIDITY_INTERVAL 30 // s #define MAX_VALIDITY_INTERVAL 30
#define MAX_FIFO_NAME_SZ 255 #define MAX_FIFO_NAME_SZ 255
// callback definition // callback definition