Lots of configs

AD straightflush at gmail.com
Mon Mar 7 16:30:22 CET 2011


Cool, as for the startup, i wonder if you can instead of trying to insert
into VCL_Init, try to do just, as part of the startup process hit a special
URL to load the hash_Table.  Or another possibility might be to load an
external module, and in there, populate the hash.



On Mon, Mar 7, 2011 at 9:45 AM, David Helkowski <dhelkowski at sbgnet.com>wrote:

>  vcl configuration is turned straight into C first of all.
> You can put your own C code in both the functions and globally.
> When including headers/libraries, you essentially just have to include the
> code globally.
>
> I am not sure if there is any 'init' function when varnish is called, so I
> was suggesting that
> the hash be initiated by just checking if the hash has been created yet.
>
> This will cause a penalty to the first vcl_recv call that goes through; but
> that shouldn't
> matter.
>
> Note that I just passed a dummy number as an example to the custom config,
> and that
> I didn't show how to do anything in the custom function. In this example,
> all custom
> stuff would be in straight C. You would need to use varnish itself to
> compile what config
> you want and look at the C code it generates to figure out how to tie in
> all your custom
> configs....
>
> eg:
>
> C{
>   #include "hash.c" // a string hashing store/lookup libary; you'll need to
> write one
>     // or possibly just use some freely available one.
>   hashc *hash=0;
>
>   void init_hash() {
>     if( hash ) return;
>     hash.store( 'test.com', &test_com );
>     // same for all domains
>   }
>
>   void test_com( int n ) {
>     // custom vcl_recv stuff for domain 'test'
>   }
> }
>
> sub vcl_recv {
>   C{
>     char *domain;
>     // [ place some code to fetch domain and put it in domain here ]
>     if( !hash ) init_hash();
>     void (*func)(int);
>     func = hash.lookup( domain );
>     func(1);
>
>   }
> }
>
> On 3/7/2011 9:23 AM, AD wrote:
>
> but dont all the configs need to be loaded at runtime, not sure the
> overhead here?  I think what you mentioned seems like a really innovative
> way to "call" the function but what about anyimpact to "loading" all these
> configs?
>
>  If i understand what you are saying, i put a "call test_func;" in
> vcl_recv which turned into this in C
>
>      if (VGC_function_test_func(sp))
>         return (1);
>       if
>
>  Are you suggesting your hash_table would take over this step ?
>
>  Adam
>
> On Mon, Mar 7, 2011 at 8:02 AM, David Helkowski <dhelkowski at sbgnet.com>wrote:
>
>>  The best way would be to use a jump table.
>> By that, I mean to make multiple subroutines in C, and then to jump to the
>> different subroutines by looking
>> up pointers to the subroutines using a string hashing/lookup system.
>>
>> You would also need a flag to indicate whether the hash has been
>> 'initialized' yet as well.
>> The initialization would consist of storing function pointers at the hash
>> locations corresponding to each
>> of the domains.
>>
>> I attempted to do this myself when I first started using varnish, but I
>> was having problems with varnish
>> crashing when attempting to use the code I wrote in C. There may be
>> limitations to the C code that can be
>> used.
>>
>>
>> On 3/6/2011 5:39 PM, AD wrote:
>>
>>  Hello,
>>
>>  what is the best way to run an instance of varnish that may need
>> different vcl configurations for each hostname.  This could end up being
>> 100-500 includes to map to each hostname and then a long if/then block based
>> on the hostname.  Is there a more scalable way to deal with this?  We have
>> been toying with running one large varnish instance with tons of includes or
>> possibly running multiple instances of varnish (with the config broken up)
>> or spreading the load across different clusters (kind of like sharding)
>> based on hostname to keep the configuration simple.
>>
>>   Any best practices here?  Are there any notes on the performance impact
>> of the size of the VCL or the amount of if/then statements in vcl_recv to
>> process a unique call function ?
>>
>>  Thanks
>>
>>
>> _______________________________________________
>> varnish-misc mailing listvarnish-misc at varnish-cache.orghttp://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>>
>>
>>
>> _______________________________________________
>> varnish-misc mailing list
>> varnish-misc at varnish-cache.org
>> http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>>
>
>
>
> _______________________________________________
> varnish-misc mailing list
> varnish-misc at varnish-cache.org
> http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-misc/attachments/20110307/f9b2904f/attachment-0003.html>


More information about the varnish-misc mailing list