On 07/30/2009 09:27 PM, Ruediger Pluem wrote:

On 07/30/2009 05:37 PM, [email protected] wrote:
Author: jfclere
Date: Thu Jul 30 15:37:22 2009
New Revision: 799334

URL: http://svn.apache.org/viewvc?rev=799334&view=rev
Log:
Add the file logic for the handler.
(Next step add the slotmem logic for the multicast socket).

Modified:
     httpd/httpd/trunk/modules/cluster/mod_heartmonitor.c

Modified: httpd/httpd/trunk/modules/cluster/mod_heartmonitor.c
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/cluster/mod_heartmonitor.c?rev=799334&r1=799333&r2=799334&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/cluster/mod_heartmonitor.c (original)
+++ httpd/httpd/trunk/modules/cluster/mod_heartmonitor.c Thu Jul 30 15:37:22 
2009


+++ CUT +++

+
+                if (apr_table_get(hbt, "lastseen")) {
+                    node.seen = atoi(apr_table_get(hbt, "lastseen"));
+                }
+                seen = fage + node.seen;
+                apr_file_printf(fp, "%s&ready=%u&busy=%u&lastseen=%u\n",
+                                ip, node.ready, node.busy, (unsigned int) 
seen);

The above seems to be a lot of parsing back and forth for just updating the 
lastseen parameter.
Couldn't we just keep the complete line until the 'lastseen=' and just update 
the number afterwards?

If only mod_heartmonitor writes there yes otherwise no.
Probably looking for lastseen= and digits should be enough.

Or is the order of ready, busy and lastseen not defined?

If the order is defined we could use a structure but we would loose all the flexibility the actual format allows.



+    }
+
+    rv = apr_file_rename(path, ctx->storage_path, pool);

We need to consider that multiple handlers run in parallel in different threads 
/ processes.
If we are in bad luck this can lock out node A as in the following example.

Node A and Node B sent the request at the same time and the handlers processing 
these requests are
running fairly in parallel.
If the handler processing Node B does the renaming one tick later then the 
handler processing
Node A then the update of Node A is lost. If this happens over and over again 
Node A is believed
to be dead although it is not.
I fear you need to use global locks here to avoid this.

Yes, I will work of that asap.

Cheers

Jean-Frederic

Reply via email to