httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Trawick <traw...@gmail.com>
Subject Re: svn commit: r910705 - in /httpd/httpd/trunk: CHANGES docs/manual/programs/htcacheclean.xml support/htcacheclean.c
Date Tue, 16 Feb 2010 22:11:40 GMT
On Tue, Feb 16, 2010 at 4:42 PM,  <minfrin@apache.org> wrote:
> Author: minfrin
> Date: Tue Feb 16 21:42:03 2010
> New Revision: 910705
>
> URL: http://svn.apache.org/viewvc?rev=910705&view=rev
> Log:
> support/htcacheclean: Teach it how to write a pid file (modelled on
> httpd's writing of a pid file) so that it becomes possible to run
> more than one instance of htcacheclean on the same machine.
>
> Modified:
>    httpd/httpd/trunk/CHANGES
>    httpd/httpd/trunk/docs/manual/programs/htcacheclean.xml
>    httpd/httpd/trunk/support/htcacheclean.c
>
> Modified: httpd/httpd/trunk/CHANGES
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=910705&r1=910704&r2=910705&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/CHANGES [utf-8] (original)
> +++ httpd/httpd/trunk/CHANGES [utf-8] Tue Feb 16 21:42:03 2010
> @@ -2,6 +2,11 @@
>
>  Changes with Apache 2.3.7
>
> +  *) support/htcacheclean: Teach it how to write a pid file (modelled on
> +     httpd's writing of a pid file) so that it becomes possible to run
> +     more than one instance of htcacheclean on the same machine.
> +     [Graham Leggett]

Based on my own initial confusion of the "becomes possible" language
(which isn't strictly true), I suspect that this feature description
would be more readily understood if this stressed the ease of
termination by pid file, since the admin/script no longer has to check
ps output (which certainly is a bigger benefit when there are multiple
instances, which would require looking at the path parameter).
Mileage varies, of course.

> +
>   *) Log command line on startup, so there's a record of command line
>      arguments like -f.
>      PR 48752.  [Dan Poirier]
>
> Modified: httpd/httpd/trunk/docs/manual/programs/htcacheclean.xml
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/programs/htcacheclean.xml?rev=910705&r1=910704&r2=910705&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/docs/manual/programs/htcacheclean.xml (original)
> +++ httpd/httpd/trunk/docs/manual/programs/htcacheclean.xml Tue Feb 16 21:42:03 2010
> @@ -49,6 +49,7 @@
>     [ -<strong>n</strong> ]
>     [ -<strong>t</strong> ]
>     [ -<strong>i</strong> ]
> +    [ -<strong>P</strong><var>pidfile</var> ]
>     -<strong>d</strong><var>interval</var>
>     -<strong>p</strong><var>path</var>
>     -<strong>l</strong><var>limit</var></code></p>
> @@ -95,6 +96,10 @@
>     should be the same value as specified with the <directive
>     module="mod_disk_cache">CacheRoot</directive> directive.</dd>
>
> +    <dt><code>-P<var>pidfile</var></code></dt>
> +    <dd>Specify <var>pidfile</var> as the name of the file to write
the
> +    process ID to when daemonized.</dd>
> +
>     <dt><code>-l<var>limit</var></code></dt>
>     <dd>Specify <var>limit</var> as the total disk cache size limit.
The value
>     is expressed in bytes by default (or attaching <code>B</code> to the
>
> Modified: httpd/httpd/trunk/support/htcacheclean.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/support/htcacheclean.c?rev=910705&r1=910704&r2=910705&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/support/htcacheclean.c (original)
> +++ httpd/httpd/trunk/support/htcacheclean.c Tue Feb 16 21:42:03 2010
> @@ -708,8 +708,8 @@
>     }
>     apr_file_printf(errfile,
>     "%s -- program for cleaning the disk cache."                        
    NL
> -    "Usage: %s [-Dvtrn] -pPATH -lLIMIT"                            
         NL
> -    "       %s [-nti] -dINTERVAL -pPATH -lLIMIT"                    
        NL
> +    "Usage: %s [-Dvtrn] -pPATH -lLIMIT [-PPIDFILE]"                    
     NL
> +    "       %s [-nti] -dINTERVAL -pPATH -lLIMIT [-PPIDFILE]"            
    NL
>                                                          
                   NL
>     "Options:"                                              
                NL
>     "  -d   Daemonize and repeat cache cleaning every INTERVAL minutes."     NL
> @@ -735,6 +735,8 @@
>                                                          
                   NL
>     "  -p   Specify PATH as the root directory of the disk cache."          
NL
>                                                          
                   NL
> +    "  -P   Specify PIDFILE as the file to write the pid file to."          
NL

s/write the pid file to/write the pid to/

> +                                                        
                    NL
>     "  -l   Specify LIMIT as the total disk cache size limit. Attach 'K'"    NL
>     "       or 'M' to the number for specifying KBytes or MBytes."          
NL
>                                                          
                   NL
> @@ -770,7 +772,7 @@
>     int retries, isdaemon, limit_found, intelligent, dowork;
>     char opt;
>     const char *arg;
> -    char *proxypath, *path;
> +    char *proxypath, *path, *pidfile;
>     char errmsg[1024];
>
>     interrupted = 0;
> @@ -786,6 +788,7 @@
>     intelligent = 0;
>     previous = 0; /* avoid compiler warning */
>     proxypath = NULL;
> +    pidfile = NULL;
>
>     if (apr_app_initialize(&argc, &argv, NULL) != APR_SUCCESS) {
>         return 1;
> @@ -807,7 +810,7 @@
>     apr_getopt_init(&o, pool, argc, argv);
>
>     while (1) {
> -        status = apr_getopt(o, "iDnvrtd:l:L:p:", &opt, &arg);
> +        status = apr_getopt(o, "iDnvrtd:l:L:p:P:", &opt, &arg);
>         if (status == APR_EOF) {
>             break;
>         }
> @@ -912,6 +915,14 @@
>                                        proxypath, apr_strerror(status,
errmsg, sizeof errmsg)));
>                 }
>                 break;
> +
> +            case 'P':
> +                if (pidfile) {
> +                    usage_repeated_arg(pool, opt);
> +                }
> +                pidfile = apr_pstrdup(pool, arg);
> +                break;
> +
>             } /* switch */
>         } /* else */
>     } /* while */
> @@ -957,6 +968,22 @@
>     }
>  #endif
>
> +    if (pidfile) {
> +        apr_file_t *file;
> +        pid_t mypid = getpid();
> +        if (APR_SUCCESS == (status = apr_file_open(&file, pidfile, APR_WRITE
> +                | APR_CREATE | APR_TRUNCATE,
> +                APR_UREAD | APR_UWRITE | APR_GREAD, pool))) {
> +            apr_file_printf(file, "%ld" APR_EOL_STR, (long) mypid);

APR_PID_T_FMT and no (long) cast

> +            apr_file_close(file);
> +        }
> +        else if (!isdaemon) {
> +            apr_file_printf(errfile,
> +                    "Could not write the pid file '%s': %s" APR_EOL_STR,
> +                    pidfile, apr_strerror(status, errmsg, sizeof errmsg));
> +        }

why not just let this be a fatal error?  the user specified an invalid
path in all likelihood and needs to fix it

Also, I suspect that cleaning up the pid file on exit would be anticipated.

Mime
View raw message