Re: [PATCH] check_forensic re tweak

2011-04-26 Thread Igor Galić


- Original Message -
 With mod_unique_id installed there's the possibility
 of having a - in the forensic id, so here's a minor
 patch to ensure check_forensic does the right thing.

 Index: support/check_forensic
 ===
 --- support/check_forensic(revision 1094142)
 +++ support/check_forensic(working copy)
 @@ -43,8 +43,8 @@
  trap rm -f -- \$all\ \$in\ \$out\; 0 1 2 3 13 15

  cut -f 1 -d '|' $F   $all
 -grep +  $all | cut -c2- | sort  $in
 -grep -- -  $all | cut -c2- | sort  $out
 +grep ^+  $all | cut -c2- | sort  $in
 +grep -- ^-  $all | cut -c2- | sort  $out

  # use -i instead of -I for GNU xargs
  join -v 1 $in $out | xargs -I xx egrep ^\\+xx $F


Thanks joe - applied in  r1096775

i

--
Igor Galić

Tel: +43 (0) 664 886 22 883
Mail: i.ga...@brainsware.org
URL: http://brainsware.org/


Re: svn commit: r1096577 - in /httpd/httpd/trunk: CHANGES docs/manual/mod/mod_ldap.xml modules/ldap/util_ldap.c modules/ldap/util_ldap_cache.c modules/ldap/util_ldap_cache_mgr.c

2011-04-26 Thread Stefan Fritsch

On Tue, 26 Apr 2011, Ruediger Pluem wrote:

On 04/25/2011 10:00 PM, s...@apache.org wrote:

Author: sf
Date: Mon Apr 25 20:00:43 2011
New Revision: 1096577

URL: http://svn.apache.org/viewvc?rev=1096577view=rev
Log:
mod_ldap: Make LDAPSharedCacheSize 0 create a non-shared-memory cache per
process as opposed to disabling caching completely. This allows to use
the non-shared-memory cache as a workaround for the shared memory cache
not being available during graceful restarts

PR: 48958

Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/docs/manual/mod/mod_ldap.xml
httpd/httpd/trunk/modules/ldap/util_ldap.c
httpd/httpd/trunk/modules/ldap/util_ldap_cache.c
httpd/httpd/trunk/modules/ldap/util_ldap_cache_mgr.c




Modified: httpd/httpd/trunk/modules/ldap/util_ldap_cache_mgr.c
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/ldap/util_ldap_cache_mgr.c?rev=1096577r1=1096576r2=1096577view=diff
==
--- httpd/httpd/trunk/modules/ldap/util_ldap_cache_mgr.c (original)
+++ httpd/httpd/trunk/modules/ldap/util_ldap_cache_mgr.c Mon Apr 25 20:00:43 
2011



