Commit 647a7f00 authored by Jean-Frederic Clere's avatar Jean-Frederic Clere
Browse files

Add ProxySlotMemLoc parameter: location of the file associated with the slot mem.

parent ae20bddf
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -933,6 +933,7 @@ static void * create_proxy_config(apr_pool_t *p, server_rec *s)
    ps->timeout_set = 0;
    ps->badopt = bad_error;
    ps->badopt_set = 0;
    ps->slotmem_loc = NULL;
    ps->pool = p;

    return ps;
@@ -966,6 +967,7 @@ static void * merge_proxy_config(apr_pool_t *p, void *basev, void *overridesv)
    ps->timeout= (overrides->timeout_set == 0) ? base->timeout : overrides->timeout;
    ps->badopt = (overrides->badopt_set == 0) ? base->badopt : overrides->badopt;
    ps->proxy_status = (overrides->proxy_status_set == 0) ? base->proxy_status : overrides->proxy_status;
    ps->slotmem_loc = (overrides->slotmem_loc == NULL) ? base->slotmem_loc : overrides->slotmem_loc;
    ps->pool = p;
    return ps;
}
@@ -1646,6 +1648,16 @@ static const char *
    return NULL;
}

static const char *
    set_slotmem_loc(cmd_parms *cmd, void *dummy, const char *arg)
{
    server_rec *s = cmd->server;
    proxy_server_conf *conf =
        (proxy_server_conf *) ap_get_module_config(s->module_config, &proxy_module);
    conf->slotmem_loc = apr_pstrdup(cmd->pool, arg);
    return NULL;
}

static void ap_add_per_proxy_conf(server_rec *s, ap_conf_vector_t *dir_config)
{
    proxy_server_conf *sconf = ap_get_module_config(s->module_config,
@@ -1795,6 +1807,8 @@ static const command_rec proxy_cmds[] =
     "Configure Status: proxy status to one of: on | off | full"),
    AP_INIT_RAW_ARGS("ProxySet", set_proxy_param, NULL, RSRC_CONF|ACCESS_CONF,
     "A balancer or worker name with list of params"),
    AP_INIT_TAKE1("ProxySlotMemLoc", set_slotmem_loc, NULL, RSRC_CONF,
     "Location of the shared area to store the workers information: file-path (default: anonymous"),
    {NULL}
};

@@ -1849,6 +1863,8 @@ PROXY_DECLARE(const char *) ap_proxy_ssl_val(apr_pool_t *p, server_rec *s,
static int proxy_post_config(apr_pool_t *pconf, apr_pool_t *plog,
                             apr_pool_t *ptemp, server_rec *s)
{
    proxy_server_conf *sconf = ap_get_module_config(s->module_config,
                                                    &proxy_module);

    proxy_ssl_enable = APR_RETRIEVE_OPTIONAL_FN(ssl_proxy_enable);
    proxy_ssl_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable);
@@ -1856,7 +1872,7 @@ static int proxy_post_config(apr_pool_t *pconf, apr_pool_t *plog,
    proxy_ssl_val = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);

    /* if we have a memory provider create the comarea here */
    proxy_create_comarea(pconf);
    proxy_create_comarea(pconf, sconf->slotmem_loc);

    /* Also fill the comarea of the health-checker */
    proxy_checkstorage_add_workers(pconf, s);
+2 −1
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ typedef struct {
        status_full
    } proxy_status;             /* Status display options */
    char proxy_status_set;
    char *slotmem_loc;
    apr_pool_t *pool;           /* Pool used for allocating this struct */
} proxy_server_conf;

@@ -446,7 +447,7 @@ APR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, request_status,

/* proxy_util.c */

PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf);
PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf, char *name);
PROXY_DECLARE(void) proxy_checkstorage_add_workers(apr_pool_t *pconf, server_rec *s);
PROXY_DECLARE(void) proxy_lookup_storage_provider();

+5 −3
Original line number Diff line number Diff line
@@ -1634,6 +1634,8 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf,
    ap_slotmem_t *myscore;
    apr_status_t rv;
    apr_size_t item_size = sizeof(proxy_worker_stat);
    proxy_server_conf *sconf = ap_get_module_config(s->module_config,
                                                    &proxy_module);

    if (worker->s && PROXY_WORKER_IS_INITIALIZED(worker)) {
        /* The worker share is already initialized */
@@ -1651,7 +1653,7 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf,
    /* Use storage provider when a storage is existing */
    if (storage) {

        rv = storage->ap_slotmem_create(&myscore, "proxy/comarea", item_size, ap_proxy_lb_workers(), conf->pool);
        rv = storage->ap_slotmem_create(&myscore, sconf->slotmem_loc, item_size, ap_proxy_lb_workers(), conf->pool);
        if (rv == APR_SUCCESS)
            rv = storage->ap_slotmem_mem(myscore, worker->id, &score);
        if (rv != APR_SUCCESS)
@@ -2230,14 +2232,14 @@ PROXY_DECLARE(void) ap_proxy_backend_broke(request_rec *r,
}

/* Create shared area (comarea) called from mod_proxy post_config */
PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf)
PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf, char *name)
{
    ap_slotmem_t *myscore;
    apr_size_t item_size = sizeof(proxy_worker_stat);
    if (checkstorage)
        item_size = checkstorage->getentrysize();
    if (storage)
        storage->ap_slotmem_create(&myscore, "proxy/comarea", item_size, ap_proxy_lb_workers(), pconf);
        storage->ap_slotmem_create(&myscore, name, item_size, ap_proxy_lb_workers(), pconf);
}
/* get the storage provider for the shared area called from mod_proxy pre_config */
PROXY_DECLARE(void) proxy_lookup_storage_provider()