Folks,

  I thoroughly support this patch (as an Options flag or as a stand-alone
indicator) for 1.3.20.  I'm +1 on (finally) extending the Options byte, but
+1 on the alternative since folks object.

Rodent: Extending Options has been nixed in the past [no opinion]
Joshua: Options is already overloaded, confusing [a -.5, perhaps?]
Marc:   Options is depreciated NCSA compatibility cruft

Phil, I can't find your original patch (sans Options.) I'd suggest the
directive ETagIdentity flag (on or off, default of on for most platforms, 
perhaps an IFDEF for win32/os2 to off.)

Bill

----- Original Message ----- 
From: "Dietz, Phil E." <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, February 26, 2001 3:44 PM
Subject: [RFC] InodeEtag option


> OK, I converted my ETag patch to use Options.  Of note:
> 
> - the allow_options_t size increased to a long because all 8 bits of char
> were in use.
> - if InodeEtag is not present in Options, it uses inodes like the current
> behaviour.
> - the patch below is beta and against version 1.3.17.  Newer ones against
> 1.3.19 to follow.
> 
> I will test with Insure later this week.
> Phil Dietz
> 
> Patch Version 1.0:
> 
> --- ../apache_1.3.17/src/main/http_protocol.c   Thu Jan 18 07:25:07 2001
> +++ src/main/http_protocol.c    Mon Feb 26 11:56:23 2001
> @@ -656,16 +656,30 @@
>       * we send a weak tag instead of a strong one, since it could
>       * be modified again later in the second, and the validation
>       * would be incorrect.
> +     *
> +     * The use of the inode is controlled with the InodeEtag Option.
> +     * Disabling allows browser-side cacheing (304s) to happen more often
> +     * when serving default_handler objects from web farms with > 1 unit.
>       */
>      
>      weak = ((r->request_time - r->mtime > 1) && !force_weak) ? "" : "W/";
>  
>      if (r->finfo.st_mode != 0) {
> -        etag = ap_psprintf(r->pool,
> +        
> +       if (ap_allow_options(r) & OPT_INODE_ETAG) {
> +            etag = ap_psprintf(r->pool,
>                      "%s\"%lx-%lx-%lx\"", weak,
>                      (unsigned long) r->finfo.st_ino,
>                      (unsigned long) r->finfo.st_size,
>                      (unsigned long) r->mtime);
> +       } 
> +       else {
> +            etag = ap_psprintf(r->pool,
> +                    "%s\"%lx-%lx\"", weak,
> +                    (unsigned long) r->finfo.st_size,
> +                    (unsigned long) r->mtime);
> +       }
> +
>      }
>      else {
>          etag = ap_psprintf(r->pool, "%s\"%lx\"", weak,
> 
> 
> --- ../apache_1.3.17/src/main/http_core.c       Mon Jan 15 12:04:57 2001
> +++ src/main/http_core.c        Mon Feb 26 14:28:40 2001
> @@ -1298,6 +1298,9 @@
>         else if (!strcasecmp(w, "RunScripts")) { /* AI backcompat. Yuck */
>             opt = OPT_MULTI|OPT_EXECCGI;
>         }
> +       else if (!strcasecmp(w, "InodeEtag")) {
> +           opt = OPT_INODE_ETAG;
> +       }
>         else if (!strcasecmp(w, "None")) {
>             opt = OPT_NONE;
>         }
> 
> --- ../apache_1.3.17/src/include/http_core.h    Mon Jan 15 12:04:33 2001
> +++ src/include/http_core.h     Mon Feb 26 14:43:18 2001
> @@ -84,7 +84,8 @@
>  #define OPT_INCNOEXEC 32
>  #define OPT_SYM_OWNER 64
>  #define OPT_MULTI 128
> -#define OPT_ALL (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI)
> +#define OPT_INODE_ETAG 256
> +#define OPT_ALL
> (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI|OPT_INODE_ETAG)
>  
>  /* options for get_remote_host() */
>  /* REMOTE_HOST returns the hostname, or NULL if the hostname
> @@ -178,7 +179,7 @@
>  
>  /* Per-directory configuration */
>  
> -typedef unsigned char allow_options_t;
> +typedef unsigned long allow_options_t;
>  typedef unsigned char overrides_t;
>  
>  typedef struct {
> 
> 

Reply via email to