@@ -363,6 +366,14 @@ util_ald_cache_t *util_ald_create_cache(
 cache-nodes = (util_cache_node_t **)util_ald_alloc(cache, cache-size * 
sizeof(util_cache_node_t *));
 if (!cache-nodes) {
 util_ald_free(cache, cache);
+#if APR_HAS_SHARED_MEMORY
+if (!st-cache_rmm)
+free(cache);
+else
+apr_rmm_free(st-cache_rmm, block);
+#else
+free(cache);


Do we ever alloc cache #if !APR_HAS_SHARED_MEMORY?


Yes, it's simply allocated with calloc. But my commit was wrong anyway, 
because the util_ald_free(cache, cache) in the line above already frees 
cache. Thanks for the review.


Cheers,
Stefan


Re: mod_fcgid can kill all the services on the server via kill -15 -1

2011-04-26 Thread Igor Seletskiy
Ryan,

I like this approach. Do you want us to prepare a patch against latest
version?
Also, we never committed to apache project. Would it be enough if we post a
patch here. Or what would be the process?


On Sun, Apr 17, 2011 at 9:58 PM, pqf p...@mailtech.cn wrote:

  Hi, all
 Another question, does proc_wait_process() should update procnode-proc_id
 to 0 too? or else mod_fcgid may send a signal to another irrelevant process
 while apache is shutting down? I don't follow up mod_fcgid for a while, I
 just took a glance, maybe it's updated somewhere else?
 By the way, procnode-proc_id is set to 0 while apache startup, so why not
 update procnode-proc_id to 0 while fcgid_create_privileged_process() is
 fail? And then check magic number 0 rather than both -1 and 0,  in both
 proc_kill_gracefully() and proc_kill_force().

 Cheers.
 Ryan



  Hello,

 There is a very interesting, and quite a rare bug in mod_fcgid. It is easy
 to reproduce if you can cause fork to fail (which can be done with
 CloudLinux -- if anyone wants to replicate it).

 *Here is how it works: *
 mod_fcgid tries to spawn a new process (proc_spawn_process in
 fcgid_proc_unix.c), but fork returns -1.
 More exactly fcgid_create_privileged_process function call returns error,
 and fills in tmpproc.pid with -1  tmpproc is assiged to procnode-proc_id).

 Now, if at the same time service httpd restart is executed, function
 kill_all_subprocess in fcgid_pm_main.c will execute, and it will try to go
 through all procnodes, sending SIGTERM via proc_kill_gracefully, (and then
 SIGKILL via proc_kill_force) to procnode-proc_id.pid
 Yet, one procnode will be pointing to procnode-proc_id.pid, causing kill
 -15 -1 (kill all).
 The end results all services on the server failing, including SSH, apache,
 syslogd, etc..

 I guess the problem is really rare for most people. Also it is quite hard
 to diagnose, as it is completely not clear where the signal came from, and
 it took us some time to correlate them with apache restarts.. Yet due to our
 OS being used by shared hosts (where httpd restart is common thing), and our
 ability to limit memory available to processes on per virtual host bases
 (which causes fork to fail once that virtual host reaches memory limit), we
 see the issue quite often.

 The solution is quite simple (not sure if it is the best / right solution),
 in file: fcgid_proc_unix.c, in methods proc_kill_gracefully, line:

 rv = apr_proc_kill((procnode-proc_id), SIGTERM);

 should be changed to:
if (procnode-proc_id.pid != -1) {
   rv = apr_proc_kill((procnode-proc_id), SIGTERM);
} else {
   rv = APR_SUCCESS;
}

 Similarly in proc_kill_force
 rv = apr_proc_kill((procnode-proc_id), SIGKILL);
 should be changed to:
if (procnode-proc_id.pid != -1) {
   rv = apr_proc_kill((procnode-proc_id), SIGKILL);
} else {
   rv = APR_SUCCESS;
}

 Regards,
 Igor Seletskiy
 CEO @ Cloud Linux Inc





Re: svn commit: r1057048 - in /httpd/httpd/trunk: CHANGES modules/generators/mod_status.c

2011-04-26 Thread Jeff Trawick
On Sun, Jan 9, 2011 at 6:00 PM,  s...@apache.org wrote:
 Author: sf
 Date: Sun Jan  9 23:00:33 2011
 New Revision: 1057048

 URL: http://svn.apache.org/viewvc?rev=1057048view=rev
 Log:
 mod_status: Don't show slots which are disabled by MaxClients as open.

They now get displayed as ' ' instead of '.'.

No complaints here about not displaying unused slots as open, but the
result can look a bit odd.

-cut here---
1 requests currently being processed, 49 idle workers

_
__W__



Scoreboard Key:
---cut here--

On Windows, with huge default ThreadLimit relative to ThreadsPerChild,
you're left with lots of unexpected whitespace.

What about just surpressing the ' ' when printing out the worker map?

After a graceful restart which shrinks MaxClients or ThreadsPerChild
you might have the map gradually get smaller for a short time as
workers in those beyond scoreboard entries exit, but generally it
would look better.

Comments?  (Do folks want the space used to reflect ThreadLimit * ServerLimit?)

 Modified: httpd/httpd/trunk/modules/generators/mod_status.c
 URL: 
 http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_status.c?rev=1057048r1=1057047r2=1057048view=diff
 ==
 --- httpd/httpd/trunk/modules/generators/mod_status.c (original)
 +++ httpd/httpd/trunk/modules/generators/mod_status.c Sun Jan  9 23:00:33 2011

 @@ -483,7 +492,8 @@ static int status_handler(request_rec *r
         ap_rputs(\bcodeL/code/b\ Logging, \n, r);
         ap_rputs(\bcodeG/code/b\ Gracefully finishing,br / \n, 
 r);
         ap_rputs(\bcodeI/code/b\ Idle cleanup of worker, \n, r);
 -        ap_rputs(\bcode./code/b\ Open slot with no current 
 process/p\n, r);
 +        ap_rputs(\bcode./code/b\ Open slot with no current 
 process,br /\n, r);
 +        ap_rputs(\bcode /code/b\ Slot disabled by MaxClients 
 setting/p\n, r);

  (and/or by ThreadsPerChild)


Re: svn commit: r1057048 - in /httpd/httpd/trunk: CHANGES modules/generators/mod_status.c

2011-04-26 Thread Rainer Jung

On 26.04.2011 21:57, Jeff Trawick wrote:

On Sun, Jan 9, 2011 at 6:00 PM,s...@apache.org  wrote:

Author: sf
Date: Sun Jan  9 23:00:33 2011
New Revision: 1057048

URL: http://svn.apache.org/viewvc?rev=1057048view=rev
Log:
mod_status: Don't show slots which are disabled by MaxClients as open.


They now get displayed as ' ' instead of '.'.

No complaints here about not displaying unused slots as open, but the
result can look a bit odd.

-cut here---
1 requests currently being processed, 49 idle workers

_
 __W__



Scoreboard Key:
---cut here--

On Windows, with huge default ThreadLimit relative to ThreadsPerChild,
you're left with lots of unexpected whitespace.

What about just surpressing the ' ' when printing out the worker map?

After a graceful restart which shrinks MaxClients or ThreadsPerChild
you might have the map gradually get smaller for a short time as
workers in those beyond scoreboard entries exit, but generally it
would look better.

Comments?  (Do folks want the space used to reflect ThreadLimit * ServerLimit?)


Modified: httpd/httpd/trunk/modules/generators/mod_status.c
URL: 
http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_status.c?rev=1057048r1=1057047r2=1057048view=diff
==
--- httpd/httpd/trunk/modules/generators/mod_status.c (original)
+++ httpd/httpd/trunk/modules/generators/mod_status.c Sun Jan  9 23:00:33 2011



@@ -483,7 +492,8 @@ static int status_handler(request_rec *r
 ap_rputs(\bcodeL/code/b\ Logging, \n, r);
 ap_rputs(\bcodeG/code/b\ Gracefully finishing,br /  \n, 
r);
 ap_rputs(\bcodeI/code/b\ Idle cleanup of worker, \n, r);
-ap_rputs(\bcode./code/b\ Open slot with no current 
process/p\n, r);
+ap_rputs(\bcode./code/b\ Open slot with no current process,br 
/\n, r);
+ap_rputs(\bcode  /code/b\ Slot disabled by MaxClients 
setting/p\n, r);


   (and/or by ThreadsPerChild)


I'd say the additional slots are more of an implementation detail 
(pre-allocated to allow increasing the actual available processes and 
threads by graceful restart) and do not provide relevant information for 
mod_status. So I am +1 for dropping, but can live with white space too.


Regards,

Rainer


Re: Problem with DNS lookup caching in reverse proxy

2011-04-26 Thread Igor Galić


- Original Message -
 Hello everybody,

 I have tried to solve my issue by contacting the users@ mailing list
 but meanwhile I think this is the more appropriate list to address
 it.
 I have issues with the mod_proxy resolving a full qualified
 servername via DNS and caching it in its connection pool so a change
 in the resolver doesn't get noticed by mod_proxy. After trying all
 the different possibilities that came to mind I'm back at where it
 all started.
 I still cannot find a solution to the problem that mod_proxy caches
 the IP address resolved by DNS and thus doesn't acknowledge all
 changes to it. With the help of Igor Galić on the users@ mailing
 list and by means of Bug Report 50551 I am able to get about 95% of
 the cases solved. But there still are cases where the resolved
 address won't be changed.
 But first let me describe the configuration more deeply:

 What we have is a configuration where the Apache Reverse Proxy (RPX)
 is used to allow transparent switch of the backend JEE server. We
 solve this by configuring an alias to the service on the backend.
 The alias is then entered in whatever DNS resolver we use to point
 to the one system which is currently meant to receive the request.
 This allows us to make application changes on one system while the
 other is still working, then transparently switching to the updates
 server to do maintenance on the other.

 Now the problem with this is that Apache, or more exactly the
 mod_proxy, has a connection pool mechanism which apparently binds to
 a once resolved IP address forever. See the type struct
 proxy_conn_pool in file mod_proxy.h or just my description in Bug
 Report 50551.

 It appears to me, and I believe I was able to show this by extensive
 testing, that the member variable apr_sockaddr_t *addr /* Preparsed
 remote address info */
 in this struct is responsible for this behavior and that this
 preparsed remote address is invalidated only if the last pooled
 connection in this connection pool is timed out.

 In my opinion the best solution to this problem would be to add an
 additional perameter to mod_proxy to force a renewal of the DNS
 resolve procedure for this address after a set timeout like it is
 possible in mod_weblogic. Unfortunately this is way beyond my

Instead of re-resolving after a set timeout, it would make sense
to re-resolve after a timeout occured, marking the worker in error.

The only question is: Is that the struct shared across the pool?

 capabilities at the moment to implement it myself. But I wonder why
 there seems to be no need for such an option so nobody implemented
 it yet. Perhaps there is another I'm still not aware of?

 Regards
 Slawo



 -Ursprüngliche Nachricht-
 Von: Slawomir R. Janotta [mailto:s.jano...@aviope.de]
 Gesendet: Freitag, 3. Dezember 2010 16:54
 An: us...@httpd.apache.org
 Betreff: Re: [users@httpd] Problem with DNS lookup caching in reverse
 proxy

 
  Would it be a viable option for you to not use the DNS method, and
  instead do something like:
 
  Proxy balancer://notsohotcluster
BalanceMember https://backend1.mydomain.com:8080/
BalanceMember https://backend1.mydomain.com:8080/ status=+H
  /Proxy
 
  ProxyPass / balancer://notsohotcluster
  ProxyPassReverse / balancer://notsohotcluster
 
  This will (probably) simply mitigate the DNS problem.
 
 
  i
 
  --
  Igor Galić
 
  Tel: +43 (0) 664 886 22 883
  Mail: i.ga...@brainsware.org
  URL: http://brainsware.org/
 
 
 Thank you very much, Igor.
 Indeed, your suggestion solves most of the cases where I encounter
 the
 switch-over of the backend hosts.
 However, this does *not* help in all cases, as this works only if the
 backend is no more reachable and thus an error condition occurs.
 Sometimes
 I just want to switch from one backend to the other without shutting
 any
 of them. A working TTL in the connection pool or in the DNS cache
 would be
 ideal for this.
 Perhaps I have to open a new Bug report in Bugzilla.
 Regards
 Slawo.


 Sicherheitshinweis:
 Dieses E-Mail von PostFinance ist signiert. Weitere Informationen
 finden Sie unter:
 https://www.postfinance.ch/e-signature.
 Geben Sie Ihre Sicherheitselemente niemals Dritten bekannt.

--
Igor Galić

Tel: +43 (0) 664 886 22 883
Mail: i.ga...@brainsware.org
URL: http://brainsware.org/