On Jan 7, 2012, at 1:08 PM, Rainer Jung wrote:

>> hook handler prototypes are?  That's more like developer documentation.  
>> Thoughts?
> 
> I don't know about the history of similar decisions, but IMHO what you wrote 
> is good enough for 2.4.0.

Sounds good.

>>> +<p>The interval of 1 seconds is controlled by the HEARTBEAT_INTERVAL
>>> +compile time define.  This is not currently tunable at run time. To make
>>> +this module send the status packet more often, you must add to the
>>> +CFLAGS used to compile the module to include:</p>
>>> +<example>-DHEARTBEAT_INTERVAL=3</example>
>>> +<p>Would cause the broadcasts to be sent every 3 seconds.</p>
>>> +</section>
> 
> "more often" than 1 second does not match the example "3 seconds" ;)
> I guess more often is not possible (if resolution is seconds), so it would be 
> "less often"?
> 
> More important: I think this is totally wrong. The define exists, but I 
> couldn't find any place in the code, which is influenced by it. I *guess* it 
> uses the global watchdog interval configured for mod_watchdog.

Yep, it's not used.  And WatchdogInterval in mod_watchdog should do the trick.  
Perhaps an early approach soon abandoned?  Removed from docs.  


>>> +<p>The<directive>HeartbeatAddress</directive>  directive specifies the
>>> +multicast address to which<module>mod_heartbeat</module>  will send
>>> +status information. This address will usually correspond to a configured
>>> +<directive module="mod_heartmonitor">HeartbeatListen</directive>  on a
>>> +frontend proxy system.</p>
>>> +<example>
>>> +HeartbeatAddress 239.0.0.1:27999
>>> +</example>
>>> </usage>
>>> </directivesynopsis>
> 
> Should we note, that Multicast needs to be enabled on both notes and routing 
> needs to be set up, so that the multicast packets from the origin server can 
> reach the proxy? On the one hand it is obvious, on the other hand not 
> unlikely to be the typical first problem people run into.

I'm +1 on a note, but don't think we should tell the story on setting up IP 
Multicast.  I omitted this mainly because I don't know the story well enough.  
Same for IPv6 address examples.

>>> +<note type="warning">
>>> +        To use<module>mod_heartmonitor</module>,
>>> +<module>mod_status</module>  and<module>mod_watchdog</module>
>>> +        must be either a static modules or, if a dynamic module, it must
>>> +        be loaded before<module>mod_heartmonitor</module>.
>>> +</note>
>>> +
> 
> ??

The README talks only about mod_status.  I added mod_watchdog because 
mod_heart* has a hard dependency on its symbols.  The mod_status dependency is 
not hard (mod_heartbeat loads without mod_status loaded, or with mod_status 
later in the config), but not having actually run this I don't know what more 
subtle issues might arise. 

Removed the orphaned singular "it" must be loaded.

>>> +<example>
>>> +    HeartbeatListen 239.0.0.1:27999
>>> +</example>
> 
> Same remark concerning the use of multicast as above.
> 
>>>     <p>  This module is inactive until this directive is used.</p>
>>> </usage>
>>> @@ -88,7 +100,7 @@ heartbeat requests to this server</descr
>>>     <p>The<directive>HeartbeatMaxServers</directive>  directive specifies 
>>> the
>>>     maximum number of servers that will be sending requests to this monitor
>>>     server.  It is used to control the size of the shared memory allocated
>>> -    to store the heartbeat info.</p>
>>> +    to store the heartbeat info when<module>mod_slotmem_shm</module>  is 
>>> in use.</p>
> 
> Can this be changed using graceful restart? Only for flat file or also for 
> shm?

This gets set up in the post_config hook handler.  I forget whether that gets 
called on a graceful, and have not analyzed whether the graceful restart case 
gets handled properly.  I suspect this depends on the behaviour of the slotmem 
provider.  

In the file case, it seems that very few assumptions about the state of the 
world are made.

> Typo: "corrspond" -> "correspond"

Thank you.

> Additional info: it seems the data used for the load balancer is updated 
> about every 5 seconds (define HM_UPDATE_SEC). More precisely it seems the 
> heartmonitor is called by watchdog (with interval 0 seconds, but watchdog 
> sleep at least 100ms), then updates the data from what is had previously 
> read, then loops for 5 seconds reading new data and then returns to watchdog. 
> This is done one one thread per child, but a mutex guarantees, that it only 
> runs in one child at every time. Hope I'm right.

I hope so, too.  

> Furthermore the heartmonitor contains some additional code to handle POST 
> requests directed to it and reading usage data directly from the POST body 
> (in addition to the multicast method).
> 
> I think the current info in mod_lbmethod_heartbeat.xml is confusing. It 
> contains:

I did not edit that doc.

> "This modules load balancing algorithm favors servers with more ready (idle) 
> capacity over time, but does not select the server with the most ready 
> capacity every time.  Servers that have 0 active clients are penalized, with 
> the assumption that they are not fully initialized."
> 
> As far as I can see in the code, it randomly chooses one of the idle origin 
> server slots based on the last received heartbeat data. Another equivalent 
> formulation would be: it does a weighted balancing to the origin servers, 
> where the weights are proportional to the idle (ready) slots reported with 
> the last heartbeat message.
> 
> I couldn't find code that penalizes servers with 0 active clients.

See Eric's response. 

> It seems the heartbeat lb opens the data file for each request. So if I'm 
> right, using slotmem is highly recommended for performance reasons.

That seems to be a safe bet.

>>> +<usage>
>>> +Sets the interval at which the watchdog_step hook runs.  Default is to run 
>>> every
>>> +second.
>>> +</usage>
>>> +</directivesynopsis>
>>> +</modulesynopsis>
>>> +
> 
> We could mention, that there are two ways (and APIs) a module can use 
> mod_watchdog. Either synchronously called every watchdog interval seconds, or 
> running on a separate thread called every interval seconds, where interval is 
> given during the setup.
> 
> Furthermore modules can tell mod_watchdog, whether the tasks should be run in 
> each child independently, or coordinated by a mutex.


Again, that would be Developer Documentation.  Should "we" put something under 
docs/manual/developer to discuss how the module is used?

S.

-- 
scte...@apache.org            http://www.temme.net/sander/
PGP FP: FC5A 6FC6 2E25 2DFD 8007  EE23 9BB8 63B0 F51B B88A

View my availability: http://tungle.me/sctemme



---------------------------------------------------------------------
To unsubscribe, e-mail: docs-unsubscr...@httpd.apache.org
For additional commands, e-mail: docs-h...@httpd.apache.org

Reply via email to