Browse Source

[Feature] Execute on_load scripts with ev_base ready

tags/1.4.0
Vsevolod Stakhov 7 years ago
parent
commit
be3414a88c

+ 2
- 1
src/controller.c View File

@@ -2977,7 +2977,8 @@ start_controller_worker (struct rspamd_worker *worker)

ctx->ev_base = rspamd_prepare_worker (worker,
"controller",
rspamd_controller_accept_socket);
rspamd_controller_accept_socket,
TRUE);
msec_to_tv (ctx->timeout, &ctx->io_tv);

ctx->start_time = time (NULL);

+ 2
- 1
src/fuzzy_storage.c View File

@@ -2252,7 +2252,8 @@ start_fuzzy (struct rspamd_worker *worker)

ctx->ev_base = rspamd_prepare_worker (worker,
"fuzzy",
NULL);
NULL,
FALSE);
ctx->peer_fd = -1;
ctx->worker = worker;
double_to_tv (ctx->master_timeout, &ctx->master_io_tv);

+ 2
- 1
src/hs_helper.c View File

@@ -278,7 +278,8 @@ start_hs_helper (struct rspamd_worker *worker)

ctx->ev_base = rspamd_prepare_worker (worker,
"hs_helper",
NULL);
NULL,
FALSE);

if (!rspamd_rs_compile (ctx, worker, FALSE)) {
/* Tell main not to respawn more workers */

+ 0
- 18
src/libserver/cfg_utils.c View File

@@ -642,8 +642,6 @@ rspamd_config_post_load (struct rspamd_config *cfg,
struct timespec ts;
#endif
struct metric *def_metric;
struct rspamd_config_post_load_script *sc;
struct rspamd_config **pcfg;
gboolean ret = TRUE;

#ifdef HAVE_CLOCK_GETTIME
@@ -750,22 +748,6 @@ rspamd_config_post_load (struct rspamd_config *cfg,
rspamd_config_libs (cfg->libs_ctx, cfg);
}

/* Execute post load scripts */
LL_FOREACH (cfg->on_load, sc) {
lua_rawgeti (cfg->lua_state, LUA_REGISTRYINDEX, sc->cbref);
pcfg = lua_newuserdata (cfg->lua_state, sizeof (*pcfg));
*pcfg = cfg;
rspamd_lua_setclass (cfg->lua_state, "rspamd{config}", -1);

if (lua_pcall (cfg->lua_state, 1, 0, 0) != 0) {
msg_err_config ("error executing post load code: %s",
lua_tostring (cfg->lua_state, -1));
lua_pop (cfg->lua_state, 1);

return FALSE;
}
}

/* Validate cache */
if (opts & RSPAMD_CONFIG_INIT_VALIDATE) {
return rspamd_symbols_cache_validate (cfg->cache, cfg, FALSE) && ret;

+ 7
- 1
src/libserver/worker_util.c View File

@@ -257,7 +257,7 @@ rspamd_worker_init_signals (struct rspamd_worker *worker, struct event_base *bas

struct event_base *
rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
void (*accept_handler)(int, short, void *))
void (*accept_handler)(int, short, void *), gboolean load_lua)
{
struct event_base *ev_base;
struct event *accept_events;
@@ -301,6 +301,12 @@ rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
}
}

if (load_lua) {
struct rspamd_config *cfg = worker->srv->cfg;

rspamd_lua_run_postloads (cfg->lua_state, cfg, ev_base);
}

return ev_base;
}


+ 1
- 1
src/libserver/worker_util.h View File

@@ -40,7 +40,7 @@ struct rspamd_worker_signal_handler;
*/
struct event_base *
rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
void (*accept_handler)(int, short, void *));
void (*accept_handler)(int, short, void *), gboolean load_lua);

/**
* Set special signal handler for a worker

+ 2
- 1
src/log_helper.c View File

@@ -177,7 +177,8 @@ start_log_helper (struct rspamd_worker *worker)

ctx->ev_base = rspamd_prepare_worker (worker,
"log_helper",
NULL);
NULL,
TRUE);
ctx->cfg = worker->srv->cfg;
ctx->scripts = worker->cf->scripts;
ctx->L = ctx->cfg->lua_state;

+ 32
- 0
src/lua/lua_common.c View File

@@ -16,6 +16,7 @@
#include "lua_common.h"
#include "lua/global_functions.lua.h"
#include "lptree.h"
#include "utlist.h"

/* Lua module init function */
#define MODULE_INIT_FUNC "module_init"
@@ -1136,3 +1137,34 @@ lua_check_ev_base (lua_State * L, gint pos)
luaL_argcheck (L, ud != NULL, pos, "'event_base' expected");
return ud ? *((struct event_base **)ud) : NULL;
}

gboolean
rspamd_lua_run_postloads (lua_State *L, struct rspamd_config *cfg,
struct event_base *ev_base)
{
struct rspamd_config_post_load_script *sc;
struct rspamd_config **pcfg;
struct event_base **pev_base;

/* Execute post load scripts */
LL_FOREACH (cfg->on_load, sc) {
lua_rawgeti (cfg->lua_state, LUA_REGISTRYINDEX, sc->cbref);
pcfg = lua_newuserdata (cfg->lua_state, sizeof (*pcfg));
*pcfg = cfg;
rspamd_lua_setclass (cfg->lua_state, "rspamd{config}", -1);

pev_base = lua_newuserdata (cfg->lua_state, sizeof (*pev_base));
*pev_base = ev_base;
rspamd_lua_setclass (cfg->lua_state, "rspamd{ev_base}", -1);

if (lua_pcall (cfg->lua_state, 2, 0, 0) != 0) {
msg_err_config ("error executing post load code: %s",
lua_tostring (cfg->lua_state, -1));
lua_pop (cfg->lua_state, 1);

return FALSE;
}
}

return TRUE;
}

+ 9
- 0
src/lua/lua_common.h View File

@@ -364,5 +364,14 @@ void lua_call_finish_script (lua_State *L, struct
rspamd_config_post_load_script *sc,
struct rspamd_task *task);

/**
* Run post-load operations
* @param L
* @param cfg
* @param ev_base
*/
gboolean rspamd_lua_run_postloads (lua_State *L, struct rspamd_config *cfg,
struct event_base *ev_base);

#endif /* WITH_LUA */
#endif /* RSPAMD_LUA_H */

+ 2
- 1
src/lua_worker.c View File

@@ -350,7 +350,8 @@ start_lua_worker (struct rspamd_worker *worker)

ctx->ev_base = rspamd_prepare_worker (worker,
"lua_worker",
lua_accept_socket);
lua_accept_socket,
TRUE);

L = worker->srv->cfg->lua_state;
ctx->L = L;

+ 2
- 1
src/rspamd_proxy.c View File

@@ -1445,7 +1445,8 @@ start_rspamd_proxy (struct rspamd_worker *worker)
struct timeval rot_tv;

ctx->ev_base = rspamd_prepare_worker (worker, "rspamd_proxy",
proxy_accept_socket);
proxy_accept_socket,
TRUE);

ctx->resolver = dns_resolver_init (worker->srv->logger,
ctx->ev_base,

+ 1
- 1
src/worker.c View File

@@ -576,7 +576,7 @@ start_worker (struct rspamd_worker *worker)
struct rspamd_worker_ctx *ctx = worker->ctx;
struct rspamd_worker_log_pipe *lp, *ltmp;

ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket);
ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket, TRUE);
msec_to_tv (ctx->timeout, &ctx->io_tv);
rspamd_symbols_cache_start_refresh (worker->srv->cfg->cache, ctx->ev_base);


Loading…
Cancel
Save