Author: jfrederic.clere(a)jboss.com
Date: 2008-09-19 08:03:41 -0400 (Fri, 19 Sep 2008)
New Revision: 1870
Modified:
trunk/mod_cluster/native/include/balancer.h
trunk/mod_cluster/native/include/context.h
trunk/mod_cluster/native/include/host.h
trunk/mod_cluster/native/include/node.h
trunk/mod_cluster/native/include/slotmem.h
trunk/mod_cluster/native/mod_manager/balancer.c
trunk/mod_cluster/native/mod_manager/context.c
trunk/mod_cluster/native/mod_manager/host.c
trunk/mod_cluster/native/mod_manager/mod_manager.c
trunk/mod_cluster/native/mod_manager/node.c
trunk/mod_cluster/native/mod_slotmem/sharedmem_util.c
Log:
Make slotmen persistence swichable.
Modified: trunk/mod_cluster/native/include/balancer.h
===================================================================
--- trunk/mod_cluster/native/include/balancer.h 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/include/balancer.h 2008-09-19 12:03:41 UTC (rev 1870)
@@ -123,10 +123,11 @@
* create a shared balancer table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_balancer(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage);
+mem_t * create_mem_balancer(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage);
/**
* provider for the mod_proxy_cluster or mod_jk modules.
Modified: trunk/mod_cluster/native/include/context.h
===================================================================
--- trunk/mod_cluster/native/include/context.h 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/include/context.h 2008-09-19 12:03:41 UTC (rev 1870)
@@ -125,10 +125,11 @@
* create a shared context table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_context(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage);
+mem_t * create_mem_context(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage);
/**
* provider for the mod_proxy_cluster or mod_jk modules.
Modified: trunk/mod_cluster/native/include/host.h
===================================================================
--- trunk/mod_cluster/native/include/host.h 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/include/host.h 2008-09-19 12:03:41 UTC (rev 1870)
@@ -118,10 +118,11 @@
* create a shared host table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_host(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage);
+mem_t * create_mem_host(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage);
/**
* provider for the mod_proxy_cluster or mod_jk modules.
Modified: trunk/mod_cluster/native/include/node.h
===================================================================
--- trunk/mod_cluster/native/include/node.h 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/include/node.h 2008-09-19 12:03:41 UTC (rev 1870)
@@ -144,10 +144,11 @@
* create a shared node table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_node(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage);
+mem_t * create_mem_node(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage);
/**
* provider for the mod_proxy_cluster or mod_jk modules.
Modified: trunk/mod_cluster/native/include/slotmem.h
===================================================================
--- trunk/mod_cluster/native/include/slotmem.h 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/include/slotmem.h 2008-09-19 12:03:41 UTC (rev 1870)
@@ -46,6 +46,10 @@
#define SLOTMEM_STORAGE "slotmem"
+#define ATTACH_SLOTMEM 0 /* Attach to existing slotmem */
+#define CREATE_SLOTMEM 1 /* create a not persistent slotmem */
+#define CREPER_SLOTMEM 2 /* create a persisitent slotmem */
+
typedef struct ap_slotmem ap_slotmem_t;
/**
@@ -76,10 +80,11 @@
* @param name is a key used for debugging and in mod_status output or allow another
process to share this space.
* @param item_size size of each item
* @param item_num number of item to create.
+ * @param persistent indicator to know if the data should be persisted or not.
* @param pool is pool used to create scoreboard
* @return APR_SUCCESS if all went well
*/
-apr_status_t (* ap_slotmem_create)(ap_slotmem_t **new, const char *name, apr_size_t
item_size, int item_num, apr_pool_t *pool);
+apr_status_t (* ap_slotmem_create)(ap_slotmem_t **new, const char *name, apr_size_t
item_size, int item_num, int persistent, apr_pool_t *pool);
/**
* attach to an existing slotmem.
Modified: trunk/mod_cluster/native/mod_manager/balancer.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/balancer.c 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/mod_manager/balancer.c 2008-09-19 12:03:41 UTC (rev 1870)
@@ -61,7 +61,7 @@
ptr->storage = storage;
storename = apr_pstrcat(p, string, BALANCEREXE, NULL);
if (type)
- rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(balancerinfo_t), *num, p);
+ rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(balancerinfo_t), *num, type, p);
else {
apr_size_t size = sizeof(balancerinfo_t);
rv = ptr->storage->ap_slotmem_attach(&ptr->slotmem, storename,
&size, num, p);
@@ -217,11 +217,12 @@
* create a shared balancer table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @param storage slotmem logic provider.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_balancer(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage)
+mem_t * create_mem_balancer(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage)
{
- return(create_attach_mem_balancer(string, num, 1, p, storage));
+ return(create_attach_mem_balancer(string, num, CREATE_SLOTMEM|persist, p, storage));
}
Modified: trunk/mod_cluster/native/mod_manager/context.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/context.c 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/mod_manager/context.c 2008-09-19 12:03:41 UTC (rev 1870)
@@ -61,7 +61,7 @@
ptr->storage = storage;
storename = apr_pstrcat(p, string, CONTEXTEXE, NULL);
if (type)
- rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(contextinfo_t), *num, p);
+ rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(contextinfo_t), *num, type, p);
else {
apr_size_t size = sizeof(contextinfo_t);
rv = ptr->storage->ap_slotmem_attach(&ptr->slotmem, storename,
&size, num, p);
@@ -218,11 +218,12 @@
* create a shared context table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @param storage slotmem logic provider.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_context(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage)
+mem_t * create_mem_context(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage)
{
- return(create_attach_mem_context(string, num, 1, p, storage));
+ return(create_attach_mem_context(string, num, CREATE_SLOTMEM|persist, p, storage));
}
Modified: trunk/mod_cluster/native/mod_manager/host.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/host.c 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/mod_manager/host.c 2008-09-19 12:03:41 UTC (rev 1870)
@@ -61,7 +61,7 @@
ptr->storage = storage;
storename = apr_pstrcat(p, string, HOSTEXE, NULL);
if (type)
- rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(hostinfo_t), *num, p);
+ rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(hostinfo_t), *num, type, p);
else {
apr_size_t size = sizeof(hostinfo_t);
rv = ptr->storage->ap_slotmem_attach(&ptr->slotmem, storename,
&size, num, p);
@@ -216,10 +216,11 @@
* create a shared host table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_host(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage)
+mem_t * create_mem_host(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage)
{
- return(create_attach_mem_host(string, num, 1, p, storage));
+ return(create_attach_mem_host(string, num, CREATE_SLOTMEM|persist, p, storage));
}
Modified: trunk/mod_cluster/native/mod_manager/mod_manager.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/mod_manager.c 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/mod_manager/mod_manager.c 2008-09-19 12:03:41 UTC (rev 1870)
@@ -289,30 +289,29 @@
/* Get a provider to handle the shared memory */
storage = ap_lookup_provider(SLOTMEM_STORAGE, "shared", "0");
- // storage->persistent = 0;
if (storage == NULL) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, s,
"ap_lookup_provider %s failed", SLOTMEM_STORAGE);
return !OK;
}
- nodestatsmem = create_mem_node(node, &mconf->maxnode, p, storage);
+ nodestatsmem = create_mem_node(node, &mconf->maxnode, mconf->persistent, p,
storage);
if (nodestatsmem == NULL) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, s, "create_mem_node
%s failed", node);
return !OK;
}
- contextstatsmem = create_mem_context(context, &mconf->maxcontext, p,
storage);
+ contextstatsmem = create_mem_context(context, &mconf->maxcontext,
mconf->persistent, p, storage);
if (contextstatsmem == NULL) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, s,
"create_mem_context failed");
return !OK;
}
- hoststatsmem = create_mem_host(host, &mconf->maxhost, p, storage);
+ hoststatsmem = create_mem_host(host, &mconf->maxhost, mconf->persistent, p,
storage);
if (hoststatsmem == NULL) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, s, "create_mem_host
failed");
return !OK;
}
- balancerstatsmem = create_mem_balancer(balancer, &mconf->maxhost, p,
storage);
+ balancerstatsmem = create_mem_balancer(balancer, &mconf->maxhost,
mconf->persistent, p, storage);
if (balancerstatsmem == NULL) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, 0, s,
"create_mem_balancer failed");
return !OK;
@@ -1266,7 +1265,7 @@
if (strcasecmp(arg, "Off") == 0)
mconf->persistent = 0;
else if (strcasecmp(arg, "On") == 0)
- mconf->persistent = 1;
+ mconf->persistent = CREPER_SLOTMEM;
else {
return "PersistSlots must be one of: "
"off | on";
Modified: trunk/mod_cluster/native/mod_manager/node.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/node.c 2008-09-19 08:30:21 UTC (rev 1869)
+++ trunk/mod_cluster/native/mod_manager/node.c 2008-09-19 12:03:41 UTC (rev 1870)
@@ -60,9 +60,9 @@
}
ptr->storage = storage;
storename = apr_pstrcat(p, string, NODEEXE, NULL);
- if (type)
- rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(nodeinfo_t), *num, p);
- else {
+ if (type) {
+ rv = ptr->storage->ap_slotmem_create(&ptr->slotmem, storename,
sizeof(nodeinfo_t), *num, type, p);
+ } else {
apr_size_t size = sizeof(nodeinfo_t);
rv = ptr->storage->ap_slotmem_attach(&ptr->slotmem, storename,
&size, num, p);
}
@@ -232,11 +232,12 @@
* create a shared node table
* @param name to use to create the table.
* @param size of the shared table.
+ * @param persist tell if the slotmem element are persistent.
* @param p pool to use for allocations.
* @param storage slotmem logic provider.
* @return address of struct used to access the table.
*/
-mem_t * create_mem_node(char *string, int *num, apr_pool_t *p, slotmem_storage_method
*storage)
+mem_t * create_mem_node(char *string, int *num, int persist, apr_pool_t *p,
slotmem_storage_method *storage)
{
- return(create_attach_mem_node(string, num, 1, p, storage));
+ return(create_attach_mem_node(string, num, CREATE_SLOTMEM|persist, p, storage));
}
Modified: trunk/mod_cluster/native/mod_slotmem/sharedmem_util.c
===================================================================
--- trunk/mod_cluster/native/mod_slotmem/sharedmem_util.c 2008-09-19 08:30:21 UTC (rev
1869)
+++ trunk/mod_cluster/native/mod_slotmem/sharedmem_util.c 2008-09-19 12:03:41 UTC (rev
1870)
@@ -216,7 +216,7 @@
}
return APR_NOTFOUND;
}
-static apr_status_t ap_slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t
item_size, int item_num, apr_pool_t *pool)
+static apr_status_t ap_slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t
item_size, int item_num, int persist, apr_pool_t *pool)
{
char *ptr;
struct sharedslotdesc desc;
@@ -307,7 +307,8 @@
/* clean the slots table */
memset(ptr + sizeof(int) * (item_num + 1), 0, item_size * item_num);
/* try to restore the _whole_ stuff from a persisted location */
- restore_slotmem(ptr, fname, item_size, item_num, pool);
+ if (persist & CREPER_SLOTMEM)
+ restore_slotmem(ptr, fname, item_size, item_num, pool);
}
/* create the lock */