<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    vcl configuration is turned straight into C first of all.<br>
    You can put your own C code in both the functions and globally.<br>
    When including headers/libraries, you essentially just have to
    include the code globally.<br>
    <br>
    I am not sure if there is any 'init' function when varnish is
    called, so I was suggesting that<br>
    the hash be initiated by just checking if the hash has been created
    yet.<br>
    <br>
    This will cause a penalty to the first vcl_recv call that goes
    through; but that shouldn't<br>
    matter.<br>
    <br>
    Note that I just passed a dummy number as an example to the custom
    config, and that<br>
    I didn't show how to do anything in the custom function. In this
    example, all custom<br>
    stuff would be in straight C. You would need to use varnish itself
    to compile what config<br>
    you want and look at the C code it generates to figure out how to
    tie in all your custom<br>
    configs....<br>
    <br>
    eg:<br>
    <br>
    C{<br>
      #include "hash.c" // a string hashing store/lookup libary; you'll
    need to write one<br>
        // or possibly just use some freely available one.<br>
      hashc *hash=0;<br>
      <br>
      void init_hash() {<br>
        if( hash ) return;<br>
        hash.store( 'test.com', &test_com );<br>
        // same for all domains<br>
      }<br>
      <br>
      void test_com( int n ) {<br>
        // custom vcl_recv stuff for domain 'test'<br>
      }<br>
    }<br>
    <br>
    sub vcl_recv {<br>
      C{<br>
        char *domain;<br>
        // [ place some code to fetch domain and put it in domain here ]<br>
        if( !hash ) init_hash();<br>
        void (*func)(int);<br>
        func = hash.lookup( domain );<br>
        func(1);<br>
      }<br>
    }<br>
    <br>
    On 3/7/2011 9:23 AM, AD wrote:
    <blockquote
      cite="mid:AANLkTim6LwKHSiMkQpyzygj2a10jzWme+Wp4LKCn+Se2@mail.gmail.com"
      type="cite">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?  
      <div>
        <br>
      </div>
      <div>If i understand what you are saying, i put a "call
        test_func;" in vcl_recv which turned into this in C</div>
      <div><br>
      </div>
      <div>
        <div>    if (VGC_function_test_func(sp))</div>
        <div>        return (1);</div>
        <div>      if</div>
        <div><br>
        </div>
        <div>Are you suggesting your hash_table would take over this
          step ?</div>
        <div><br>
        </div>
        <div>Adam</div>
        <br>
        <div class="gmail_quote">On Mon, Mar 7, 2011 at 8:02 AM, David
          Helkowski <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:dhelkowski@sbgnet.com" target="_blank">dhelkowski@sbgnet.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
            0.8ex; border-left: 1px solid rgb(204, 204, 204);
            padding-left: 1ex;">
            <div bgcolor="#ffffff" text="#000000"> The best way would be
              to use a jump table.<br>
              By that, I mean to make multiple subroutines in C, and
              then to jump to the different subroutines by looking<br>
              up pointers to the subroutines using a string
              hashing/lookup system.<br>
              <br>
              You would also need a flag to indicate whether the hash
              has been 'initialized' yet as well.<br>
              The initialization would consist of storing function
              pointers at the hash locations corresponding to each<br>
              of the domains.<br>
              <br>
              I attempted to do this myself when I first started using
              varnish, but I was having problems with varnish<br>
              crashing when attempting to use the code I wrote in C.
              There may be limitations to the C code that can be<br>
              used.
              <div>
                <div><br>
                  <br>
                  On 3/6/2011 5:39 PM, AD wrote: </div>
              </div>
              <blockquote type="cite">
                <div>
                  <div>Hello,
                    <div> </div>
                    <div> 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.</div>
                    <div><br>
                    </div>
                    <div> 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 ?</div>
                    <div><br>
                    </div>
                    <div> Thanks</div>
                    <div><br>
                    </div>
                  </div>
                </div>
                <pre><fieldset></fieldset>
_______________________________________________
varnish-misc mailing list
<a moz-do-not-send="true" href="mailto:varnish-misc@varnish-cache.org" target="_blank">varnish-misc@varnish-cache.org</a>
<a moz-do-not-send="true" href="http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc" target="_blank">http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc</a></pre>
              </blockquote>
              <br>
            </div>
            <br>
            _______________________________________________<br>
            varnish-misc mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:varnish-misc@varnish-cache.org"
              target="_blank">varnish-misc@varnish-cache.org</a><br>
            <a moz-do-not-send="true"
              href="http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc"
              target="_blank">http://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc</a><br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>