On 31/07/11 07:26, Kinkie wrote:
Hi all,
   attached is a first revision of the patch for review. I've build-
and run- tested it.
Only issue not fully investigated is that when an user login is
specified in the request, carpSelectParent is not invoked at all. This
is however external from the carp code itself; only effect it has is
that the "login" carp key selector is actually useless.


When login is in headers rather than URL you may need to use:

  if (tp->options.carp_key.login) {
      if (request->login && *request->login) {
          key.append(request->login);
      }
#if USE_AUTH
        else if (request->auth_user_request) {
          key.append(request->auth_user_request->username());
      }
#endif
          key.append('@');
  }

I'm not sure if you want auth auth_user_request->type() and public tokens embeded in the header case as well.


On Mon, Jul 18, 2011 at 2:01 PM, Amos Jeffries<[email protected]>  wrote:
On 18/07/11 22:27, Kinkie wrote:

Hi guys,
   I would like some input on how to best tweak CARP with a very small
change:
as it is now the canonical URL is used to define the hash for next parent.
It is very efficient - even too much.

I'd like to add a variant to it so that only the host part of the URL
is used as initial key for the hashing.
This will decrease the effectiveness of the balancing, but make it
easier to cope with some websites which do not like it when requests
travel across different routes.

There are three ways I can think of to address this:
- change the way CARP works - it's an one-liner
- new global setting
- new carp option (e.g. hcarp or host-carp)

What do you think is the best way to implement this?

I think a slightly more flexible way would be a carp-key=XX parameter. Where
one can potentially set (scheme,host,port,path,params) tags. That would
allow a bit more tuning of the mask.


src/cache_cf.cc:
 * Can you use strncasecmp instead of casecmp?
   so the parser can work on const char* and avoid strdup() and \0 writes

src/carp.cc:
 * s/"cornercases"/"corner cases"
* also a bit wrong, this code does not cover _all_ corner cases as canonical. Things like unknown method and unknown protocols will use the else condition. Which in fact defaults to the custom key.
 At least the docs needs to say "corner cases should use canonical URL"

Can you explain why that is even needed though? Both CONNECT and URN cases have all keys with known values. Albeit some values are "".

Amos
--
Please be using
  Current Stable Squid 2.7.STABLE9 or 3.1.14
  Beta testers wanted for 3.2.0.10

Reply via email to