Changes of Revision 8
[-] [+] | Changed | varnish.changes |
[-] [+] | Changed | varnish.spec ^ |
[-] [+] | Deleted | varnishncsa-vhost-3.0.0.patch ^ |
@@ -1,48 +0,0 @@ ---- bin/varnishncsa/varnishncsa.c.orig 2011-07-02 22:11:26.843623201 +0200 -+++ bin/varnishncsa/varnishncsa.c 2011-07-02 22:18:06.336220163 +0200 -@@ -107,6 +107,8 @@ - - static size_t nll; - -+static int print_virtualhost = 0; -+ - static int m_flag = 0; - - static const char *format; -@@ -554,6 +556,8 @@ - break; - - case 'h': -+ if (lp->df_Host && print_virtualhost) -+ fprintf(fo, "%s ", lp->df_Host); - if (!lp->df_h && spec & VSL_S_BACKEND) - fprintf(fo, "127.0.0.1"); - else -@@ -710,7 +714,7 @@ - { - - fprintf(stderr, -- "usage: varnishncsa %s [-aDV] [-n varnish_name] " -+ "usage: varnishncsa %s [-aDvV] [-n varnish_name] " - "[-P file] [-w file]\n", VSL_USAGE); - exit(1); - } -@@ -729,7 +733,7 @@ - vd = VSM_New(); - VSL_Setup(vd); - -- while ((c = getopt(argc, argv, VSL_ARGS "aDP:Vw:fF:")) != -1) { -+ while ((c = getopt(argc, argv, VSL_ARGS "aDP:Vw:fvF:")) != -1) { - switch (c) { - case 'a': - a_flag = 1; -@@ -756,6 +760,9 @@ - case 'P': - P_arg = optarg; - break; -+ case 'v': -+ print_virtualhost = 1; -+ break; - case 'V': - VCS_Message("varnishncsa"); - exit(0); | ||
Deleted | varnish-3.0.1.tar.bz2/doc/sphinx/=build/doctrees/reference/params.doctree ^ | |
[-] [+] | Deleted | varnish-3.0.1.tar.bz2/doc/sphinx/=build/html/_sources/reference/params.txt ^ |
@@ -1,579 +0,0 @@ -acceptor_sleep_decay - - Default: 0.900 - - Flags: experimental - - If we run out of resources, such as file descriptors or worker threads, the acceptor will sleep between accepts. - This parameter (multiplicatively) reduce the sleep duration for each succesfull accept. (ie: 0.9 = reduce by 10%) - -acceptor_sleep_incr - - Units: s - - Default: 0.001 - - Flags: experimental - - If we run out of resources, such as file descriptors or worker threads, the acceptor will sleep between accepts. - This parameter control how much longer we sleep, each time we fail to accept a new connection. - -acceptor_sleep_max - - Units: s - - Default: 0.050 - - Flags: experimental - - If we run out of resources, such as file descriptors or worker threads, the acceptor will sleep between accepts. - This parameter limits how long it can sleep between attempts to accept new connections. - -auto_restart - - Units: bool - - Default: on - - Restart child process automatically if it dies. - -ban_dups - - Units: bool - - Default: on - - Detect and eliminate duplicate bans. - -ban_lurker_sleep - - Units: s - - Default: 0.01 - - How long time does the ban lurker thread sleeps between successful attempts to push the last item up the ban list. It always sleeps a second when nothing can be done. - A value of zero disables the ban lurker. - -between_bytes_timeout - - Units: s - - Default: 60 - - Default timeout between bytes when receiving data from backend. We only wait for this many seconds between bytes before giving up. A value of 0 means it will never time out. VCL can override this default value for each backend request and backend request. This parameter does not apply to pipe. - -cc_command - - Default: exec gcc -std=gnu99 -pthread -fpic -shared -Wl,-x -o %o %s - - Flags: must_reload - - Command used for compiling the C source code to a dlopen(3) loadable object. Any occurrence of %s in the string will be replaced with the source file name, and %o will be replaced with the output file name. - -cli_buffer - - Units: bytes - - Default: 8192 - - Size of buffer for CLI input. - You may need to increase this if you have big VCL files and use the vcl.inline CLI command. - NB: Must be specified with -p to have effect. - -cli_timeout - - Units: seconds - - Default: 10 - - Timeout for the childs replies to CLI requests from the master. - -clock_skew - - Units: s - - Default: 10 - - How much clockskew we are willing to accept between the backend and our own clock. - -connect_timeout - - Units: s - - Default: 0.7 - - Default connection timeout for backend connections. We only try to connect to the backend for this many seconds before giving up. VCL can override this default value for each backend and backend request. - -critbit_cooloff - - Units: s - - Default: 180.0 - - Flags: - - How long time the critbit hasher keeps deleted objheads on the cooloff list. - -default_grace - - Units: seconds - - Default: 10 - - Flags: delayed - - Default grace period. We will deliver an object this long after it has expired, provided another thread is attempting to get a new copy. - Objects already cached will not be affected by changes made until they are fetched from the backend again. - -default_keep - - Units: seconds - - Default: 0 - - Flags: delayed - - Default keep period. We will keep a useless object around this long, making it available for conditional backend fetches. That means that the object will be removed from the cache at the end of ttl+grace+keep. - -default_ttl - - Units: seconds - - Default: 120 - - The TTL assigned to objects if neither the backend nor the VCL code assigns one. - Objects already cached will not be affected by changes made until they are fetched from the backend again. - To force an immediate effect at the expense of a total flush of the cache use "ban.url ." - -diag_bitmap - - Units: bitmap - - Default: 0 - - Bitmap controlling diagnostics code:: - - 0x00000001 - CNT_Session states. - 0x00000002 - workspace debugging. - 0x00000004 - kqueue debugging. - 0x00000008 - mutex logging. - 0x00000010 - mutex contests. - 0x00000020 - waiting list. - 0x00000040 - object workspace. - 0x00001000 - do not core-dump child process. - 0x00002000 - only short panic message. - 0x00004000 - panic to stderr. - 0x00010000 - synchronize shmlog. - 0x00020000 - synchronous start of persistence. - 0x00040000 - release VCL early. - 0x80000000 - do edge-detection on digest. - Use 0x notation and do the bitor in your head :-) - -esi_syntax - - Units: bitmap - - Default: 0 - - Bitmap controlling ESI parsing code:: - - 0x00000001 - Don't check if it looks like XML - 0x00000002 - Ignore non-esi elements - 0x00000004 - Emit parsing debug records - 0x00000008 - Force-split parser input (debugging) - Use 0x notation and do the bitor in your head :-) - -expiry_sleep - - Units: seconds - - Default: 1 - - How long the expiry thread sleeps when there is nothing for it to do. - -fetch_chunksize - - Units: kilobytes - - Default: 128 - - Flags: experimental - - The default chunksize used by fetcher. This should be bigger than the majority of objects with short TTLs. - Internal limits in the storage_file module makes increases above 128kb a dubious idea. - -fetch_maxchunksize - - Units: kilobytes - - Default: 262144 - - Flags: experimental - - The maximum chunksize we attempt to allocate from storage. Making this too large may cause delays and storage fragmentation. - -first_byte_timeout - - Units: s - - Default: 60 - - Default timeout for receiving first byte from backend. We only wait for this many seconds for the first byte before giving up. A value of 0 means it will never time out. VCL can override this default value for each backend and backend request. This parameter does not apply to pipe. - -group - - Default: magic - - Flags: must_restart - - The unprivileged group to run as. - -gzip_level - - Default: 6 - - Gzip compression level: 0=debug, 1=fast, 9=best - -gzip_memlevel - - Default: 8 - - Gzip memory level 1=slow/least, 9=fast/most compression. - Memory impact is 1=1k, 2=2k, ... 9=256k. - -gzip_stack_buffer - - Units: Bytes - - Default: 32768 - - Flags: experimental - - Size of stack buffer used for gzip processing. - The stack buffers are used for in-transit data, for instance gunzip'ed data being sent to a client.Making this space to small results in more overhead, writes to sockets etc, making it too big is probably just a waste of memory. - -gzip_tmp_space - - Default: 0 - - Flags: experimental - - Where temporary space for gzip/gunzip is allocated:: - - 0 - malloc - 1 - session workspace - 2 - thread workspace - If you have much gzip/gunzip activity, it may be an advantage to use workspace for these allocations to reduce malloc activity. Be aware that gzip needs 256+KB and gunzip needs 32+KB of workspace (64+KB if ESI processing). - -gzip_window - - Default: 15 - - Gzip window size 8=least, 15=most compression. - Memory impact is 8=1k, 9=2k, ... 15=128k. - -http_gzip_support - - Units: bool - - Default: on - - Flags: experimental - - Enable gzip support. When enabled Varnish will compress uncompressed objects before they are stored in the cache. If a client does not support gzip encoding Varnish will uncompress compressed objects on demand. Varnish will also rewrite the Accept-Encoding header of clients indicating support for gzip to:: - - Accept-Encoding: gzip - - Clients that do not support gzip will have their Accept-Encoding header removed. For more information on how gzip is implemented please see the chapter on gzip in the Varnish reference. - -http_max_hdr - - Units: header lines - - Default: 64 - - Maximum number of HTTP headers we will deal with in client request or backend reponses. Note that the first line occupies five header fields. - This paramter does not influence storage consumption, objects allocate exact space for the headers they store. - -http_range_support - - Units: bool - - Default: on - - Flags: experimental - - Enable support for HTTP Range headers. - -http_req_hdr_len - - Units: bytes - - Default: 4096 - - Maximum length of any HTTP client request header we will allow. The limit is inclusive its continuation lines. - -http_req_size - - Units: bytes - - Default: 32768 - - Maximum number of bytes of HTTP client request we will deal with. This is a limit on all bytes up to the double blank line which ends the HTTP request. - The memory for the request is allocated from the session workspace (param: sess_workspace) and this parameter limits how much of that the request is allowed to take up. - -http_resp_hdr_len - - Units: bytes - - Default: 4096 - - Maximum length of any HTTP backend response header we will allow. The limit is inclusive its continuation lines. - -http_resp_size - - Units: bytes - - Default: 32768 - - Maximum number of bytes of HTTP backend resonse we will deal with. This is a limit on all bytes up to the double blank line which ends the HTTP request. - The memory for the request is allocated from the worker workspace (param: sess_workspace) and this parameter limits how much of that the request is allowed to take up. - -listen_address - - Default: :80 - - Flags: must_restart - - Whitespace separated list of network endpoints where Varnish will accept requests. - Possible formats: host, host:port, :port - -listen_depth - - Units: connections - - Default: 1024 - - Flags: must_restart - - Listen queue depth. - -log_hashstring - - Units: bool - - Default: on - - Log the hash string components to shared memory log. - -log_local_address - - Units: bool - - Default: off - - Log the local address on the TCP connection in the SessionOpen shared memory record. - -lru_interval - - Units: seconds - - Default: 2 - - Flags: experimental - - Grace period before object moves on LRU list. - Objects are only moved to the front of the LRU list if they have not been moved there already inside this timeout period. This reduces the amount of lock operations necessary for LRU list access. - -max_esi_depth - - Units: levels - - Default: 5 - - Maximum depth of esi:include processing. - -max_restarts - - Units: restarts - - Default: 4 - - Upper limit on how many times a request can restart. - Be aware that restarts are likely to cause a hit against the backend, so don't increase thoughtlessly. - -nuke_limit - - Units: allocations - - Default: 10 - - Flags: experimental - - Maximum number of objects we attempt to nuke in orderto make space for a object body. - -ping_interval - - Units: seconds - - Default: 3 - - Flags: must_restart - - Interval between pings from parent to child. - Zero will disable pinging entirely, which makes it possible to attach a debugger to the child. - -pipe_timeout - - Units: seconds - - Default: 60 - - Idle timeout for PIPE sessions. If nothing have been received in either direction for this many seconds, the session is closed. - -prefer_ipv6 - - Units: bool - - Default: off - - Prefer IPv6 address when connecting to backends which have both IPv4 and IPv6 addresses. - -queue_max - - Units: % - - Default: 100 - - Flags: experimental - - Percentage permitted queue length. - - This sets the ratio of queued requests to worker threads, above which sessions will be dropped instead of queued. - -rush_exponent - - Units: requests per request - - Default: 3 - - Flags: experimental - - How many parked request we start for each completed request on the object. - NB: Even with the implict delay of delivery, this parameter controls an exponential increase in number of worker threads. - -saintmode_threshold - - Units: objects - - Default: 10 - - Flags: experimental - - The maximum number of objects held off by saint mode before no further will be made to the backend until one times out. A value of 0 disables saintmode. - -send_timeout - - Units: seconds - - Default: 60 - - Flags: delayed - - Send timeout for client connections. If the HTTP response hasn't been transmitted in this many - seconds the session is closed. - See setsockopt(2) under SO_SNDTIMEO for more information. - -sess_timeout - - Units: seconds - - Default: 5 - - Idle timeout for persistent sessions. If a HTTP request has not been received in this many seconds, the session is closed. - -sess_workspace - - Units: bytes - - Default: 65536 - - Flags: delayed - - Bytes of HTTP protocol workspace allocated for sessions. This space must be big enough for the entire HTTP protocol header and any edits done to it in the VCL code. - Minimum is 1024 bytes. - -session_linger - - Units: ms - - Default: 50 - - Flags: experimental - - How long time the workerthread lingers on the session to see if a new request appears right away. - If sessions are reused, as much as half of all reuses happen within the first 100 msec of the previous request completing. - Setting this too high results in worker threads not doing anything for their keep, setting it too low just means that more sessions take a detour around the waiter. - -session_max - - Units: sessions - - Default: 100000 - - Maximum number of sessions we will allocate before just dropping connections. - This is mostly an anti-DoS measure, and setting it plenty high should not hurt, as long as you have the memory for it. - -shm_reclen - - Units: bytes - - Default: 255 - - Maximum number of bytes in SHM log record. - Maximum is 65535 bytes. - -shm_workspace - - Units: bytes - - Default: 8192 - - Flags: delayed - - Bytes of shmlog workspace allocated for worker threads. If too big, it wastes some ram, if too small it causes needless flushes of the SHM workspace. - These flushes show up in stats as "SHM flushes due to overflow". - Minimum is 4096 bytes. - -shortlived - - Units: s - - Default: 10.0 - - Objects created with TTL shorter than this are always put in transient storage. - -syslog_cli_traffic - - Units: bool - - Default: on - - Log all CLI traffic to syslog(LOG_INFO). - -thread_pool_add_delay - - Units: milliseconds - - Default: 2 - - Wait at least this long between creating threads. - - Setting this too long results in insuffient worker threads. - - Setting this too short increases the risk of worker thread pile-up. - -thread_pool_add_threshold - - Units: requests - - Default: 2 - - Flags: experimental - - Overflow threshold for worker thread creation. - - Setting this too low, will result in excess worker threads, which is generally a bad idea. - - Setting it too high results in insuffient worker threads. - -thread_pool_fail_delay - - Units: milliseconds - - Default: 200 - - Flags: experimental - - Wait at least this long after a failed thread creation before trying to create another thread. - - Failure to create a worker thread is often a sign that the end is near, because the process is running out of RAM resources for thread stacks. - This delay tries to not rush it on needlessly. - - If thread creation failures are a problem, check that thread_pool_max is not too high. - - It may also help to increase thread_pool_timeout and thread_pool_min, to reduce the rate at which treads are destroyed and later recreated. - -thread_pool_max - - Units: threads - - Default: 500 - - Flags: delayed, experimental - - The maximum number of worker threads in each pool. - - Do not set this higher than you have to, since excess worker threads soak up RAM and CPU and generally just get in the way of getting work done. - -thread_pool_min - - Units: threads - - Default: 5 - - Flags: delayed, experimental - - The minimum number of worker threads in each pool. - - Increasing this may help ramp up faster from low load situations where threads have expired. - - Minimum is 2 threads. - -thread_pool_purge_delay - - Units: milliseconds - - Default: 1000 - - Flags: delayed, experimental - - Wait this long between purging threads. - - This controls the decay of thread pools when idle(-ish). - - Minimum is 100 milliseconds. - -thread_pool_stack - - Units: bytes - - Default: -1 - - Flags: experimental - - Worker thread stack size. - On 32bit systems you may need to tweak this down to fit many threads into the limited address space. - -thread_pool_timeout - - Units: seconds - - Default: 300 - - Flags: delayed, experimental - - Thread idle threshold. - - Threads in excess of thread_pool_min, which have been idle for at least this long are candidates for purging. - - Minimum is 1 second. - -thread_pool_workspace - - Units: bytes - - Default: 65536 - - Flags: delayed - - Bytes of HTTP protocol workspace allocated for worker threads. This space must be big enough for the backend request and responses, and response to the client plus any other memory needs in the VCL code.Minimum is 1024 bytes. - -thread_pools - - Units: pools - - Default: 2 - - Flags: delayed, experimental - - Number of worker thread pools. - - Increasing number of worker pools decreases lock contention. - - Too many pools waste CPU and RAM resources, and more than one pool for each CPU is probably detrimal to performance. - - Can be increased on the fly, but decreases require a restart to take effect. - -thread_stats_rate - - Units: requests - - Default: 10 - - Flags: experimental - - Worker threads accumulate statistics, and dump these into the global stats counters if the lock is free when they finish a request. - This parameters defines the maximum number of requests a worker thread may handle, before it is forced to dump its accumulated stats into the global counters. - -user - - Default: magic - - Flags: must_restart - - The unprivileged user to run as. Setting this will also set "group" to the specified user's primary group. - -vcc_err_unref - - Units: bool - - Default: on - - Unreferenced VCL objects result in error. - -vcl_dir - - Default: /usr/local/etc/varnish - - Directory from which relative VCL filenames (vcl.load and include) are opened. - -vcl_trace - - Units: bool - - Default: off - - Trace VCL execution in the shmlog. - Enabling this will allow you to see the path each request has taken through the VCL program. - This generates a lot of logrecords so it is off by default. - -vmod_dir - - Default: /usr/local/lib/varnish/vmods - - Directory where VCL modules are to be found. - -waiter - - Default: default - - Flags: must_restart, experimental - - Select the waiter kernel interface. - - | ||
[-] [+] | Deleted | varnish-3.0.1.tar.bz2/doc/sphinx/=build/html/reference/params.html ^ |
@@ -1,721 +0,0 @@ - - -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - - <title><no title> — Varnish version 3.0.1 documentation</title> - <link rel="stylesheet" href="../_static/default.css" type="text/css" /> - <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> - <script type="text/javascript"> - var DOCUMENTATION_OPTIONS = { - URL_ROOT: '../', - VERSION: '3.0.1', - COLLAPSE_INDEX: false, - FILE_SUFFIX: '.html', - HAS_SOURCE: true - }; - </script> - <script type="text/javascript" src="../_static/jquery.js"></script> - <script type="text/javascript" src="../_static/underscore.js"></script> - <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> - </head> - <body> - <div class="related"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="../genindex.html" title="General Index" - accesskey="I">index</a></li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> - </ul> - </div> - - <div class="document"> - <div class="documentwrapper"> - <div class="bodywrapper"> - <div class="body"> - - <dl class="docutils"> -<dt>acceptor_sleep_decay</dt> -<dd><ul class="first simple"> -<li>Default: 0.900</li> -<li>Flags: experimental</li> -</ul> -<p class="last">If we run out of resources, such as file descriptors or worker threads, the acceptor will sleep between accepts. -This parameter (multiplicatively) reduce the sleep duration for each succesfull accept. (ie: 0.9 = reduce by 10%)</p> -</dd> -<dt>acceptor_sleep_incr</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 0.001</li> -<li>Flags: experimental</li> -</ul> -<p class="last">If we run out of resources, such as file descriptors or worker threads, the acceptor will sleep between accepts. -This parameter control how much longer we sleep, each time we fail to accept a new connection.</p> -</dd> -<dt>acceptor_sleep_max</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 0.050</li> -<li>Flags: experimental</li> -</ul> -<p class="last">If we run out of resources, such as file descriptors or worker threads, the acceptor will sleep between accepts. -This parameter limits how long it can sleep between attempts to accept new connections.</p> -</dd> -<dt>auto_restart</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -</ul> -<p class="last">Restart child process automatically if it dies.</p> -</dd> -<dt>ban_dups</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -</ul> -<p class="last">Detect and eliminate duplicate bans.</p> -</dd> -<dt>ban_lurker_sleep</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 0.01</li> -</ul> -<p class="last">How long time does the ban lurker thread sleeps between successful attempts to push the last item up the ban list. It always sleeps a second when nothing can be done. -A value of zero disables the ban lurker.</p> -</dd> -<dt>between_bytes_timeout</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 60</li> -</ul> -<p class="last">Default timeout between bytes when receiving data from backend. We only wait for this many seconds between bytes before giving up. A value of 0 means it will never time out. VCL can override this default value for each backend request and backend request. This parameter does not apply to pipe.</p> -</dd> -<dt>cc_command</dt> -<dd><ul class="first simple"> -<li>Default: exec gcc -std=gnu99 -pthread -fpic -shared -Wl,-x -o %o %s</li> -<li>Flags: must_reload</li> -</ul> -<p class="last">Command used for compiling the C source code to a dlopen(3) loadable object. Any occurrence of %s in the string will be replaced with the source file name, and %o will be replaced with the output file name.</p> -</dd> -<dt>cli_buffer</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 8192</li> -</ul> -<p class="last">Size of buffer for CLI input. -You may need to increase this if you have big VCL files and use the vcl.inline CLI command. -NB: Must be specified with -p to have effect.</p> -</dd> -<dt>cli_timeout</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 10</li> -</ul> -<p class="last">Timeout for the childs replies to CLI requests from the master.</p> -</dd> -<dt>clock_skew</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 10</li> -</ul> -<p class="last">How much clockskew we are willing to accept between the backend and our own clock.</p> -</dd> -<dt>connect_timeout</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 0.7</li> -</ul> -<p class="last">Default connection timeout for backend connections. We only try to connect to the backend for this many seconds before giving up. VCL can override this default value for each backend and backend request.</p> -</dd> -<dt>critbit_cooloff</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 180.0</li> -<li>Flags:</li> -</ul> -<p class="last">How long time the critbit hasher keeps deleted objheads on the cooloff list.</p> -</dd> -<dt>default_grace</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 10</li> -<li>Flags: delayed</li> -</ul> -<p class="last">Default grace period. We will deliver an object this long after it has expired, provided another thread is attempting to get a new copy. -Objects already cached will not be affected by changes made until they are fetched from the backend again.</p> -</dd> -<dt>default_keep</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 0</li> -<li>Flags: delayed</li> -</ul> -<p class="last">Default keep period. We will keep a useless object around this long, making it available for conditional backend fetches. That means that the object will be removed from the cache at the end of ttl+grace+keep.</p> -</dd> -<dt>default_ttl</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 120</li> -</ul> -<p class="last">The TTL assigned to objects if neither the backend nor the VCL code assigns one. -Objects already cached will not be affected by changes made until they are fetched from the backend again. -To force an immediate effect at the expense of a total flush of the cache use “ban.url .”</p> -</dd> -<dt>diag_bitmap</dt> -<dd><ul class="first simple"> -<li>Units: bitmap</li> -<li>Default: 0</li> -</ul> -<p>Bitmap controlling diagnostics code:</p> -<div class="highlight-python"><pre>0x00000001 - CNT_Session states. -0x00000002 - workspace debugging. -0x00000004 - kqueue debugging. -0x00000008 - mutex logging. -0x00000010 - mutex contests. -0x00000020 - waiting list. -0x00000040 - object workspace. -0x00001000 - do not core-dump child process. -0x00002000 - only short panic message. -0x00004000 - panic to stderr. -0x00010000 - synchronize shmlog. -0x00020000 - synchronous start of persistence. -0x00040000 - release VCL early. -0x80000000 - do edge-detection on digest.</pre> -</div> -<p class="last">Use 0x notation and do the bitor in your head :-)</p> -</dd> -<dt>esi_syntax</dt> -<dd><ul class="first simple"> -<li>Units: bitmap</li> -<li>Default: 0</li> -</ul> -<p>Bitmap controlling ESI parsing code:</p> -<div class="highlight-python"><pre>0x00000001 - Don't check if it looks like XML -0x00000002 - Ignore non-esi elements -0x00000004 - Emit parsing debug records -0x00000008 - Force-split parser input (debugging)</pre> -</div> -<p class="last">Use 0x notation and do the bitor in your head :-)</p> -</dd> -<dt>expiry_sleep</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 1</li> -</ul> -<p class="last">How long the expiry thread sleeps when there is nothing for it to do.</p> -</dd> -<dt>fetch_chunksize</dt> -<dd><ul class="first simple"> -<li>Units: kilobytes</li> -<li>Default: 128</li> -<li>Flags: experimental</li> -</ul> -<p class="last">The default chunksize used by fetcher. This should be bigger than the majority of objects with short TTLs. -Internal limits in the storage_file module makes increases above 128kb a dubious idea.</p> -</dd> -<dt>fetch_maxchunksize</dt> -<dd><ul class="first simple"> -<li>Units: kilobytes</li> -<li>Default: 262144</li> -<li>Flags: experimental</li> -</ul> -<p class="last">The maximum chunksize we attempt to allocate from storage. Making this too large may cause delays and storage fragmentation.</p> -</dd> -<dt>first_byte_timeout</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 60</li> -</ul> -<p class="last">Default timeout for receiving first byte from backend. We only wait for this many seconds for the first byte before giving up. A value of 0 means it will never time out. VCL can override this default value for each backend and backend request. This parameter does not apply to pipe.</p> -</dd> -<dt>group</dt> -<dd><ul class="first simple"> -<li>Default: magic</li> -<li>Flags: must_restart</li> -</ul> -<p class="last">The unprivileged group to run as.</p> -</dd> -<dt>gzip_level</dt> -<dd><ul class="first simple"> -<li>Default: 6</li> -</ul> -<p class="last">Gzip compression level: 0=debug, 1=fast, 9=best</p> -</dd> -<dt>gzip_memlevel</dt> -<dd><ul class="first simple"> -<li>Default: 8</li> -</ul> -<p class="last">Gzip memory level 1=slow/least, 9=fast/most compression. -Memory impact is 1=1k, 2=2k, ... 9=256k.</p> -</dd> -<dt>gzip_stack_buffer</dt> -<dd><ul class="first simple"> -<li>Units: Bytes</li> -<li>Default: 32768</li> -<li>Flags: experimental</li> -</ul> -<p class="last">Size of stack buffer used for gzip processing. -The stack buffers are used for in-transit data, for instance gunzip’ed data being sent to a client.Making this space to small results in more overhead, writes to sockets etc, making it too big is probably just a waste of memory.</p> -</dd> -<dt>gzip_tmp_space</dt> -<dd><ul class="first simple"> -<li>Default: 0</li> -<li>Flags: experimental</li> -</ul> -<p>Where temporary space for gzip/gunzip is allocated:</p> -<div class="highlight-python"><pre>0 - malloc -1 - session workspace -2 - thread workspace</pre> -</div> -<p class="last">If you have much gzip/gunzip activity, it may be an advantage to use workspace for these allocations to reduce malloc activity. Be aware that gzip needs 256+KB and gunzip needs 32+KB of workspace (64+KB if ESI processing).</p> -</dd> -<dt>gzip_window</dt> -<dd><ul class="first simple"> -<li>Default: 15</li> -</ul> -<p class="last">Gzip window size 8=least, 15=most compression. -Memory impact is 8=1k, 9=2k, ... 15=128k.</p> -</dd> -<dt>http_gzip_support</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -<li>Flags: experimental</li> -</ul> -<p>Enable gzip support. When enabled Varnish will compress uncompressed objects before they are stored in the cache. If a client does not support gzip encoding Varnish will uncompress compressed objects on demand. Varnish will also rewrite the Accept-Encoding header of clients indicating support for gzip to:</p> -<p>Accept-Encoding: gzip</p> -<p class="last">Clients that do not support gzip will have their Accept-Encoding header removed. For more information on how gzip is implemented please see the chapter on gzip in the Varnish reference.</p> -</dd> -<dt>http_max_hdr</dt> -<dd><ul class="first simple"> -<li>Units: header lines</li> -<li>Default: 64</li> -</ul> -<p class="last">Maximum number of HTTP headers we will deal with in client request or backend reponses. Note that the first line occupies five header fields. -This paramter does not influence storage consumption, objects allocate exact space for the headers they store.</p> -</dd> -<dt>http_range_support</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -<li>Flags: experimental</li> -</ul> -<p class="last">Enable support for HTTP Range headers.</p> -</dd> -<dt>http_req_hdr_len</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 4096</li> -</ul> -<p class="last">Maximum length of any HTTP client request header we will allow. The limit is inclusive its continuation lines.</p> -</dd> -<dt>http_req_size</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 32768</li> -</ul> -<p class="last">Maximum number of bytes of HTTP client request we will deal with. This is a limit on all bytes up to the double blank line which ends the HTTP request. -The memory for the request is allocated from the session workspace (param: sess_workspace) and this parameter limits how much of that the request is allowed to take up.</p> -</dd> -<dt>http_resp_hdr_len</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 4096</li> -</ul> -<p class="last">Maximum length of any HTTP backend response header we will allow. The limit is inclusive its continuation lines.</p> -</dd> -<dt>http_resp_size</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 32768</li> -</ul> -<p class="last">Maximum number of bytes of HTTP backend resonse we will deal with. This is a limit on all bytes up to the double blank line which ends the HTTP request. -The memory for the request is allocated from the worker workspace (param: sess_workspace) and this parameter limits how much of that the request is allowed to take up.</p> -</dd> -<dt>listen_address</dt> -<dd><ul class="first simple"> -<li>Default: :80</li> -<li>Flags: must_restart</li> -</ul> -<p class="last">Whitespace separated list of network endpoints where Varnish will accept requests. -Possible formats: host, host:port, :port</p> -</dd> -<dt>listen_depth</dt> -<dd><ul class="first simple"> -<li>Units: connections</li> -<li>Default: 1024</li> -<li>Flags: must_restart</li> -</ul> -<p class="last">Listen queue depth.</p> -</dd> -<dt>log_hashstring</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -</ul> -<p class="last">Log the hash string components to shared memory log.</p> -</dd> -<dt>log_local_address</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: off</li> -</ul> -<p class="last">Log the local address on the TCP connection in the SessionOpen shared memory record.</p> -</dd> -<dt>lru_interval</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 2</li> -<li>Flags: experimental</li> -</ul> -<p class="last">Grace period before object moves on LRU list. -Objects are only moved to the front of the LRU list if they have not been moved there already inside this timeout period. This reduces the amount of lock operations necessary for LRU list access.</p> -</dd> -<dt>max_esi_depth</dt> -<dd><ul class="first simple"> -<li>Units: levels</li> -<li>Default: 5</li> -</ul> -<p class="last">Maximum depth of esi:include processing.</p> -</dd> -<dt>max_restarts</dt> -<dd><ul class="first simple"> -<li>Units: restarts</li> -<li>Default: 4</li> -</ul> -<p class="last">Upper limit on how many times a request can restart. -Be aware that restarts are likely to cause a hit against the backend, so don’t increase thoughtlessly.</p> -</dd> -<dt>nuke_limit</dt> -<dd><ul class="first simple"> -<li>Units: allocations</li> -<li>Default: 10</li> -<li>Flags: experimental</li> -</ul> -<p class="last">Maximum number of objects we attempt to nuke in orderto make space for a object body.</p> -</dd> -<dt>ping_interval</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 3</li> -<li>Flags: must_restart</li> -</ul> -<p class="last">Interval between pings from parent to child. -Zero will disable pinging entirely, which makes it possible to attach a debugger to the child.</p> -</dd> -<dt>pipe_timeout</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 60</li> -</ul> -<p class="last">Idle timeout for PIPE sessions. If nothing have been received in either direction for this many seconds, the session is closed.</p> -</dd> -<dt>prefer_ipv6</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: off</li> -</ul> -<p class="last">Prefer IPv6 address when connecting to backends which have both IPv4 and IPv6 addresses.</p> -</dd> -<dt>queue_max</dt> -<dd><ul class="first simple"> -<li>Units: %</li> -<li>Default: 100</li> -<li>Flags: experimental</li> -</ul> -<p>Percentage permitted queue length.</p> -<p class="last">This sets the ratio of queued requests to worker threads, above which sessions will be dropped instead of queued.</p> -</dd> -<dt>rush_exponent</dt> -<dd><ul class="first simple"> -<li>Units: requests per request</li> -<li>Default: 3</li> -<li>Flags: experimental</li> -</ul> -<p class="last">How many parked request we start for each completed request on the object. -NB: Even with the implict delay of delivery, this parameter controls an exponential increase in number of worker threads.</p> -</dd> -<dt>saintmode_threshold</dt> -<dd><ul class="first simple"> -<li>Units: objects</li> -<li>Default: 10</li> -<li>Flags: experimental</li> -</ul> -<p class="last">The maximum number of objects held off by saint mode before no further will be made to the backend until one times out. A value of 0 disables saintmode.</p> -</dd> -<dt>send_timeout</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 60</li> -<li>Flags: delayed</li> -</ul> -<p class="last">Send timeout for client connections. If the HTTP response hasn’t been transmitted in this many -seconds the session is closed. -See setsockopt(2) under SO_SNDTIMEO for more information.</p> -</dd> -<dt>sess_timeout</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 5</li> -</ul> -<p class="last">Idle timeout for persistent sessions. If a HTTP request has not been received in this many seconds, the session is closed.</p> -</dd> -<dt>sess_workspace</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 65536</li> -<li>Flags: delayed</li> -</ul> -<p class="last">Bytes of HTTP protocol workspace allocated for sessions. This space must be big enough for the entire HTTP protocol header and any edits done to it in the VCL code. -Minimum is 1024 bytes.</p> -</dd> -<dt>session_linger</dt> -<dd><ul class="first simple"> -<li>Units: ms</li> -<li>Default: 50</li> -<li>Flags: experimental</li> -</ul> -<p class="last">How long time the workerthread lingers on the session to see if a new request appears right away. -If sessions are reused, as much as half of all reuses happen within the first 100 msec of the previous request completing. -Setting this too high results in worker threads not doing anything for their keep, setting it too low just means that more sessions take a detour around the waiter.</p> -</dd> -<dt>session_max</dt> -<dd><ul class="first simple"> -<li>Units: sessions</li> -<li>Default: 100000</li> -</ul> -<p class="last">Maximum number of sessions we will allocate before just dropping connections. -This is mostly an anti-DoS measure, and setting it plenty high should not hurt, as long as you have the memory for it.</p> -</dd> -<dt>shm_reclen</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 255</li> -</ul> -<p class="last">Maximum number of bytes in SHM log record. -Maximum is 65535 bytes.</p> -</dd> -<dt>shm_workspace</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 8192</li> -<li>Flags: delayed</li> -</ul> -<p class="last">Bytes of shmlog workspace allocated for worker threads. If too big, it wastes some ram, if too small it causes needless flushes of the SHM workspace. -These flushes show up in stats as “SHM flushes due to overflow”. -Minimum is 4096 bytes.</p> -</dd> -<dt>shortlived</dt> -<dd><ul class="first simple"> -<li>Units: s</li> -<li>Default: 10.0</li> -</ul> -<p class="last">Objects created with TTL shorter than this are always put in transient storage.</p> -</dd> -<dt>syslog_cli_traffic</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -</ul> -<p class="last">Log all CLI traffic to syslog(LOG_INFO).</p> -</dd> -<dt>thread_pool_add_delay</dt> -<dd><ul class="first simple"> -<li>Units: milliseconds</li> -<li>Default: 2</li> -</ul> -<p>Wait at least this long between creating threads.</p> -<p>Setting this too long results in insuffient worker threads.</p> -<p class="last">Setting this too short increases the risk of worker thread pile-up.</p> -</dd> -<dt>thread_pool_add_threshold</dt> -<dd><ul class="first simple"> -<li>Units: requests</li> -<li>Default: 2</li> -<li>Flags: experimental</li> -</ul> -<p>Overflow threshold for worker thread creation.</p> -<p>Setting this too low, will result in excess worker threads, which is generally a bad idea.</p> -<p class="last">Setting it too high results in insuffient worker threads.</p> -</dd> -<dt>thread_pool_fail_delay</dt> -<dd><ul class="first simple"> -<li>Units: milliseconds</li> -<li>Default: 200</li> -<li>Flags: experimental</li> -</ul> -<p>Wait at least this long after a failed thread creation before trying to create another thread.</p> -<p>Failure to create a worker thread is often a sign that the end is near, because the process is running out of RAM resources for thread stacks. -This delay tries to not rush it on needlessly.</p> -<p>If thread creation failures are a problem, check that thread_pool_max is not too high.</p> -<p class="last">It may also help to increase thread_pool_timeout and thread_pool_min, to reduce the rate at which treads are destroyed and later recreated.</p> -</dd> -<dt>thread_pool_max</dt> -<dd><ul class="first simple"> -<li>Units: threads</li> -<li>Default: 500</li> -<li>Flags: delayed, experimental</li> -</ul> -<p>The maximum number of worker threads in each pool.</p> -<p class="last">Do not set this higher than you have to, since excess worker threads soak up RAM and CPU and generally just get in the way of getting work done.</p> -</dd> -<dt>thread_pool_min</dt> -<dd><ul class="first simple"> -<li>Units: threads</li> -<li>Default: 5</li> -<li>Flags: delayed, experimental</li> -</ul> -<p>The minimum number of worker threads in each pool.</p> -<p>Increasing this may help ramp up faster from low load situations where threads have expired.</p> -<p class="last">Minimum is 2 threads.</p> -</dd> -<dt>thread_pool_purge_delay</dt> -<dd><ul class="first simple"> -<li>Units: milliseconds</li> -<li>Default: 1000</li> -<li>Flags: delayed, experimental</li> -</ul> -<p>Wait this long between purging threads.</p> -<p>This controls the decay of thread pools when idle(-ish).</p> -<p class="last">Minimum is 100 milliseconds.</p> -</dd> -<dt>thread_pool_stack</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: -1</li> -<li>Flags: experimental</li> -</ul> -<p class="last">Worker thread stack size. -On 32bit systems you may need to tweak this down to fit many threads into the limited address space.</p> -</dd> -<dt>thread_pool_timeout</dt> -<dd><ul class="first simple"> -<li>Units: seconds</li> -<li>Default: 300</li> -<li>Flags: delayed, experimental</li> -</ul> -<p>Thread idle threshold.</p> -<p>Threads in excess of thread_pool_min, which have been idle for at least this long are candidates for purging.</p> -<p class="last">Minimum is 1 second.</p> -</dd> -<dt>thread_pool_workspace</dt> -<dd><ul class="first simple"> -<li>Units: bytes</li> -<li>Default: 65536</li> -<li>Flags: delayed</li> -</ul> -<p class="last">Bytes of HTTP protocol workspace allocated for worker threads. This space must be big enough for the backend request and responses, and response to the client plus any other memory needs in the VCL code.Minimum is 1024 bytes.</p> -</dd> -<dt>thread_pools</dt> -<dd><ul class="first simple"> -<li>Units: pools</li> -<li>Default: 2</li> -<li>Flags: delayed, experimental</li> -</ul> -<p>Number of worker thread pools.</p> -<p>Increasing number of worker pools decreases lock contention.</p> -<p>Too many pools waste CPU and RAM resources, and more than one pool for each CPU is probably detrimal to performance.</p> -<p class="last">Can be increased on the fly, but decreases require a restart to take effect.</p> -</dd> -<dt>thread_stats_rate</dt> -<dd><ul class="first simple"> -<li>Units: requests</li> -<li>Default: 10</li> -<li>Flags: experimental</li> -</ul> -<p class="last">Worker threads accumulate statistics, and dump these into the global stats counters if the lock is free when they finish a request. -This parameters defines the maximum number of requests a worker thread may handle, before it is forced to dump its accumulated stats into the global counters.</p> -</dd> -<dt>user</dt> -<dd><ul class="first simple"> -<li>Default: magic</li> -<li>Flags: must_restart</li> -</ul> -<p class="last">The unprivileged user to run as. Setting this will also set “group” to the specified user’s primary group.</p> -</dd> -<dt>vcc_err_unref</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: on</li> -</ul> -<p class="last">Unreferenced VCL objects result in error.</p> -</dd> -<dt>vcl_dir</dt> -<dd><ul class="first simple"> -<li>Default: /usr/local/etc/varnish</li> -</ul> -<p class="last">Directory from which relative VCL filenames (vcl.load and include) are opened.</p> -</dd> -<dt>vcl_trace</dt> -<dd><ul class="first simple"> -<li>Units: bool</li> -<li>Default: off</li> -</ul> -<p class="last">Trace VCL execution in the shmlog. -Enabling this will allow you to see the path each request has taken through the VCL program. -This generates a lot of logrecords so it is off by default.</p> -</dd> -<dt>vmod_dir</dt> -<dd><ul class="first simple"> -<li>Default: /usr/local/lib/varnish/vmods</li> -</ul> -<p class="last">Directory where VCL modules are to be found.</p> -</dd> -<dt>waiter</dt> -<dd><ul class="first simple"> -<li>Default: default</li> -<li>Flags: must_restart, experimental</li> -</ul> -<p class="last">Select the waiter kernel interface.</p> -</dd> -</dl> - - - </div> - </div> - </div> - <div class="sphinxsidebar"> - <div class="sphinxsidebarwrapper"> - <h3>This Page</h3> - <ul class="this-page-menu"> - <li><a href="../_sources/reference/params.txt" - rel="nofollow">Show Source</a></li> - </ul> -<div id="searchbox" style="display: none"> - <h3>Quick search</h3> - <form class="search" action="../search.html" method="get"> - <input type="text" name="q" size="18" /> - <input type="submit" value="Go" /> - <input type="hidden" name="check_keywords" value="yes" /> - <input type="hidden" name="area" value="default" /> - </form> - <p class="searchtip" style="font-size: 90%"> - Enter search terms or a module, class or function name. - </p> -</div> -<script type="text/javascript">$('#searchbox').show(0);</script> - </div> - </div> - <div class="clearer"></div> - </div> - <div class="related"> - <h3>Navigation</h3> - <ul> - <li class="right" style="margin-right: 10px"> - <a href="../genindex.html" title="General Index" - >index</a></li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> - </ul> - </div> - <div class="footer"> - © Copyright 2010, Varnish Project. - Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. - </div> - </body> -</html> \ No newline at end of file | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/Makefile.am ^ |
@@ -11,6 +11,15 @@ EXTRA_DIST = LICENSE autogen.sh varnishapi.pc.in +DISTCHECK_CONFIGURE_FLAGS = \ + --enable-developer-warnings \ + --enable-debugging-symbols \ + --enable-dependency-tracking \ + --enable-diagnostics \ + --enable-extra-developer-warnings \ + --enable-tests \ + --enable-werror + install-data-local: $(install_sh) -d -m 0755 $(DESTDIR)$(localstatedir)/varnish | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/Makefile.in ^ |
@@ -282,6 +282,15 @@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = varnishapi.pc EXTRA_DIST = LICENSE autogen.sh varnishapi.pc.in +DISTCHECK_CONFIGURE_FLAGS = \ + --enable-developer-warnings \ + --enable-debugging-symbols \ + --enable-dependency-tracking \ + --enable-diagnostics \ + --enable-extra-developer-warnings \ + --enable-tests \ + --enable-werror + distcleancheck_listfiles = \ find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \ sh '{}' ';' | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishadm/varnishadm.c ^ |
@@ -135,7 +135,6 @@ } free(answer); - fprintf(stderr, "CLI connected to %s\n", T_arg); return (sock); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/Makefile.am ^ |
@@ -58,6 +58,7 @@ mgt_param.c \ mgt_pool.c \ mgt_sandbox.c \ + mgt_sandbox_solaris.c \ mgt_shmem.c \ mgt_vcc.c \ rfc2616.c \ @@ -76,6 +77,7 @@ noinst_HEADERS = \ acct_fields.h \ + body_status.h \ cache.h \ cache_backend.h \ cache_backend_poll.h \ | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/Makefile.in ^ |
@@ -91,9 +91,11 @@ varnishd-hash_simple_list.$(OBJEXT) \ varnishd-mgt_child.$(OBJEXT) varnishd-mgt_cli.$(OBJEXT) \ varnishd-mgt_param.$(OBJEXT) varnishd-mgt_pool.$(OBJEXT) \ - varnishd-mgt_sandbox.$(OBJEXT) varnishd-mgt_shmem.$(OBJEXT) \ - varnishd-mgt_vcc.$(OBJEXT) varnishd-rfc2616.$(OBJEXT) \ - varnishd-stevedore.$(OBJEXT) varnishd-storage_file.$(OBJEXT) \ + varnishd-mgt_sandbox.$(OBJEXT) \ + varnishd-mgt_sandbox_solaris.$(OBJEXT) \ + varnishd-mgt_shmem.$(OBJEXT) varnishd-mgt_vcc.$(OBJEXT) \ + varnishd-rfc2616.$(OBJEXT) varnishd-stevedore.$(OBJEXT) \ + varnishd-storage_file.$(OBJEXT) \ varnishd-storage_malloc.$(OBJEXT) \ varnishd-storage_persistent.$(OBJEXT) \ varnishd-storage_persistent_mgt.$(OBJEXT) \ @@ -357,6 +359,7 @@ mgt_param.c \ mgt_pool.c \ mgt_sandbox.c \ + mgt_sandbox_solaris.c \ mgt_shmem.c \ mgt_vcc.c \ rfc2616.c \ @@ -375,6 +378,7 @@ noinst_HEADERS = \ acct_fields.h \ + body_status.h \ cache.h \ cache_backend.h \ cache_backend_poll.h \ @@ -545,6 +549,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-mgt_param.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-mgt_pool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-mgt_sandbox.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-mgt_sandbox_solaris.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-mgt_shmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-mgt_vcc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/varnishd-rfc2616.Po@am__quote@ @@ -1254,6 +1259,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(varnishd_CFLAGS) $(CFLAGS) -c -o varnishd-mgt_sandbox.obj `if test -f 'mgt_sandbox.c'; then $(CYGPATH_W) 'mgt_sandbox.c'; else $(CYGPATH_W) '$(srcdir)/mgt_sandbox.c'; fi` +varnishd-mgt_sandbox_solaris.o: mgt_sandbox_solaris.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(varnishd_CFLAGS) $(CFLAGS) -MT varnishd-mgt_sandbox_solaris.o -MD -MP -MF $(DEPDIR)/varnishd-mgt_sandbox_solaris.Tpo -c -o varnishd-mgt_sandbox_solaris.o `test -f 'mgt_sandbox_solaris.c' || echo '$(srcdir)/'`mgt_sandbox_solaris.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/varnishd-mgt_sandbox_solaris.Tpo $(DEPDIR)/varnishd-mgt_sandbox_solaris.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mgt_sandbox_solaris.c' object='varnishd-mgt_sandbox_solaris.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(varnishd_CFLAGS) $(CFLAGS) -c -o varnishd-mgt_sandbox_solaris.o `test -f 'mgt_sandbox_solaris.c' || echo '$(srcdir)/'`mgt_sandbox_solaris.c + +varnishd-mgt_sandbox_solaris.obj: mgt_sandbox_solaris.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(varnishd_CFLAGS) $(CFLAGS) -MT varnishd-mgt_sandbox_solaris.obj -MD -MP -MF $(DEPDIR)/varnishd-mgt_sandbox_solaris.Tpo -c -o varnishd-mgt_sandbox_solaris.obj `if test -f 'mgt_sandbox_solaris.c'; then $(CYGPATH_W) 'mgt_sandbox_solaris.c'; else $(CYGPATH_W) '$(srcdir)/mgt_sandbox_solaris.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/varnishd-mgt_sandbox_solaris.Tpo $(DEPDIR)/varnishd-mgt_sandbox_solaris.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mgt_sandbox_solaris.c' object='varnishd-mgt_sandbox_solaris.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(varnishd_CFLAGS) $(CFLAGS) -c -o varnishd-mgt_sandbox_solaris.obj `if test -f 'mgt_sandbox_solaris.c'; then $(CYGPATH_W) 'mgt_sandbox_solaris.c'; else $(CYGPATH_W) '$(srcdir)/mgt_sandbox_solaris.c'; fi` + varnishd-mgt_shmem.o: mgt_shmem.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(varnishd_CFLAGS) $(CFLAGS) -MT varnishd-mgt_shmem.o -MD -MP -MF $(DEPDIR)/varnishd-mgt_shmem.Tpo -c -o varnishd-mgt_shmem.o `test -f 'mgt_shmem.c' || echo '$(srcdir)/'`mgt_shmem.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/varnishd-mgt_shmem.Tpo $(DEPDIR)/varnishd-mgt_shmem.Po | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishd/body_status.h ^ |
@@ -0,0 +1,38 @@ +/*- + * Copyright (c) 2011 Varnish Software AS + * All rights reserved. + * + * Author: Poul-Henning Kamp <phk@phk.freebsd.dk> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Various ways to handle the body coming from the backend. + */ + +/*lint -save -e525 -e539 */ +BODYSTATUS(NONE, none) +BODYSTATUS(ZERO, zero) +BODYSTATUS(ERROR, error) +BODYSTATUS(CHUNKED, chunked) +BODYSTATUS(LENGTH, length) +BODYSTATUS(EOF, eof) +/*lint -restore */ | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache.h ^ |
@@ -66,14 +66,23 @@ #include "vsl.h" enum body_status { - BS_NONE, - BS_ZERO, - BS_ERROR, - BS_CHUNKED, - BS_LENGTH, - BS_EOF +#define BODYSTATUS(U,l) BS_##U, +#include "body_status.h" +#undef BODYSTATUS }; +static inline const char * +body_status(enum body_status e) +{ + switch(e) { +#define BODYSTATUS(U,l) case BS_##U: return (#l); +#include "body_status.h" +#undef BODYSTATUS + default: + return ("?"); + } +} + /* * NB: HDR_STATUS is only used in cache_http.c, everybody else uses the * http->status integer field. @@ -194,6 +203,7 @@ struct ws *ws; txt rxbuf; txt pipeline; + const char *error; }; /*--------------------------------------------------------------------*/ @@ -208,8 +218,8 @@ /*--------------------------------------------------------------------*/ #define L0(n) -#define L1(n) int n; -#define VSC_F(n, t, l, f, e) L##l(n) +#define L1(n) uint64_t n; +#define VSC_F(n, t, l, f, e,d) L##l(n) #define VSC_DO_MAIN struct dstat { #include "vsc_fields.h" @@ -353,6 +363,8 @@ #define RES_ESI_CHILD (1<<5) #define RES_GUNZIP (1<<6) + /* Temporary accounting */ + struct acct acct_tmp; }; /* Work Request for worker thread ------------------------------------*/ @@ -601,7 +613,6 @@ struct sessmem *mem; struct workreq workreq; - struct acct acct_tmp; struct acct acct_req; struct acct acct_ses; @@ -898,6 +909,7 @@ /* cache_vary.c */ struct vsb *VRY_Create(const struct sess *sp, const struct http *hp); int VRY_Match(struct sess *sp, const uint8_t *vary); +void VRY_Validate(const uint8_t *vary); /* cache_vcl.c */ void VCL_Init(void); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_ban.c ^ |
@@ -738,7 +738,7 @@ * Ban tail lurker thread */ -static void +static int ban_lurker_work(const struct sess *sp) { struct ban *b, *bf; @@ -757,21 +757,21 @@ if (bf != NULL) { Lck_Unlock(&ban_mtx); BAN_Free(bf); - return; + return (0); } /* Find the last ban give up, if we have only one */ b = VTAILQ_LAST(&ban_head, banhead_s); if (b == ban_start) { Lck_Unlock(&ban_mtx); - return; + return (0); } /* Find the first object on it, if any */ oc = VTAILQ_FIRST(&b->objcore); if (oc == NULL) { Lck_Unlock(&ban_mtx); - return; + return (0); } /* Try to lock the objhead */ @@ -779,7 +779,7 @@ CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC); if (Lck_Trylock(&oh->mtx)) { Lck_Unlock(&ban_mtx); - return; + return (0); } /* @@ -792,7 +792,7 @@ if (oc2 == NULL) { Lck_Unlock(&oh->mtx); Lck_Unlock(&ban_mtx); - return; + return (0); } /* * Grab a reference to the OC and we can let go of the BAN mutex @@ -809,12 +809,13 @@ Lck_Unlock(&oh->mtx); WSP(sp, SLT_Debug, "lurker: %p %g %d", oc, o->exp.ttl, i); (void)HSH_Deref(sp->wrk, NULL, &o); + return (i); } static void * __match_proto__(bgthread_t) ban_lurker(struct sess *sp, void *priv) { - + int i = 0; (void)priv; while (1) { if (params->ban_lurker_sleep == 0.0) { @@ -822,8 +823,11 @@ TIM_sleep(1.0); continue; } - TIM_sleep(params->ban_lurker_sleep); - ban_lurker_work(sp); + if (i != 0) + TIM_sleep(params->ban_lurker_sleep); + else + TIM_sleep(1.0); + i = ban_lurker_work(sp); WSL_Flush(sp->wrk, 0); WRK_SumStat(sp->wrk); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_center.c ^ |
@@ -413,6 +413,8 @@ DOT ERROR -> vcl_error DOT vcl_error-> prepresp [label=deliver] DOT } +DOT vcl_error-> rsterr [label="restart",color=purple] +DOT rsterr [label="RESTART",shape=plaintext] */ static int @@ -434,13 +436,13 @@ w = sp->wrk; if (sp->obj == NULL) { HSH_Prealloc(sp); - /* XXX: 1024 is a pure guess */ EXP_Clr(&w->exp); - sp->obj = STV_NewObject(sp, NULL, 1024, &w->exp, - (uint16_t)params->http_max_hdr); + sp->obj = STV_NewObject(sp, NULL, params->http_resp_size, + &w->exp, (uint16_t)params->http_max_hdr); if (sp->obj == NULL) sp->obj = STV_NewObject(sp, TRANSIENT_STORAGE, - 1024, &w->exp, (uint16_t)params->http_max_hdr); + params->http_resp_size , &w->exp, + (uint16_t)params->http_max_hdr); if (sp->obj == NULL) { sp->doclose = "Out of objects"; sp->director = NULL; @@ -802,6 +804,7 @@ (void *)WS_Alloc(sp->obj->http->ws, varyl); AN(sp->obj->vary); memcpy(sp->obj->vary, VSB_data(vary), varyl); + VRY_Validate(sp->obj->vary); VSB_delete(vary); } @@ -869,7 +872,7 @@ AN(sp->obj->objcore->ban); HSH_Unbusy(sp); } - sp->acct_tmp.fetch++; + sp->wrk->acct_tmp.fetch++; sp->step = STP_PREPRESP; return (0); } @@ -926,7 +929,7 @@ } else { sp->doclose = "Stream error"; } - sp->acct_tmp.fetch++; + sp->wrk->acct_tmp.fetch++; sp->director = NULL; sp->restarts = 0; @@ -968,7 +971,7 @@ HTC_Init(sp->htc, sp->ws, sp->fd, params->http_req_size, params->http_req_hdr_len); sp->wrk->lastused = sp->t_open; - sp->acct_tmp.sess++; + sp->wrk->acct_tmp.sess++; sp->step = STP_WAIT; return (0); @@ -1080,10 +1083,12 @@ AZ(sp->vary_l); AZ(sp->vary_e); (void)WS_Reserve(sp->ws, 0); - sp->vary_b = (void*)sp->ws->f; - sp->vary_e = (void*)sp->ws->r; - sp->vary_b[2] = '\0'; + } else { + AN(sp->ws->r); } + sp->vary_b = (void*)sp->ws->f; + sp->vary_e = (void*)sp->ws->r; + sp->vary_b[2] = '\0'; oc = HSH_Lookup(sp, &oh); @@ -1105,10 +1110,14 @@ if (oc->flags & OC_F_BUSY) { sp->wrk->stats.cache_miss++; - if (sp->vary_l != NULL) + if (sp->vary_l != NULL) { + assert(oc->busyobj->vary == sp->vary_b); + VRY_Validate(oc->busyobj->vary); WS_ReleaseP(sp->ws, (void*)sp->vary_l); - else - WS_Release(sp->ws, 0); + } else { + AZ(oc->busyobj->vary); + WS_Release(sp->ws, 0); + } sp->vary_b = NULL; sp->vary_l = NULL; sp->vary_e = NULL; @@ -1270,7 +1279,7 @@ return (0); } assert(sp->handling == VCL_RET_PASS); - sp->acct_tmp.pass++; + sp->wrk->acct_tmp.pass++; sp->sendbody = 1; sp->step = STP_FETCH; return (0); @@ -1308,7 +1317,7 @@ CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC); - sp->acct_tmp.pipe++; + sp->wrk->acct_tmp.pipe++; WS_Reset(sp->wrk->ws, NULL); http_Setup(sp->wrk->bereq, sp->wrk->ws); http_FilterHeader(sp, HTTPH_R_PIPE); @@ -1457,7 +1466,7 @@ sp->wrk->stats.client_req++; sp->t_req = TIM_real(); sp->wrk->lastused = sp->t_req; - sp->acct_tmp.req++; + sp->wrk->acct_tmp.req++; /* Assign XID and log */ sp->xid = ++xids; /* XXX not locked */ @@ -1612,6 +1621,9 @@ AZ(w->is_gunzip); AZ(w->do_gunzip); AZ(w->do_esi); +#define ACCT(foo) AZ(w->acct_tmp.foo); +#include "acct_fields.h" +#undef ACCT assert(WRW_IsReleased(w)); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_fetch.c ^ |
@@ -88,8 +88,10 @@ while (bytes > 0) { st = FetchStorage(sp, 0); - if (st == NULL) + if (st == NULL) { + htc->error = "Could not get storage"; return (-1); + } l = st->space - st->len; if (l > bytes) l = bytes; @@ -200,24 +202,19 @@ ssize_t cl; assert(sp->wrk->body_status == BS_LENGTH); + cl = fetch_number(b, 10); + sp->wrk->vfp->begin(sp, cl > 0 ? cl : 0); if (cl < 0) { - WSP(sp, SLT_FetchError, "straight length syntax"); + WSP(sp, SLT_FetchError, "straight length field bogus"); return (-1); - } - /* - * XXX: we shouldn't need this if we have cl==0 - * XXX: but we must also conditionalize the vfp->end() - */ - sp->wrk->vfp->begin(sp, cl); - if (cl == 0) + } else if (cl == 0) return (0); - i = sp->wrk->vfp->bytes(sp, htc, cl); if (i <= 0) { WSP(sp, SLT_FetchError, "straight read_error: %d %d (%s)", - i, errno, strerror(errno)); + i, errno, htc->error); return (-1); } return (0); @@ -230,7 +227,7 @@ if (i != 1) { \ WSP(sp, SLT_FetchError, \ "chunked read_error: %d (%s)", \ - errno, strerror(errno)); \ + errno, htc->error); \ return (-1); \ } \ } while (0) @@ -315,7 +312,7 @@ i = sp->wrk->vfp->bytes(sp, htc, SSIZE_MAX); if (i < 0) { WSP(sp, SLT_FetchError, "eof read_error: %d (%s)", - errno, strerror(errno)); + errno, htc->error); return (-1); } return (0); @@ -396,7 +393,7 @@ AN(sp->objcore->flags & OC_F_BUSY); } - hp = sp->wrk->bereq; + hp = w->bereq; sp->vbc = VDI_GetFd(NULL, sp); if (sp->vbc == NULL) { @@ -437,16 +434,16 @@ /* Receive response */ - HTC_Init(sp->wrk->htc, sp->wrk->ws, vc->fd, params->http_resp_size, + HTC_Init(w->htc, w->ws, vc->fd, params->http_resp_size, params->http_resp_hdr_len); VTCP_set_read_timeout(vc->fd, vc->first_byte_timeout); - i = HTC_Rx(sp->wrk->htc); + i = HTC_Rx(w->htc); if (i < 0) { WSP(sp, SLT_FetchError, "http first read error: %d %d (%s)", - i, errno, strerror(errno)); + i, errno, w->htc->error); VDI_CloseFd(sp); /* XXX: other cleanup ? */ /* Retryable if we never received anything */ @@ -456,20 +453,20 @@ VTCP_set_read_timeout(vc->fd, vc->between_bytes_timeout); while (i == 0) { - i = HTC_Rx(sp->wrk->htc); + i = HTC_Rx(w->htc); if (i < 0) { WSP(sp, SLT_FetchError, "http first read error: %d %d (%s)", - i, errno, strerror(errno)); + i, errno, w->htc->error); VDI_CloseFd(sp); /* XXX: other cleanup ? */ return (-1); } } - hp = sp->wrk->beresp; + hp = w->beresp; - if (http_DissectResponse(sp->wrk, sp->wrk->htc, hp)) { + if (http_DissectResponse(w, w->htc, hp)) { WSP(sp, SLT_FetchError, "http format error"); VDI_CloseFd(sp); /* XXX: other cleanup ? */ @@ -485,22 +482,24 @@ { int cls; struct storage *st; + struct worker *w; int mklen; CHECK_OBJ_NOTNULL(sp, SESS_MAGIC); CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC); + w = sp->wrk; CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); CHECK_OBJ_NOTNULL(sp->obj->http, HTTP_MAGIC); - if (sp->wrk->vfp == NULL) - sp->wrk->vfp = &vfp_nop; + if (w->vfp == NULL) + w->vfp = &vfp_nop; AN(sp->director); AssertObjCorePassOrBusy(sp->obj->objcore); - AZ(sp->wrk->vgz_rx); + AZ(w->vgz_rx); AZ(VTAILQ_FIRST(&sp->obj->store)); - switch (sp->wrk->body_status) { + switch (w->body_status) { case BS_NONE: cls = 0; mklen = 0; @@ -510,20 +509,20 @@ mklen = 1; break; case BS_LENGTH: - cls = fetch_straight(sp, sp->wrk->htc, - sp->wrk->h_content_length); + cls = fetch_straight(sp, w->htc, + w->h_content_length); mklen = 1; - XXXAZ(sp->wrk->vfp->end(sp)); + XXXAZ(w->vfp->end(sp)); break; case BS_CHUNKED: - cls = fetch_chunked(sp, sp->wrk->htc); + cls = fetch_chunked(sp, w->htc); mklen = 1; - XXXAZ(sp->wrk->vfp->end(sp)); + XXXAZ(w->vfp->end(sp)); break; case BS_EOF: - cls = fetch_eof(sp, sp->wrk->htc); + cls = fetch_eof(sp, w->htc); mklen = 1; - XXXAZ(sp->wrk->vfp->end(sp)); + XXXAZ(w->vfp->end(sp)); break; case BS_ERROR: cls = 1; @@ -534,25 +533,26 @@ mklen = 0; INCOMPL(); } - AZ(sp->wrk->vgz_rx); + AZ(w->vgz_rx); /* * It is OK for ->end to just leave the last storage segment - * sitting on sp->wrk->storage, we will always call vfp_nop_end() + * sitting on w->storage, we will always call vfp_nop_end() * to get it trimmed or thrown out if empty. */ AZ(vfp_nop_end(sp)); - WSL(sp->wrk, SLT_Fetch_Body, sp->vbc->fd, "%u %d %u", - sp->wrk->body_status, cls, mklen); + WSL(w, SLT_Fetch_Body, sp->vbc->fd, "%u(%s) cls %d mklen %u", + w->body_status, body_status(w->body_status), + cls, mklen); - if (sp->wrk->body_status == BS_ERROR) { + if (w->body_status == BS_ERROR) { VDI_CloseFd(sp); return (__LINE__); } if (cls < 0) { - sp->wrk->stats.fetch_failed++; + w->stats.fetch_failed++; /* XXX: Wouldn't this store automatically be released ? */ while (!VTAILQ_EMPTY(&sp->obj->store)) { st = VTAILQ_FIRST(&sp->obj->store); @@ -564,10 +564,10 @@ return (__LINE__); } - if (cls == 0 && sp->wrk->do_close) + if (cls == 0 && w->do_close) cls = 1; - WSL(sp->wrk, SLT_Length, sp->vbc->fd, "%u", sp->obj->len); + WSL(w, SLT_Length, sp->vbc->fd, "%u", sp->obj->len); { /* Sanity check fetch methods accounting */ @@ -585,7 +585,7 @@ if (mklen > 0) { http_Unset(sp->obj->http, H_Content_Length); - http_PrintfHeader(sp->wrk, sp->fd, sp->obj->http, + http_PrintfHeader(w, sp->fd, sp->obj->http, "Content-Length: %jd", (intmax_t)sp->obj->len); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_gzip.c ^ |
@@ -378,6 +378,7 @@ return (-1); } if (obufl == *obufp || i == VGZ_STUCK) { + sp->wrk->acct_tmp.bodybytes += *obufp; (void)WRW_Write(sp->wrk, obuf, *obufp); (void)WRW_Flush(sp->wrk); *obufp = 0; @@ -468,8 +469,10 @@ bytes -= w; } - if (VGZ_ObufStorage(sp, vg)) + if (VGZ_ObufStorage(sp, vg)) { + htc->error = "Could not get storage"; return (-1); + } i = VGZ_Gunzip(vg, &dp, &dl); assert(i == VGZ_OK || i == VGZ_END); sp->obj->len += dl; @@ -478,6 +481,8 @@ } if (i == Z_OK || i == Z_STREAM_END) return (1); + htc->error = "See other message"; + WSP(sp, SLT_FetchError, "Gunzip trouble (%d)", i); return (-1); } @@ -539,8 +544,10 @@ VGZ_Ibuf(vg, ibuf, w); bytes -= w; } - if (VGZ_ObufStorage(sp, vg)) + if (VGZ_ObufStorage(sp, vg)) { + htc->error = "Could not get storage"; return (-1); + } i = VGZ_Gzip(vg, &dp, &dl, VGZ_NORMAL); assert(i == Z_OK); sp->obj->len += dl; @@ -593,6 +600,7 @@ { (void)estimate; sp->wrk->vgz_rx = VGZ_NewUngzip(sp, "u F -"); + CHECK_OBJ_NOTNULL(sp->wrk->vgz_rx, VGZ_MAGIC); } static int __match_proto__() @@ -611,8 +619,10 @@ AZ(vg->vz.avail_in); while (bytes > 0) { st = FetchStorage(sp, 0); - if (st == NULL) + if (st == NULL) { + htc->error = "Could not get storage"; return (-1); + } l = st->space - st->len; if (l > bytes) l = bytes; @@ -630,10 +640,11 @@ VGZ_Obuf(vg, obuf, sizeof obuf); i = VGZ_Gunzip(vg, &dp, &dl); if (i == VGZ_END && !VGZ_IbufEmpty(vg)) { - WSP(sp, SLT_FetchError, "Junk after gzip data"); + htc->error = "Junk after gzip data"; return (-1); } if (i != VGZ_OK && i != VGZ_END) { + htc->error = "See other message"; WSP(sp, SLT_FetchError, "Invalid Gzip data: %s", vg->vz.msg); return (-1); @@ -642,6 +653,7 @@ } if (i == VGZ_OK || i == VGZ_END) return (1); + htc->error = "See other message"; WSP(sp, SLT_FetchError, "Gunzip trouble (%d)", i); return (-1); } @@ -664,5 +676,3 @@ .bytes = vfp_testgzip_bytes, .end = vfp_testgzip_end, }; - - | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_hash.c ^ |
@@ -461,7 +461,12 @@ AN(oc->flags & OC_F_BUSY); oc->refcnt = 1; - w->nbusyobj->vary = sp->vary_b; + /* XXX: clear w->nbusyobj before use */ + VRY_Validate(sp->vary_b); + if (sp->vary_l != NULL) + w->nbusyobj->vary = sp->vary_b; + else + w->nbusyobj->vary = NULL; oc->busyobj = w->nbusyobj; w->nbusyobj = NULL; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_http.c ^ |
@@ -522,7 +522,8 @@ if (q - p > htc->maxhdr) { VSC_C_main->losthdr++; - WSL(w, SLT_LostHeader, fd, "%.*s", q - p, p); + WSL(w, SLT_LostHeader, fd, "%.*s", + q - p > 20 ? 20 : q - p, p); return (413); } @@ -547,7 +548,8 @@ hp->nhd++; } else { VSC_C_main->losthdr++; - WSL(w, SLT_LostHeader, fd, "%.*s", q - p, p); + WSL(w, SLT_LostHeader, fd, "%.*s", + q - p > 20 ? 20 : q - p, p); return (413); } } @@ -979,6 +981,9 @@ { http_PutField(w, fd, to, HTTP_HDR_PROTO, protocol); + if (to->hd[HTTP_HDR_PROTO].b == NULL) + http_SetH(to, HTTP_HDR_PROTO, "HTTP/1.1"); + Tcheck(to->hd[HTTP_HDR_PROTO]); } void @@ -995,6 +1000,10 @@ { http_PutField(w, fd, to, HTTP_HDR_RESPONSE, response); + if (to->hd[HTTP_HDR_RESPONSE].b == NULL) + http_SetH(to, HTTP_HDR_RESPONSE, "Lost Response"); + Tcheck(to->hd[HTTP_HDR_RESPONSE]); + } void | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_httpconn.c ^ |
@@ -88,6 +88,7 @@ htc->fd = fd; htc->maxbytes = maxbytes; htc->maxhdr = maxhdr; + htc->error = "No error recorded"; (void)WS_Reserve(htc->ws, htc->maxbytes); htc->rxbuf.b = ws->f; @@ -109,6 +110,7 @@ unsigned l; CHECK_OBJ_NOTNULL(htc, HTTP_CONN_MAGIC); + htc->error = "No error recorded"; (void)WS_Reserve(htc->ws, htc->maxbytes); htc->rxbuf.b = htc->ws->f; htc->rxbuf.e = htc->ws->f; @@ -201,7 +203,10 @@ if (len == 0) return (l); i = read(htc->fd, p, len); - if (i < 0) + if (i < 0) { + htc->error = strerror(errno); return (i); + } else if (i == 0) + htc->error = "Remote closed connection"; return (i + l); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_pool.c ^ |
@@ -94,7 +94,7 @@ #define L0(n) #define L1(n) (VSC_C_main->n += w->stats.n) #define VSC_DO_MAIN -#define VSC_F(n, t, l, f, d) L##l(n); +#define VSC_F(n, t, l, f, d, e) L##l(n); #include "vsc_fields.h" #undef VSC_F #undef VSC_DO_MAIN | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_response.c ^ |
@@ -175,7 +175,6 @@ CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC); u += st->len; - sp->acct_tmp.bodybytes += st->len; /* XXX ? */ VSC_C_main->n_objwrite++; i = VGZ_WrwGunzip(sp, vg, @@ -195,7 +194,7 @@ /*--------------------------------------------------------------------*/ static void -res_WriteDirObj(struct sess *sp, ssize_t low, ssize_t high) +res_WriteDirObj(const struct sess *sp, ssize_t low, ssize_t high) { ssize_t u = 0; size_t ptr, off, len; @@ -227,7 +226,7 @@ ptr += len; - sp->acct_tmp.bodybytes += len; + sp->wrk->acct_tmp.bodybytes += len; #ifdef SENDFILE_WORKS /* * XXX: the overhead of setting up sendfile is not @@ -277,9 +276,13 @@ */ low = 0; high = sp->obj->len - 1; - if (!(sp->wrk->res_mode & (RES_ESI|RES_ESI_CHILD|RES_GUNZIP)) && - params->http_range_support && sp->obj->response == 200 && - sp->wantbody && http_GetHdr(sp->http, H_Range, &r)) + if ( + sp->wantbody && + (sp->wrk->res_mode & RES_LEN) && + !(sp->wrk->res_mode & (RES_ESI|RES_ESI_CHILD|RES_GUNZIP)) && + params->http_range_support && + sp->obj->response == 200 && + http_GetHdr(sp->http, H_Range, &r)) res_dorange(sp, r, &low, &high); /* @@ -292,7 +295,7 @@ * Send HTTP protocol header, unless interior ESI object */ if (!(sp->wrk->res_mode & RES_ESI_CHILD)) - sp->acct_tmp.hdrbytes += + sp->wrk->acct_tmp.hdrbytes += http_Write(sp->wrk, sp->wrk->resp, 1); if (!sp->wantbody) @@ -348,7 +351,7 @@ http_PrintfHeader(sp->wrk, sp->fd, sp->wrk->resp, "Content-Length: %s", sp->wrk->h_content_length); - sp->acct_tmp.hdrbytes += + sp->wrk->acct_tmp.hdrbytes += http_Write(sp->wrk, sp->wrk->resp, 1); if (sp->wrk->res_mode & RES_CHUNKED) | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_session.c ^ |
@@ -80,7 +80,7 @@ void SES_Charge(struct sess *sp) { - struct acct *a = &sp->acct_tmp; + struct acct *a = &sp->wrk->acct_tmp; #define ACCT(foo) \ sp->wrk->stats.s_##foo += a->foo; \ | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_vary.c ^ |
@@ -247,3 +247,13 @@ sp->vary_l = vsp + 3; return (retval); } + +void +VRY_Validate(const uint8_t *vary) +{ + + while (vary[2] != 0) { + assert(strlen((const char*)vary+3) == vary[2]); + vary += vry_len(vary); + } +} | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_vcl.c ^ |
@@ -170,10 +170,15 @@ FREE_OBJ(vcl); return (1); } + if (vcl->conf->init_vcl(cli)) { + VCLI_Out(cli, "VCL \"%s\" Failed to initialize", name); + (void)dlclose(vcl->dlh); + FREE_OBJ(vcl); + return (1); + } REPLACE(vcl->name, name); - VTAILQ_INSERT_TAIL(&vcl_head, vcl, list); VCLI_Out(cli, "Loaded \"%s\" as \"%s\"", fn , name); - vcl->conf->init_vcl(cli); + VTAILQ_INSERT_TAIL(&vcl_head, vcl, list); (void)vcl->conf->init_func(NULL); Lck_Lock(&vcl_mtx); if (vcl_active == NULL) | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_vrt_re.c ^ |
@@ -59,8 +59,11 @@ void VRT_re_fini(void *rep) { + vre_t *vv; + + vv = rep; if (rep != NULL) - VRE_free((vre_t**)&rep); + VRE_free(&vv); } int | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_vrt_vmod.c ^ |
@@ -56,51 +56,70 @@ void *hdl; const void *funcs; int funclen; + const void *idptr; }; static VTAILQ_HEAD(,vmod) vmods = VTAILQ_HEAD_INITIALIZER(vmods); -void -VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm, const char *path) +int +VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm, + const char *path, struct cli *cli) { struct vmod *v; - void *x; - const int *i; + void *x, *y, *z, *w; ASSERT_CLI(); VTAILQ_FOREACH(v, &vmods, list) - if (!strcmp(v->nm, nm)) + if (!strcmp(v->nm, nm)) // Also path, len ? break; if (v == NULL) { ALLOC_OBJ(v, VMOD_MAGIC); AN(v); - VTAILQ_INSERT_TAIL(&vmods, v, list); - VSC_C_main->vmods++; - - REPLACE(v->nm, nm); - REPLACE(v->path, path); - - v->hdl = dlopen(v->path, RTLD_NOW | RTLD_LOCAL); - if (! v->hdl) { - char buf[1024]; - sprintf(buf, "dlopen failed (child process lacks permission?): %.512s", dlerror()); - VAS_Fail(__func__, __FILE__, __LINE__, buf, 0, 0); + v->hdl = dlopen(path, RTLD_NOW | RTLD_LOCAL); + if (v->hdl == NULL) { + VCLI_Out(cli, "Loading VMOD %s from %s:\n", nm, path); + VCLI_Out(cli, "dlopen() failed: %s\n", dlerror()); + VCLI_Out(cli, "Check child process permissions.\n"); + FREE_OBJ(v); + return (1); } x = dlsym(v->hdl, "Vmod_Name"); + y = dlsym(v->hdl, "Vmod_Len"); + z = dlsym(v->hdl, "Vmod_Func"); + w = dlsym(v->hdl, "Vmod_Id"); + if (x == NULL || y == NULL || z == NULL || w == NULL) { + VCLI_Out(cli, "Loading VMOD %s from %s:\n", nm, path); + VCLI_Out(cli, "VMOD symbols not found\n"); + VCLI_Out(cli, "Check relative pathnames.\n"); + (void)dlclose(v->hdl); + FREE_OBJ(v); + return (1); + } AN(x); - /* XXX: check that name is correct */ + AN(y); + AN(z); + AN(w); + if (strcmp(x, nm)) { + VCLI_Out(cli, "Loading VMOD %s from %s:\n", nm, path); + VCLI_Out(cli, "File contain wrong VMOD (\"%s\")\n", x); + VCLI_Out(cli, "Check relative pathnames ?.\n"); + (void)dlclose(v->hdl); + FREE_OBJ(v); + return (1); + } - x = dlsym(v->hdl, "Vmod_Len"); - AN(x); - i = x; - v->funclen = *i; + v->funclen = *(const int *)y; + v->funcs = z; - x = dlsym(v->hdl, "Vmod_Func"); - AN(x); - v->funcs = x; + REPLACE(v->nm, nm); + REPLACE(v->path, path); + + VSC_C_main->vmods++; + VTAILQ_INSERT_TAIL(&vmods, v, list); + v->idptr = w; } assert(len == v->funclen); @@ -108,6 +127,7 @@ v->ref++; *hdl = v; + return (0); } void | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/cache_wrw.c ^ |
@@ -179,14 +179,16 @@ return (0); if (len == -1) len = strlen(ptr); - if (wrw->niov == wrw->siov + (wrw->ciov < wrw->siov ? 1 : 0)) + if (wrw->niov >= wrw->siov - (wrw->ciov < wrw->siov ? 1 : 0)) (void)WRW_Flush(w); wrw->iov[wrw->niov].iov_base = TRUST_ME(ptr); wrw->iov[wrw->niov].iov_len = len; wrw->liov += len; - if (wrw->ciov < wrw->siov) - wrw->cliov += len; wrw->niov++; + if (wrw->ciov < wrw->siov) { + assert(wrw->niov < wrw->siov); + wrw->cliov += len; + } return (len); } @@ -208,6 +210,7 @@ wrw->ciov = wrw->niov++; wrw->cliov = 0; assert(wrw->ciov < wrw->siov); + assert(wrw->niov < wrw->siov); } /* | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/mgt.h ^ |
@@ -66,13 +66,18 @@ void MCF_ParamSync(void); void MCF_ParamInit(struct cli *); void MCF_ParamSet(struct cli *, const char *param, const char *val); -#ifdef DIAGNOSTICS void MCF_DumpRst(void); -#endif /* mgt_sandbox.c */ void mgt_sandbox(void); +/* mgt_sandbox_solaris.c */ +#ifdef HAVE_SETPPRIV +void mgt_sandbox_solaris_init(void); +void mgt_sandbox_solaris_fini(void); +void mgt_sandbox_solaris_privsep(void); +#endif + /* mgt_shmem.c */ void mgt_SHM_Init(const char *arg); void mgt_SHM_Pid(void); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/mgt_child.c ^ |
@@ -385,7 +385,7 @@ mgt_cli_start_child(child_cli_in, child_VCLI_Out); child_pid = pid; if (mgt_push_vcls_and_start(&u, &p)) { - REPORT(LOG_ERR, "Pushing vcls failed: %s", p); + REPORT(LOG_ERR, "Pushing vcls failed:\n%s", p); free(p); child_state = CH_RUNNING; mgt_stop_child(); @@ -479,7 +479,7 @@ vsb = VSB_new_auto(); XXXAN(vsb); VSB_printf(vsb, "Child (%d) %s", r, status ? "died" : "ended"); - if (!WIFEXITED(status) && WEXITSTATUS(status)) { + if (WIFEXITED(status) && WEXITSTATUS(status)) { VSB_printf(vsb, " status=%d", WEXITSTATUS(status)); exit_status |= 0x20; } @@ -595,8 +595,10 @@ REPORT0(LOG_ERR, "No VCL loaded yet"); else if (!d_flag) { start_child(NULL); - if (child_state == CH_STOPPED) - exit(2); + if (child_state == CH_STOPPED) { + exit_status = 2; + return; + } } i = vev_schedule(mgt_evb); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/mgt_param.c ^ |
@@ -522,7 +522,7 @@ "Maximum length of any HTTP client request header we will " "allow. The limit is inclusive its continuation lines.\n", 0, - "4096", "bytes" }, + "8192", "bytes" }, { "http_req_size", tweak_uint, &master.http_req_size, 256, UINT_MAX, "Maximum number of bytes of HTTP client request we will deal " @@ -538,7 +538,7 @@ "Maximum length of any HTTP backend response header we will " "allow. The limit is inclusive its continuation lines.\n", 0, - "4096", "bytes" }, + "8192", "bytes" }, { "http_resp_size", tweak_uint, &master.http_resp_size, 256, UINT_MAX, "Maximum number of bytes of HTTP backend resonse we will deal " @@ -622,7 +622,7 @@ "Maximum number of objects we attempt to nuke in order" "to make space for a object body.", EXPERIMENTAL, - "10", "allocations" }, + "50", "allocations" }, { "fetch_chunksize", tweak_uint, &master.fetch_chunksize, 4, UINT_MAX / 1024., "The default chunksize used by fetcher. " | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/mgt_sandbox.c ^ |
@@ -48,10 +48,6 @@ #include <syslog.h> #include <unistd.h> -#ifdef HAVE_PRIV_H -#include <priv.h> -#endif - #ifdef __linux__ #include <sys/prctl.h> #endif @@ -66,13 +62,17 @@ void mgt_sandbox(void) { - +#ifdef HAVE_SETPPRIV + mgt_sandbox_solaris_init(); + mgt_sandbox_solaris_privsep(); +#else if (geteuid() == 0) { XXXAZ(setgid(params->gid)); XXXAZ(setuid(params->uid)); } else { REPORT0(LOG_INFO, "Not running as root, no priv-sep"); } +#endif /* On Linux >= 2.4, you need to set the dumpable flag to get core dumps after you have done a setuid. */ @@ -84,34 +84,7 @@ #endif #ifdef HAVE_SETPPRIV - priv_set_t *empty, *minimal; - - if (!(empty = priv_allocset()) || - !(minimal = priv_allocset())) { - REPORT0(LOG_ERR, "priv_allocset_failed"); - } else { - priv_emptyset(empty); - priv_emptyset(minimal); - - /* - * new privilege, - * silently ignore any errors if it doesn't exist - */ - priv_addset(minimal, "net_access"); - -#define SETPPRIV(which, set) \ - if (setppriv(PRIV_SET, which, set)) \ - REPORT0(LOG_ERR, \ - "Waiving privileges failed on " #which) - - /* need to set I after P to avoid SNOCD being set */ - SETPPRIV(PRIV_LIMIT, minimal); - SETPPRIV(PRIV_PERMITTED, minimal); /* implies PRIV_EFFECTIVE */ - SETPPRIV(PRIV_INHERITABLE, empty); - - priv_freeset(empty); - priv_freeset(minimal); - } + mgt_sandbox_solaris_fini(); #endif } | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishd/mgt_sandbox_solaris.c ^ |
@@ -0,0 +1,237 @@ +/*- + * Copyright (c) 2006-2011 Varnish Software AS + * All rights reserved. + * + * Author: Poul-Henning Kamp <phk@phk.freebsd.dk> + * Nils Goroll <nils.goroll@uplex.de> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Sandboxing child processes on Solaris + * + */ + +#include "config.h" + +#ifdef HAVE_SETPPRIV + +#include <stdio.h> +#include <syslog.h> +#include <unistd.h> +#include <string.h> + +#ifdef HAVE_PRIV_H +#include <priv.h> +#endif +#include <stdio.h> +#include <string.h> +#include <syslog.h> +#include <unistd.h> + +#include "mgt.h" +#include "heritage.h" + +/*-------------------------------------------------------------------- + * SOLARIS PRIVILEGES: Note on use of symbolic PRIV_* constants + * + * For privileges which existed in Solaris 10 FCS, we may use the constants from + * sys/priv_names.h + * + * For privileges which have been added later, we need to use strings in order + * not to break builds of varnish on these platforms. To remain binary + * compatible, we need to silently ignore errors from priv_addset when using + * these strings. + * + * For optimal build and binary forward comatibility, we could use subtractive + * set specs like + * + * basic,!file_link_any,!proc_exec,!proc_fork,!proc_info,!proc_session + * + * but I (Nils) have a preference for making an informed decision about which + * privileges the varnish child should have and which it shouldn't. + * + * Newly introduced privileges should be annotated with their PSARC / commit ID + * (as long as Oracle reveils these :/ ) + * + * SOLARIS PRIVILEGES: Note on accidentally setting the SNOCD flag + * + * When setting privileges, we need to take care not to accidentally set the + * SNOCD flag which will disable core dumps unnecessarily. (see + * https://www.varnish-cache.org/trac/ticket/671 ) + * + * When changing the logic herein, always check with mdb -k. Replace _PID_ with + * the pid of your varnish child, the result should be 0, otherwise a regression + * has been introduced. + * + * > 0t_PID_::pid2proc | ::print proc_t p_flag | >a + * > (<a & 0x10000000)=X + * 0 + * + * (a value of 0x10000000 indicates that SNOCD is set) + * + * NOTE that on Solaris changing the uid will _always_ set SNOCD, so make sure + * you run this test with appropriate privileges, but without proc_setid, so + * varnish won't setuid(), e.g. + * + * pfexec ppriv -e -s A=basic,net_privaddr,sys_resource varnish ... + * + * SOLARIS COREDUMPS with setuid(): See coreadm(1M) - global-setid / proc-setid + * + */ + +/* effective during runtime of the child */ +static inline void +mgt_sandbox_solaris_add_effective(priv_set_t *pset) +{ + /* PSARC/2009/685 - 8eca52188202 - onnv_132 */ + priv_addset(pset, "net_access"); + + /* PSARC/2009/378 - 63678502e95e - onnv_140 */ + priv_addset(pset, "file_read"); + priv_addset(pset, "file_write"); +} + +/* permitted during runtime of the child - for privilege bracketing */ +static inline void +mgt_sandbox_solaris_add_permitted(priv_set_t *pset) +{ + /* for raising limits in cache_waiter_ports.c */ + priv_addset(pset, PRIV_SYS_RESOURCE); +} + +/* effective during mgt_sandbox */ +static inline void +mgt_sandbox_solaris_add_initial(priv_set_t *pset) +{ + /* for setgid/setuid */ + priv_addset(pset, PRIV_PROC_SETID); +} + +/* + * if we are not yet privilege-aware already (ie we have been started + * not-privilege aware wird euid 0), we need to grab any additional privileges + * needed during mgt_standbox, until we reduce to least privileges in + * mgt_sandbox_waive, otherwise we would loose them with setuid() + */ + +void +mgt_sandbox_solaris_init(void) +{ + priv_set_t *priv_all; + + if (! (priv_all = priv_allocset())) { + REPORT(LOG_ERR, + "Child start warning: mgt_sandbox_init - priv_allocset failed: errno=%d (%s)", + errno, strerror(errno)); + return; + } + + priv_emptyset(priv_all); + + mgt_sandbox_solaris_add_effective(priv_all); + mgt_sandbox_solaris_add_permitted(priv_all); + mgt_sandbox_solaris_add_initial(priv_all); + + setppriv(PRIV_ON, PRIV_PERMITTED, priv_all); + setppriv(PRIV_ON, PRIV_EFFECTIVE, priv_all); + setppriv(PRIV_ON, PRIV_INHERITABLE, priv_all); + + priv_freeset(priv_all); +} + +void +mgt_sandbox_solaris_privsep(void) +{ + if (priv_ineffect(PRIV_PROC_SETID)) { + if (getgid() != params->gid) + XXXAZ(setgid(params->gid)); + if (getuid() != params->uid) + XXXAZ(setuid(params->uid)); + } else { + REPORT(LOG_INFO, "Privilege %s missing, will not change uid/gid", + PRIV_PROC_SETID); + } +} + +/* + * Waive most privileges in the child + * + * as of onnv_151a, we should end up with: + * + * > ppriv -v #pid of varnish child + * PID: .../varnishd ... + * flags = PRIV_AWARE + * E: file_read,file_write,net_access + * I: none + * P: file_read,file_write,net_access,sys_resource + * L: file_read,file_write,net_access,sys_resource + * + * We should keep sys_resource in P in order to adjust our limits if we need to + */ + +void +mgt_sandbox_solaris_fini(void) +{ + priv_set_t *effective, *inheritable, *permitted; + + if (!(effective = priv_allocset()) || + !(inheritable = priv_allocset()) || + !(permitted = priv_allocset())) { + REPORT(LOG_ERR, + "Child start warning: mgt_sandbox_waive - priv_allocset failed: errno=%d (%s)", + errno, strerror(errno)); + return; + } + + priv_emptyset(inheritable); + + priv_emptyset(effective); + mgt_sandbox_solaris_add_effective(effective); + + priv_copyset(effective, permitted); + mgt_sandbox_solaris_add_permitted(permitted); + + /* + * invert the sets and clear privileges such that setppriv will always + * succeed + */ + priv_inverse(inheritable); + priv_inverse(effective); + priv_inverse(permitted); + +#define SETPPRIV(which, set) \ + if (setppriv(PRIV_OFF, which, set)) \ + REPORT(LOG_ERR, \ + "Child start warning: Waiving privileges failed on %s: errno=%d (%s)", \ + #which, errno, strerror(errno)); + + SETPPRIV(PRIV_LIMIT, permitted); + SETPPRIV(PRIV_PERMITTED, permitted); + SETPPRIV(PRIV_EFFECTIVE, effective); + SETPPRIV(PRIV_INHERITABLE, inheritable); +#undef SETPPRIV + + priv_freeset(inheritable); + priv_freeset(effective); +} + +#endif /* HAVE_SETPPRIV */ | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/stevedore_utils.c ^ |
@@ -108,6 +108,7 @@ if (fd < 0) ARGV_ERR("(%s) \"%s\" mkstemp(%s) failed (%s)\n", ctx, fn, buf, strerror(errno)); + AZ(unlink(buf)); *fnp = strdup(buf); AN(*fnp); retval = 2; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/storage_file.c ^ |
@@ -104,19 +104,16 @@ /*--------------------------------------------------------------------*/ static void -smf_initfile(struct stevedore *st, struct smf_sc *sc, const char *size) +smf_initfile(struct smf_sc *sc, const char *size) { sc->filesize = STV_FileSize(sc->fd, size, &sc->pagesize, "-sfile"); - printf("SMF.%s: filename: %s size %ju MB.\n", - st->ident, sc->filename, sc->filesize / (1024 * 1024)); - AZ(ftruncate(sc->fd, (off_t)sc->filesize)); /* XXX: force block allocation here or in open ? */ } -static const char default_size[] = "50%"; +static const char default_size[] = "100M"; static const char default_filename[] = "."; static void @@ -162,7 +159,7 @@ (void)STV_GetFile(fn, &sc->fd, &sc->filename, "-sfile"); mgt_child_inherit(sc->fd, "storage_file"); - smf_initfile(parent, sc, size); + smf_initfile(sc, size); } /*-------------------------------------------------------------------- | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/storage_persistent_mgt.c ^ |
@@ -109,7 +109,7 @@ */ sc->free_reserve = sc->aim_segl * 10; - fprintf(stderr, "free_reserve = %ju\n", sc->free_reserve); + fprintf(stderr, "free_reserve = %ju\n", (uintmax_t)sc->free_reserve); } /*-------------------------------------------------------------------- | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishd/varnishd.c ^ |
@@ -145,7 +145,7 @@ fprintf(stderr, FMT, "", " shl: space for SHL records [80m]"); fprintf(stderr, FMT, "", " free: space for other allocations [1m]"); fprintf(stderr, FMT, "", " fill: prefill new file [+]"); - fprintf(stderr, FMT, "-M address:port", "CLI-master to connect to."); + fprintf(stderr, FMT, "-M address:port", "Reverse CLI destination."); fprintf(stderr, FMT, "-n dir", "varnishd working directory"); fprintf(stderr, FMT, "-P file", "PID file"); fprintf(stderr, FMT, "-p param=value", "set parameter"); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishlog/varnishlog.1 ^ |
@@ -43,101 +43,80 @@ .INDENT 0.0 .TP .B \-a -. When writing to a file, append to it rather than overwrite it. .TP .B \-b -. Include log entries which result from communication with a backend server. If neither \-b nor \-c is specified, varnishlog acts as if they both were. .TP .B \-C -. Ignore case when matching regular expressions. .TP .B \-c -. Include log entries which result from communication with a client. If neither \-b nor \-c is specified, varnishlog acts as if they both were. .TP .B \-D -. Daemonize. .TP .B \-d -. Process old log entries on startup. Normally, varnishlog will only process entries which are written to the log after it starts. .TP .BI \-I \ regex -. Include log entries which match the specified regular expression. If neither \-I nor \-i is specified, all log entries are included. .TP .BI \-i \ tag -. Include log entries with the specified tag. If neither \-I nor \-i is specified, all log entries are included. .TP .BI \-k \ num -. Only show the first num log records. .UNINDENT .INDENT 0.0 .TP .B \-m \fI\%tag:regex\fP only list transactions where tag matches regex. Multiple -.sp \-m options are AND\-ed together. Can not be combined with \-O .UNINDENT .INDENT 0.0 .TP .B \-n -. Specifies the name of the varnishd instance to get logs from. If \-n is not specified, the host name is used. .TP .B \-o -. Ignored for compatibility with earlier versions. .TP .B \-O -. Do not group log entries by request ID. Can not be combined with \-m. .TP .BI \-P \ file -. Write the process\(aqs PID to the specified file. .TP .BI \-r \ file -. Read log entries from file instead of shared memory. .TP .BI \-s \ num -. Skip the first num log records. .TP .B \-u -. Unbuffered output. .TP .B \-V -. Display the version number and exit. .TP .BI \-w \ file -. Write log entries to file instead of displaying them. The file will be overwritten unless the \-a option was specified. If varnishlog receives a SIGHUP while writing to a file, it will reopen the file, allowing the old one to be rotated away. .TP .BI \-X \ regex -. Exclude log entries which match the specified regular expression. .TP .BI \-x \ tag -. Exclude log entries with the specified tag. .UNINDENT .SH TAGS @@ -145,154 +124,104 @@ The following log entry tags are currently defined: .INDENT 0.0 .IP \(bu 2 -. Backend .IP \(bu 2 -. BackendClose .IP \(bu 2 -. BackendOpen .IP \(bu 2 -. BackendReuse .IP \(bu 2 -. BackendXID .IP \(bu 2 -. CLI .IP \(bu 2 -. ClientAddr .IP \(bu 2 -. Debug .IP \(bu 2 -. Error .IP \(bu 2 -. ExpBan .IP \(bu 2 -. ExpKill .IP \(bu 2 -. ExpPick .IP \(bu 2 -. Hit .IP \(bu 2 -. HitPass .IP \(bu 2 -. HttpError .IP \(bu 2 -. HttpGarbage .IP \(bu 2 -. Length .IP \(bu 2 -. ObjHeader .IP \(bu 2 -. ObjLostHeader .IP \(bu 2 -. ObjProtocol .IP \(bu 2 -. ObjRequest .IP \(bu 2 -. ObjResponse .IP \(bu 2 -. ObjStatus .IP \(bu 2 -. ObjURL .IP \(bu 2 -. ReqEnd .IP \(bu 2 -. ReqStart .IP \(bu 2 -. RxHeader .IP \(bu 2 -. RxLostHeader .IP \(bu 2 -. RxProtocol .IP \(bu 2 -. RxRequest .IP \(bu 2 -. RxResponse .IP \(bu 2 -. RxStatus .IP \(bu 2 -. RxURL .IP \(bu 2 -. SessionClose .IP \(bu 2 -. SessionOpen .IP \(bu 2 -. StatAddr .IP \(bu 2 -. StatSess .IP \(bu 2 -. TTL .IP \(bu 2 -. TxHeader .IP \(bu 2 -. TxLostHeader .IP \(bu 2 -. TxProtocol .IP \(bu 2 -. TxRequest .IP \(bu 2 -. TxResponse .IP \(bu 2 -. TxStatus .IP \(bu 2 -. TxURL .IP \(bu 2 -. VCL_acl .IP \(bu 2 -. VCL_call .IP \(bu 2 -. VCL_return .IP \(bu 2 -. VCL_trace .IP \(bu 2 -. WorkThread .UNINDENT .SH EXAMPLES @@ -315,19 +244,14 @@ .SH SEE ALSO .INDENT 0.0 .IP \(bu 2 -. varnishd(1) .IP \(bu 2 -. varnishhist(1) .IP \(bu 2 -. varnishncsa(1) .IP \(bu 2 -. varnishstat(1) .IP \(bu 2 -. varnishtop(1) .UNINDENT .SH HISTORY @@ -340,10 +264,8 @@ itself. See LICENCE for details. .INDENT 0.0 .IP \(bu 2 -. Copyright (c) 2006 Verdens Gang AS .IP \(bu 2 -. Copyright (c) 2006\-2011 Varnish Software AS .UNINDENT .SH AUTHOR | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishlog/varnishlog.c ^ |
@@ -46,7 +46,6 @@ #include "libvarnish.h" #include "vsl.h" -#include "vre.h" #include "varnishapi.h" static int b_flag, c_flag; @@ -60,7 +59,7 @@ #define F_INVCL (1 << 0) static void -h_order_finish(int fd, struct VSM_data *vd) +h_order_finish(int fd, const struct VSM_data *vd) { AZ(VSB_finish(ob[fd])); @@ -72,7 +71,7 @@ } static void -clean_order(struct VSM_data *vd) +clean_order(const struct VSM_data *vd) { unsigned u; @@ -321,7 +320,8 @@ w_arg = optarg; break; case 'm': - m_flag = 1; /* fall through */ + m_flag = 1; + /* FALLTHROUGH */ default: if (VSL_Arg(vd, c, optarg) > 0) break; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishncsa/varnishncsa.1 ^ |
@@ -44,46 +44,38 @@ .INDENT 0.0 .TP .B \-a -. When writing to a file, append to it rather than overwrite it. .TP .B \-b -. Include log entries which result from communication with a backend server. If neither \-b nor \-c is specified, varnishncsa acts as if they both were. .TP .B \-C -. Ignore case when matching regular expressions. .TP .B \-c -. Include log entries which result from communication with a client. If neither \-b nor \-c is specified, varnishncsa acts as if they both were. .TP .B \-D -. Daemonize. .TP .B \-d -. Process old log entries on startup. Normally, varnishncsa will only process entries which are written to the log after it starts. .TP .B \-f -. Prefer the X\-Forwarded\-For HTTP header over client.ip in the log output. .TP .BI \-F \ format -. Specify the log format used. If no format is specified the default log format is used. Currently it is: .sp -%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User\-agent}i" +%h %l %u %t "%r" %s %b "%{Referer}i" "%{User\-agent}i" .sp Supported formatters are: .INDENT 7.0 @@ -91,78 +83,66 @@ .INDENT 0.0 .TP .B %b -. Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a \(aq\-\(aq rather than a 0 when no bytes are sent. .TP .B %H -. -The request protocol +The request protocol. Defaults to HTTP/1.0 if not +known. .TP .B %h -. -Remote host +Remote host. Defaults to \(aq\-\(aq if not known. +Defaults to 127.0.0.1 for backend requests. .TP .B %{X}i -. The contents of request header line X. .TP .B %l -. Remote logname (always \(aq\-\(aq) .TP .B %m -. -Request method +Request method. Defaults to \(aq\-\(aq if not known. .TP .B %q -. -The query string, if no query string exists, an empty string. +The query string, if no query string exists, an +empty string. .TP .B %{X}o -. The contents of response header line X. .TP .B %r -. -The first line of the request +The first line of the request. Synthesized from other +fields, so it may not be the request verbatim. .TP .B %s -. Status sent to the client .TP .B %t -. Time when the request was received, in HTTP date/time format. .TP .B %U -. -The request URL without any query string. +The request URL without any query string. Defaults to +\(aq\-\(aq if not known. .TP .B %u -. Remote user from auth .TP .B %{X}x -. Extended variables. Supported variables are: .INDENT 7.0 .INDENT 3.5 .INDENT 0.0 .TP .B Varnish:time_firstbyte -. Time to the first byte from the backend arrived .TP .B Varnish:hitmiss -. Whether the request was a cache hit or miss. Pipe and pass are considered misses. .TP .B Varnish:handling -. How the request was handled, whether it was a cache hit, miss, pass, pipe or error. .UNINDENT @@ -175,30 +155,24 @@ .INDENT 0.0 .TP .B \-m \fI\%tag:regex\fP only list records where tag matches regex. Multiple -.sp \-m options are AND\-ed together. .UNINDENT .INDENT 0.0 .TP .B \-n -. Specifies the name of the varnishd instance to get logs from. If \-n is not specified, the host name is used. .TP .BI \-P \ file -. Write the process\(aqs PID to the specified file. .TP .BI \-r \ file -. Read log entries from file instead of shared memory. .TP .B \-V -. Display the version number and exit. .TP .BI \-w \ file -. Write log entries to file instead of displaying them. The file will be overwritten unless the \-a option was specified. @@ -208,12 +182,10 @@ rotated away. .TP .BI \-X \ regex -. Exclude log entries which match the specified regular expression. .TP .BI \-x \ tag -. Exclude log entries with the specified tag. .UNINDENT .sp @@ -223,19 +195,14 @@ .SH SEE ALSO .INDENT 0.0 .IP \(bu 2 -. varnishd(1) .IP \(bu 2 -. varnishhist(1) .IP \(bu 2 -. varnishlog(1) .IP \(bu 2 -. varnishstat(1) .IP \(bu 2 -. varnishtop(1) .UNINDENT .SH HISTORY @@ -249,10 +216,8 @@ itself. See LICENCE for details. .INDENT 0.0 .IP \(bu 2 -. Copyright (c) 2006 Verdens Gang AS .IP \(bu 2 -. Copyright (c) 2006\-2011 Varnish Software AS .UNINDENT .SH AUTHOR | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishncsa/varnishncsa.c ^ |
@@ -31,7 +31,7 @@ * Obtain log data from the shared memory log, order it by session ID, and * display it in Apache / NCSA combined log format: * - * %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" + * %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i" * * where the fields are defined as follows: * @@ -250,7 +250,7 @@ collect_backend(struct logline *lp, enum VSL_tag_e tag, unsigned spec, const char *ptr, unsigned len) { - const char *end, *next; + const char *end, *next, *split; assert(spec & VSL_S_BACKEND); end = ptr + len; @@ -332,16 +332,17 @@ case SLT_TxHeader: if (!lp->active) break; + split = strchr(ptr, ':'); + if (split == NULL) + break; if (isprefix(ptr, "authorization:", end, &next) && isprefix(next, "basic", end, &next)) { lp->df_u = trimline(next, end); } else { struct hdr *h; - const char *split; size_t l; h = malloc(sizeof(struct hdr)); AN(h); - split = strchr(ptr, ':'); AN(split); l = strlen(split); h->key = trimline(ptr, split-1); @@ -369,7 +370,7 @@ collect_client(struct logline *lp, enum VSL_tag_e tag, unsigned spec, const char *ptr, unsigned len) { - const char *end, *next; + const char *end, *next, *split; long l; time_t t; @@ -439,6 +440,9 @@ case SLT_RxHeader: if (!lp->active) break; + split = strchr(ptr, ':'); + if (split == NULL) + break; if (tag == SLT_RxHeader && isprefix(ptr, "authorization:", end, &next) && isprefix(next, "basic", end, &next)) { @@ -446,10 +450,8 @@ lp->df_u = trimline(next, end); } else { struct hdr *h; - const char *split; h = malloc(sizeof(struct hdr)); AN(h); - split = strchr(ptr, ':'); AN(split); h->key = trimline(ptr, split); h->value = trimline(split+1, end); @@ -598,7 +600,7 @@ break; case 'H': - VSB_cat(os, lp->df_H); + VSB_cat(os, lp->df_H ? lp->df_H : "HTTP/1.0"); break; case 'h': @@ -612,7 +614,7 @@ break; case 'm': - VSB_cat(os, lp->df_m); + VSB_cat(os, lp->df_m ? lp->df_m : "-"); break; case 'q': @@ -624,24 +626,19 @@ * Fake "%r". This would be a lot easier if Varnish * normalized the request URL. */ - if (!lp->df_m || - !req_header(lp, "Host") || - !lp->df_U || - !lp->df_H) { - clean_logline(lp); - return (reopen); - } - VSB_cat(os, lp->df_m); + VSB_cat(os, lp->df_m ? lp->df_m : "-"); VSB_putc(os, ' '); if (req_header(lp, "Host")) { if (strncmp(req_header(lp, "Host"), "http://", 7) != 0) VSB_cat(os, "http://"); VSB_cat(os, req_header(lp, "Host")); + } else { + VSB_cat(os, "http://localhost"); } - VSB_cat(os, lp->df_U); + VSB_cat(os, lp->df_U ? lp->df_U : "-"); VSB_cat(os, lp->df_q ? lp->df_q : ""); VSB_putc(os, ' '); - VSB_cat(os, lp->df_H); + VSB_cat(os, lp->df_H ? lp->df_H : "HTTP/1.0"); break; case 's': @@ -656,7 +653,7 @@ break; case 'U': - VSB_cat(os, lp->df_U); + VSB_cat(os, lp->df_U ? lp->df_U : "-"); break; case 'u': @@ -714,7 +711,7 @@ VSB_cat(os, (lp->df_hitmiss ? lp->df_hitmiss : "-")); p = tmp; break; - } else if (strcmp(fname, "handling") == 0) { + } else if (strcmp(fname, "Varnish:handling") == 0) { VSB_cat(os, (lp->df_handling ? lp->df_handling : "-")); p = tmp; break; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishstat/varnishstat_curses.c ^ |
@@ -34,7 +34,11 @@ #include <sys/time.h> +#ifdef HAVE_NCURSES_CURSES_H +#include <ncurses/curses.h> +#elif HAVE_CURSES_H #include <curses.h> +#endif #include <errno.h> #include <signal.h> #include <stdio.h> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/g00002.vtc ^ |
@@ -47,11 +47,4 @@ rxresp expect resp.http.content-encoding == "resp.http.content-encoding" expect resp.bodylen == 4109 - - # See varnish can deliver gzip'ed ESI (NOTYET) - #txreq -url /bar -hdr "Accept-Encoding: gzip" - #rxresp - # expect resp.http.content-encoding == "gzip" - #gunzip - #expect resp.bodylen == 4109 } -run | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r00907.vtc ^ |
@@ -3,7 +3,8 @@ server s1 { rxreq txresp \ - -hdr "ETag: saengei1Ohshicich4iteesu" + -hdr "ETag: saengei1Ohshicich4iteesu" \ + -hdr "Last-Modified: Tue, 20 Sep 2011 18:55:00 GMT" } -start varnish v1 -vcl+backend { @@ -16,8 +17,15 @@ txreq -hdr "If-None-Match: saengei1Ohshicich4iteesu" rxresp expect resp.status == 304 + txreq -hdr "If-None-Match: saengei1Ohshicich4iteesu" \ - -hdr "If-Modified-Since: ${date}" + -hdr "If-Modified-Since: Tue, 20 Sep 2011 18:54:59 GMT" + rxresp + expect resp.status == 200 + + txreq -hdr "If-None-Match: saengei1Ohshicich4iteesu" \ + -hdr "If-Modified-Since: Tue, 20 Sep 2011 18:55:00 GMT" rxresp expect resp.status == 304 + } -run | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r00962.vtc ^ |
@@ -1,5 +1,8 @@ varnishtest "Test address remapping" +# VM-remapping is to random on OSX +feature not-OSX + server s1 { rxreq txresp @@ -32,6 +35,12 @@ varnish v1 -cliok "debug.persistent s0 sync" varnish v1 -stop +server s1 { + rxreq + txresp -status 400 -msg "Persistent Object Not Found" +} -start + + varnish v2 \ -arg "-pdiag_bitmap=0x20000" \ -storage "-spersistent,${tmpdir}/_.per2,10m -spersistent,${tmpdir}/_.per1,10m" \ @@ -40,6 +49,7 @@ client c1 -connect ${v2_sock} { txreq -url "/" rxresp + expect resp.msg != "Persistent Object Not Found" expect resp.status == 200 expect resp.http.X-Varnish == "1001" } -run | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r01002.vtc ^ |
@@ -0,0 +1,12 @@ +varnishtest "Real relational comparisons" + +varnish v1 -vcl { + import std from "${topbuild}/lib/libvmod_std/.libs/libvmod_std.so" ; + + backend foo { .host = "${bad_ip}"; } + sub vcl_recv { + if (std.random(0,5) < 1.0) { + return (pipe); + } + } +} | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r01014.vtc ^ |
@@ -0,0 +1,13 @@ +varnishtest "bug 1014, Invalid C-L header with gzip" + +server s1 { + rxreq + txresp -nolen -hdr "Content-Encoding: gzip" -hdr "Content-Length:" +} -start + +varnish v1 -vcl+backend { } -start + +client c1 { + txreq + rxresp +} -run | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r01027.vtc ^ |
@@ -0,0 +1,8 @@ +varnishtest "Test if you can error in vcl_deliver" + +varnish v1 -badvcl { + sub vcl_deliver { + error 201 "ok"; + } +} + | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r01030.vtc ^ |
@@ -0,0 +1,64 @@ +varnishtest "Test ban_lurker_sleep vs failed ban lurker" + +# The idea here is that the ban lurker should always wait 1 second when it +# can't proceed, as per documentation and original intent. The +# ban_lurker_sleep should not affect sleep-times when the lurker fails. + +server s1 { + rxreq + txresp -status 200 + + rxreq + txresp -status 200 +} -start + +varnish v1 -vcl+backend { + sub vcl_recv { + if (req.request == "BAN") { + ban("obj.http.url ~ /"); + error 201 "banned"; + } + return (lookup); + } + sub vcl_fetch { + set beresp.http.url = req.url; + } +} -start + +varnish v1 -cliok "param.set ban_lurker_sleep 0.01" +varnish v1 -expect n_ban_obj_test == 0 + +delay 0.01 +client c1 { + txreq -req GET + rxresp + expect resp.status == 200 + + txreq -req BAN + rxresp + expect resp.status == 201 +} -run + +delay 0.1 +varnish v1 -expect n_ban_obj_test == 0 + +delay 1.0 +varnish v1 -expect n_ban_obj_test == 1 + +varnish v1 -cliok "param.set ban_lurker_sleep 5.01" + +client c2 { + txreq -req GET + rxresp + expect resp.status == 200 + + txreq -req BAN + rxresp + expect resp.status == 201 +} -run + +delay 0.1 +varnish v1 -expect n_ban_obj_test == 1 + +delay 1.1 +varnish v1 -expect n_ban_obj_test == 2 | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/r01031.vtc ^ |
@@ -0,0 +1,30 @@ +varnishtest "Test overflowing the response through sp->err_reason" + +varnish v1 -vcl { + backend blatti { + .host = "127.0.0.1"; + } + + sub vcl_recv { + error 200 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + } + sub vcl_error { + return(deliver); + } +} -start + +client c1 { + txreq -req GET + rxresp + expect resp.status == 200 + expect resp.msg == "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +} -run + +varnish v1 -cliok "param.set http_resp_size 256" + +client c2 { + txreq -req GET + rxresp + expect resp.status == 200 + expect resp.msg == "Lost Response" +} -run | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/s00002.vtc ^ |
@@ -53,17 +53,18 @@ } } -start +sema r1 sync 2 client c1 { - sema r1 sync 2 txreq -url "/" rxresp expect resp.http.foo == "bar" expect resp.status == 200 } -run +sema r1 sync 2 + client c2 { - sema r1 sync 2 txreq -url "/" rxresp expect resp.http.foo == "bar" | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/tests/v00036.vtc ^ |
@@ -4,12 +4,51 @@ rxreq expect req.url == "/" txresp -body "slash" + close + + sema r1 sync 3 + + accept + rxreq + expect req.url == "/" + txresp -body "slash" + close + + accept + rxreq + expect req.url == "/" + txresp -body "slash" + close + + sema r3 sync 2 + + accept + rxreq + expect req.url == "/foo" + txresp -hdr "Foo: 1" -body "foobar" + } -start server s2 { rxreq expect req.url == "/" txresp -body "slash" + close + + sema r1 sync 3 + + accept + rxreq + expect req.url == "/" + txresp -body "slash" + close + + sema r2 sync 2 + + accept + rxreq + expect req.url == "/foo" + txresp -hdr "Foo: 2" -body "foobar" } -start server s3 { @@ -65,66 +104,23 @@ } } -start -# s1 & s2 have both had 1 probe, so both are unhealthy client c1 { + # s1 & s2 are both sick, expect response from s3 txreq -url "/foo" rxresp expect resp.http.foo == "3" -} -run -# setup for probe #2 + sema r1 sync 3 -server s1 { - rxreq - expect req.url == "/" - txresp -body "slash" -} -start - -server s2 { - rxreq - expect req.url == "/" - txresp -body "slash" -} -start - -# if we muck with a running server, the test will wait until it's done, -# which will be after probe #2 completes. b2 will then be healthy. - -server s2 { - rxreq - expect req.url == "/foo" - txresp -hdr "Foo: 2" -body "foobar" -} -start - -client c1 { + # wait for s2 to become healthy + sema r2 sync 2 txreq -url "/foo" rxresp expect resp.http.foo == "2" -} -run - -# setup for probe #3 - -server s1 { - rxreq - expect req.url == "/" - txresp -body "slash" -} -start - -server s2 { - rxreq - expect req.url == "/" - txresp -body "slash" -} -start -# after probe #3 b1 should be healthy. - -server s1 { - rxreq - expect req.url == "/foo" - txresp -hdr "Foo: 1" -body "foobar" -} -start - -client c1 { + # wait for s1 to become healthy + sema r3 sync 2 txreq -url "/foo" rxresp expect resp.http.foo == "1" | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc.c ^ |
@@ -60,7 +60,6 @@ int vtc_stop; /* Stops current test without error */ pthread_t vtc_thread; static struct vtclog *vltop; -int in_tree = 0; /* Are we running in-tree */ /********************************************************************** * Macro facility @@ -238,18 +237,6 @@ } } -const char * -extmacro_get(const char *name) -{ - struct extmacro *m; - - VTAILQ_FOREACH(m, &extmacro_list, list) - if (!strcmp(name, m->name)) - return (m->val); - - return (NULL); -} - /********************************************************************** * Execute a file */ @@ -505,7 +492,13 @@ if (sizeof(void*) == 8 && !strcmp(av[i], "64bit")) continue; - vtc_log(vl, 1, "SKIPPING test, missing feature %s", av[i]); + if (!strcmp(av[i], "!OSX")) { +#if !defined(__APPLE__) || !defined(__MACH__) + continue; +#endif + } + + vtc_log(vl, 1, "SKIPPING test, missing feature: %s", av[i]); vtc_stop = 1; return; } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc.h ^ |
@@ -64,7 +64,7 @@ void init_sema(void); -void http_process(struct vtclog *vl, const char *spec, int sock, int sfd); +int http_process(struct vtclog *vl, const char *spec, int sock, int *sfd); void cmd_server_genvcl(struct vsb *vsb); @@ -85,4 +85,3 @@ struct vsb *macro_expand(struct vtclog *vl, const char *text); void extmacro_def(const char *name, const char *fmt, ...); -const char *extmacro_get(const char *name); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc_client.c ^ |
@@ -103,7 +103,7 @@ VTCP_myname(fd, mabuf, sizeof mabuf, mpbuf, sizeof mpbuf); vtc_log(vl, 3, "connected fd %d from %s %s to %s", fd, mabuf, mpbuf, VSB_data(vsb)); - http_process(vl, c->spec, fd, -1); + fd = http_process(vl, c->spec, fd, NULL); vtc_log(vl, 3, "closing fd %d", fd); VTCP_close(&fd); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc_http.c ^ |
@@ -54,7 +54,7 @@ unsigned magic; #define HTTP_MAGIC 0x2f02169c int fd; - int sfd; + int *sfd; int timeout; struct vtclog *vl; @@ -77,14 +77,14 @@ #define ONLY_CLIENT(hp, av) \ do { \ - if (hp->sfd >= 0) \ + if (hp->sfd != NULL) \ vtc_log(hp->vl, 0, \ "\"%s\" only possible in client", av[0]); \ } while (0) #define ONLY_SERVER(hp, av) \ do { \ - if (hp->sfd < 0) \ + if (hp->sfd == NULL) \ vtc_log(hp->vl, 0, \ "\"%s\" only possible in server", av[0]); \ } while (0) @@ -107,7 +107,7 @@ AN(len); i = strtoul(len, NULL, 0); assert(i > 0); - b = malloc(i + 1); + b = malloc(i + 1L); AN(b); l = k = '!'; for (j = 0; j < i; j++) { @@ -143,7 +143,8 @@ vtc_dump(hp->vl, lvl, pfx, VSB_data(hp->vsb), VSB_len(hp->vsb)); l = write(hp->fd, VSB_data(hp->vsb), VSB_len(hp->vsb)); if (l != VSB_len(hp->vsb)) - vtc_log(hp->vl, 0, "Write failed: %s", strerror(errno)); + vtc_log(hp->vl, 0, "Write failed: (%d vs %d) %s", + l, VSB_len(hp->vsb), strerror(errno)); } /********************************************************************** @@ -333,7 +334,7 @@ */ static int -http_rxchar_eof(struct http *hp, int n) +http_rxchar(struct http *hp, int n, int eof) { int i; struct pollfd pfd[1]; @@ -343,17 +344,27 @@ pfd[0].events = POLLIN; pfd[0].revents = 0; i = poll(pfd, 1, hp->timeout); - if (i <= 0) - vtc_log(hp->vl, 0, "HTTP rx failed (poll: %s)", - strerror(errno)); + if (i == 0) + vtc_log(hp->vl, 0, "HTTP rx timeout (fd:%d %u ms)", + hp->fd, hp->timeout); + if (i < 0) + vtc_log(hp->vl, 0, "HTTP rx failed (fd:%d poll: %s)", + hp->fd, strerror(errno)); assert(i > 0); assert(hp->prxbuf + n < hp->nrxbuf); i = read(hp->fd, hp->rxbuf + hp->prxbuf, n); - if (i == 0) + if (!(pfd[0].revents & POLLIN)) + vtc_log(hp->vl, 4, + "HTTP rx poll (fd:%d revents: %x n=%d, i=%d)", + hp->fd, pfd[0].revents, n, i); + if (i == 0 && eof) return (i); - if (i <= 0) - vtc_log(hp->vl, 0, "HTTP rx failed (read: %s)", - strerror(errno)); + if (i == 0) + vtc_log(hp->vl, 0, "HTTP rx EOF (fd:%d read: %s)", + hp->fd, strerror(errno)); + if (i < 0) + vtc_log(hp->vl, 0, "HTTP rx failed (fd:%d read: %s)", + hp->fd, strerror(errno)); hp->prxbuf += i; hp->rxbuf[hp->prxbuf] = '\0'; n -= i; @@ -361,17 +372,6 @@ return (1); } -static void -http_rxchar(struct http *hp, int n) -{ - int i; - - i = http_rxchar_eof(hp, n); - if (i <= 0) - vtc_log(hp->vl, 0, "HTTP rx failed (%s)", strerror(errno)); - assert(i > 0); -} - static int http_rxchunk(struct http *hp) { @@ -380,7 +380,7 @@ l = hp->prxbuf; do - http_rxchar(hp, 1); + (void)http_rxchar(hp, 1, 0); while (hp->rxbuf[hp->prxbuf - 1] != '\n'); vtc_dump(hp->vl, 4, "len", hp->rxbuf + l, -1); i = strtoul(hp->rxbuf + l, &q, 16); @@ -394,12 +394,12 @@ assert(*q == '\0' || vct_islws(*q)); hp->prxbuf = l; if (i > 0) { - http_rxchar(hp, i); + (void)http_rxchar(hp, i, 0); vtc_dump(hp->vl, 4, "chunk", hp->rxbuf + l, i); } l = hp->prxbuf; - http_rxchar(hp, 2); + (void)http_rxchar(hp, 2, 0); if(!vct_iscrlf(hp->rxbuf[l])) vtc_log(hp->vl, 0, "Wrong chunk tail[0] = %02x", @@ -427,7 +427,7 @@ p = http_find_header(hh, "content-length"); if (p != NULL) { l = strtoul(p, NULL, 0); - http_rxchar(hp, l); + (void)http_rxchar(hp, l, 0); vtc_dump(hp->vl, 4, "body", hp->body, l); hp->bodyl = l; sprintf(hp->bodylen, "%d", l); @@ -446,7 +446,7 @@ if (body) { hp->body = hp->rxbuf + hp->prxbuf; do { - i = http_rxchar_eof(hp, 1); + i = http_rxchar(hp, 1, 1); ll += i; } while (i > 0); vtc_dump(hp->vl, 4, "rxeof", hp->body, ll); @@ -469,7 +469,7 @@ hp->prxbuf = 0; hp->body = NULL; while (1) { - http_rxchar(hp, 1); + (void)http_rxchar(hp, 1, 0); p = hp->rxbuf + hp->prxbuf - 1; for (i = 0; p > hp->rxbuf; p--) { if (*p != '\n') @@ -527,7 +527,7 @@ #define TRUST_ME(ptr) ((void*)(uintptr_t)(ptr)) -#define OVERHEAD 64 +#define OVERHEAD 64L static void @@ -586,7 +586,7 @@ */ static void -gzip_body(struct http *hp, const char *txt, char **body, int *bodylen) +gzip_body(const struct http *hp, const char *txt, char **body, int *bodylen) { int l, i; z_stream vz; @@ -899,8 +899,9 @@ AZ(av[2]); vtc_dump(hp->vl, 4, "send", av[1], -1); i = write(hp->fd, av[1], strlen(av[1])); - assert(i == strlen(av[1])); - + if (i != strlen(av[1])) + vtc_log(hp->vl, 0, "Write error in http_send(): %s", + strerror(errno)); } /********************************************************************** @@ -935,7 +936,7 @@ if (!vct_ishex(buf[0]) || !vct_ishex(buf[1])) vtc_log(hp->vl, 0, "Illegal Hex char \"%c%c\"", buf[0], buf[1]); - p[i] = strtoul(buf, NULL, 16); + p[i] = (uint8_t)strtoul(buf, NULL, 16); } vtc_hexdump(hp->vl, 4, "sendhex", (void*)p, i); j = write(hp->fd, p, i); @@ -1032,7 +1033,7 @@ (void)vl; CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); AZ(av[1]); - assert(hp->sfd >= 0); + assert(hp->sfd != NULL); vtc_log(vl, 4, "Expecting close (fd = %d)", hp->fd); while (1) { @@ -1058,6 +1059,25 @@ } /********************************************************************** + * close a new connection (server only) + */ + +static void +cmd_http_close(CMD_ARGS) +{ + struct http *hp; + + (void)cmd; + (void)vl; + CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); + AZ(av[1]); + assert(hp->sfd != NULL); + assert(*hp->sfd >= 0); + VTCP_close(&hp->fd); + vtc_log(vl, 4, "Closed"); +} + +/********************************************************************** * close and accept a new connection (server only) */ @@ -1070,10 +1090,12 @@ (void)vl; CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC); AZ(av[1]); - assert(hp->sfd >= 0); - VTCP_close(&hp->fd); + assert(hp->sfd != NULL); + assert(*hp->sfd >= 0); + if (hp->fd >= 0) + VTCP_close(&hp->fd); vtc_log(vl, 4, "Accepting"); - hp->fd = accept(hp->sfd, NULL, NULL); + hp->fd = accept(*hp->sfd, NULL, NULL); if (hp->fd < 0) vtc_log(vl, 0, "Accepted failed: %s", strerror(errno)); vtc_log(vl, 3, "Accepted socket fd is %d", hp->fd); @@ -1127,22 +1149,24 @@ { "delay", cmd_delay }, { "sema", cmd_sema }, { "expect_close", cmd_http_expect_close }, + { "close", cmd_http_close }, { "accept", cmd_http_accept }, { "loop", cmd_http_loop }, { NULL, NULL } }; -void -http_process(struct vtclog *vl, const char *spec, int sock, int sfd) +int +http_process(struct vtclog *vl, const char *spec, int sock, int *sfd) { struct http *hp; char *s, *q; + int retval; (void)sfd; ALLOC_OBJ(hp, HTTP_MAGIC); AN(hp); hp->fd = sock; - hp->timeout = 5000; + hp->timeout = 15000; hp->nrxbuf = 2048*1024; hp->vsb = VSB_new_auto(); hp->rxbuf = malloc(hp->nrxbuf); /* XXX */ @@ -1158,9 +1182,11 @@ assert(q > s); AN(s); parse_string(s, http_cmds, hp, vl); + retval = hp->fd; VSB_delete(hp->vsb); free(hp->rxbuf); free(hp); + return (retval); } /********************************************************************** | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc_main.c ^ |
@@ -224,8 +224,11 @@ free(jp->tmpdir); if (stx) { - printf("# top TEST %s FAILED (%.3f)\n", + printf("# top TEST %s FAILED (%.3f)", jp->tst->filename, t); + if (WIFSIGNALED(stx)) + printf(" signal=%d", WTERMSIG(stx)); + printf(" exit=%d\n", WEXITSTATUS(stx)); if (!vtc_continue) { /* XXX kill -9 other jobs ? */ exit(2); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc_server.c ^ |
@@ -100,7 +100,7 @@ if (fd < 0) vtc_log(vl, 0, "Accepted failed: %s", strerror(errno)); vtc_log(vl, 3, "accepted fd %d", fd); - http_process(vl, s->spec, fd, s->sock); + fd = http_process(vl, s->spec, fd, &s->sock); vtc_log(vl, 3, "shutting fd %d", fd); j = shutdown(fd, SHUT_WR); if (!VTCP_Check(j)) @@ -132,7 +132,7 @@ bprintf(s->listen, "127.0.0.1:%d", 0); AZ(VSS_parse(s->listen, &s->addr, &s->port)); s->repeat = 1; - s->depth = 1; + s->depth = 10; s->sock = -1; VTAILQ_INSERT_TAIL(&servers, s, list); return (s); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/bin/varnishtest/vtc_varnish.c ^ |
@@ -47,7 +47,6 @@ #include "libvarnish.h" #include "varnishapi.h" #include "vcli.h" -#include "cli_common.h" #include "vss.h" #include "vsb.h" @@ -58,7 +57,6 @@ #define VARNISH_MAGIC 0x208cd8e3 char *name; struct vtclog *vl; - struct vtclog *vl1; VTAILQ_ENTRY(varnish) list; struct vsb *storage; @@ -68,16 +66,22 @@ pid_t pid; pthread_t tp; + pthread_t tp_vsl; int cli_fd; int vcl_nbr; char *workdir; - struct VSM_data *vd; + struct VSM_data *vd; /* vsc use */ + + unsigned vsl_tag_count[256]; + unsigned vsl_sleep; }; #define NONSENSE "%XJEIFLH|)Xspa8P" +#define VSL_SLEEP_USEC (50*1000) + static VTAILQ_HEAD(, varnish) varnishes = VTAILQ_HEAD_INITIALIZER(varnishes); @@ -116,6 +120,57 @@ } /********************************************************************** + * Varnishlog gatherer + thread + */ + +static int +h_addlog(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len, + unsigned spec, const char *ptr, uint64_t bitmap) +{ + struct varnish *v; + int type; + + (void) bitmap; + + type = (spec & VSL_S_CLIENT) ? 'c' : + (spec & VSL_S_BACKEND) ? 'b' : '-'; + CAST_OBJ_NOTNULL(v, priv, VARNISH_MAGIC); + + v->vsl_tag_count[tag]++; + + vtc_log(v->vl, 4, "vsl| %5u %-12s %c %.*s", fd, + VSL_tags[tag], type, len, ptr); + v->vsl_sleep = 100; + return (0); +} + +static void * +varnishlog_thread(void *priv) +{ + struct varnish *v; + struct VSM_data *vsl; + + CAST_OBJ_NOTNULL(v, priv, VARNISH_MAGIC); + vsl = VSM_New(); + VSL_Setup(vsl); + (void)VSL_Arg(vsl, 'n', v->workdir); + VSL_NonBlocking(vsl, 1); + while (v->pid && VSL_Open(vsl, 0) != 0) { + assert(usleep(VSL_SLEEP_USEC) == 0 || errno == EINTR); + } + while (v->pid) { + if (VSL_Dispatch(vsl, h_addlog, v) < 0) { + assert(usleep(v->vsl_sleep) == 0 || errno == EINTR); + v->vsl_sleep += v->vsl_sleep; + if (v->vsl_sleep > VSL_SLEEP_USEC) + v->vsl_sleep = VSL_SLEEP_USEC; + } + } + VSM_Delete(vsl); + return (NULL); +} + +/********************************************************************** * Allocate and initialize a varnish */ @@ -145,9 +200,6 @@ v->workdir, v->workdir, random(), v->workdir); AZ(system(buf)); - v->vl1 = vtc_logopen(name); - AN(v->vl1); - if (*v->name != 'v') vtc_log(v->vl, 0, "Varnish name must start with 'v'"); @@ -218,7 +270,7 @@ if (i <= 0) break; buf[i] = '\0'; - vtc_dump(v->vl1, 3, "debug", buf, -1); + vtc_dump(v->vl, 3, "debug", buf, -1); } return (NULL); } @@ -294,8 +346,10 @@ v->fds[2] = v->fds[3] = -1; VSB_delete(vsb); AZ(pthread_create(&v->tp, NULL, varnish_thread, v)); + AZ(pthread_create(&v->tp_vsl, NULL, varnishlog_thread, v)); /* Wait for the varnish to call home */ + memset(fd, 0, sizeof fd); fd[0].fd = v->cli_fd; fd[0].events = POLLIN; fd[1].fd = v->fds[0]; @@ -458,7 +512,9 @@ AZ(pthread_join(v->tp, &p)); AZ(close(v->fds[0])); r = wait4(v->pid, &status, 0, NULL); + v->pid = 0; vtc_log(v->vl, 2, "R %d Status: %04x", r, status); + AZ(pthread_join(v->tp_vsl, &p)); if (WIFEXITED(status) && WEXITSTATUS(status) == 0) return; #ifdef WCOREDUMP | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/config.h.in ^ |
@@ -9,6 +9,9 @@ /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME +/* Define to 1 if you have the <curses.h> header file. */ +#undef HAVE_CURSES_H + /* Define to 1 if you have the `daemon' function. */ #undef HAVE_DAEMON @@ -73,6 +76,9 @@ /* Define to 1 if you have the `nanosleep' function. */ #undef HAVE_NANOSLEEP +/* Define to 1 if you have the <ncurses/curses.h> header file. */ +#undef HAVE_NCURSES_CURSES_H + /* Define to 1 if you have the <netinet/in.h> header file. */ #undef HAVE_NETINET_IN_H | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/configure ^ |
@@ -1,7 +1,7 @@ #! /bin/sh # From configure.ac Id. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for Varnish 3.0.1. +# Generated by GNU Autoconf 2.68 for Varnish 3.0.2. # # Report bugs to <varnish-dev@varnish-cache.org>. # @@ -574,8 +574,8 @@ # Identity of this package. PACKAGE_NAME='Varnish' PACKAGE_TARNAME='varnish' -PACKAGE_VERSION='3.0.1' -PACKAGE_STRING='Varnish 3.0.1' +PACKAGE_VERSION='3.0.2' +PACKAGE_STRING='Varnish 3.0.2' PACKAGE_BUGREPORT='varnish-dev@varnish-cache.org' PACKAGE_URL='' @@ -782,6 +782,8 @@ with_gnu_ld with_sysroot enable_libtool_lock +with_rst2man +with_rst2html with_pcre_config with_jemalloc enable_largefile @@ -1356,7 +1358,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Varnish 3.0.1 to adapt to many kinds of systems. +\`configure' configures Varnish 3.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1427,7 +1429,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Varnish 3.0.1:";; + short | recursive ) echo "Configuration of Varnish 3.0.2:";; esac cat <<\_ACEOF @@ -1469,6 +1471,8 @@ --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). + --with-rst2man=PATH Location of rst2man (auto) + --with-rst2html=PATH Location of rst2html (auto) --with-pcre-config=PATH Location of PCRE pcre-config (auto) --with-jemalloc use jemalloc memory allocator. Default is yes on Linux, no elsewhere @@ -1561,7 +1565,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Varnish configure 3.0.1 +Varnish configure 3.0.2 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2090,7 +2094,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Varnish $as_me 3.0.1, which was +It was created by Varnish $as_me 3.0.2, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -3030,7 +3034,7 @@ # Define the identity of the package. PACKAGE='varnish' - VERSION='3.0.1' + VERSION='3.0.2' cat >>confdefs.h <<_ACEOF @@ -13170,7 +13174,12 @@ HAVE_XSLTPROC_FALSE= fi -for ac_prog in rst2man rst2man.py + +# Check whether --with-rst2man was given. +if test "${with_rst2man+set}" = set; then : + withval=$with_rst2man; RST2MAN="$withval" +else + for ac_prog in rst2man rst2man.py do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -13213,10 +13222,12 @@ done test -n "$RST2MAN" || RST2MAN=""no"" -if test "x$RST2MAN" = "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: rst2man not found – not building man pages" >&5 + if test "x$RST2MAN" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: rst2man not found – not building man pages" >&5 $as_echo "$as_me: WARNING: rst2man not found – not building man pages" >&2;} + fi fi + if test "x$RST2MAN" != "xno"; then HAVE_RST2MAN_TRUE= HAVE_RST2MAN_FALSE='#' @@ -13226,7 +13237,12 @@ fi -for ac_prog in rst2html rst2html.py + +# Check whether --with-rst2html was given. +if test "${with_rst2html+set}" = set; then : + withval=$with_rst2html; RST2HTML="$withval" +else + for ac_prog in rst2html rst2html.py do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -13269,10 +13285,12 @@ done test -n "$RST2HTML" || RST2HTML=""no"" -if test "x$RST2HTML" = "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: rst2html not found – not building changelog" >&5 + if test "x$RST2HTML" = "xno"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: rst2html not found – not building changelog" >&5 $as_echo "$as_me: WARNING: rst2html not found – not building changelog" >&2;} + fi fi + if test "x$RST2HTML" != "xno"; then HAVE_RST2HTML_TRUE= HAVE_RST2HTML_FALSE='#' @@ -13452,6 +13470,19 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: curses not found; some tools will not be built" >&5 $as_echo "$as_me: WARNING: curses not found; some tools will not be built" >&2;} fi +for ac_header in ncurses/curses.h curses.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + if test x$have_curses = xyes; then HAVE_CURSES_TRUE= HAVE_CURSES_FALSE='#' @@ -15627,11 +15658,20 @@ test -n "$PYTHON" || PYTHON="as_fn_error $? "Python is needed to build Varnish, please install python." "$LINENO" 5" -# Solaris defines SO_{RCV,SND}TIMEO, but does not implement them. +# Older Solaris versions define SO_{RCV,SND}TIMEO, but do not +# implement them. +# # Varnish will build and run without these, but connections will not # time out, which may leave Varnish vulnerable to denail-of-service # attacks which would not be possible on other platforms. +# +# Newer Solaris releases with the Volo framework (Solaris 11, +# Opensolaris starting with onnv_106) do support SO_{RCV,SND}TIMEO +# (see PSARC 2007/587, initially committed into onnv-gate / +# OpenSolaris 8348:4137e18bfaf0 Thu Dec 11 20:04:13 2008) +save_LIBS="${LIBS}" +LIBS="${LIBS} ${NET_LIBS}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SO_RCVTIMEO works" >&5 $as_echo_n "checking whether SO_RCVTIMEO works... " >&6; } if ${ac_cv_so_rcvtimeo_works+:} false; then : @@ -15686,7 +15726,10 @@ $as_echo "#define SO_RCVTIMEO_WORKS 1" >>confdefs.h fi +LIBS="${save_LIBS}" +save_LIBS="${LIBS}" +LIBS="${LIBS} ${NET_LIBS}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SO_SNDTIMEO works" >&5 $as_echo_n "checking whether SO_SNDTIMEO works... " >&6; } if ${ac_cv_so_sndtimeo_works+:} false; then : @@ -15747,6 +15790,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: connection timeouts will not work" >&5 $as_echo "$as_me: WARNING: connection timeouts will not work" >&2;} fi +LIBS="${save_LIBS}" # Run-time directory VARNISH_STATE_DIR='${localstatedir}/varnish' @@ -16527,7 +16571,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Varnish $as_me 3.0.1, which was +This file was extended by Varnish $as_me 3.0.2, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16593,7 +16637,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Varnish config.status 3.0.1 +Varnish config.status 3.0.2 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/configure.ac ^ |
@@ -2,7 +2,7 @@ AC_COPYRIGHT([Copyright (c) 2006 Verdens Gang AS Copyright (c) 2006-2011 Varnish Software AS]) AC_REVISION([$Id$]) -AC_INIT([Varnish], [3.0.1], [varnish-dev@varnish-cache.org]) +AC_INIT([Varnish], [3.0.2], [varnish-dev@varnish-cache.org]) AC_CONFIG_SRCDIR(include/varnishapi.h) AM_CONFIG_HEADER(config.h) @@ -50,16 +50,24 @@ AC_MSG_WARN([xsltproc not found – not building documentation]) fi AM_CONDITIONAL(HAVE_XSLTPROC,[test "x$XSLTPROC" != "xno"]) -AC_CHECK_PROGS(RST2MAN, [rst2man rst2man.py], "no") -if test "x$RST2MAN" = "xno"; then - AC_MSG_WARN([rst2man not found – not building man pages]) -fi +AC_ARG_WITH([rst2man], + AS_HELP_STRING([--with-rst2man=PATH], + [Location of rst2man (auto)]), + [RST2MAN="$withval"], + [AC_CHECK_PROGS(RST2MAN, [rst2man rst2man.py], "no") + if test "x$RST2MAN" = "xno"; then + AC_MSG_WARN([rst2man not found – not building man pages]) + fi]) AM_CONDITIONAL(HAVE_RST2MAN,[test "x$RST2MAN" != "xno"]) -AC_CHECK_PROGS(RST2HTML, [rst2html rst2html.py], "no") -if test "x$RST2HTML" = "xno"; then - AC_MSG_WARN([rst2html not found – not building changelog]) -fi +AC_ARG_WITH([rst2html], + AS_HELP_STRING([--with-rst2html=PATH], + [Location of rst2html (auto)]), + [RST2HTML="$withval"], + [AC_CHECK_PROGS(RST2HTML, [rst2html rst2html.py], "no") + if test "x$RST2HTML" = "xno"; then + AC_MSG_WARN([rst2html not found – not building changelog]) + fi]) AM_CONDITIONAL(HAVE_RST2HTML,[test "x$RST2HTML" != "xno"]) # Checks for libraries. @@ -87,6 +95,7 @@ if test "$have_curses" = no; then AC_MSG_WARN([curses not found; some tools will not be built]) fi +AC_CHECK_HEADERS([ncurses/curses.h curses.h]) AM_CONDITIONAL([HAVE_CURSES], [test x$have_curses = xyes]) save_LIBS="${LIBS}" @@ -374,11 +383,20 @@ AM_MISSING_HAS_RUN AC_CHECK_PROGS(PYTHON, [python3 python3.1 python3.2 python2.7 python2.6 python2.5 python2 python], [AC_MSG_ERROR([Python is needed to build Varnish, please install python.])]) -# Solaris defines SO_{RCV,SND}TIMEO, but does not implement them. +# Older Solaris versions define SO_{RCV,SND}TIMEO, but do not +# implement them. +# # Varnish will build and run without these, but connections will not # time out, which may leave Varnish vulnerable to denail-of-service # attacks which would not be possible on other platforms. +# +# Newer Solaris releases with the Volo framework (Solaris 11, +# Opensolaris starting with onnv_106) do support SO_{RCV,SND}TIMEO +# (see PSARC 2007/587, initially committed into onnv-gate / +# OpenSolaris 8348:4137e18bfaf0 Thu Dec 11 20:04:13 2008) +save_LIBS="${LIBS}" +LIBS="${LIBS} ${NET_LIBS}" AC_CACHE_CHECK([whether SO_RCVTIMEO works], [ac_cv_so_rcvtimeo_works], [AC_RUN_IFELSE( @@ -403,7 +421,10 @@ if test "$ac_cv_so_rcvtimeo_works" = yes; then AC_DEFINE([SO_RCVTIMEO_WORKS], [1], [Define if SO_RCVTIMEO works]) fi +LIBS="${save_LIBS}" +save_LIBS="${LIBS}" +LIBS="${LIBS} ${NET_LIBS}" AC_CACHE_CHECK([whether SO_SNDTIMEO works], [ac_cv_so_sndtimeo_works], [AC_RUN_IFELSE( @@ -433,6 +454,7 @@ test "$ac_cv_so_sndtimeo_works" = no; then AC_MSG_WARN([connection timeouts will not work]) fi +LIBS="${save_LIBS}" # Run-time directory VARNISH_STATE_DIR='${localstatedir}/varnish' | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/changes.html ^ |
@@ -3,13 +3,13 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.7: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" /> <title></title> <style type="text/css"> /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 6253 2010-03-02 00:24:53Z milde $ +:Id: $Id: html4css1.css 7056 2011-06-17 10:50:48Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. @@ -47,6 +47,10 @@ dl.docutils dd { margin-bottom: 0.5em } +object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { + overflow: hidden; +} + /* Uncomment (and remove this text!) to get bold-faced definition list terms dl.docutils dt { font-weight: bold } @@ -185,7 +189,7 @@ /* reset inner alignment in figures */ div.align-right { - text-align: left } + text-align: inherit } /* div.align-center * { */ /* text-align: left } */ @@ -245,7 +249,7 @@ margin-top: 0 ; font: inherit } -pre.literal-block, pre.doctest-block { +pre.literal-block, pre.doctest-block, pre.math { margin-left: 2em ; margin-right: 2em } @@ -313,9 +317,87 @@ <div class="document"> +<div class="section" id="changes-from-3-0-2-rc-1-to-3-0-2"> +<h1>Changes from 3.0.2 rc 1 to 3.0.2</h1> +<div class="section" id="varnishd"> +<h2>Varnishd</h2> +<ul class="simple"> +<li>Make the size of the synthetic object workspace equal to +<cite>http_resp_size</cite> and add workaround to avoid a crash when setting +too long response strings for synthetic objects.</li> +<li>Ensure the ban lurker always sleeps the advertised 1 second when it +does not have anything to do.</li> +<li>Remove error from <cite>vcl_deliver</cite>. Previously this would assert while +it will now give a syntax error.</li> +</ul> +</div> +<div class="section" id="varnishncsa"> +<h2>varnishncsa</h2> +<ul class="simple"> +<li>Add default values for some fields when logging incomplete records +and document the default values.</li> +</ul> +</div> +<div class="section" id="other"> +<h2>Other</h2> +<ul class="simple"> +<li>Documentation updates</li> +<li>Some Solaris portability updates.</li> +</ul> +</div> +</div> +<div class="section" id="changes-from-3-0-1-to-3-0-2-rc-1"> +<h1>Changes from 3.0.1 to 3.0.2 rc 1</h1> +<div class="section" id="id1"> +<h2>Varnishd</h2> +<ul class="simple"> +<li>Only log the first 20 bytes of extra headers to prevent overflows.</li> +<li>Fix crasher bug which sometimes happened if responses are queued and +the backend sends us Vary. <a class="reference external" href="http://varnish-cache.org/trac/ticket/994">Bug #994</a>.</li> +<li>Log correct size of compressed when uncompressing them for clients +that do not support compression. <a href="#id26"><span class="problematic" id="id27">`Bug #996`_</span></a>.</li> +<li>Only send Range responses if we are going to send a body. <a class="reference external" href="http://varnish-cache.org/trac/ticket/1007">Bug #1007</a>.</li> +<li>When varnishd creates a storage file, also unlink it to avoid +leaking disk space over time. <a class="reference external" href="http://varnish-cache.org/trac/ticket/1008">Bug #1008</a>.</li> +<li>The default size of the <cite>-s file</cite> parameter has been changed to +100MB instead of 50% of the available disk space.</li> +<li>The limit on the number of objects we remove from the cache to make +room for a new one was mistakenly lowered to 10 in 3.0.1. This has +been raised back to 50. <a href="#id28"><span class="problematic" id="id29">`Bug #1012`_</span></a>.</li> +<li><cite>http_req_size</cite> and <cite>http_resp_size</cite> have been increased to 8192 +bytes. This better matches what other HTTPds have. <a href="#id30"><span class="problematic" id="id31">`Bug #1016`_</span></a>.</li> +</ul> +<div class="system-message"> +<p class="system-message-title">System Message: WARNING/2 (<tt class="docutils">changes.rst</tt>, line 66); <em><a href="#id2">backlink</a></em></p> +Duplicate explicit target name: "bug #1012".</div> +</div> +<div class="section" id="vcl"> +<h2>VCL</h2> +<ul class="simple"> +<li>Allow relational comparisons of floating point types.</li> +<li>Make it possible for vmods to fail loading and so cause the VCL +loading to fail.</li> +</ul> +</div> +<div class="section" id="id3"> +<h2>varnishncsa</h2> +<ul class="simple"> +<li>Fixed crash when client was sending illegal HTTP headers.</li> +<li><cite>%{Varnish:handling}</cite> in format strings was broken, this has been +fixed.</li> +</ul> +</div> +<div class="section" id="id4"> +<h2>Other</h2> +<ul class="simple"> +<li>Documentation updates</li> +<li>Some Solaris portability updates.</li> +</ul> +</div> +</div> <div class="section" id="changes-from-3-0-1-rc-1-to-3-0-1"> <h1>Changes from 3.0.1 rc 1 to 3.0.1</h1> -<div class="section" id="varnishd"> +<div class="section" id="id5"> <h2>Varnishd</h2> <ul class="simple"> <li>Fix crash in streaming code.</li> @@ -324,20 +406,20 @@ <li>The parameter <cite>http_req_size</cite> has been reduced on 32 bit machines.</li> </ul> </div> -<div class="section" id="vcl"> +<div class="section" id="id6"> <h2>VCL</h2> <ul class="simple"> <li>Disallow error in the <cite>vcl_init</cite> and <cite>vcl_fini</cite> VCL functions.</li> </ul> </div> -<div class="section" id="varnishncsa"> +<div class="section" id="id7"> <h2>varnishncsa</h2> <ul class="simple"> <li>Fixed crash when using <cite>-X</cite>.</li> <li>Fix error when the time to first byte was in the format string.</li> </ul> </div> -<div class="section" id="other"> +<div class="section" id="id8"> <h2>Other</h2> <ul class="simple"> <li>Documentation updates</li> @@ -346,7 +428,7 @@ </div> <div class="section" id="changes-from-3-0-0-to-3-0-1-rc-1"> <h1>Changes from 3.0.0 to 3.0.1 rc 1</h1> -<div class="section" id="id1"> +<div class="section" id="id9"> <h2>Varnishd</h2> <ul class="simple"> <li>Avoid sending an empty end-chunk when sending bodyless responsed.</li> @@ -367,7 +449,7 @@ This has been fixed and it will now retry a different backend.</li> </ul> </div> -<div class="section" id="id2"> +<div class="section" id="id10"> <h2>VCL</h2> <ul class="simple"> <li>Request specific variables such as <cite>client.*</cite> and <cite>server.*</cite> are now @@ -376,7 +458,7 @@ same line. This now works correctly. <a class="reference external" href="http://varnish-cache.org/trac/ticket/948">Bug #948</a>.</li> </ul> </div> -<div class="section" id="id3"> +<div class="section" id="id11"> <h2>varnishncsa</h2> <ul class="simple"> <li>Add support for logging arbitrary request and response headers.</li> @@ -393,7 +475,7 @@ shared log file of the running Varnish.</li> </ul> </div> -<div class="section" id="id4"> +<div class="section" id="id12"> <h2>Other</h2> <ul class="simple"> <li>Various documentation updates.</li> @@ -407,13 +489,13 @@ </div> <div class="section" id="changes-from-3-0-beta-2-to-3-0-0"> <h1>Changes from 3.0 beta 2 to 3.0.0</h1> -<div class="section" id="id5"> +<div class="section" id="id13"> <h2>Varnishd</h2> <ul class="simple"> <li>Avoid sending an empty end-chunk when sending bodyless responsed.</li> </ul> </div> -<div class="section" id="id6"> +<div class="section" id="id14"> <h2>VCL</h2> <ul class="simple"> <li>The <cite>synthetic</cite> keyword has now been properly marked as only @@ -431,7 +513,7 @@ </div> <div class="section" id="changes-from-3-0-beta-1-to-3-0-beta-2"> <h1>Changes from 3.0 beta 1 to 3.0 beta 2</h1> -<div class="section" id="id7"> +<div class="section" id="id15"> <h2>Varnishd</h2> <ul class="simple"> <li>thread_pool_min and thread_pool_max now each refer to the number of @@ -445,7 +527,7 @@ place. Use varnishstat instead.</li> </ul> </div> -<div class="section" id="id8"> +<div class="section" id="id16"> <h2>VCL</h2> <ul class="simple"> <li>VCL now treats null arguments (unset headers for instance) as empty @@ -460,7 +542,7 @@ backends and ACLs.</li> </ul> </div> -<div class="section" id="id9"> +<div class="section" id="id17"> <h2>varnishncsa</h2> <ul class="simple"> <li>varnishncsa now ignores piped requests, since we have no way of @@ -487,7 +569,7 @@ works and is recommended.</li> </ul> </div> -<div class="section" id="id10"> +<div class="section" id="id18"> <h2>Varnishd</h2> <ul class="simple"> <li>Add streaming on <tt class="docutils literal">pass</tt> and <tt class="docutils literal">miss</tt>. This is controlled by the @@ -573,7 +655,7 @@ logically and-ed together.</li> </ul> </div> -<div class="section" id="id12"> +<div class="section" id="id20"> <h3>varnishadm</h3> <ul class="simple"> <li>varnishadm will now pick up the -S and -T arguments from the shared @@ -594,7 +676,7 @@ <li>display per-backend health information</li> </ul> </div> -<div class="section" id="id13"> +<div class="section" id="id21"> <h3>varnishncsa</h3> <ul class="simple"> <li>Report error if called with <tt class="docutils literal"><span class="pre">-i</span></tt> and <tt class="docutils literal"><span class="pre">-I</span></tt> as they do not make @@ -621,7 +703,7 @@ period is 60 seconds.</li> </ul> </div> -<div class="section" id="id14"> +<div class="section" id="id22"> <h3>varnishlog</h3> <ul class="simple"> <li>group requests by default. This can be turned off by using <tt class="docutils literal"><span class="pre">-O</span></tt></li> @@ -629,14 +711,14 @@ </ul> </div> </div> -<div class="section" id="id15"> +<div class="section" id="id23"> <h2>VMODs</h2> <ul class="simple"> <li>Add a std vmod which includes a random function, log, syslog, fileread, collect,</li> </ul> </div> -<div class="section" id="id16"> +<div class="section" id="id24"> <h2>VCL</h2> <ul class="simple"> <li>Change string concatenation to be done using <tt class="docutils literal">+</tt> rather than @@ -699,7 +781,7 @@ guarantees.</li> </ul> </div> -<div class="section" id="id17"> +<div class="section" id="id25"> <h2>Other</h2> <ul class="simple"> <li>Python is now required to build</li> @@ -712,6 +794,18 @@ </ul> </div> </div> +<div class="system-messages section"> +<h1>Docutils System Messages</h1> +<div class="system-message" id="id26"> +<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">changes.rst</tt>, line 43); <em><a href="#id27">backlink</a></em></p> +Unknown target name: "bug #996".</div> +<div class="system-message" id="id28"> +<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">changes.rst</tt>, line 54); <em><a href="#id29">backlink</a></em></p> +Duplicate target name, cannot be used as a unique reference: "bug #1012".</div> +<div class="system-message" id="id30"> +<p class="system-message-title">System Message: ERROR/3 (<tt class="docutils">changes.rst</tt>, line 58); <em><a href="#id31">backlink</a></em></p> +Unknown target name: "bug #1016".</div> +</div> </div> </body> </html> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/changes.rst ^ |
@@ -1,4 +1,94 @@ ================================ +Changes from 3.0.2 rc 1 to 3.0.2 +================================ + +Varnishd +-------- + +- Make the size of the synthetic object workspace equal to + `http_resp_size` and add workaround to avoid a crash when setting + too long response strings for synthetic objects. + +- Ensure the ban lurker always sleeps the advertised 1 second when it + does not have anything to do. + +- Remove error from `vcl_deliver`. Previously this would assert while + it will now give a syntax error. + +varnishncsa +----------- + +- Add default values for some fields when logging incomplete records + and document the default values. + +Other +----- + +- Documentation updates + +- Some Solaris portability updates. + +================================ +Changes from 3.0.1 to 3.0.2 rc 1 +================================ + +Varnishd +-------- + +- Only log the first 20 bytes of extra headers to prevent overflows. + +- Fix crasher bug which sometimes happened if responses are queued and + the backend sends us Vary. `Bug #994`_. + +- Log correct size of compressed when uncompressing them for clients + that do not support compression. `Bug #996`_. + +- Only send Range responses if we are going to send a body. `Bug #1007`_. + +- When varnishd creates a storage file, also unlink it to avoid + leaking disk space over time. `Bug #1008`_. + +- The default size of the `-s file` parameter has been changed to + 100MB instead of 50% of the available disk space. + +- The limit on the number of objects we remove from the cache to make + room for a new one was mistakenly lowered to 10 in 3.0.1. This has + been raised back to 50. `Bug #1012`_. + +- `http_req_size` and `http_resp_size` have been increased to 8192 + bytes. This better matches what other HTTPds have. `Bug #1016`_. + +.. _bug #994: http://varnish-cache.org/trac/ticket/994 +.. _bug #992: http://varnish-cache.org/trac/ticket/992 +.. _bug #1007: http://varnish-cache.org/trac/ticket/1007 +.. _bug #1008: http://varnish-cache.org/trac/ticket/1008 +.. _bug #1012: http://varnish-cache.org/trac/ticket/1012 +.. _bug #1012: http://varnish-cache.org/trac/ticket/1016 + +VCL +--- + +- Allow relational comparisons of floating point types. + +- Make it possible for vmods to fail loading and so cause the VCL + loading to fail. + +varnishncsa +----------- + +- Fixed crash when client was sending illegal HTTP headers. + +- `%{Varnish:handling}` in format strings was broken, this has been + fixed. + +Other +----- + +- Documentation updates + +- Some Solaris portability updates. + +================================ Changes from 3.0.1 rc 1 to 3.0.1 ================================ | ||
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/environment.pickle ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/faq/configuration.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/faq/general.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/faq/http.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/faq/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/faq/logging.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/glossary/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/installation/bugs.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/installation/help.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/installation/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/installation/install.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/installation/prerequisites.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/installation/upgrade.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/autocrap.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/backends.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/barriers.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/gzip.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/ipv6suckage.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/platforms.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/sphinx.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/ssl.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/thoughts.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/three-zero.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/phk/vcl_expr.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/shmem.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnish-cli.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishadm.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishd.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishhist.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishlog.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishncsa.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishreplay.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishsizes.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishstat.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishtest.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/varnishtop.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/vcl.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/vmod.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/vmod_std.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/reference/vsl.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/advanced_backend_servers.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/advanced_topics.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/backend_servers.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/cookies.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/esi.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/handling_misbehaving_servers.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/increasing_your_hitrate.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/index.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/logging.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/purging.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/putting_varnish_on_port_80.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/sizing_your_cache.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/starting_varnish.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/statistics.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/troubleshooting.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/vary.doctree ^ | |
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/vcl.doctree ^ | |
Added | varnish-3.0.2.tar.bz2/doc/sphinx/=build/doctrees/tutorial/virtualised.doctree ^ | |
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/.buildinfo ^ |
@@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: dd020fe88441ab0f18e3a4cc0e28310d +config: 05ee5ccea6f8a30f07f8463d682066ab tags: fbb0d17656682115ca4d033fb2f83ba1 | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/faq/general.txt ^ |
@@ -337,7 +337,7 @@ * Client 2..N are now given the **hit for pass** object instructing them to go to the backend The **hit for pass** object will stay cached for the duration of its ttl. This means that subsequent clients requesting /foo will be sent straight to the backend as long as the **hit for pass** object exists. -The :command:`varnishstat` can tell you how many **hit for pass** objects varnish has served. The default vcl will set ttl for a hit_for_pass object to 120s. But you can override this, using the following logic: +The :command:`varnishstat` can tell you how many **hit for pass** objects varnish has served. The default vcl will set ttl for a hit_for_pass object to 120s. But you can override this, using the following logic:: sub vcl_fetch { if (!obj.cacheable) { | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/index.txt ^ |
@@ -5,8 +5,8 @@ =================================== Varnish is a state of the art web accelerator. Its mission is to sit -in front of a web server an cache the content. It makes your web site -go fast. +in front of a web server and cache content. It makes your web site +go faster. We suggest you start by reading the installation guide :ref:`install-index`. Once you have Varnish up and running go through | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/installation/upgrade.txt ^ |
@@ -13,14 +13,18 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ String concatenation did not have an operator previously, but this has now been changed to ``+``. +no more %-escapes in strings +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To simplify strings, the %-encoding has been removed. If you need non-printable characters, you need to use inline C. + ``log`` moved to the std vmod ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``log`` has moved to the std vmod: +``log`` has moved to the std vmod:: log "log something"; -becomes +becomes:: import std; std.log("log something"); @@ -30,15 +34,15 @@ purges are now called bans ~~~~~~~~~~~~~~~~~~~~~~~~~~ -``purge()`` and ``purge_url()`` are now respectively ``ban()`` and ``ban_url()``, so you should replace all occurences: +``purge()`` and ``purge_url()`` are now respectively ``ban()`` and ``ban_url()``, so you should replace all occurences:: purge("req.url = " req.url); -becomes +becomes:: ban("req.url = " + req.url); -``purge`` does not take any arguments anymore, but can be used in vcl_hit or vcl_miss to purge the item from the cache, where you would reduce ttl to 0 in Varnish 2.1. +``purge`` does not take any arguments anymore, but can be used in vcl_hit or vcl_miss to purge the item from the cache, where you would reduce ttl to 0 in Varnish 2.1:: sub vcl_hit { if (req.request == "PURGE") { @@ -47,7 +51,7 @@ } } -becomes +becomes:: sub vcl_hit { if (req.request == "PURGE") { @@ -64,13 +68,13 @@ returns are now done with the ``return()`` function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``pass``, ``pipe``, ``lookup``, ``deliver``, ``fetch``, ``hash``, ``pipe`` and ``restart`` are no longer keywords, but arguments to ``return()``, so +``pass``, ``pipe``, ``lookup``, ``deliver``, ``fetch``, ``hash``, ``pipe`` and ``restart`` are no longer keywords, but arguments to ``return()``, so:: sub vcl_pass { pass; } -becomes +becomes:: sub vcl_pass { return(pass); @@ -80,22 +84,22 @@ ``req.hash`` is replaced with ``hash_data()`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You no longer append to the hash with ``+=``, so +You no longer append to the hash with ``+=``, so:: set req.hash += req.url; -becomes +becomes:: hash_data(req.url); ``esi`` is replaced with ``beresp.do_esi`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You no longer enable ESI with ``esi``, so +You no longer enable ESI with ``esi``, so:: esi; -in ``vcl_fetch`` becomes +in ``vcl_fetch`` becomes:: set beresp.do_esi = true; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/reference/varnishncsa.txt ^ |
@@ -52,7 +52,7 @@ -F format Specify the log format used. If no format is specified the default log format is used. Currently it is: - %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" + %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i" Supported formatters are: @@ -62,10 +62,12 @@ bytes are sent. %H - The request protocol + The request protocol. Defaults to HTTP/1.0 if not + known. %h - Remote host + Remote host. Defaults to '-' if not known. + Defaults to 127.0.0.1 for backend requests. %{X}i The contents of request header line X. @@ -74,16 +76,18 @@ Remote logname (always '-') %m - Request method + Request method. Defaults to '-' if not known. %q - The query string, if no query string exists, an empty string. + The query string, if no query string exists, an + empty string. %{X}o The contents of response header line X. %r - The first line of the request + The first line of the request. Synthesized from other + fields, so it may not be the request verbatim. %s Status sent to the client @@ -93,7 +97,8 @@ format. %U - The request URL without any query string. + The request URL without any query string. Defaults to + '-' if not known. %u Remote user from auth | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/reference/vcl.txt ^ |
@@ -39,6 +39,12 @@ boolean (!, && and \|\|) operators, VCL supports both regular expression and ACL matching using the ~ and the !~ operators. +Basic strings are enclosed in " ... ", and may not contain newlines. + +Long strings are enclosed in {" ... "}. They may contain any +character including ", newline and other control characters except +for the NUL (0x00) character. + Unlike C and Perl, the backslash (\) character has no special meaning in strings in VCL, so it can be freely used in regular expressions without doubling. @@ -55,6 +61,15 @@ remove headers with the *remove* or *unset* keywords, which are synonym. +You can use the *rollback* keyword to revert any changes to req at +any time. + +The *synthetic* keyword is used to produce a synthetic response +body in vcl_error. It takes a single string as argument. + +You can force a crash of the client process with the *panic* keyword. +*panic* takes a string as argument. + The ``return(action)`` keyword terminates the subroutine. *action* can be, depending on context one of @@ -148,65 +163,76 @@ } } -The random director -~~~~~~~~~~~~~~~~~~~ +The family of random directors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The random director takes one per director option .retries. This -specifies how many tries it will use to find a working backend. The -default is the same as the number of backends defined for the -director. +There are three directors that share the same logic, called the random +director, client director and hash director. They each distribute traffic +among the backends assigned to it using a random distribution seeded with +either the client identity, a random number or the cache hash (typically +url). Beyond the initial seed, they act the same. + +Each backend requires a .weight option which sets the amount of traffic +each backend will get compared to the others. Equal weight means equal +traffic. A backend with lower weight than an other will get proportionally +less traffic. + +The director has an optional .retries option which defaults to the number +of backends the director has. The director will attempt .retries times to +find a healthy backend if the first attempt fails. Each attempt re-uses the +previous seed in an iterative manner. For the random director this detail +is of no importance as it will give different results each time. For the +hash and client director, this means the same URL or the same client will +fail to the same server consistently. -There is also a per-backend option: weight which defines the portion -of traffic to send to the particular backend. - -The round-robin director -~~~~~~~~~~~~~~~~~~~~~~~~ - -The round-robin director does not take any options. +The random director +................... +This uses a random number to seed the backend selection. The client director -~~~~~~~~~~~~~~~~~~~ +................... The client director picks a backend based on the clients *identity*. You can set the VCL variable *client.identity* to identify the client by picking up the value of a session cookie or similar. -Note: from 2.1.0 to 2.1.3 *client.identity* isn't available and the -director will use automatically set the idenity based on client.ip In -2.1.4 and onwards you can set client.identity to any string available. - -The client director takes one option - *retries* which set the number -of retries the director should take in order to find a healthy -backend. - - - The hash director -~~~~~~~~~~~~~~~~~ +................. The hash director will pick a backend based on the URL hash -value. +value. This is useful is you are using Varnish to load balance in front of other Varnish caches or other web accelerators as objects won't be duplicated across caches. -The client director takes one option - *retries* which set the number -of retries the director should take in order to find a healthy -backend. +It will use the value of req.hash, just as the normal cache-lookup methods. + + +The round-robin director +~~~~~~~~~~~~~~~~~~~~~~~~ + +The round-robin director does not take any options. + +It will use the first backend for the first request, the second backend for +the second request and so on, and start from the top again when it gets to +the end. + +If a backend is unhealthy or Varnish fails to connect, it will be skipped. +The round-robin director will try all the backends once before giving up. The DNS director ~~~~~~~~~~~~~~~~ -The DNS director can use backends in three different ways. Either like the +The DNS director can use backends in two different ways. Either like the random or round-robin director or using .list:: director directorname dns { .list = { .host_header = "www.example.com"; .port = "80"; - .connect_timeout = 0.4; + .connect_timeout = 0.4s; "192.168.15.0"/24; "192.168.16.128"/25; } @@ -216,6 +242,9 @@ This will specify 384 backends, all using port 80 and a connection timeout of 0.4s. Options must come before the list of IPs in the .list statement. +The .list-method does not support IPv6. It is not a white-list, it is an +actual list of backends that will be created internally in Varnish - the +larger subnet the more overhead. The .ttl defines the cache duration of the DNS lookups. @@ -223,6 +252,12 @@ header supplied by the client, before looking it up. All settings are optional. +Health checks are not thoroughly supported. + +DNS round robin balancing is supported. If a hostname resolves to multiple +backends, the director will divide the traffic between all of them in a +round-robin manner. + The fallback director ~~~~~~~~~~~~~~~~~~~~~ @@ -245,11 +280,36 @@ Backends can be probed to see whether they should be considered healthy or not. The return status can also be checked by using -req.backend.healthy .window is how many of the latest polls we -examine, while .threshold is how many of those must have succeeded for -us to consider the backend healthy. .initial is how many of the -probes are considered good when Varnish starts - defaults to the same -amount as the threshold. +req.backend.healthy. + +Probes take the following parameters: + +.url + Specify a URL to request from the backend. + Defaults to "/". +.request + Specify a full HTTP request using multiple strings. .request will + have \\r\\n automatically inserted after every string. + If specified, .request will take precedence over .url. +.window + How many of the latest polls we examine to determine backend health. + Defaults to 8. +.threshold + How many of the polls in .window must have succeeded for us to consider + the backend healthy. + Defaults to 3. +.initial + How many of the probes are considered good when Varnish starts. + Defaults to the same amount as the threshold. +.expected_response + The expected backend HTTP response code. + Defaults to 200. +.interval + Defines how often the probe should check the backend. + Default is every 5 seconds. +.timeout + How fast each probe times out. + Default is 2 seconds. A backend with a probe can be defined like this, together with the backend or director::: @@ -275,6 +335,7 @@ .window = 8; .threshold = 3; .initial = 3; + .expected_response = 200; } backend www { @@ -626,6 +687,9 @@ client.ip The client's IP address. +client.identity + Identification of the client, used to load balance in the client director. + server.hostname The host name of the server. @@ -672,6 +736,23 @@ req.can_gzip Does the client accept the gzip transfer encoding. +req.restarts + A count of how many times this request has been restarted. + +req.esi + Boolean. Set to false to disable ESI processing regardless of any + value in beresp.do_esi. Defaults to true. This variable is subject + to change in future versions, you should avoid using it. + +req.esi_level + A count of how many levels of ESI requests we're currently at. + +req.grace + Set to a period to enable grace. + +req.xid + Unique ID of this request. + The following variables are available while preparing a backend request (either for a cache miss or for pass or pipe mode): @@ -709,8 +790,9 @@ as it is delivered so only client can access the object. beresp.do_esi - Boolean. ESI-process the object after fetching it. Defaults to false. Set it - to true to parse the object for ESI directives. + Boolean. ESI-process the object after fetching it. Defaults to + false. Set it to true to parse the object for ESI directives. Will + only be honored if req.esi is true. beresp.do_gzip Boolean. Gzip the object before storing it. Defaults to false. @@ -731,6 +813,25 @@ beresp.ttl The object's remaining time to live, in seconds. beresp.ttl is writable. +beresp.grace + Set to a period to enable grace. + +beresp.saintmode + Set to a period to enable saint mode. + +beresp.backend.name + Name of the backend this response was fetched from. + +beresp.backend.ip + IP of the backend this response was fetched from. + +beresp.backend.port + Port of the backend this response was fetched from. + +beresp.storage + Set to force Varnish to save this object to a particular storage + backend. + After the object is entered into the cache, the following (mostly read-only) variables are available when the object has been located in cache, typically in vcl_hit and vcl_deliver. @@ -755,6 +856,12 @@ The approximate number of times the object has been delivered. A value of 0 indicates a cache miss. +obj.grace + The object's grace period in seconds. obj.grace is writable. + +obj.http.header + The corresponding HTTP header. + The following variables are available while determining the hash key of an object: @@ -939,8 +1046,8 @@ COPYRIGHT ========= -This document is licensed under the same licence as Varnish -itself. See LICENCE for details. +This document is licensed under the same license as Varnish +itself. See LICENSE for details. * Copyright (c) 2006 Verdens Gang AS * Copyright (c) 2006-2011 Varnish Software AS | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/tutorial/esi.txt ^ |
@@ -48,9 +48,9 @@ sub vcl_fetch { if (req.url == "/test.html") { set beresp.do_esi = true; /* Do ESI processing */ - set obj.ttl = 24 h; /* Sets the TTL on the HTML above */ + set beresp.ttl = 24 h; /* Sets the TTL on the HTML above */ } elseif (req.url == "/cgi-bin/date.cgi") { - set obj.ttl = 1m; /* Sets a one minute TTL on */ + set beresp.ttl = 1m; /* Sets a one minute TTL on */ /* the included object */ } } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/tutorial/index.txt ^ |
@@ -26,6 +26,7 @@ vary purging esi + virtualised advanced_backend_servers handling_misbehaving_servers advanced_topics | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/tutorial/vcl.txt ^ |
@@ -58,7 +58,15 @@ *pass* When you return pass the request and subsequent response will be passed to and from the backend server. It won't be cached. pass can be returned from - both vcl_recv and vcl_fetch. + vcl_recv + +*hit_for_pass* + Similar to pass, but accessible from vcl_fetch. Unlike pass, hit_for_pass + will create a hitforpass object in the cache. This has the side-effect of + caching the decision not to cache. This is to allow would-be uncachable + requests to be passed to the backend at the same time. The same logic is + not necessary in vcl_recv because this happens before any potential + queueing for an object takes place. *lookup* When you return lookup from vcl_recv you tell Varnish to deliver content | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_sources/tutorial/virtualised.txt ^ |
@@ -0,0 +1,20 @@ + +Running inside a virtual machine (VM) +------------------------------------- + +It is possible, but not recommended for high performance, to run Varnish on virtualised +hardware. + +OpenVZ +'''''' + +If you are running on 64bit OpenVZ (or Parallels VPS), you must reduce the +maximum stack size before starting Varnish. The default allocates to much memory per thread, +which will make varnish fail as soon as the number of threads (==traffic) increases. + +Reduce the maximum stack size by running:: + + ulimit -s 256 + +in the startup script. + | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/_static/jquery.js ^ |
@@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.6.2 + * jQuery JavaScript Library v1.6.4 * http://jquery.com/ * * Copyright 2011, John Resig @@ -11,7 +11,7 @@ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Thu Jun 30 14:16:56 2011 -0400 + * Date: Mon Sep 12 18:54:48 2011 -0400 */ (function( window, undefined ) { @@ -37,8 +37,8 @@ rootjQuery, // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, @@ -66,11 +66,12 @@ rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, // Matches dashed string for camelizing - rdashAlpha = /-([a-z])/ig, + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { - return letter.toUpperCase(); + return ( letter + "" ).toUpperCase(); }, // Keep a UserAgent string for use with jQuery.browser @@ -212,7 +213,7 @@ selector: "", // The current version of jQuery being used - jquery: "1.6.2", + jquery: "1.6.4", // The default length of a jQuery object is 0 length: 0, @@ -521,10 +522,15 @@ return false; } - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 return false; } @@ -574,24 +580,23 @@ }, // Cross-browser xml parsing - // (xml & tmp used internally) - parseXML: function( data , xml , tmp ) { - - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); + parseXML: function( data ) { + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; } - - tmp = xml.documentElement; - - if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } - return xml; }, @@ -611,10 +616,10 @@ } }, - // Converts a dashed string to camelCased string; - // Used by both the css and data modules + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { - return string.replace( rdashAlpha, fcamelCase ); + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { @@ -699,6 +704,9 @@ }, inArray: function( elem, array ) { + if ( !array ) { + return -1; + } if ( indexOf ) { return indexOf.call( array, elem ); @@ -1071,7 +1079,7 @@ if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise().then( newDefer.resolve, newDefer.reject ); } else { - newDefer[ action ]( returned ); + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); } }); } else { @@ -1173,6 +1181,7 @@ div.setAttribute("className", "t"); div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; + all = div.getElementsByTagName( "*" ); a = div.getElementsByTagName( "a" )[ 0 ]; @@ -1293,13 +1302,14 @@ width: 0, height: 0, border: 0, - margin: 0 + margin: 0, + background: "none" }; if ( body ) { jQuery.extend( testElementStyle, { position: "absolute", - left: -1000, - top: -1000 + left: "-1000px", + top: "-1000px" }); } for ( i in testElementStyle ) { @@ -1404,7 +1414,7 @@ var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([a-z])([A-Z])/g; + rmultiDash = /([A-Z])/g; jQuery.extend({ cache: {}, @@ -1436,7 +1446,9 @@ return; } - var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary @@ -1452,7 +1464,7 @@ // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all - if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) { return; } @@ -1511,10 +1523,24 @@ return thisCache[ internalKey ] && thisCache[ internalKey ].events; } - return getByName ? - // Check for both converted-to-camel and non-converted data property names - thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] : - thisCache; + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { @@ -1522,7 +1548,12 @@ return; } - var internalKey = jQuery.expando, isNode = elem.nodeType, + var thisCache, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, @@ -1537,9 +1568,16 @@ } if ( name ) { - var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; if ( thisCache ) { + + // Support interoperable removal of hyphenated or camelcased keys + if ( !thisCache[ name ] ) { + name = jQuery.camelCase( name ); + } + delete thisCache[ name ]; // If there is no data left in the cache, we want to continue @@ -1566,7 +1604,8 @@ // Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // don't care - if ( jQuery.support.deleteExpando || cache != window ) { + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { delete cache[ id ]; } else { cache[ id ] = null; @@ -1690,7 +1729,8 @@ // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { - var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); @@ -1910,8 +1950,7 @@ rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - rinvalidChar = /\:|^on/, - formHook, boolHook; + nodeHook, boolHook; jQuery.fn.extend({ attr: function( name, value ) { @@ -2049,7 +2088,7 @@ hasClass: function( selector ) { var className = " " + selector + " "; for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } @@ -2229,14 +2268,11 @@ if ( !hooks ) { // Use boolHook for boolean attributes if ( rboolean.test( name ) ) { - hooks = boolHook; - // Use formHook for forms and if the name contains certain characters - } else if ( formHook && name !== "className" && - (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { - - hooks = formHook; + // Use nodeHook if available( IE6/7 ) + } else if ( nodeHook ) { + hooks = nodeHook; } } } @@ -2273,14 +2309,9 @@ var propName; if ( elem.nodeType === 1 ) { name = jQuery.attrFix[ name ] || name; - - if ( jQuery.support.getSetAttribute ) { - // Use removeAttribute in browsers that support it - elem.removeAttribute( name ); - } else { - jQuery.attr( elem, name, "" ); - elem.removeAttributeNode( elem.getAttributeNode( name ) ); - } + + jQuery.attr( elem, name, "" ); + elem.removeAttribute( name ); // Set corresponding property to false for boolean attributes if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { @@ -2308,33 +2339,20 @@ } } }, - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabIndex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - }, // Use the value property for back compat - // Use the formHook for button elements in IE6/7 (#1954) + // Use the nodeHook for button elements in IE6/7 (#1954) value: { get: function( elem, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.get( elem, name ); + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); } return name in elem ? elem.value : null; }, set: function( elem, value, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.set( elem, value, name ); + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); } // Does not return so that setAttribute is also used elem.value = value; @@ -2383,7 +2401,7 @@ } } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { @@ -2392,14 +2410,33 @@ } }, - propHooks: {} + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } }); +// Add the tabindex propHook to attrHooks for back-compat +jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex; + // Hook for boolean attributes boolHook = { get: function( elem, name ) { // Align boolean attributes with corresponding properties - return jQuery.prop( elem, name ) ? + // Fall back to attribute presence where some booleans are not supported + var attrNode; + return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ? name.toLowerCase() : undefined; }, @@ -2425,12 +2462,10 @@ // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !jQuery.support.getSetAttribute ) { - - // propFix is more comprehensive and contains all fixes - jQuery.attrFix = jQuery.propFix; - // Use this for any attribute on a form in IE6/7 - formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = { + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { get: function( elem, name ) { var ret; ret = elem.getAttributeNode( name ); @@ -2440,13 +2475,13 @@ undefined; }, set: function( elem, value, name ) { - // Check form objects in IE (multiple bugs related) - // Only use nodeValue if the attribute node exists on the form + // Set the existing or create a new attribute node var ret = elem.getAttributeNode( name ); - if ( ret ) { - ret.nodeValue = value; - return value; + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); } + return (ret.nodeValue = value + ""); } }; @@ -2505,6 +2540,7 @@ parent.parentNode.selectedIndex; } } + return null; } }); } @@ -3235,8 +3271,9 @@ setup: function( data, namespaces ) { if ( !jQuery.nodeName( this, "form" ) ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { + // Avoid triggering error on non-existent type attribute in IE VML (#7071) var elem = e.target, - type = elem.type; + type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : ""; if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { trigger( "submit", this, arguments ); @@ -3245,7 +3282,7 @@ jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, - type = elem.type; + type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : ""; if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { trigger( "submit", this, arguments ); @@ -3270,7 +3307,8 @@ var changeFilters, getVal = function( elem ) { - var type = elem.type, val = elem.value; + var type = jQuery.nodeName( elem, "input" ) ? elem.type : "", + val = elem.value; if ( type === "radio" || type === "checkbox" ) { val = elem.checked; @@ -5295,12 +5333,17 @@ // Determine the position of an element within // the matched set of elements index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used @@ -6048,7 +6091,10 @@ // with an element if you are cloning the body and one of the // elements on the page has a name or id of "length" for ( i = 0; srcElements[i]; ++i ) { - cloneFixAttributes( srcElements[i], destElements[i] ); + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } } } @@ -6248,14 +6294,14 @@ + var ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, // fixed for IE9, see #8346 rupper = /([A-Z]|^ms)/g, rnumpx = /^-?\d+(?:px)?$/i, rnum = /^-?\d/, - rrelNum = /^[+\-]=/, - rrelNumFilter = /[^+\-\.\de]+/g, + rrelNum = /^([\-+])=([\-+.\de]+)/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssWidth = [ "Left", "Right" ], @@ -6332,18 +6378,18 @@ if ( value !== undefined ) { type = typeof value; - // Make sure that NaN and null values aren't set. See: #7116 - if ( type === "number" && isNaN( value ) || value == null ) { - return; - } - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && rrelNum.test( value ) ) { - value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) ); + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) ); // Fixes bug #9237 type = "number"; } + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + // If a number was passed in, add 'px' to the (except for certain CSS properties) if ( type === "number" && !jQuery.cssNumber[ origName ] ) { value += "px"; @@ -6459,18 +6505,29 @@ set: function( elem, value ) { var style = elem.style, - currentStyle = elem.currentStyle; + currentStyle = elem.currentStyle, + opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")", + filter = currentStyle && currentStyle.filter || style.filter || ""; // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level style.zoom = 1; - // Set the alpha filter to set the opacity - var opacity = jQuery.isNaN( value ) ? - "" : - "alpha(opacity=" + value * 100 + ")", - filter = currentStyle && currentStyle.filter || style.filter || ""; + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values style.filter = ralpha.test( filter ) ? filter.replace( ralpha, opacity ) : filter + " " + opacity; @@ -6625,9 +6682,9 @@ rCRLF = /\r?\n/g, rhash = /#.*$/, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL - rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/, + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, rquery = /\?/, @@ -6662,7 +6719,10 @@ ajaxLocation, // Document location segments - ajaxLocParts; + ajaxLocParts, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; // #8138, IE may throw an exception when accessing // a field from window.location if document.domain has been set @@ -6755,6 +6815,22 @@ return selection; } +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + jQuery.fn.extend({ load: function( url, params, callback ) { if ( typeof url !== "string" && _load ) { @@ -6898,23 +6974,16 @@ // Creates a full fledged settings object into target // with both ajaxSettings and settings fields. // If target is omitted, writes into ajaxSettings. - ajaxSetup: function ( target, settings ) { - if ( !settings ) { - // Only one parameter, we extend ajaxSettings - settings = target; - target = jQuery.extend( true, jQuery.ajaxSettings, settings ); + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); } else { - // target was provided, we extend into it - jQuery.extend( true, target, jQuery.ajaxSettings, settings ); - } - // Flatten fields we don't want deep extended - for( var field in { context: 1, url: 1 } ) { - if ( field in settings ) { - target[ field ] = settings[ field ]; - } else if( field in jQuery.ajaxSettings ) { - target[ field ] = jQuery.ajaxSettings[ field ]; - } + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; } + ajaxExtend( target, settings ); return target; }, @@ -6942,7 +7011,7 @@ html: "text/html", text: "text/plain", json: "application/json, text/javascript", - "*": "*/*" + "*": allTypes }, contents: { @@ -6972,6 +7041,15 @@ // Parse text as xml "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true } }, @@ -7082,7 +7160,7 @@ // Callback for when everything is done // It is defined here because jslint complains if it is declared // at the end of the function (which would be more logical and readable) - function done( status, statusText, responses, headers ) { + function done( status, nativeStatusText, responses, headers ) { // Called once if ( state === 2 ) { @@ -7105,11 +7183,12 @@ responseHeadersString = headers || ""; // Set readyState - jqXHR.readyState = status ? 4 : 0; + jqXHR.readyState = status > 0 ? 4 : 0; var isSuccess, success, error, + statusText = nativeStatusText, response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined, lastModified, etag; @@ -7161,7 +7240,7 @@ // Set data for the fake xhr object jqXHR.status = status; - jqXHR.statusText = statusText; + jqXHR.statusText = "" + ( nativeStatusText || statusText ); // Success/Error if ( isSuccess ) { @@ -7183,7 +7262,7 @@ completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] ); if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] ); + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); // Handle the global AJAX counter if ( !( --jQuery.active ) ) { jQuery.event.trigger( "ajaxStop" ); @@ -7264,6 +7343,8 @@ // If data is available, append data to url if ( s.data ) { s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; } // Get ifModifiedKey before adding the anti-cache parameter @@ -7301,7 +7382,7 @@ jqXHR.setRequestHeader( "Accept", s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) : + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s.accepts[ "*" ] ); @@ -7347,7 +7428,7 @@ transport.send( requestHeaders, done ); } catch (e) { // Propagate exception as error if not done - if ( status < 2 ) { + if ( state < 2 ) { done( -1, e ); // Simply rethrow otherwise } else { @@ -7995,10 +8076,7 @@ // opacity animations [ "opacity" ] ], - fxNow, - requestAnimationFrame = window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame; + fxNow; jQuery.fn.extend({ show: function( speed, easing, callback ) { @@ -8374,8 +8452,7 @@ // Start an animation from one number to another custom: function( from, to, unit ) { var self = this, - fx = jQuery.fx, - raf; + fx = jQuery.fx; this.startTime = fxNow || createFxNow(); this.start = from; @@ -8391,20 +8468,7 @@ t.elem = this.elem; if ( t() && jQuery.timers.push(t) && !timerId ) { - // Use requestAnimationFrame instead of setInterval if available - if ( requestAnimationFrame ) { - timerId = true; - raf = function() { - // When timerId gets set to null at any point, this stops - if ( timerId ) { - requestAnimationFrame( raf ); - fx.tick(); - } - }; - requestAnimationFrame( raf ); - } else { - timerId = setInterval( fx.tick, fx.interval ); - } + timerId = setInterval( fx.tick, fx.interval ); } }, @@ -8947,9 +9011,10 @@ if ( jQuery.isWindow( elem ) ) { // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat - var docElemProp = elem.document.documentElement[ "client" + name ]; + var docElemProp = elem.document.documentElement[ "client" + name ], + body = elem.document.body; return elem.document.compatMode === "CSS1Compat" && docElemProp || - elem.document.body[ "client" + name ] || docElemProp; + body && body[ "client" + name ] || docElemProp; // Get document width or height } else if ( elem.nodeType === 9 ) { | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/faq/configuration.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Configuration — Varnish version 3.0.1 documentation</title> + <title>Configuration — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Frequently asked questions" href="index.html" /> <link rel="next" title="Logging" href="logging.html" /> <link rel="prev" title="HTTP" href="http.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="http.html" title="HTTP" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Frequently asked questions</a> »</li> </ul> </div> @@ -63,14 +63,14 @@ <ul class="simple"> <li>Place the VCL file on the server</li> <li>Telnet into the managment port.</li> -<li>do a “vcl.load <configname> <filename>” in managment interface. <configname> is whatever you would like to call your new configuration.</li> -<li>do a “vcl.use <configname>” to start using your new config.</li> +<li>do a "vcl.load <configname> <filename>" in managment interface. <configname> is whatever you would like to call your new configuration.</li> +<li>do a "vcl.use <configname>" to start using your new config.</li> </ul> -<p><strong>Should I use ‘’pipe’’ or ‘’pass’’ in my VCL code? What is the difference?</strong></p> +<p><strong>Should I use ''pipe'' or ''pass'' in my VCL code? What is the difference?</strong></p> <p>When varnish does a <tt class="docutils literal"><span class="pre">pass</span></tt> it acts like a normal HTTP proxy. It reads the request and pushes it onto the backend. The next HTTP request can then be handled like any other.</p> -<p><tt class="docutils literal"><span class="pre">pipe</span></tt> is only used when Varnish for some reason can’t handle the +<p><tt class="docutils literal"><span class="pre">pipe</span></tt> is only used when Varnish for some reason can't handle the <tt class="docutils literal"><span class="pre">pass</span></tt>. <tt class="docutils literal"><span class="pre">pipe</span></tt> reads the request, pushes in onty the backend _only_ pushes bytes back and forth, with no other actions taken.</p> <p>Since most HTTP clients do pipeline several requests into one @@ -83,7 +83,7 @@ correct handling.</p> <p>In 2.0 and later, <tt class="docutils literal"><span class="pre">pass</span></tt> will handle the request body correctly.</p> <p>If you get 503 errors when making a request which is <tt class="docutils literal"><span class="pre">pass</span></tt> ed, make sure -that you’re specifying the backend before returning from vcl_recv with <tt class="docutils literal"><span class="pre">pass</span></tt>.</p> +that you're specifying the backend before returning from vcl_recv with <tt class="docutils literal"><span class="pre">pass</span></tt>.</p> </div> </div> @@ -141,7 +141,7 @@ <li class="right" > <a href="http.html" title="HTTP" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Frequently asked questions</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/faq/general.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>General questions — Varnish version 3.0.1 documentation</title> + <title>General questions — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Frequently asked questions" href="index.html" /> <link rel="next" title="HTTP" href="http.html" /> <link rel="prev" title="Frequently asked questions" href="index.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="index.html" title="Frequently asked questions" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Frequently asked questions</a> »</li> </ul> </div> @@ -62,7 +62,7 @@ <li>Load balancing with health checking of backends</li> <li>Partial support for ESI</li> <li>URL rewriting</li> -<li>Graceful handling of “dead” backends</li> +<li>Graceful handling of "dead" backends</li> </ul> <p>Features to come (Experimental):</p> <ul class="simple"> @@ -116,7 +116,7 @@ </li> </ol> <p><strong>How can I debug the requests of a single client?</strong></p> -<p>The “varnishlog” utility may produce a horrendous amount of output. To be able debug our own traffic can be useful.</p> +<p>The "varnishlog" utility may produce a horrendous amount of output. To be able debug our own traffic can be useful.</p> <p>The ReqStart token will include the client IP address. To see log entries matching this, type:</p> <div class="highlight-python"><pre>$ varnishlog -c -m ReqStart:192.0.2.123</pre> </div> @@ -125,19 +125,19 @@ <div class="highlight-python"><pre>$ varnishlog -b -m TxHeader:192.0.2.123</pre> </div> <p><strong>How can I rewrite URLS before they are sent to the backend?</strong></p> -<p>You can use the <tt class="docutils literal"><span class="pre">regsub()</span></tt> function to do this. Here’s an example for zope, to rewrite URLs for the virtualhostmonster:</p> +<p>You can use the <tt class="docutils literal"><span class="pre">regsub()</span></tt> function to do this. Here's an example for zope, to rewrite URLs for the virtualhostmonster:</p> <div class="highlight-python"><pre>if (req.http.host ~ "^(www.)?example.com") { set req.url = regsub(req.url, "^", "/VirtualHostBase/http/example.com:80/Sites/example.com/VirtualHostRoot"); }</pre> </div> <p><strong>I have a site with many host names, how do I keep them from multiplying the cache?</strong></p> -<p>You can do this by normalizing the <tt class="docutils literal"><span class="pre">Host</span></tt> header for all your host names. Here’s a VCL example:</p> +<p>You can do this by normalizing the <tt class="docutils literal"><span class="pre">Host</span></tt> header for all your host names. Here's a VCL example:</p> <div class="highlight-python"><pre>if (req.http.host ~ "^(www.)?example.com") { set req.http.host = "example.com"; }</pre> </div> <p><strong>How do I do to alter the request going to the backend?</strong> -You can use the <tt class="docutils literal"><span class="pre">bereq</span></tt> object for altering requests going to the backend, but you can only ‘set’ values to it. Therefore use req.url to build the request:</p> +You can use the <tt class="docutils literal"><span class="pre">bereq</span></tt> object for altering requests going to the backend, but you can only 'set' values to it. Therefore use req.url to build the request:</p> <div class="highlight-python"><pre>sub vcl_miss { set bereq.url = regsub(req.url,"stream/","/"); return(fetch); @@ -244,7 +244,7 @@ <dl class="docutils"> <dt>There are 2 common reasons for this:</dt> <dd><ol class="first last arabic"> -<li><p class="first">The object’s <tt class="docutils literal"><span class="pre">ttl</span> <span class="pre">expired</span></tt>. A common situation is that the backend does not set an expiry time on the requested image/file/webpage, so Varnish uses the default TTL (normally 120s).</p> +<li><p class="first">The object's <tt class="docutils literal"><span class="pre">ttl</span> <span class="pre">expired</span></tt>. A common situation is that the backend does not set an expiry time on the requested image/file/webpage, so Varnish uses the default TTL (normally 120s).</p> </li> <li><dl class="first docutils"> <dt>Your site uses <tt class="docutils literal"><span class="pre">cookies</span></tt>:</dt> @@ -262,7 +262,7 @@ <p>Some HTTP headers, such as <tt class="docutils literal"><span class="pre">Host:</span></tt> and <tt class="docutils literal"><span class="pre">Location:</span></tt> contain fully qualified domain names, which by definition is not case-sensitive. Other HTTP headers are case-sensitive, most notably the URLs. -Therefore a “one size fits all” solution is not possible.</p> +Therefore a "one size fits all" solution is not possible.</p> <p>In previous releases, we used the POSIX regular expressions supplied with the operating system, and decided, because the most common use of regexps were on <tt class="docutils literal"><span class="pre">`Host:`</span></tt> headers, that @@ -284,10 +284,10 @@ <p>See the <a class="reference external" href="http://www.pcre.org/pcre.txt">PCRE man pages</a> for more information.</p> <p><strong>Why does the ``Via:`` header say 1.1 in Varnish 2.1.x?</strong></p> <p>The number in the <tt class="docutils literal"><span class="pre">Via:</span></tt> header is the HTTP protocol version -supported/applied, not the software’s version number.</p> +supported/applied, not the software's version number.</p> <p><strong>Why did you call it *Varnish*?</strong></p> <p>Long story, but basically the instigator of Varnish spent a long -time staring at an art-poster with the word “Vernisage” and ended +time staring at an art-poster with the word "Vernisage" and ended up checking it in a dictionary, which gives the following three meanings of the word:</p> <p>r.v. var·nished, var·nish·ing, var·nish·es</p> @@ -302,13 +302,13 @@ put Varnish in front of it.</p> <p><strong>Why does Varnish require the system to have a C compiler?</strong></p> <p>The <a class="reference internal" href="configuration.html#faq-vcl"><em>VCL</em></a> compiler generates C source as output (your config file), and uses the systems C-compiler to compile that into a shared library. If there is no C compiler, Varnish will not work.</p> -<p><strong>Isn’t that security problem?</strong></p> +<p><strong>Isn't that security problem?</strong></p> <p>The days when you could prevent people from running non-approved programs by removing the C compiler from your system ended roughly with the VAX 11/780 computer.</p> </div> <div class="section" id="troubleshooting"> <h2>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline">¶</a></h2> <p><strong>Why am I getting a cache hit, but a request is still going to my backend?</strong></p> -<p>Varnish has a feature called <strong>hit for pass</strong>, which is used when Varnish gets a response from the backend and finds out it cannot be cached. In such cases, Varnish will create a cache object that records that fact, so that the next request goes directly to “pass”.</p> +<p>Varnish has a feature called <strong>hit for pass</strong>, which is used when Varnish gets a response from the backend and finds out it cannot be cached. In such cases, Varnish will create a cache object that records that fact, so that the next request goes directly to "pass".</p> <blockquote> <div><dl class="docutils"> <dt>Since Varnish bundles multiple requests for the same URL to the backend, a common case where a client will get a <strong>hit for pass</strong> is:</dt> @@ -325,20 +325,14 @@ </div></blockquote> <p>The <strong>hit for pass</strong> object will stay cached for the duration of its ttl. This means that subsequent clients requesting /foo will be sent straight to the backend as long as the <strong>hit for pass</strong> object exists. The <strong class="command">varnishstat</strong> can tell you how many <strong>hit for pass</strong> objects varnish has served. The default vcl will set ttl for a hit_for_pass object to 120s. But you can override this, using the following logic:</p> -<blockquote> -<div><dl class="docutils"> -<dt>sub vcl_fetch {</dt> -<dd><dl class="first docutils"> -<dt>if (!obj.cacheable) {</dt> -<dd># Limit the lifetime of all ‘hit for pass’ objects to 10 seconds -obj.ttl = 10s; -return(hit_for_pass);</dd> -</dl> -<p class="last">}</p> -</dd> -</dl> -<p>}</p> -</div></blockquote> +<div class="highlight-python"><pre>sub vcl_fetch { + if (!obj.cacheable) { + # Limit the lifetime of all 'hit for pass' objects to 10 seconds + obj.ttl = 10s; + return(hit_for_pass); + } +}</pre> +</div> </div> </div> @@ -401,7 +395,7 @@ <li class="right" > <a href="index.html" title="Frequently asked questions" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Frequently asked questions</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/faq/http.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>HTTP — Varnish version 3.0.1 documentation</title> + <title>HTTP — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Frequently asked questions" href="index.html" /> <link rel="next" title="Configuration" href="configuration.html" /> <link rel="prev" title="General questions" href="general.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="general.html" title="General questions" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Frequently asked questions</a> »</li> </ul> </div> @@ -77,10 +77,10 @@ # [...] }</pre> </div> -<p>For the apache configuration, we copy the “combined” log format to a new one we call “varnishcombined”, for instance, and change the client IP field to use the content of the variable we set in the varnish configuration:</p> +<p>For the apache configuration, we copy the "combined" log format to a new one we call "varnishcombined", for instance, and change the client IP field to use the content of the variable we set in the varnish configuration:</p> <div class="highlight-python"><pre>LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined</pre> </div> -<p>And so, in our virtualhost, you need to specify this format instead of “combined” (or “common”, or whatever else you use):</p> +<p>And so, in our virtualhost, you need to specify this format instead of "combined" (or "common", or whatever else you use):</p> <div class="highlight-python"><pre><VirtualHost *:80> ServerName www.example.com # [...] @@ -137,7 +137,7 @@ <li class="right" > <a href="general.html" title="General questions" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Frequently asked questions</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/faq/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Frequently asked questions — Varnish version 3.0.1 documentation</title> + <title>Frequently asked questions — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="next" title="General questions" href="general.html" /> <link rel="prev" title="Shared Memory Logging" href="../reference/vsl.html" /> </head> @@ -39,7 +39,7 @@ <li class="right" > <a href="../reference/vsl.html" title="Shared Memory Logging" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -118,7 +118,7 @@ <li class="right" > <a href="../reference/vsl.html" title="Shared Memory Logging" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/faq/logging.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Logging — Varnish version 3.0.1 documentation</title> + <title>Logging — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Frequently asked questions" href="index.html" /> <link rel="next" title="Poul-Hennings random outbursts" href="../phk/index.html" /> <link rel="prev" title="Configuration" href="configuration.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="configuration.html" title="Configuration" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Frequently asked questions</a> »</li> </ul> </div> @@ -53,7 +53,7 @@ <div class="section" id="logging"> <h1>Logging<a class="headerlink" href="#logging" title="Permalink to this headline">¶</a></h1> <p><strong>Where can I find the log files?</strong></p> -<p>Varnish does not log to a file, but to shared memory log. Use the varnishlog utility to print the shared memory log or varnishncsa to present it in the Apache / NCSA “combined” log format.</p> +<p>Varnish does not log to a file, but to shared memory log. Use the varnishlog utility to print the shared memory log or varnishncsa to present it in the Apache / NCSA "combined" log format.</p> </div> @@ -102,7 +102,7 @@ <li class="right" > <a href="configuration.html" title="Configuration" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Frequently asked questions</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/genindex.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Index — Varnish version 3.0.1 documentation</title> + <title>Index — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="index.html" /> </head> <body> <div class="related"> @@ -31,7 +31,7 @@ <li class="right" style="margin-right: 10px"> <a href="#" title="General Index" accesskey="I">index</a></li> - <li><a href="index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -167,7 +167,7 @@ <li class="right" style="margin-right: 10px"> <a href="#" title="General Index" >index</a></li> - <li><a href="index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/glossary/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Varnish Glossary — Varnish version 3.0.1 documentation</title> + <title>Varnish Glossary — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="prev" title="Why Sphinx and reStructuredText ?" href="../phk/sphinx.html" /> </head> <body> @@ -35,7 +35,7 @@ <li class="right" > <a href="../phk/sphinx.html" title="Why Sphinx and reStructuredText ?" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -65,7 +65,7 @@ a browser, but do not forget to think about spiders, robots script-kiddies and criminals.</dd> <dt id="term-header">header</dt> -<dd>A HTTP protocol header, like “Accept-Encoding:”.</dd> +<dd>A HTTP protocol header, like "Accept-Encoding:".</dd> <dt id="term-hit">hit</dt> <dd>An object Varnish delivers from cache.</dd> <dt id="term-master-process">master (process)</dt> @@ -93,26 +93,26 @@ <dd>What the client sends to varnishd and varnishd sends to the backend.</dd> <dt id="term-response">response</dt> <dd>What the backend returns to varnishd and varnishd returns to -the client. When the response is stored in varnishd’s cache, +the client. When the response is stored in varnishd's cache, we call it an object.</dd> -<dt id="term-varnishd-nb-with-d">varnishd (NB: with ‘d’)</dt> +<dt id="term-varnishd-nb-with-d">varnishd (NB: with 'd')</dt> <dd>This is the actual Varnish cache program. There is only one program, but when you run it, you will get <em>two</em> -processes: The “master” and the “worker” (or “child”).</dd> +processes: The "master" and the "worker" (or "child").</dd> <dt id="term-varnishhist">varnishhist</dt> <dd>Eye-candy program showing responsetime histogram in 1980ies ASCII-art style.</dd> <dt id="term-varnishlog">varnishlog</dt> <dd>Program which presents varnish transaction log in native format.</dd> <dt id="term-varnishncsa">varnishncsa</dt> -<dd>Program which presents varnish transaction log in “NCSA” format.</dd> +<dd>Program which presents varnish transaction log in "NCSA" format.</dd> <dt id="term-varnishstat">varnishstat</dt> <dd>Program which presents varnish statistics counters.</dd> <dt id="term-varnishtest">varnishtest</dt> -<dd>Program to test varnishd’s behaviour with, simulates backend +<dd>Program to test varnishd's behaviour with, simulates backend and client according to test-scripts.</dd> <dt id="term-varnishtop">varnishtop</dt> -<dd>Program which gives real-time “top-X” list view of transaction log.</dd> +<dd>Program which gives real-time "top-X" list view of transaction log.</dd> <dt id="term-vcl">VCL</dt> <dd>Varnish Configuration Language, a small specialized language for instructing Varnish how to behave.</dd> @@ -164,7 +164,7 @@ <li class="right" > <a href="../phk/sphinx.html" title="Why Sphinx and reStructuredText ?" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Welcome to Varnish’s documentation! — Varnish version 3.0.1 documentation</title> + <title>Welcome to Varnish's documentation! — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="#" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="#" /> <link rel="next" title="Varnish Installation" href="installation/index.html" /> </head> <body> @@ -35,7 +35,7 @@ <li class="right" > <a href="installation/index.html" title="Varnish Installation" accesskey="N">next</a> |</li> - <li><a href="#">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="#">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -45,10 +45,10 @@ <div class="body"> <div class="section" id="welcome-to-varnish-s-documentation"> -<h1>Welcome to Varnish’s documentation!<a class="headerlink" href="#welcome-to-varnish-s-documentation" title="Permalink to this headline">¶</a></h1> +<h1>Welcome to Varnish's documentation!<a class="headerlink" href="#welcome-to-varnish-s-documentation" title="Permalink to this headline">¶</a></h1> <p>Varnish is a state of the art web accelerator. Its mission is to sit -in front of a web server an cache the content. It makes your web site -go fast.</p> +in front of a web server and cache content. It makes your web site +go faster.</p> <p>We suggest you start by reading the installation guide <a class="reference internal" href="installation/index.html#install-index"><em>Varnish Installation</em></a>. Once you have Varnish up and running go through our tutorial - <a class="reference internal" href="tutorial/index.html#tutorial-index"><em>Using Varnish</em></a>.</p> @@ -82,7 +82,7 @@ <div class="sphinxsidebarwrapper"> <h3><a href="#">Table Of Contents</a></h3> <ul> -<li><a class="reference internal" href="#">Welcome to Varnish’s documentation!</a><ul> +<li><a class="reference internal" href="#">Welcome to Varnish's documentation!</a><ul> </ul> </li> <li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li> @@ -122,7 +122,7 @@ <li class="right" > <a href="installation/index.html" title="Varnish Installation" >next</a> |</li> - <li><a href="#">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="#">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/installation/bugs.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Reporting bugs — Varnish version 3.0.1 documentation</title> + <title>Reporting bugs — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Varnish Installation" href="index.html" /> <link rel="next" title="Upgrading from Varnish 2.1 to 3.0" href="upgrade.html" /> <link rel="prev" title="Getting hold of us" href="help.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="help.html" title="Getting hold of us" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Varnish Installation</a> »</li> </ul> </div> @@ -55,15 +55,15 @@ <p>Varnish can be a tricky beast to debug, having potentially thousands of threads crowding into a few data structures makes for <em>interesting</em> core dumps.</p> -<p>Actually, let me rephrase that without irony: You tire of the “no, -not thread 438 either, lets look at 439 then...” routine really fast.</p> +<p>Actually, let me rephrase that without irony: You tire of the "no, +not thread 438 either, lets look at 439 then..." routine really fast.</p> <p>So if you run into a bug, it is important that you spend a little bit of time collecting the right information, to help us fix the bug.</p> <p>The most valuable information you can give us, is <strong>always</strong> how to trigger and reproduce the problem. If you can tell us that, we rarely need anything else to solve it. The caveat being, that we do not have a way to simulate high levels of real-life web-traffic, -so telling us to “have 10.000 clients hit at once” does not really +so telling us to "have 10.000 clients hit at once" does not really allow us to reproduce.</p> <p>Roughly we have three clases of bugs with Varnish, and the information we need to debug them depends on the kind of bug.</p> @@ -104,20 +104,20 @@ <p>There will be a lot more information than this, and before sending it all to us, you should obscure any sensitive/secret data/cookies/passwords/ip# etc. Please make sure to keep context -when you do so, ie: do not change all the IP# to “X.X.X.X”, but +when you do so, ie: do not change all the IP# to "X.X.X.X", but change each IP# to something unique, otherwise we are likely to be more confused than informed.</p> -<p>The most important line is the “Panic Message”, which comes in two +<p>The most important line is the "Panic Message", which comes in two general forms:</p> <dl class="docutils"> -<dt>“Missing errorhandling code in ...”</dt> +<dt>"Missing errorhandling code in ..."</dt> <dd><p class="first">This is a place where we can conceive ending up, and have not (yet) written the padded-box error handling code for.</p> <p>The most likely cause here, is that you need a larger workspace for HTTP headers and Cookies. (XXX: which params to tweak)</p> <p class="last">Please try that before reporting a bug.</p> </dd> -<dt>“Assert error in ...”</dt> +<dt>"Assert error in ..."</dt> <dd>This is something bad that should never happen, and a bug report is almost certainly in order. As always, if in doubt ask us on IRC before opening the ticket.</dd> @@ -133,12 +133,12 @@ <div class="section" id="varnish-goes-on-vacation"> <h2>Varnish goes on vacation<a class="headerlink" href="#varnish-goes-on-vacation" title="Permalink to this headline">¶</a></h2> <p>This kind of bug is nasty to debug, because usually people tend to -kill the process and send us an email saying “Varnish hung, I -restarted it” which gives us only about 1.01 bit of usable debug +kill the process and send us an email saying "Varnish hung, I +restarted it" which gives us only about 1.01 bit of usable debug information to work with.</p> <p>What we need here is all the information can you squeeze out of your operating system <strong>before</strong> you kill the Varnish process.</p> -<p>One of the most valuable bits of information, is if all Varnish’ +<p>One of the most valuable bits of information, is if all Varnish' threads are waiting for something or if one of them is spinning furiously on some futile condition.</p> <p>Commands like <tt class="docutils literal"><span class="pre">top</span> <span class="pre">-H</span></tt> or <tt class="docutils literal"><span class="pre">ps</span> <span class="pre">-Haxlw</span></tt> or <tt class="docutils literal"><span class="pre">ps</span> <span class="pre">-efH</span></tt> should be @@ -226,7 +226,7 @@ <li class="right" > <a href="help.html" title="Getting hold of us" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Varnish Installation</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/installation/help.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Getting hold of us — Varnish version 3.0.1 documentation</title> + <title>Getting hold of us — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Varnish Installation" href="index.html" /> <link rel="next" title="Reporting bugs" href="bugs.html" /> <link rel="prev" title="Installing Varnish" href="install.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="install.html" title="Installing Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Varnish Installation</a> »</li> </ul> </div> @@ -57,7 +57,7 @@ this process as much as possible.</p> <p>But before you grab hold of us, spend a moment composing your thoughts and formulate your question, there is nothing as pointless as simply telling -us “Varnish does not work for me” with no further information to give +us "Varnish does not work for me" with no further information to give any clue to why.</p> <p>And before you even do that, do a couple of searches to see if your question is already answered, if it has been, you will get your answer @@ -73,7 +73,7 @@ to paste log files, VCL and so on, please use a <a class="reference external" href="http://gist.github.com/">pastebin</a>.</p> <p>If the channel is all quiet, try again some time later, we do have lives, families and jobs to deal with also.</p> -<p>You are more than welcome to just hang out, and while we don’t mind +<p>You are more than welcome to just hang out, and while we don't mind the occational intrusion of the real world into the flow, keep it mostly on topic, and dont paste random links unless they are <em>really</em> spectacular and intelligent.</p> @@ -108,7 +108,7 @@ <p>The reason for this policy, is to avoid the bugs being drowned in a pile of sensible suggestions for future enhancements and call for help from people who forget to check back if they get it and so on.</p> -<p>We track suggestions and ideas in our <a class="reference external" href="http://varnish-cache.org/wiki/PostTwoShoppingList">“Shopping-List” wiki page</a>, and user +<p>We track suggestions and ideas in our <a class="reference external" href="http://varnish-cache.org/wiki/PostTwoShoppingList">"Shopping-List" wiki page</a>, and user support via email and IRC.</p> </div> <div class="section" id="commercial-support"> @@ -179,7 +179,7 @@ <li class="right" > <a href="install.html" title="Installing Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Varnish Installation</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/installation/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Varnish Installation — Varnish version 3.0.1 documentation</title> + <title>Varnish Installation — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,9 +22,9 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="next" title="Prerequisites" href="prerequisites.html" /> - <link rel="prev" title="Welcome to Varnish’s documentation!" href="../index.html" /> + <link rel="prev" title="Welcome to Varnish's documentation!" href="../index.html" /> </head> <body> <div class="related"> @@ -37,9 +37,9 @@ <a href="prerequisites.html" title="Prerequisites" accesskey="N">next</a> |</li> <li class="right" > - <a href="../index.html" title="Welcome to Varnish’s documentation!" + <a href="../index.html" title="Welcome to Varnish's documentation!" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -88,6 +88,7 @@ <li class="toctree-l1"><a class="reference internal" href="upgrade.html">Upgrading from Varnish 2.1 to 3.0</a><ul> <li class="toctree-l2"><a class="reference internal" href="upgrade.html#changes-to-vcl">Changes to VCL</a><ul> <li class="toctree-l3"><a class="reference internal" href="upgrade.html#string-concatenation-operator">string concatenation operator</a></li> +<li class="toctree-l3"><a class="reference internal" href="upgrade.html#no-more-escapes-in-strings">no more %-escapes in strings</a></li> <li class="toctree-l3"><a class="reference internal" href="upgrade.html#log-moved-to-the-std-vmod"><tt class="docutils literal"><span class="pre">log</span></tt> moved to the std vmod</a></li> <li class="toctree-l3"><a class="reference internal" href="upgrade.html#purges-are-now-called-bans">purges are now called bans</a></li> <li class="toctree-l3"><a class="reference internal" href="upgrade.html#beresp-cacheable-is-gone"><tt class="docutils literal"><span class="pre">beresp.cacheable</span></tt> is gone</a></li> @@ -112,7 +113,7 @@ <div class="sphinxsidebarwrapper"> <h4>Previous topic</h4> <p class="topless"><a href="../index.html" - title="previous chapter">Welcome to Varnish’s documentation!</a></p> + title="previous chapter">Welcome to Varnish's documentation!</a></p> <h4>Next topic</h4> <p class="topless"><a href="prerequisites.html" title="next chapter">Prerequisites</a></p> @@ -148,9 +149,9 @@ <a href="prerequisites.html" title="Prerequisites" >next</a> |</li> <li class="right" > - <a href="../index.html" title="Welcome to Varnish’s documentation!" + <a href="../index.html" title="Welcome to Varnish's documentation!" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/installation/install.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Installing Varnish — Varnish version 3.0.1 documentation</title> + <title>Installing Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Varnish Installation" href="index.html" /> <link rel="next" title="Getting hold of us" href="help.html" /> <link rel="prev" title="Prerequisites" href="prerequisites.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="prerequisites.html" title="Prerequisites" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Varnish Installation</a> »</li> </ul> </div> @@ -54,7 +54,7 @@ <span id="install-doc"></span><h1>Installing Varnish<a class="headerlink" href="#installing-varnish" title="Permalink to this headline">¶</a></h1> <p>With open source software, you can choose to install binary packages or compile stuff from source-code. To install a package or compile -from source is a matter of personal taste. If you don’t know which +from source is a matter of personal taste. If you don't know which method too choose read the whole document and choose the method you are most comfortable with.</p> <div class="section" id="source-or-packages"> @@ -163,7 +163,7 @@ a cup of tea while it runs, it takes some minutes:</p> <div class="highlight-python"><pre>make check</pre> </div> -<p>Don’t worry of a single or two tests fail, some of the tests are a +<p>Don't worry of a single or two tests fail, some of the tests are a bit too timing sensitive (Please tell us which so we can fix it) but if a lot of them fails, and in particular if the <tt class="docutils literal"><span class="pre">b00000.vtc</span></tt> test fails, something is horribly wrong, and you will get nowhere without @@ -246,7 +246,7 @@ <li class="right" > <a href="prerequisites.html" title="Prerequisites" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Varnish Installation</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/installation/prerequisites.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Prerequisites — Varnish version 3.0.1 documentation</title> + <title>Prerequisites — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Varnish Installation" href="index.html" /> <link rel="next" title="Installing Varnish" href="install.html" /> <link rel="prev" title="Varnish Installation" href="index.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="index.html" title="Varnish Installation" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Varnish Installation</a> »</li> </ul> </div> @@ -121,7 +121,7 @@ <li class="right" > <a href="index.html" title="Varnish Installation" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Varnish Installation</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/installation/upgrade.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Upgrading from Varnish 2.1 to 3.0 — Varnish version 3.0.1 documentation</title> + <title>Upgrading from Varnish 2.1 to 3.0 — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Varnish Installation" href="index.html" /> <link rel="next" title="Using Varnish" href="../tutorial/index.html" /> <link rel="prev" title="Reporting bugs" href="bugs.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="bugs.html" title="Reporting bugs" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Varnish Installation</a> »</li> </ul> </div> @@ -60,53 +60,47 @@ <h3>string concatenation operator<a class="headerlink" href="#string-concatenation-operator" title="Permalink to this headline">¶</a></h3> <p>String concatenation did not have an operator previously, but this has now been changed to <tt class="docutils literal"><span class="pre">+</span></tt>.</p> </div> +<div class="section" id="no-more-escapes-in-strings"> +<h3>no more %-escapes in strings<a class="headerlink" href="#no-more-escapes-in-strings" title="Permalink to this headline">¶</a></h3> +<p>To simplify strings, the %-encoding has been removed. If you need non-printable characters, you need to use inline C.</p> +</div> <div class="section" id="log-moved-to-the-std-vmod"> <h3><tt class="docutils literal"><span class="pre">log</span></tt> moved to the std vmod<a class="headerlink" href="#log-moved-to-the-std-vmod" title="Permalink to this headline">¶</a></h3> <p><tt class="docutils literal"><span class="pre">log</span></tt> has moved to the std vmod:</p> -<blockquote> -<div>log “log something”;</div></blockquote> -<p>becomes</p> -<blockquote> -<div>import std; -std.log(“log something”);</div></blockquote> +<div class="highlight-python"><pre>log "log something";</pre> +</div> +<p>becomes:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">std</span><span class="p">;</span> +<span class="n">std</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="s">"log something"</span><span class="p">);</span> +</pre></div> +</div> <p>You only need to import std once.</p> </div> <div class="section" id="purges-are-now-called-bans"> <h3>purges are now called bans<a class="headerlink" href="#purges-are-now-called-bans" title="Permalink to this headline">¶</a></h3> <p><tt class="docutils literal"><span class="pre">purge()</span></tt> and <tt class="docutils literal"><span class="pre">purge_url()</span></tt> are now respectively <tt class="docutils literal"><span class="pre">ban()</span></tt> and <tt class="docutils literal"><span class="pre">ban_url()</span></tt>, so you should replace all occurences:</p> -<blockquote> -<div>purge(“req.url = ” req.url);</div></blockquote> -<p>becomes</p> -<blockquote> -<div>ban(“req.url = ” + req.url);</div></blockquote> -<p><tt class="docutils literal"><span class="pre">purge</span></tt> does not take any arguments anymore, but can be used in vcl_hit or vcl_miss to purge the item from the cache, where you would reduce ttl to 0 in Varnish 2.1.</p> -<blockquote> -<div><dl class="docutils"> -<dt>sub vcl_hit {</dt> -<dd><dl class="first docutils"> -<dt>if (req.request == “PURGE”) {</dt> -<dd>set obj.ttl = 0s; -error 200 “Purged.”;</dd> -</dl> -<p class="last">}</p> -</dd> -</dl> -<p>}</p> -</div></blockquote> -<p>becomes</p> -<blockquote> -<div><dl class="docutils"> -<dt>sub vcl_hit {</dt> -<dd><dl class="first docutils"> -<dt>if (req.request == “PURGE”) {</dt> -<dd>purge; -error 200 “Purged.”;</dd> -</dl> -<p class="last">}</p> -</dd> -</dl> -<p>}</p> -</div></blockquote> +<div class="highlight-python"><pre>purge("req.url = " req.url);</pre> +</div> +<p>becomes:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">ban</span><span class="p">(</span><span class="s">"req.url = "</span> <span class="o">+</span> <span class="n">req</span><span class="o">.</span><span class="n">url</span><span class="p">);</span> +</pre></div> +</div> +<p><tt class="docutils literal"><span class="pre">purge</span></tt> does not take any arguments anymore, but can be used in vcl_hit or vcl_miss to purge the item from the cache, where you would reduce ttl to 0 in Varnish 2.1:</p> +<div class="highlight-python"><pre>sub vcl_hit { + if (req.request == "PURGE") { + set obj.ttl = 0s; + error 200 "Purged."; + } +}</pre> +</div> +<p>becomes:</p> +<div class="highlight-python"><pre>sub vcl_hit { + if (req.request == "PURGE") { + purge; + error 200 "Purged."; + } +}</pre> +</div> </div> <div class="section" id="beresp-cacheable-is-gone"> <h3><tt class="docutils literal"><span class="pre">beresp.cacheable</span></tt> is gone<a class="headerlink" href="#beresp-cacheable-is-gone" title="Permalink to this headline">¶</a></h3> @@ -114,40 +108,36 @@ </div> <div class="section" id="returns-are-now-done-with-the-return-function"> <h3>returns are now done with the <tt class="docutils literal"><span class="pre">return()</span></tt> function<a class="headerlink" href="#returns-are-now-done-with-the-return-function" title="Permalink to this headline">¶</a></h3> -<p><tt class="docutils literal"><span class="pre">pass</span></tt>, <tt class="docutils literal"><span class="pre">pipe</span></tt>, <tt class="docutils literal"><span class="pre">lookup</span></tt>, <tt class="docutils literal"><span class="pre">deliver</span></tt>, <tt class="docutils literal"><span class="pre">fetch</span></tt>, <tt class="docutils literal"><span class="pre">hash</span></tt>, <tt class="docutils literal"><span class="pre">pipe</span></tt> and <tt class="docutils literal"><span class="pre">restart</span></tt> are no longer keywords, but arguments to <tt class="docutils literal"><span class="pre">return()</span></tt>, so</p> -<blockquote> -<div><dl class="docutils"> -<dt>sub vcl_pass {</dt> -<dd>pass;</dd> -</dl> -<p>}</p> -</div></blockquote> -<p>becomes</p> -<blockquote> -<div><dl class="docutils"> -<dt>sub vcl_pass {</dt> -<dd>return(pass);</dd> -</dl> -<p>}</p> -</div></blockquote> +<p><tt class="docutils literal"><span class="pre">pass</span></tt>, <tt class="docutils literal"><span class="pre">pipe</span></tt>, <tt class="docutils literal"><span class="pre">lookup</span></tt>, <tt class="docutils literal"><span class="pre">deliver</span></tt>, <tt class="docutils literal"><span class="pre">fetch</span></tt>, <tt class="docutils literal"><span class="pre">hash</span></tt>, <tt class="docutils literal"><span class="pre">pipe</span></tt> and <tt class="docutils literal"><span class="pre">restart</span></tt> are no longer keywords, but arguments to <tt class="docutils literal"><span class="pre">return()</span></tt>, so:</p> +<div class="highlight-python"><pre>sub vcl_pass { + pass; +}</pre> +</div> +<p>becomes:</p> +<div class="highlight-python"><pre>sub vcl_pass { + return(pass); +}</pre> +</div> </div> <div class="section" id="req-hash-is-replaced-with-hash-data"> <h3><tt class="docutils literal"><span class="pre">req.hash</span></tt> is replaced with <tt class="docutils literal"><span class="pre">hash_data()</span></tt><a class="headerlink" href="#req-hash-is-replaced-with-hash-data" title="Permalink to this headline">¶</a></h3> -<p>You no longer append to the hash with <tt class="docutils literal"><span class="pre">+=</span></tt>, so</p> -<blockquote> -<div>set req.hash += req.url;</div></blockquote> -<p>becomes</p> -<blockquote> -<div>hash_data(req.url);</div></blockquote> +<p>You no longer append to the hash with <tt class="docutils literal"><span class="pre">+=</span></tt>, so:</p> +<div class="highlight-python"><pre>set req.hash += req.url;</pre> +</div> +<p>becomes:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">hash_data</span><span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">url</span><span class="p">);</span> +</pre></div> +</div> </div> <div class="section" id="esi-is-replaced-with-beresp-do-esi"> <h3><tt class="docutils literal"><span class="pre">esi</span></tt> is replaced with <tt class="docutils literal"><span class="pre">beresp.do_esi</span></tt><a class="headerlink" href="#esi-is-replaced-with-beresp-do-esi" title="Permalink to this headline">¶</a></h3> -<p>You no longer enable ESI with <tt class="docutils literal"><span class="pre">esi</span></tt>, so</p> -<blockquote> -<div>esi;</div></blockquote> -<p>in <tt class="docutils literal"><span class="pre">vcl_fetch</span></tt> becomes</p> -<blockquote> -<div>set beresp.do_esi = true;</div></blockquote> +<p>You no longer enable ESI with <tt class="docutils literal"><span class="pre">esi</span></tt>, so:</p> +<div class="highlight-python"><div class="highlight"><pre><span class="n">esi</span><span class="p">;</span> +</pre></div> +</div> +<p>in <tt class="docutils literal"><span class="pre">vcl_fetch</span></tt> becomes:</p> +<div class="highlight-python"><pre>set beresp.do_esi = true;</pre> +</div> </div> <div class="section" id="pass-in-vcl-fetch-renamed-to-hit-for-pass"> <h3><tt class="docutils literal"><span class="pre">pass</span></tt> in <tt class="docutils literal"><span class="pre">vcl_fetch</span></tt> renamed to <tt class="docutils literal"><span class="pre">hit_for_pass</span></tt><a class="headerlink" href="#pass-in-vcl-fetch-renamed-to-hit-for-pass" title="Permalink to this headline">¶</a></h3> @@ -175,6 +165,7 @@ <li><a class="reference internal" href="#">Upgrading from Varnish 2.1 to 3.0</a><ul> <li><a class="reference internal" href="#changes-to-vcl">Changes to VCL</a><ul> <li><a class="reference internal" href="#string-concatenation-operator">string concatenation operator</a></li> +<li><a class="reference internal" href="#no-more-escapes-in-strings">no more %-escapes in strings</a></li> <li><a class="reference internal" href="#log-moved-to-the-std-vmod"><tt class="docutils literal"><span class="pre">log</span></tt> moved to the std vmod</a></li> <li><a class="reference internal" href="#purges-are-now-called-bans">purges are now called bans</a></li> <li><a class="reference internal" href="#beresp-cacheable-is-gone"><tt class="docutils literal"><span class="pre">beresp.cacheable</span></tt> is gone</a></li> @@ -229,7 +220,7 @@ <li class="right" > <a href="bugs.html" title="Reporting bugs" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Varnish Installation</a> »</li> </ul> </div> | ||
Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/objects.inv ^ | |
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/autocrap.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Did you call them autocrap tools ? — Varnish version 3.0.1 documentation</title> + <title>Did you call them autocrap tools ? — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="Why Sphinx and reStructuredText ?" href="sphinx.html" /> <link rel="prev" title="What were they thinking ?" href="thoughts.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="thoughts.html" title="What were they thinking ?" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -54,11 +54,11 @@ <span id="phk-autocrap"></span><h1>Did you call them <em>autocrap</em> tools ?<a class="headerlink" href="#did-you-call-them-autocrap-tools" title="Permalink to this headline">¶</a></h1> <p>Yes, in fact I did, because they are the worst possible non-solution to a self-inflicted problem.</p> -<p>Back in the 1980’ies, the numerous mini- and micro-computer companies +<p>Back in the 1980'ies, the numerous mini- and micro-computer companies all jumped on the UNIX band-wagon, because it gave them an operating -system for their hardware, but they also tried to “distinguish” themselves -from the competitors, by “adding value”.</p> -<p>That “value” was incompatibility.</p> +system for their hardware, but they also tried to "distinguish" themselves +from the competitors, by "adding value".</p> +<p>That "value" was incompatibility.</p> <p>You never knew where they put stuff, what arguments the compiler needed to behave sensibly, or for that matter, if there were a compiler to begin with.</p> @@ -70,7 +70,7 @@ the day.</p> <p>Then some even more deranged imagination, came up with the idea of writing a script for writing configure scripts, and in an amazing -and daring attempt at the “all time most deranged” crown, used an +and daring attempt at the "all time most deranged" crown, used an obscure and insufferable macro-processor called <tt class="docutils literal"><span class="pre">m4</span></tt> for the implementation.</p> <p>Now, as it transpires, writing the specification for the configure @@ -82,7 +82,7 @@ <p>But as it transpires, that is not the case. For one thing, all the autocrap tools add another layer of version-madness you need to get right before you can even think about compiling the source code.</p> -<p>Second, it doesn’t actually work, you still have to do the hard work +<p>Second, it doesn't actually work, you still have to do the hard work and figure out the right way to explain to the autocrap tools what you are trying to do and how to do it, only you have to do so in a language which is used to produce M4 macro invocations etc. etc.</p> @@ -155,7 +155,7 @@ <li class="right" > <a href="thoughts.html" title="What were they thinking ?" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/backends.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>What do you mean by ‘backend’ ? — Varnish version 3.0.1 documentation</title> + <title>What do you mean by 'backend' ? — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="Picking platforms" href="platforms.html" /> <link rel="prev" title="IPv6 Suckage" href="ipv6suckage.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="ipv6suckage.html" title="IPv6 Suckage" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -51,23 +51,23 @@ <div class="body"> <div class="section" id="what-do-you-mean-by-backend"> -<span id="phk-backends"></span><h1>What do you mean by ‘backend’ ?<a class="headerlink" href="#what-do-you-mean-by-backend" title="Permalink to this headline">¶</a></h1> +<span id="phk-backends"></span><h1>What do you mean by 'backend' ?<a class="headerlink" href="#what-do-you-mean-by-backend" title="Permalink to this headline">¶</a></h1> <p>Given that we are approaching Varnish 3.0, you would think I had this question answered conclusively long time ago, but once you try to be efficient, things get hairy fast.</p> <p>One of the features of Varnish we are very fundamental about, is the -ability to have multiple VCL’s loaded at the same time, and to switch +ability to have multiple VCL's loaded at the same time, and to switch between them instantly and seamlessly.</p> <p>So Imagine you have 1000 backends in your VCL, not an unreasonable number, each configured with health-polling.</p> <p>Now you fiddle your vcl_recv{} a bit and load the VCL again, but since you are not sure which is the best way to do it, you keep -both VCL’s loaded so you can switch forth and back seamlessly.</p> +both VCL's loaded so you can switch forth and back seamlessly.</p> <p>To switch seamlessly, the health status of each backend needs to be up to date the instant we switch to the other VCL.</p> <p>This basically means that either all VCLs poll all their backends, or they must share, somehow.</p> -<p>We can dismiss the all VCL’s poll all their backends scenario, +<p>We can dismiss the all VCL's poll all their backends scenario, because it scales truly horribly, and would pummel backends with probes if people forget to vcl.discard their old dusty VCLs.</p> <div class="section" id="share-and-enjoy"> @@ -84,7 +84,7 @@ backends.</p> <p>The most obvious thing to do, is to use the VCL name of the backend as identifier, but that is not enough. We can have two different -VCL’s where backend “b1” points at two different physical machines, +VCL's where backend "b1" points at two different physical machines, for instance when we migrate or upgrade the backend.</p> <dl class="docutils"> <dt>The identity of the state than can be shared is therefore the triplet:</dt> @@ -151,7 +151,7 @@ <div class="sphinxsidebarwrapper"> <h3><a href="../index.html">Table Of Contents</a></h3> <ul> -<li><a class="reference internal" href="#">What do you mean by ‘backend’ ?</a><ul> +<li><a class="reference internal" href="#">What do you mean by 'backend' ?</a><ul> <li><a class="reference internal" href="#share-and-enjoy">Share And Enjoy</a></li> <li><a class="reference internal" href="#no-information-without-representation">No Information without Representation</a></li> <li><a class="reference internal" href="#sharing-health-status">Sharing Health Status</a></li> @@ -200,7 +200,7 @@ <li class="right" > <a href="ipv6suckage.html" title="IPv6 Suckage" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/barriers.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Security barriers in Varnish — Varnish version 3.0.1 documentation</title> + <title>Security barriers in Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="What were they thinking ?" href="thoughts.html" /> <link rel="prev" title="Picking platforms" href="platforms.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="platforms.html" title="Picking platforms" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -53,7 +53,7 @@ <div class="section" id="security-barriers-in-varnish"> <span id="phk-barriers"></span><h1>Security barriers in Varnish<a class="headerlink" href="#security-barriers-in-varnish" title="Permalink to this headline">¶</a></h1> <p>Security is a very important design driver in Varnish, more likely than not, -if you find yourself thinking “Why did he do _that_ ? the answer has to +if you find yourself thinking "Why did he do _that_ ? the answer has to do with security.</p> <p>The Varnish security model is based on some very crude but easy to understand barriers between the various components:</p> @@ -92,20 +92,20 @@ <p>(ASCII-ART rules!)</p> <div class="section" id="the-really-important-barrier"> <h2>The really Important Barrier<a class="headerlink" href="#the-really-important-barrier" title="Permalink to this headline">¶</a></h2> -<p>The central actor in Varnish is the Manager process, “MGR”, which is the -process the administrator “(ADMIN)” starts to get web-cache service.</p> -<p>Having been there myself, I do not subscribe to the “I feel cool and important -when I get woken up at 3AM to restart a dead process” school of thought, in +<p>The central actor in Varnish is the Manager process, "MGR", which is the +process the administrator "(ADMIN)" starts to get web-cache service.</p> +<p>Having been there myself, I do not subscribe to the "I feel cool and important +when I get woken up at 3AM to restart a dead process" school of thought, in fact, I think that is a clear sign of mindless stupidity: If we cannot get a computer to restart a dead process, why do we even have them ?</p> <p>The task of the Manager process is therefore not cache web content, but to make sure there always is a process which does that, the -Child “CLD” process.</p> +Child "CLD" process.</p> <p>That is the major barrier in Varnish: All management happens in one process all actual movement of traffic happens in another, and the Manager process does not trust the Child process at all.</p> <p>The Child process is in a the totally unprotected domain: Any -computer on the InterNet “(ANON)” can connect to the Child process +computer on the InterNet "(ANON)" can connect to the Child process and ask for some web-object.</p> <p>If John D. Criminal manages to exploit a security hole in Varnish, it is the Child process he subverts. If he carries out a DoS attack, it is @@ -115,32 +115,32 @@ so on.</p> <p>There are only three channels of communication back to the Manager process: An exit code, a CLI response or writing stuff into the -shared memory file “VSM” used for statistics and logging, all of +shared memory file "VSM" used for statistics and logging, all of these are well defended by the Manager process.</p> </div> <div class="section" id="the-admin-oper-barrier"> <h2>The Admin/Oper Barrier<a class="headerlink" href="#the-admin-oper-barrier" title="Permalink to this headline">¶</a></h2> <p>If you look at the top left corner of the diagram, you will see that Varnish -operates with separate Administrator “(ADMIN)” and Operator “(OPER)” roles.</p> +operates with separate Administrator "(ADMIN)" and Operator "(OPER)" roles.</p> <p>The Administrator does things, changes stuff etc. The Operator keeps an eye on things to make sure they are as they should be.</p> <p>These days Operators are often scripts and data collection tools, and there is no reason to assume they are bugfree, so Varnish does not trust the Operator role, that is a pure one-way relationship.</p> -<p>(Trick: If the Child process us run under user “nobody”, you can -allow marginally trusted operations personel access to the “nobody” +<p>(Trick: If the Child process us run under user "nobody", you can +allow marginally trusted operations personel access to the "nobody" account (for instance using .ssh/authorized_keys2), and they will be able to kill the Child process, prompting the Manager process to restart it again with the same parameters and settings.)</p> <p>The Administrator has the final say, and of course, the administrator can decide under which circumstances that authority will be shared.</p> <p>Needless to say, if the system on which Varnish runs is not properly -secured, the Administrator’s monopoly of control will be compromised.</p> +secured, the Administrator's monopoly of control will be compromised.</p> </div> <div class="section" id="all-the-other-barriers"> <h2>All the other barriers<a class="headerlink" href="#all-the-other-barriers" title="Permalink to this headline">¶</a></h2> <p>There are more barriers, you can spot them by following the arrows in -the diagram, but they are more sort of “technical” than “political” and +the diagram, but they are more sort of "technical" than "political" and generally try to guard against programming flaws as much as security compromise.</p> <p>For instance the VCC compiler runs in a separate child process, to make @@ -208,7 +208,7 @@ <li class="right" > <a href="platforms.html" title="Picking platforms" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/gzip.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>How GZIP, and GZIP+ESI works in Varnish — Varnish version 3.0.1 documentation</title> + <title>How GZIP, and GZIP+ESI works in Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="VCL Expressions" href="vcl_expr.html" /> <link rel="prev" title="Why no SSL ?" href="ssl.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="ssl.html" title="Why no SSL ?" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -56,15 +56,15 @@ parameter:</p> <blockquote> <div>http_gzip_support</div></blockquote> -<p>Which defaults to “on” if you do not want Varnish to try to be smart -about compression, set it to “off” instead.</p> +<p>Which defaults to "on" if you do not want Varnish to try to be smart +about compression, set it to "off" instead.</p> <div class="section" id="what-does-http-gzip-support-do"> <h2>What does http_gzip_support do<a class="headerlink" href="#what-does-http-gzip-support-do" title="Permalink to this headline">¶</a></h2> -<p>A request which is sent into ‘pipe’ or ‘pass’ mode from vcl_recv{} +<p>A request which is sent into 'pipe' or 'pass' mode from vcl_recv{} will not experience any difference, this processing only affects cache hit/miss requests.</p> -<p>Unless vcl_recv{} results in “pipe” or “pass”, we determine if the -client is capable of receiving gzip’ed content. The test amounts to:</p> +<p>Unless vcl_recv{} results in "pipe" or "pass", we determine if the +client is capable of receiving gzip'ed content. The test amounts to:</p> <blockquote> <div>Is there a Accept-Encoding header that mentions gzip, and if is has a q=# number, is it larger than zero.</div></blockquote> @@ -74,8 +74,8 @@ <p>And clients which do not support gzip gets their Accept-Encoding header removed. This ensures conformity with respect to creating Vary: strings during object creation.</p> -<p>During lookup, we ignore any “Accept-encoding” in objects Vary: strings, -to avoid having a gzip and gunzip’ed version of the object, varnish +<p>During lookup, we ignore any "Accept-encoding" in objects Vary: strings, +to avoid having a gzip and gunzip'ed version of the object, varnish can gunzip on demand. (We implement this bit of magic at lookup time, so that any objects stored in persistent storage can be used with or without gzip support enabled.)</p> @@ -86,35 +86,35 @@ <blockquote> <div>Accept-Encoding: gzip</div></blockquote> <p>Even if this particular client does not support</p> -<p>To always entice the backend into sending us gzip’ed content.</p> +<p>To always entice the backend into sending us gzip'ed content.</p> <p>Varnish will not gzip any content on its own (but see below), we trust -the backend to know what content can be sensibly gzip’ed (html) and what +the backend to know what content can be sensibly gzip'ed (html) and what can not (jpeg)</p> -<p>If in vcl_fetch{} we find out that we are trying to deliver a gzip’ed object +<p>If in vcl_fetch{} we find out that we are trying to deliver a gzip'ed object to a client that has not indicated willingness to receive gzip, we will ungzip the object during deliver.</p> </div> <div class="section" id="tuning-tweaking-and-frobbing"> <h2>Tuning, tweaking and frobbing<a class="headerlink" href="#tuning-tweaking-and-frobbing" title="Permalink to this headline">¶</a></h2> -<p>In vcl_recv{} you have a chance to modify the client’s +<p>In vcl_recv{} you have a chance to modify the client's Accept-Encoding: header before anything else happens.</p> <p>In vcl_pass{} the clients Accept-Encoding header is copied to the backend request unchanged. Even if the client does not support gzip, you can force the A-C header -to “gzip” to save bandwidth between the backend and varnish, varnish will +to "gzip" to save bandwidth between the backend and varnish, varnish will gunzip the object before delivering to the client.</p> -<p>In vcl_miss{} you can remove the “Accept-Encoding: gzip” header, if you +<p>In vcl_miss{} you can remove the "Accept-Encoding: gzip" header, if you do not want the backend to gzip this object.</p> <p>In vcl_fetch{} two new variables allow you to modify the gzip-ness of objects during fetch:</p> <blockquote> <div>set beresp.do_gunzip = true;</div></blockquote> -<p>Will make varnish gunzip an already gzip’ed object from the backend during +<p>Will make varnish gunzip an already gzip'ed object from the backend during fetch. (I have no idea why/when you would use this...)</p> <blockquote> <div>set beresp.do_gzip = true;</div></blockquote> <p>Will make varnish gzip the object during fetch from the backend, provided -the backend didn’t send us a gzip’ed object.</p> +the backend didn't send us a gzip'ed object.</p> <p>Remember that a lot of content types cannot sensibly be gziped, most notably compressed image formats like jpeg, png and similar, so a typical use would be:</p> @@ -135,31 +135,31 @@ <p>In theory, and hopefully in practice, all you read above should apply also when you enable ESI, if not it is a bug you should report.</p> <p>But things are vastly more complicated now. What happens for -instance, when the backend sends a gzip’ed object we ESI process -it and it includes another object which is not gzip’ed, and we want +instance, when the backend sends a gzip'ed object we ESI process +it and it includes another object which is not gzip'ed, and we want to send the result gziped to the client ?</p> <p>Things can get really hairy here, so let me explain it in stages.</p> <p>Assume we have a ungzipped object we want to ESI process.</p> <p>The ESI parser will run through the object looking for the various -magic strings and produce a byte-stream we call the “VEC” for Varnish +magic strings and produce a byte-stream we call the "VEC" for Varnish ESI Codes.</p> -<p>The VEC contains instructions like “skip 234 bytes”, “deliver 12919 bytes”, -“include /foobar”, “deliver 122 bytes” etc and it is stored with the +<p>The VEC contains instructions like "skip 234 bytes", "deliver 12919 bytes", +"include /foobar", "deliver 122 bytes" etc and it is stored with the object.</p> <p>When we deliver an object, and it has a VEC, special esi-delivery code interprets the VEC string and sends the output to the client as ordered.</p> -<p>When the VEC says “include /foobar” we do what amounts to a restart with +<p>When the VEC says "include /foobar" we do what amounts to a restart with the new URL and possibly Host: header, and call vcl_recv{} etc. You -can tell that you are in an ESI include by examining the ‘req.esi_level’ +can tell that you are in an ESI include by examining the 'req.esi_level' variable in VCL.</p> -<p>The ESI-parsed object is stored gzip’ed under the same conditions as -above: If the backend sends gzip’ed and VCL did not ask for do_gunzip, -or if the backend sends ungzip’ed and VCL asked for do_gzip.</p> +<p>The ESI-parsed object is stored gzip'ed under the same conditions as +above: If the backend sends gzip'ed and VCL did not ask for do_gunzip, +or if the backend sends ungzip'ed and VCL asked for do_gzip.</p> <p>Please note that since we need to insert flush and reset points in the gzip file, it will be slightly larger than a normal gzip file of the same object.</p> -<p>When we encounter gzip’ed include objects which should not be, we -gunzip them, but when we encounter gunzip’ed objects which should +<p>When we encounter gzip'ed include objects which should not be, we +gunzip them, but when we encounter gunzip'ed objects which should be, we gzip them, but only at compression level zero.</p> <p>So in order to avoid unnecessary work, and in order to get maximum compression efficiency, you should:</p> @@ -239,7 +239,7 @@ <li class="right" > <a href="ssl.html" title="Why no SSL ?" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Poul-Hennings random outbursts — Varnish version 3.0.1 documentation</title> + <title>Poul-Hennings random outbursts — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="next" title="Thoughts on the eve of Varnish 3.0" href="three-zero.html" /> <link rel="prev" title="Logging" href="../faq/logging.html" /> </head> @@ -39,7 +39,7 @@ <li class="right" > <a href="../faq/logging.html" title="Logging" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -63,7 +63,7 @@ </li> <li class="toctree-l1"><a class="reference internal" href="vcl_expr.html">VCL Expressions</a></li> <li class="toctree-l1"><a class="reference internal" href="ipv6suckage.html">IPv6 Suckage</a></li> -<li class="toctree-l1"><a class="reference internal" href="backends.html">What do you mean by ‘backend’ ?</a><ul> +<li class="toctree-l1"><a class="reference internal" href="backends.html">What do you mean by 'backend' ?</a><ul> <li class="toctree-l2"><a class="reference internal" href="backends.html#share-and-enjoy">Share And Enjoy</a></li> <li class="toctree-l2"><a class="reference internal" href="backends.html#no-information-without-representation">No Information without Representation</a></li> <li class="toctree-l2"><a class="reference internal" href="backends.html#sharing-health-status">Sharing Health Status</a></li> @@ -136,7 +136,7 @@ <li class="right" > <a href="../faq/logging.html" title="Logging" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/ipv6suckage.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>IPv6 Suckage — Varnish version 3.0.1 documentation</title> + <title>IPv6 Suckage — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,9 +22,9 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> - <link rel="next" title="What do you mean by ‘backend’ ?" href="backends.html" /> + <link rel="next" title="What do you mean by 'backend' ?" href="backends.html" /> <link rel="prev" title="VCL Expressions" href="vcl_expr.html" /> </head> <body> @@ -35,12 +35,12 @@ <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > - <a href="backends.html" title="What do you mean by ‘backend’ ?" + <a href="backends.html" title="What do you mean by 'backend' ?" accesskey="N">next</a> |</li> <li class="right" > <a href="vcl_expr.html" title="VCL Expressions" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -53,15 +53,15 @@ <div class="section" id="ipv6-suckage"> <span id="phk-ipv6suckage"></span><h1>IPv6 Suckage<a class="headerlink" href="#ipv6-suckage" title="Permalink to this headline">¶</a></h1> <p>In my drawer full of cassette tapes, is a 6 tape collection published -by Carl Malamuds “Internet Talk Radio”, the first and by far the +by Carl Malamuds "Internet Talk Radio", the first and by far the geekiest radio station on the internet.</p> -<p>The tapes are from 1994 and the topic is “IPng”, the IPv4 replacement +<p>The tapes are from 1994 and the topic is "IPng", the IPv4 replacement that eventually became IPv6. To say that I am a bit jaded about IPv6 by now, is accusing the pope of being religious.</p> <p>IPv4 addresses in numeric form, are written as 192.168.0.1 and to not confuse IPv6 with IPv4, it was decided in RFC1884 that IPv6 would use colons and groups of 16 bits, and because 128 bits are a -lot of bits, the secret ‘::’ trick was introduced, to supress all +lot of bits, the secret '::' trick was introduced, to supress all the zero bits that we may not ever need anyway: 1080::8:800:200C:417A</p> <p>Colon was chosen because it was already used in MAC/ethernet addresses and did no damage there and it is not a troublesome metacharacter @@ -69,31 +69,31 @@ <p>Most protocols have a Well Known Service number, TELNET is 23, SSH is 22 and HTTP is 80 so usually people will only have to care about the IP number.</p> -<p>Except when they don’t, for instance when they run more than one +<p>Except when they don't, for instance when they run more than one webserver on the same machine.</p> <p>No worries, says the power that controls what URLs look like, we will just stick the port number after the IP# with a colon:</p> <blockquote> <div><a class="reference external" href="http://192.168.0.1:8080/">http://192.168.0.1:8080/</a>...</div></blockquote> <p>That obviously does not work with IPv6, so RFC3986 comes around and -says “darn, we didn’t think of that” and puts the IPV6 address in +says "darn, we didn't think of that" and puts the IPV6 address in [...] giving us:</p> <blockquote> <div><a class="reference external" href="http://[1080::8:800:200C:417A]:8080/">http://[1080::8:800:200C:417A]:8080/</a></div></blockquote> -<p>Remember that “harmless in shells” detail ? Yeah, sorry about that.</p> +<p>Remember that "harmless in shells" detail ? Yeah, sorry about that.</p> <p>Now, there are also a RFC sanctioned API for translating a socket address into an ascii string, getnameinfo(), and if you tell it that -you want a numeric return, you get a numeric return, and you don’t +you want a numeric return, you get a numeric return, and you don't even need to know if it is a IPv4 or IPv6 address in the first place.</p> <p>But it returns the IP# in one buffer and the port number in another, so if you want to format the sockaddr in the by RFC5952 recommended way (the same as RFC3986), you need to inspect the version field in the sockaddr to see if you should do</p> <blockquote> -<div>“%s:%s”, host, port</div></blockquote> +<div>"%s:%s", host, port</div></blockquote> <p>or</p> <blockquote> -<div>“[%s]:%s”, host, port</div></blockquote> +<div>"[%s]:%s", host, port</div></blockquote> <p>Careless standardization costs code, have I mentioned this before ?</p> <p>Varnish reports socket addresses as two fields: IP space PORT, now you know why.</p> @@ -112,7 +112,7 @@ title="previous chapter">VCL Expressions</a></p> <h4>Next topic</h4> <p class="topless"><a href="backends.html" - title="next chapter">What do you mean by ‘backend’ ?</a></p> + title="next chapter">What do you mean by 'backend' ?</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/phk/ipv6suckage.txt" @@ -142,12 +142,12 @@ <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > - <a href="backends.html" title="What do you mean by ‘backend’ ?" + <a href="backends.html" title="What do you mean by 'backend' ?" >next</a> |</li> <li class="right" > <a href="vcl_expr.html" title="VCL Expressions" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/platforms.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Picking platforms — Varnish version 3.0.1 documentation</title> + <title>Picking platforms — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,10 +22,10 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="Security barriers in Varnish" href="barriers.html" /> - <link rel="prev" title="What do you mean by ‘backend’ ?" href="backends.html" /> + <link rel="prev" title="What do you mean by 'backend' ?" href="backends.html" /> </head> <body> <div class="related"> @@ -38,9 +38,9 @@ <a href="barriers.html" title="Security barriers in Varnish" accesskey="N">next</a> |</li> <li class="right" > - <a href="backends.html" title="What do you mean by ‘backend’ ?" + <a href="backends.html" title="What do you mean by 'backend' ?" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -75,7 +75,7 @@ <h2>A - Platforms we care about<a class="headerlink" href="#a-platforms-we-care-about" title="Permalink to this headline">¶</a></h2> <p>We care about these platforms because our users use them and because they deliver a lot of bang for the buck with Varnish.</p> -<p>These platforms are in our “tinderbox” tests, we use them ourselves +<p>These platforms are in our "tinderbox" tests, we use them ourselves and they pass all regression tests all the time. Platform specific bug reports gets acted on.</p> <p><em>FreeBSD</em></p> @@ -83,7 +83,7 @@ <p>Obviously you can forget about running Varnish on your <a class="reference external" href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series">WRT54G</a> but if you have a real computer, you can expect Varnish to work -“ok or better” on any distro that has a package available.</p> +"ok or better" on any distro that has a package available.</p> </div> <div class="section" id="b-platforms-we-try-not-to-break"> <h2>B - Platforms we try not to break<a class="headerlink" href="#b-platforms-we-try-not-to-break" title="Permalink to this headline">¶</a></h2> @@ -95,7 +95,7 @@ Platform specific bug reports without patches will likely live a quiet life.</p> <p><em>Mac OS/X</em></p> <p><em>Solaris</em>.</p> -<p>Yes, we’d like to bump Solaris to tier-A but I have to say that the +<p>Yes, we'd like to bump Solaris to tier-A but I have to say that the uncertainty about the future for OpenSolaris, and lack of time to care and feed the somewhat altmodishe socket-API on Solaris, does keep the enthusiasm bounded.</p> @@ -109,11 +109,11 @@ <p>Do not file bug reports specific to these platforms without attaching a patch that solves the problem, we will just close it.</p> <p>For now, anything else goes here, certainly the N900 and the WRT54G.</p> -<p>I’m afraid I have to put OpenBSD here for now, it is seriously +<p>I'm afraid I have to put OpenBSD here for now, it is seriously behind on socket APIs and working around those issues is just not worth the effort.</p> <p>If people send us a small non-intrusive patches that makes Varnish -run on these platforms, we’ll take it.</p> +run on these platforms, we'll take it.</p> <p>If they send us patches that reorganizes everything, hurts code readability, quality or just generally do not satisfy our taste, they get told that thanks, but no thanks.</p> @@ -148,7 +148,7 @@ <h4>Previous topic</h4> <p class="topless"><a href="backends.html" - title="previous chapter">What do you mean by ‘backend’ ?</a></p> + title="previous chapter">What do you mean by 'backend' ?</a></p> <h4>Next topic</h4> <p class="topless"><a href="barriers.html" title="next chapter">Security barriers in Varnish</a></p> @@ -184,9 +184,9 @@ <a href="barriers.html" title="Security barriers in Varnish" >next</a> |</li> <li class="right" > - <a href="backends.html" title="What do you mean by ‘backend’ ?" + <a href="backends.html" title="What do you mean by 'backend' ?" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/sphinx.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Why Sphinx and reStructuredText ? — Varnish version 3.0.1 documentation</title> + <title>Why Sphinx and reStructuredText ? — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="Varnish Glossary" href="../glossary/index.html" /> <link rel="prev" title="Did you call them autocrap tools ?" href="autocrap.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="autocrap.html" title="Did you call them autocrap tools ?" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -53,22 +53,22 @@ <div class="section" id="why-sphinx-and-restructuredtext"> <span id="phk-sphinx"></span><h1>Why <a class="reference external" href="http://sphinx.pocoo.org/">Sphinx</a> and <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> ?<a class="headerlink" href="#why-sphinx-and-restructuredtext" title="Permalink to this headline">¶</a></h1> <p>The first school of thought on documentation, is the one we subscribe -to in Varnish right now: “Documentation schmocumentation...” It does +to in Varnish right now: "Documentation schmocumentation..." It does not work for anybody.</p> -<p>The second school is the “Write a {La}TeX document” school, where +<p>The second school is the "Write a {La}TeX document" school, where the documentation is seen as a stand alone product, which is produced independently. This works great for PDF output, and sucks royally for HTML and TXT output.</p> -<p>The third school is the “Literate programming” school, which abandons +<p>The third school is the "Literate programming" school, which abandons readability of <em>both</em> the program source code <em>and</em> the documentation source, which seems to be one of the best access protections one can put on the source code of either.</p> -<p>The fourth school is the “DoxyGen” school, which lets a program +<p>The fourth school is the "DoxyGen" school, which lets a program collect a mindless list of hyperlinked variable, procedure, class -and filenames, and call that “documentation”.</p> +and filenames, and call that "documentation".</p> <p>And the fifth school is anything that uses a fileformat that cannot be put into a version control system, because it is -binary and non-diff’able. It doesn’t matter if it is +binary and non-diff'able. It doesn't matter if it is OpenOffice, LyX or Word, a non-diffable doc source is a no go with programmers.</p> <p>Quite frankly, none of these works very well in practice.</p> @@ -96,7 +96,7 @@ Python project, as wrapped by the <a class="reference external" href="http://sphinx.pocoo.org/">Sphinx</a> project.</p> <p>Unless there is something I have totally failed to spot, that is going to be the new documentation platform in Varnish.</p> -<p>Take a peek at the Python docs, and try pressing the “show source” +<p>Take a peek at the Python docs, and try pressing the "show source" link at the bottom of the left menu:</p> <p>(link to random python doc page:)</p> <blockquote> @@ -156,7 +156,7 @@ <li class="right" > <a href="autocrap.html" title="Did you call them autocrap tools ?" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/ssl.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Why no SSL ? — Varnish version 3.0.1 documentation</title> + <title>Why no SSL ? — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="How GZIP, and GZIP+ESI works in Varnish" href="gzip.html" /> <link rel="prev" title="Thoughts on the eve of Varnish 3.0" href="three-zero.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="three-zero.html" title="Thoughts on the eve of Varnish 3.0" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -75,7 +75,7 @@ * I hope that tmp.dh is the only thing that may need to be cleared * when a handshake is not completed ... */</pre> </div> -<p>I hope they know what they are doing, but this comment doesn’t exactly +<p>I hope they know what they are doing, but this comment doesn't exactly carry that point home, does it ?</p> <p>But let us assume that a good SSL library can be found, what would Varnish do with it ?</p> @@ -98,8 +98,8 @@ including support for hardware crypto engines and the works.</p> <p>That is not one of the things I dreamt about doing as a kid and if I dream about it now I call it a nightmare.</p> -<p>So the balance sheet, as far as I can see it, lists “It would be -a bit easier to configure” on the plus side, and everything else +<p>So the balance sheet, as far as I can see it, lists "It would be +a bit easier to configure" on the plus side, and everything else piles up on the minus side, making it a huge waste of time and effort to even think about it..</p> <p>Poul-Henning, 2011-02-15</p> @@ -151,7 +151,7 @@ <li class="right" > <a href="three-zero.html" title="Thoughts on the eve of Varnish 3.0" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/thoughts.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>What were they thinking ? — Varnish version 3.0.1 documentation</title> + <title>What were they thinking ? — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="Did you call them autocrap tools ?" href="autocrap.html" /> <link rel="prev" title="Security barriers in Varnish" href="barriers.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="barriers.html" title="Security barriers in Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -66,8 +66,8 @@ for the reply, which would not be a career opportunity for The Assistant to The Assistant to The Deputy Viceminister of Northern Affairs.</p> -<p>And likely as not, the emperor absentmindedly grunted “Why don’t -you just build a wall to keep them out or something ?” probably +<p>And likely as not, the emperor absentmindedly grunted "Why don't +you just build a wall to keep them out or something ?" probably wondering about the competence of an administration, which could not figure out to build palisades around border villages without bothering him and causing a monument to the Peter Principle and @@ -123,7 +123,7 @@ <li class="right" > <a href="barriers.html" title="Security barriers in Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/three-zero.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Thoughts on the eve of Varnish 3.0 — Varnish version 3.0.1 documentation</title> + <title>Thoughts on the eve of Varnish 3.0 — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="Why no SSL ?" href="ssl.html" /> <link rel="prev" title="Poul-Hennings random outbursts" href="index.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="index.html" title="Poul-Hennings random outbursts" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -53,14 +53,14 @@ <div class="section" id="thoughts-on-the-eve-of-varnish-3-0"> <span id="phk-3-0"></span><h1>Thoughts on the eve of Varnish 3.0<a class="headerlink" href="#thoughts-on-the-eve-of-varnish-3-0" title="Permalink to this headline">¶</a></h1> <p>Five years ago, I was busy transforming my pile of random doddles -on 5mm squared paper into software, according to “git log” working +on 5mm squared paper into software, according to "git log" working on the first stevedores.</p> <p>In two weeks I will be attending the Varnish 3.0 release party in Oslo.</p> <p>Sometimes I feel that development of Varnish takes for ever and ever, and that it must be like watching paint dry for the users, but 3 major releases in 5 years is actually not too shabby come to think of it.</p> -<p>Varnish 3.0 “only” has two big new features, VMOD and GZIP, and a +<p>Varnish 3.0 "only" has two big new features, VMOD and GZIP, and a host of smaller changes, which you will notice if they are new features, and not notice if they are bug fixes.</p> <p>GZIP will probably be most important to the ESI users, and I wonder @@ -77,7 +77,7 @@ are already starting to pile up, and hopefully we can get that into a sensible shape 18 months from now, late 2012-ish.</p> <blockquote> -<div>“Life is what happens to you while you’re busy making other plans”</div></blockquote> +<div>"Life is what happens to you while you're busy making other plans"</div></blockquote> <p>said John Lennon, a famous murder victim from New York.</p> <p>I feel a similar irony in the way Varnish happened to me:</p> <p>My homepage is written in raw HTML using the vi(1) editor, runs on @@ -85,13 +85,13 @@ an Alexa rank just north of the 3.5 million mark. A normal server with Varnish could deliver all traffic my webserver has ever delivered, in less than a second.</p> -<p>But varnish-cache.org has Alexa rank around 30.000, “varnish cache” +<p>But varnish-cache.org has Alexa rank around 30.000, "varnish cache" shows a nice trend on Google and #varnish confuses the heck out of teenage girls and wood workers on Twitter, so clearly I am doing something right.</p> <p>I still worry about the <a class="reference external" href="http://www.theshadowbox.net/forum/index.php?topic=18041.0">The Fraud Police</a> though, -“I have no idea what I’m doing, and I totally make shit up as I go -along.” is a disturbingly precise summary of how I feel about my +"I have no idea what I'm doing, and I totally make shit up as I go +along." is a disturbingly precise summary of how I feel about my work in Varnish.</p> <p>The Varnish 3.0 release is therefore dedicated to all the kind Varnish developers and users, who have tested, reported bugs, @@ -147,7 +147,7 @@ <li class="right" > <a href="index.html" title="Poul-Hennings random outbursts" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/phk/vcl_expr.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>VCL Expressions — Varnish version 3.0.1 documentation</title> + <title>VCL Expressions — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Poul-Hennings random outbursts" href="index.html" /> <link rel="next" title="IPv6 Suckage" href="ipv6suckage.html" /> <link rel="prev" title="How GZIP, and GZIP+ESI works in Varnish" href="gzip.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="gzip.html" title="How GZIP, and GZIP+ESI works in Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Poul-Hennings random outbursts</a> »</li> </ul> </div> @@ -54,8 +54,8 @@ <span id="phk-vcl-expr"></span><h1>VCL Expressions<a class="headerlink" href="#vcl-expressions" title="Permalink to this headline">¶</a></h1> <p>I have been working on VCL expressions recently, and we are approaching the home stretch now.</p> -<p>The data types in VCL are “sort of weird” seen with normal programming -language eyes, in that they are not “general purpose” types, but +<p>The data types in VCL are "sort of weird" seen with normal programming +language eyes, in that they are not "general purpose" types, but rather tailored types for the task at hand.</p> <p>For instance, we have both a TIME and a DURATION type, a quite unusual constellation for a programming language.</p> @@ -65,7 +65,7 @@ <p>Obviously, you can add a TIME and DURATION, the result is a TIME.</p> <p>Equally obviously, you can not add TIME to TIME, but you can subtract TIME from TIME, resulting in a DURATION.</p> -<p>VCL do also have “naked” numbers, like INT and REAL, but what you +<p>VCL do also have "naked" numbers, like INT and REAL, but what you can do with them is very limited. For instance you can multiply a duration by a REAL, but you can not multiply a TIME by anything.</p> <p>Given that we have our own types, the next question is what @@ -78,10 +78,10 @@ lowest precedence:</p> <dl class="docutils"> <dt>Atomic</dt> -<dd><p class="first">‘true’, ‘false’, constants</p> +<dd><p class="first">'true', 'false', constants</p> <p>function calls</p> <p>variables</p> -<p class="last">‘(‘ expression ‘)’</p> +<p class="last">'(' expression ')'</p> </dd> <dt>Multiply/Divide</dt> <dd><p class="first">INT * INT</p> @@ -96,15 +96,15 @@ <p class="last">DURATION +/- DURATION</p> </dd> <dt>Comparisons</dt> -<dd><p class="first">‘==’, ‘!=’, ‘<’, ‘>’, ‘~’ and ‘!~’</p> +<dd><p class="first">'==', '!=', '<', '>', '~' and '!~'</p> <p class="last">string existence check (-> BOOL)</p> </dd> <dt>Boolean not</dt> -<dd>‘!’</dd> +<dd>'!'</dd> <dt>Boolean and</dt> -<dd>‘&&’</dd> +<dd>'&&'</dd> <dt>Boolean or</dt> -<dd>‘||’</dd> +<dd>'||'</dd> </dl> <p>Input and feedback most welcome!</p> <p>Until next time,</p> @@ -157,7 +157,7 @@ <li class="right" > <a href="gzip.html" title="How GZIP, and GZIP+ESI works in Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Poul-Hennings random outbursts</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>The Varnish Reference Manual — Varnish version 3.0.1 documentation</title> + <title>The Varnish Reference Manual — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="next" title="VCL" href="vcl.html" /> <link rel="prev" title="Troubleshooting Varnish" href="../tutorial/troubleshooting.html" /> </head> @@ -39,7 +39,7 @@ <li class="right" > <a href="../tutorial/troubleshooting.html" title="Troubleshooting Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -58,10 +58,13 @@ <li class="toctree-l3"><a class="reference internal" href="vcl.html#syntax">SYNTAX</a><ul> <li class="toctree-l4"><a class="reference internal" href="vcl.html#backend-declarations">Backend declarations</a></li> <li class="toctree-l4"><a class="reference internal" href="vcl.html#directors">Directors</a><ul> -<li class="toctree-l5"><a class="reference internal" href="vcl.html#the-random-director">The random director</a></li> +<li class="toctree-l5"><a class="reference internal" href="vcl.html#the-family-of-random-directors">The family of random directors</a><ul> +<li class="toctree-l6"><a class="reference internal" href="vcl.html#the-random-director">The random director</a></li> +<li class="toctree-l6"><a class="reference internal" href="vcl.html#the-client-director">The client director</a></li> +<li class="toctree-l6"><a class="reference internal" href="vcl.html#the-hash-director">The hash director</a></li> +</ul> +</li> <li class="toctree-l5"><a class="reference internal" href="vcl.html#the-round-robin-director">The round-robin director</a></li> -<li class="toctree-l5"><a class="reference internal" href="vcl.html#the-client-director">The client director</a></li> -<li class="toctree-l5"><a class="reference internal" href="vcl.html#the-hash-director">The hash director</a></li> <li class="toctree-l5"><a class="reference internal" href="vcl.html#the-dns-director">The DNS director</a></li> <li class="toctree-l5"><a class="reference internal" href="vcl.html#the-fallback-director">The fallback director</a></li> </ul> @@ -323,7 +326,7 @@ <li class="right" > <a href="../tutorial/troubleshooting.html" title="Troubleshooting Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/shmem.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Shared Memory Logging and Statistics — Varnish version 3.0.1 documentation</title> + <title>Shared Memory Logging and Statistics — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="VMOD - Varnish Modules" href="vmod.html" /> <link rel="prev" title="varnishtop" href="varnishtop.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishtop.html" title="varnishtop" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -55,7 +55,7 @@ <p>Varnish uses shared memory for logging and statistics, because it is faster and much more efficient. But it is also tricky in ways a regular logfile is not.</p> -<p>When you open a file in “append” mode, the operating system guarantees +<p>When you open a file in "append" mode, the operating system guarantees that whatever you write will not overwrite existing data in the file. The neat result of this is that multiple procesess or threads writing to the same file does not even need to know about each other, it all @@ -63,7 +63,7 @@ <p>With a shared memory log, we get no help from the kernel, the writers need to make sure they do not stomp on each other, and they need to make it possible and safe for the readers to access the data.</p> -<p>The “CS101” way, is to introduce locks, and much time is spent examining +<p>The "CS101" way, is to introduce locks, and much time is spent examining the relative merits of the many kinds of locks available.</p> <p>Inside the varnishd (worker) process, we use mutexes to guarantee consistency, both with respect to allocations, log entries and stats @@ -72,12 +72,12 @@ ssh connection to stall the delivery of content, so readers like that are purely read-only, they do not get to affect the varnishd process and that means no locks for them.</p> -<p>Instead we use “stable storage” concepts, to make sure the view +<p>Instead we use "stable storage" concepts, to make sure the view seen by the readers is consistent at all times.</p> <p>As long as you only add stuff, that is trivial, but taking away stuff, such as when a backend is taken out of the configuration, -we need to give the readers a chance to discover this, a “cooling -off” period.</p> +we need to give the readers a chance to discover this, a "cooling +off" period.</p> <p>When Varnishd starts, if it finds an existing shared memory file, and it can safely read the master_pid field, it will check if that process is running, and if so, fail with an error message, indicating @@ -90,13 +90,13 @@ <h2>Allocations<a class="headerlink" href="#allocations" title="Permalink to this headline">¶</a></h2> <p>Sections inside the shared memory file are allocated dynamically, for instance when a new backend is added.</p> -<p>While changes happen to the linked list of allocations, the “alloc_seq” +<p>While changes happen to the linked list of allocations, the "alloc_seq" header field is zero, and after the change, it gets a value different from what it had before.</p> </div> <div class="section" id="deallocations"> <h2>Deallocations<a class="headerlink" href="#deallocations" title="Permalink to this headline">¶</a></h2> -<p>When a section is freed, its class will change to “Cool” for at +<p>When a section is freed, its class will change to "Cool" for at least 10 seconds, giving programs using it time to detect the change in alloc_seq header field and/or the change of class.</p> </div> @@ -157,7 +157,7 @@ <li class="right" > <a href="varnishtop.html" title="varnishtop" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnish-cli.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnish — Varnish version 3.0.1 documentation</title> + <title>varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishadm" href="varnishadm.html" /> <link rel="prev" title="VCL" href="vcl.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="vcl.html" title="VCL" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -107,7 +107,7 @@ here document word</pre> </div> -<p><em>word</em> can be any continuous string choosen to make sure it doesn’t +<p><em>word</em> can be any continuous string choosen to make sure it doesn't appear naturally in the following <em>here document</em>.</p> <p>When using the here document style of input there are no restrictions on lenght. When using newline-terminated commands maximum lenght is @@ -146,7 +146,7 @@ <dt>ban.list</dt> <dd><p class="first">All requests for objects from the cache are matched against items on the ban list. If an object in the cache is older than -a matching ban list item, it is considered “banned”, and will be +a matching ban list item, it is considered "banned", and will be fetched from the backend instead.</p> <p>When a ban expression is older than all the objects in the cache, it is removed from the list.</p> @@ -159,9 +159,9 @@ as a high precision timestamp.</p> <p>The third field describes many objects point to this ban. When an object is compared to a ban the object is marked with a -reference to the newest ban it was tested against. This isn’t -really useful unless you’re debugging.</p> -<p>A “G” marks that the ban is “Gone”. Meaning it has been marked +reference to the newest ban it was tested against. This isn't +really useful unless you're debugging.</p> +<p>A "G" marks that the ban is "Gone". Meaning it has been marked as a duplicate or it is no longer valid. It stays in the list for effiency reasons.</p> <p class="last">Then follows the actual ban it self.</p> @@ -196,7 +196,7 @@ <dt>vcl.list</dt> <dd>List available configurations and their respective reference counts. The active configuration is indicated with an asterisk -(“*”).</dd> +("*").</dd> <dt>vcl.load configname filename</dt> <dd>Create a new configuration named configname with the contents of the specified file.</dd> @@ -212,14 +212,14 @@ <h4>Ban Expressions<a class="headerlink" href="#ban-expressions" title="Permalink to this headline">¶</a></h4> <p>A ban expression consists of one or more conditions. A condition consists of a field, an operator, and an argument. Conditions can be -ANDed together with “&&”.</p> +ANDed together with "&&".</p> <p>A field can be any of the variables from VCL, for instance req.url, req.http.host or obj.set-cookie.</p> -<p>Operators are “==” for direct comparision, “~” for a regular -expression match, and “>” or “<” for size comparisons. Prepending -an operator with ”!” negates the expression.</p> +<p>Operators are "==" for direct comparision, "~" for a regular +expression match, and ">" or "<" for size comparisons. Prepending +an operator with "!" negates the expression.</p> <p>The argument could be a quoted string, a regexp, or an integer. -Integers can have “KB”, “MB”, “GB” or “TB” appended for size related +Integers can have "KB", "MB", "GB" or "TB" appended for size related fields.</p> </div> <div class="section" id="scripting"> @@ -263,10 +263,10 @@ </div> <p>The CLI status of 107 indicates that authentication is necessary. The first 32 characters of the reponse text is the challenge -“ixsl...mpg”. The challenge is randomly generated for each CLI +"ixsl...mpg". The challenge is randomly generated for each CLI connection, and changes each time a 107 is emitted.</p> <p>The most recently emitted challenge must be used for calculating the -authenticator “455c...c89a”.</p> +authenticator "455c...c89a".</p> <p>The authenticator is calculated by applying the SHA256 function to the following byte sequence:</p> <ul class="simple"> @@ -307,13 +307,13 @@ <div class="highlight-python"><div class="highlight"><pre><span class="n">req</span><span class="o">.</span><span class="n">url</span> <span class="o">==</span> <span class="s">"/news"</span> </pre></div> </div> -<p>Example: Ban all documents where the name does not end with ”.ogg”, +<p>Example: Ban all documents where the name does not end with ".ogg", and where the size of the object is greater than 10 megabytes::</p> <div class="highlight-python"><pre>req.url !~ "\.ogg$" && obj.size > 10MB</pre> </div> -<p>Example: Ban all documents where the serving host is “example.com” -or “www.example.com”, and where the Set-Cookie header received from -the backend contains “USERID=1663”::</p> +<p>Example: Ban all documents where the serving host is "example.com" +or "www.example.com", and where the Set-Cookie header received from +the backend contains "USERID=1663"::</p> <div class="highlight-python"><pre>req.http.host ~ "^(?i)(www\.)example.com$" && obj.set-cookie ~ "USERID=1663"</pre> </div> </div> @@ -410,7 +410,7 @@ <li class="right" > <a href="vcl.html" title="VCL" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishadm.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishadm — Varnish version 3.0.1 documentation</title> + <title>varnishadm — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishd" href="varnishd.html" /> <link rel="prev" title="varnish" href="varnish-cli.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnish-cli.html" title="varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -223,7 +223,7 @@ <li class="right" > <a href="varnish-cli.html" title="varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishd.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishd — Varnish version 3.0.1 documentation</title> + <title>varnishd — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishhist" href="varnishhist.html" /> <link rel="prev" title="varnishadm" href="varnishadm.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishadm.html" title="varnishadm" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -144,7 +144,7 @@ from VCL</td></tr> <tr><td class="option-group"> <kbd><span class="option">-l <var>shmlogsize</var></span></kbd></td> -<td>Specify size of shmlog file. Scaling suffixes like ‘k’, ‘m’ can be used up to +<td>Specify size of shmlog file. Scaling suffixes like 'k', 'm' can be used up to (e)tabytes. Default is 80 Megabytes. Specifying less than 8 Megabytes is unwise.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-n <var>name</var></span></kbd></td> @@ -154,7 +154,7 @@ path to the directory which should be used for this purpose.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-P <var>file</var></span></kbd></td> -<td>Write the process’s PID to the specified file.</td></tr> +<td>Write the process's PID to the specified file.</td></tr> </tbody> </table> <dl class="docutils"> @@ -228,7 +228,7 @@ <dd>A simple doubly-linked list. Not recommended for production use.</dd> <dt>classic[,buckets]</dt> <dd>A standard hash table. This is the default. The hash key is the -CRC32 of the object’s URL modulo the size of the hash table. Each +CRC32 of the object's URL modulo the size of the hash table. Each table entry points to a list of elements which share the same hash key. The buckets parameter specifies the number of entries in the hash table. The default is 16383.</dd> @@ -280,7 +280,7 @@ manner that will secure the survival of <em>most</em> of the objects in the event of a planned or unplanned shutdown of Varnish.</p> <p>The path parameter specifies the path to the backing file. If -the file doesn’t exist Varnish will create it.</p> +the file doesn't exist Varnish will create it.</p> <p>The size parameter specifies the size of the backing file. The size is assumed to be in bytes, unless followed by one of the following suffixes:</p> @@ -292,13 +292,13 @@ the silos in the manner of a circular buffer. Only one silo will be kept open at any given point in time. Full silos are <em>sealed</em>. When Varnish starts after a shutdown it will discard -the content of any silo that isn’t sealed.</p> +the content of any silo that isn't sealed.</p> </div></blockquote> </div> <div class="section" id="transient-storage"> <h4>Transient Storage<a class="headerlink" href="#transient-storage" title="Permalink to this headline">¶</a></h4> <blockquote> -<div>If you name any of your storage backend “Transient” it will be +<div>If you name any of your storage backend "Transient" it will be used for transient (short lived) objects. By default Varnish would use an unlimited malloc backend for this.</div></blockquote> </div> @@ -453,7 +453,7 @@ </ul> <p class="last">The TTL assigned to objects if neither the backend nor the VCL code assigns one. Objects already cached will not be affected by changes made until they are fetched from the backend again. -To force an immediate effect at the expense of a total flush of the cache use “ban.url .”</p> +To force an immediate effect at the expense of a total flush of the cache use "ban.url ."</p> </dd> <dt>diag_bitmap</dt> <dd><ul class="first simple"> @@ -549,7 +549,7 @@ <li>Flags: experimental</li> </ul> <p class="last">Size of stack buffer used for gzip processing. -The stack buffers are used for in-transit data, for instance gunzip’ed data being sent to a client.Making this space to small results in more overhead, writes to sockets etc, making it too big is probably just a waste of memory.</p> +The stack buffers are used for in-transit data, for instance gunzip'ed data being sent to a client.Making this space to small results in more overhead, writes to sockets etc, making it too big is probably just a waste of memory.</p> </dd> <dt>gzip_tmp_space</dt> <dd><ul class="first simple"> @@ -599,7 +599,7 @@ <dt>http_req_hdr_len</dt> <dd><ul class="first simple"> <li>Units: bytes</li> -<li>Default: 4096</li> +<li>Default: 8192</li> </ul> <p class="last">Maximum length of any HTTP client request header we will allow. The limit is inclusive its continuation lines.</p> </dd> @@ -614,7 +614,7 @@ <dt>http_resp_hdr_len</dt> <dd><ul class="first simple"> <li>Units: bytes</li> -<li>Default: 4096</li> +<li>Default: 8192</li> </ul> <p class="last">Maximum length of any HTTP backend response header we will allow. The limit is inclusive its continuation lines.</p> </dd> @@ -678,12 +678,12 @@ <li>Default: 4</li> </ul> <p class="last">Upper limit on how many times a request can restart. -Be aware that restarts are likely to cause a hit against the backend, so don’t increase thoughtlessly.</p> +Be aware that restarts are likely to cause a hit against the backend, so don't increase thoughtlessly.</p> </dd> <dt>nuke_limit</dt> <dd><ul class="first simple"> <li>Units: allocations</li> -<li>Default: 10</li> +<li>Default: 50</li> <li>Flags: experimental</li> </ul> <p class="last">Maximum number of objects we attempt to nuke in orderto make space for a object body.</p> @@ -743,7 +743,7 @@ <li>Default: 60</li> <li>Flags: delayed</li> </ul> -<p class="last">Send timeout for client connections. If the HTTP response hasn’t been transmitted in this many +<p class="last">Send timeout for client connections. If the HTTP response hasn't been transmitted in this many seconds the session is closed. See setsockopt(2) under SO_SNDTIMEO for more information.</p> </dd> @@ -796,7 +796,7 @@ <li>Flags: delayed</li> </ul> <p class="last">Bytes of shmlog workspace allocated for worker threads. If too big, it wastes some ram, if too small it causes needless flushes of the SHM workspace. -These flushes show up in stats as “SHM flushes due to overflow”. +These flushes show up in stats as "SHM flushes due to overflow". Minimum is 4096 bytes.</p> </dd> <dt>shortlived</dt> @@ -925,7 +925,7 @@ <li>Default: magic</li> <li>Flags: must_restart</li> </ul> -<p class="last">The unprivileged user to run as. Setting this will also set “group” to the specified user’s primary group.</p> +<p class="last">The unprivileged user to run as. Setting this will also set "group" to the specified user's primary group.</p> </dd> <dt>vcc_err_unref</dt> <dd><ul class="first simple"> @@ -1064,7 +1064,7 @@ <li class="right" > <a href="varnishadm.html" title="varnishadm" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishhist.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishhist — Varnish version 3.0.1 documentation</title> + <title>varnishhist — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishlog" href="varnishlog.html" /> <link rel="prev" title="varnishd" href="varnishd.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishd.html" title="varnishd" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -79,8 +79,8 @@ presents a continuously updated histogram show‐ ing the distribution of the last N requests by their processing. The value of N and the vertical scale are dis‐ played in the top left corner. The horizontal -scale is logarithmic. Hits are marked with a pipe character (“|”), -and misses are marked with a hash character (“#”).</p> +scale is logarithmic. Hits are marked with a pipe character ("|"), +and misses are marked with a hash character ("#").</p> <p>The following options are available:</p> <table class="docutils option-list" frame="void" rules="none"> <col class="option" /> @@ -235,7 +235,7 @@ <li class="right" > <a href="varnishd.html" title="varnishd" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishlog.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishlog — Varnish version 3.0.1 documentation</title> + <title>varnishlog — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishncsa" href="varnishncsa.html" /> <link rel="prev" title="varnishhist" href="varnishhist.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishhist.html" title="varnishhist" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -139,7 +139,7 @@ combined with -m.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-P <var>file</var></span></kbd></td> -<td>Write the process’s PID to the specified file.</td></tr> +<td>Write the process's PID to the specified file.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-r <var>file</var></span></kbd></td> <td>Read log entries from file instead of shared memory.</td></tr> @@ -322,7 +322,7 @@ <li class="right" > <a href="varnishhist.html" title="varnishhist" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishncsa.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishncsa — Varnish version 3.0.1 documentation</title> + <title>varnishncsa — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishreplay" href="varnishreplay.html" /> <link rel="prev" title="varnishlog" href="varnishlog.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishlog.html" title="varnishlog" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -77,7 +77,7 @@ <div class="section" id="description"> <h3>DESCRIPTION<a class="headerlink" href="#description" title="Permalink to this headline">¶</a></h3> <p>The varnishncsa utility reads varnishd(1) shared memory logs and -presents them in the Apache / NCSA “combined” log format.</p> +presents them in the Apache / NCSA "combined" log format.</p> <p>The following options are available:</p> <table class="docutils option-list" frame="void" rules="none"> <col class="option" /> @@ -115,37 +115,42 @@ <kbd><span class="option">-F <var>format</var></span></kbd></td> <td><p class="first">Specify the log format used. If no format is specified the default log format is used. Currently it is:</p> -<p>%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-agent}i”</p> +<p>%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i"</p> <p>Supported formatters are:</p> <blockquote class="last"> <div><dl class="docutils"> <dt>%b</dt> <dd>Size of response in bytes, excluding HTTP headers. -In CLF format, i.e. a ‘-‘ rather than a 0 when no +In CLF format, i.e. a '-' rather than a 0 when no bytes are sent.</dd> <dt>%H</dt> -<dd>The request protocol</dd> +<dd>The request protocol. Defaults to HTTP/1.0 if not +known.</dd> <dt>%h</dt> -<dd>Remote host</dd> +<dd>Remote host. Defaults to '-' if not known. +Defaults to 127.0.0.1 for backend requests.</dd> <dt>%{X}i</dt> <dd>The contents of request header line X.</dd> <dt>%l</dt> -<dd>Remote logname (always ‘-‘)</dd> +<dd>Remote logname (always '-')</dd> <dt>%m</dt> -<dd>Request method</dd> +<dd>Request method. Defaults to '-' if not known.</dd> <dt>%q</dt> -<dd>The query string, if no query string exists, an empty string.</dd> +<dd>The query string, if no query string exists, an +empty string.</dd> <dt>%{X}o</dt> <dd>The contents of response header line X.</dd> <dt>%r</dt> -<dd>The first line of the request</dd> +<dd>The first line of the request. Synthesized from other +fields, so it may not be the request verbatim.</dd> <dt>%s</dt> <dd>Status sent to the client</dd> <dt>%t</dt> <dd>Time when the request was received, in HTTP date/time format.</dd> <dt>%U</dt> -<dd>The request URL without any query string.</dd> +<dd>The request URL without any query string. Defaults to +'-' if not known.</dd> <dt>%u</dt> <dd>Remote user from auth</dd> <dt>%{X}x</dt> @@ -182,7 +187,7 @@ from. If -n is not specified, the host name is used.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-P <var>file</var></span></kbd></td> -<td>Write the process’s PID to the specified file.</td></tr> +<td>Write the process's PID to the specified file.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-r <var>file</var></span></kbd></td> <td>Read log entries from file instead of shared memory.</td></tr> @@ -300,7 +305,7 @@ <li class="right" > <a href="varnishlog.html" title="varnishlog" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishreplay.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishreplay — Varnish version 3.0.1 documentation</title> + <title>varnishreplay — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishsizes" href="varnishsizes.html" /> <link rel="prev" title="varnishncsa" href="varnishncsa.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishncsa.html" title="varnishncsa" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -182,7 +182,7 @@ <li class="right" > <a href="varnishncsa.html" title="varnishncsa" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishsizes.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishsizes — Varnish version 3.0.1 documentation</title> + <title>varnishsizes — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishstat" href="varnishstat.html" /> <link rel="prev" title="varnishreplay" href="varnishreplay.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishreplay.html" title="varnishreplay" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -86,7 +86,7 @@ requests by their processing. The value of N and the vertical scale are displayed in the top left corner. The horizontal scale is a logarithmic representation of bytes. Hits are marked with a pipe character -(“|”), and misses are marked with a hash character (“#”).</p> +("|"), and misses are marked with a hash character ("#").</p> <p>The following options are available:</p> <table class="docutils option-list" frame="void" rules="none"> <col class="option" /> @@ -237,7 +237,7 @@ <li class="right" > <a href="varnishreplay.html" title="varnishreplay" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishstat.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishstat — Varnish version 3.0.1 documentation</title> + <title>varnishstat — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishtest" href="varnishtest.html" /> <link rel="prev" title="varnishsizes" href="varnishsizes.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishsizes.html" title="varnishsizes" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -87,7 +87,7 @@ <td>Instead of presenting of a continuously updated display, print the statistics once and exit.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-f</span></kbd></td> -<td>A comma separated list of the fields to display. If it starts with ‘^’ it is used as an exclusion +<td>A comma separated list of the fields to display. If it starts with '^' it is used as an exclusion list.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-l</span></kbd></td> @@ -220,7 +220,7 @@ <li class="right" > <a href="varnishsizes.html" title="varnishsizes" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishtest.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishtest — Varnish version 3.0.1 documentation</title> + <title>varnishtest — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnishtop" href="varnishtop.html" /> <link rel="prev" title="varnishstat" href="varnishstat.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishstat.html" title="varnishstat" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -141,7 +141,7 @@ </div> <div class="section" id="example-script-output"> <h4>Example script output<a class="headerlink" href="#example-script-output" title="Permalink to this headline">¶</a></h4> -<p>The output, running this script looks as follows. The “bargraph” at +<p>The output, running this script looks as follows. The "bargraph" at the beginning of the line is an indication of the level of detail in the line. The second field where the message comes from. The rest of the line is anyones guess :-)</p> @@ -329,7 +329,7 @@ <li class="right" > <a href="varnishstat.html" title="varnishstat" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/varnishtop.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>varnishtop — Varnish version 3.0.1 documentation</title> + <title>varnishtop — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="Shared Memory Logging and Statistics" href="shmem.html" /> <link rel="prev" title="varnishtest" href="varnishtest.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="varnishtest.html" title="varnishtest" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -249,7 +249,7 @@ <li class="right" > <a href="varnishtest.html" title="varnishtest" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/vcl.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>VCL — Varnish version 3.0.1 documentation</title> + <title>VCL — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="varnish" href="varnish-cli.html" /> <link rel="prev" title="The Varnish Reference Manual" href="index.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="index.html" title="The Varnish Reference Manual" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -92,10 +92,14 @@ <p>In addition to the C-like assignment (=), comparison (==, !=) and boolean (!, && and ||) operators, VCL supports both regular expression and ACL matching using the ~ and the !~ operators.</p> +<p>Basic strings are enclosed in " ... ", and may not contain newlines.</p> +<p>Long strings are enclosed in {" ... "}. They may contain any +character including ", newline and other control characters except +for the NUL (0x00) character.</p> <p>Unlike C and Perl, the backslash () character has no special meaning in strings in VCL, so it can be freely used in regular expressions without doubling.</p> -<p>Strings are concatenated using the ‘+’ operator.</p> +<p>Strings are concatenated using the '+' operator.</p> <p>Assignments are introduced with the <em>set</em> keyword. There are no user-defined variables; values can only be assigned to variables attached to backend, request or document objects. Most of these are @@ -104,6 +108,12 @@ <p>You can use the <em>set</em> keyword to arbitrary HTTP headers. You can remove headers with the <em>remove</em> or <em>unset</em> keywords, which are synonym.</p> +<p>You can use the <em>rollback</em> keyword to revert any changes to req at +any time.</p> +<p>The <em>synthetic</em> keyword is used to produce a synthetic response +body in vcl_error. It takes a single string as argument.</p> +<p>You can force a crash of the client process with the <em>panic</em> keyword. +<em>panic</em> takes a string as argument.</p> <p>The <tt class="docutils literal"><span class="pre">return(action)</span></tt> keyword terminates the subroutine. <em>action</em> can be, depending on context one of</p> <ul class="simple"> @@ -184,51 +194,62 @@ } }</pre> </div> +<div class="section" id="the-family-of-random-directors"> +<h5>The family of random directors<a class="headerlink" href="#the-family-of-random-directors" title="Permalink to this headline">¶</a></h5> +<p>There are three directors that share the same logic, called the random +director, client director and hash director. They each distribute traffic +among the backends assigned to it using a random distribution seeded with +either the client identity, a random number or the cache hash (typically +url). Beyond the initial seed, they act the same.</p> +<p>Each backend requires a .weight option which sets the amount of traffic +each backend will get compared to the others. Equal weight means equal +traffic. A backend with lower weight than an other will get proportionally +less traffic.</p> +<p>The director has an optional .retries option which defaults to the number +of backends the director has. The director will attempt .retries times to +find a healthy backend if the first attempt fails. Each attempt re-uses the +previous seed in an iterative manner. For the random director this detail +is of no importance as it will give different results each time. For the +hash and client director, this means the same URL or the same client will +fail to the same server consistently.</p> <div class="section" id="the-random-director"> -<h5>The random director<a class="headerlink" href="#the-random-director" title="Permalink to this headline">¶</a></h5> -<p>The random director takes one per director option .retries. This -specifies how many tries it will use to find a working backend. The -default is the same as the number of backends defined for the -director.</p> -<p>There is also a per-backend option: weight which defines the portion -of traffic to send to the particular backend.</p> -</div> -<div class="section" id="the-round-robin-director"> -<h5>The round-robin director<a class="headerlink" href="#the-round-robin-director" title="Permalink to this headline">¶</a></h5> -<p>The round-robin director does not take any options.</p> +<h6>The random director<a class="headerlink" href="#the-random-director" title="Permalink to this headline">¶</a></h6> +<p>This uses a random number to seed the backend selection.</p> </div> <div class="section" id="the-client-director"> -<h5>The client director<a class="headerlink" href="#the-client-director" title="Permalink to this headline">¶</a></h5> +<h6>The client director<a class="headerlink" href="#the-client-director" title="Permalink to this headline">¶</a></h6> <p>The client director picks a backend based on the clients <em>identity</em>. You can set the VCL variable <em>client.identity</em> to identify the client by picking up the value of a session cookie or similar.</p> -<p>Note: from 2.1.0 to 2.1.3 <em>client.identity</em> isn’t available and the -director will use automatically set the idenity based on client.ip In -2.1.4 and onwards you can set client.identity to any string available.</p> -<p>The client director takes one option - <em>retries</em> which set the number -of retries the director should take in order to find a healthy -backend.</p> </div> <div class="section" id="the-hash-director"> -<h5>The hash director<a class="headerlink" href="#the-hash-director" title="Permalink to this headline">¶</a></h5> +<h6>The hash director<a class="headerlink" href="#the-hash-director" title="Permalink to this headline">¶</a></h6> <p>The hash director will pick a backend based on the URL hash value.</p> <p>This is useful is you are using Varnish to load balance in front of -other Varnish caches or other web accelerators as objects won’t be +other Varnish caches or other web accelerators as objects won't be duplicated across caches.</p> -<p>The client director takes one option - <em>retries</em> which set the number -of retries the director should take in order to find a healthy -backend.</p> +<p>It will use the value of req.hash, just as the normal cache-lookup methods.</p> +</div> +</div> +<div class="section" id="the-round-robin-director"> +<h5>The round-robin director<a class="headerlink" href="#the-round-robin-director" title="Permalink to this headline">¶</a></h5> +<p>The round-robin director does not take any options.</p> +<p>It will use the first backend for the first request, the second backend for +the second request and so on, and start from the top again when it gets to +the end.</p> +<p>If a backend is unhealthy or Varnish fails to connect, it will be skipped. +The round-robin director will try all the backends once before giving up.</p> </div> <div class="section" id="the-dns-director"> <h5>The DNS director<a class="headerlink" href="#the-dns-director" title="Permalink to this headline">¶</a></h5> -<p>The DNS director can use backends in three different ways. Either like the +<p>The DNS director can use backends in two different ways. Either like the random or round-robin director or using .list:</p> <div class="highlight-python"><pre>director directorname dns { .list = { .host_header = "www.example.com"; .port = "80"; - .connect_timeout = 0.4; + .connect_timeout = 0.4s; "192.168.15.0"/24; "192.168.16.128"/25; } @@ -237,11 +258,18 @@ }</pre> </div> <p>This will specify 384 backends, all using port 80 and a connection timeout -of 0.4s. Options must come before the list of IPs in the .list statement.</p> +of 0.4s. Options must come before the list of IPs in the .list statement. +The .list-method does not support IPv6. It is not a white-list, it is an +actual list of backends that will be created internally in Varnish - the +larger subnet the more overhead.</p> <p>The .ttl defines the cache duration of the DNS lookups.</p> -<p>The above example will append “internal.example.net” to the incoming Host +<p>The above example will append "internal.example.net" to the incoming Host header supplied by the client, before looking it up. All settings are optional.</p> +<p>Health checks are not thoroughly supported.</p> +<p>DNS round robin balancing is supported. If a hostname resolves to multiple +backends, the director will divide the traffic between all of them in a +round-robin manner.</p> </div> <div class="section" id="the-fallback-director"> <h5>The fallback director<a class="headerlink" href="#the-fallback-director" title="Permalink to this headline">¶</a></h5> @@ -262,11 +290,36 @@ <h4>Backend probes<a class="headerlink" href="#backend-probes" title="Permalink to this headline">¶</a></h4> <p>Backends can be probed to see whether they should be considered healthy or not. The return status can also be checked by using -req.backend.healthy .window is how many of the latest polls we -examine, while .threshold is how many of those must have succeeded for -us to consider the backend healthy. .initial is how many of the -probes are considered good when Varnish starts - defaults to the same -amount as the threshold.</p> +req.backend.healthy.</p> +<p>Probes take the following parameters:</p> +<dl class="docutils"> +<dt>.url</dt> +<dd>Specify a URL to request from the backend. +Defaults to "/".</dd> +<dt>.request</dt> +<dd>Specify a full HTTP request using multiple strings. .request will +have \r\n automatically inserted after every string. +If specified, .request will take precedence over .url.</dd> +<dt>.window</dt> +<dd>How many of the latest polls we examine to determine backend health. +Defaults to 8.</dd> +<dt>.threshold</dt> +<dd>How many of the polls in .window must have succeeded for us to consider +the backend healthy. +Defaults to 3.</dd> +<dt>.initial</dt> +<dd>How many of the probes are considered good when Varnish starts. +Defaults to the same amount as the threshold.</dd> +<dt>.expected_response</dt> +<dd>The expected backend HTTP response code. +Defaults to 200.</dd> +<dt>.interval</dt> +<dd>Defines how often the probe should check the backend. +Default is every 5 seconds.</dd> +<dt>.timeout</dt> +<dd>How fast each probe times out. +Default is 2 seconds.</dd> +</dl> <p>A backend with a probe can be defined like this, together with the backend or director::</p> <div class="highlight-python"><pre>backend www { @@ -289,6 +342,7 @@ .window = 8; .threshold = 3; .initial = 3; + .expected_response = 200; } backend www { @@ -373,7 +427,7 @@ }</pre> </div> <p>Subroutines in VCL do not take arguments, nor do they return values.</p> -<p>To call a subroutine, use the call keyword followed by the subroutine’s name:</p> +<p>To call a subroutine, use the call keyword followed by the subroutine's name:</p> <p>call pipe_if_local;</p> <p>There are a number of special subroutines which hook into the Varnish workflow. These subroutines may inspect and manipulate HTTP headers @@ -427,7 +481,7 @@ </dd> <dt>vcl_pass</dt> <dd><p class="first">Called upon entering pass mode. In this mode, the request is passed -on to the backend, and the backend’s response is passed on to the +on to the backend, and the backend's response is passed on to the client, but is not entered into the cache. Subsequent requests sub‐ mitted over the same client connection are handled normally.</p> <p>The vcl_recv subroutine may terminate with calling return() with one of @@ -600,7 +654,9 @@ <p>The following variables are available while processing a request:</p> <dl class="docutils"> <dt>client.ip</dt> -<dd>The client’s IP address.</dd> +<dd>The client's IP address.</dd> +<dt>client.identity</dt> +<dd>Identification of the client, used to load balance in the client director.</dd> <dt>server.hostname</dt> <dd>The host name of the server.</dd> <dt>server.identity</dt> @@ -613,7 +669,7 @@ <dt>server.port</dt> <dd>The port number of the socket on which the client connection was received.</dd> <dt>req.request</dt> -<dd>The request type (e.g. “GET”, “HEAD”).</dd> +<dd>The request type (e.g. "GET", "HEAD").</dd> <dt>req.url</dt> <dd>The requested URL.</dd> <dt>req.proto</dt> @@ -634,12 +690,24 @@ avoid potential deadlocks.</dd> <dt>req.can_gzip</dt> <dd>Does the client accept the gzip transfer encoding.</dd> +<dt>req.restarts</dt> +<dd>A count of how many times this request has been restarted.</dd> +<dt>req.esi</dt> +<dd>Boolean. Set to false to disable ESI processing regardless of any +value in beresp.do_esi. Defaults to true. This variable is subject +to change in future versions, you should avoid using it.</dd> +<dt>req.esi_level</dt> +<dd>A count of how many levels of ESI requests we're currently at.</dd> +<dt>req.grace</dt> +<dd>Set to a period to enable grace.</dd> +<dt>req.xid</dt> +<dd>Unique ID of this request.</dd> </dl> <p>The following variables are available while preparing a backend request (either for a cache miss or for pass or pipe mode):</p> <dl class="docutils"> <dt>bereq.request</dt> -<dd>The request type (e.g. “GET”, “HEAD”).</dd> +<dd>The request type (e.g. "GET", "HEAD").</dd> <dt>bereq.url</dt> <dd>The requested URL.</dd> <dt>bereq.proto</dt> @@ -661,12 +729,13 @@ <dl class="docutils"> <dt>beresp.do_stream</dt> <dd>Deliver the object to the client directly without fetching the whole -object into varnish. If this request is pass’ed it will not be +object into varnish. If this request is pass'ed it will not be stored in memory. As of Varnish Cache 3.0 the object will marked as busy as it is delivered so only client can access the object.</dd> <dt>beresp.do_esi</dt> -<dd>Boolean. ESI-process the object after fetching it. Defaults to false. Set it -to true to parse the object for ESI directives.</dd> +<dd>Boolean. ESI-process the object after fetching it. Defaults to +false. Set it to true to parse the object for ESI directives. Will +only be honored if req.esi is true.</dd> <dt>beresp.do_gzip</dt> <dd>Boolean. Gzip the object before storing it. Defaults to false.</dd> <dt>beresp.do_gunzip</dt> @@ -679,7 +748,20 @@ <dt>beresp.response</dt> <dd>The HTTP status message returned by the server.</dd> <dt>beresp.ttl</dt> -<dd>The object’s remaining time to live, in seconds. beresp.ttl is writable.</dd> +<dd>The object's remaining time to live, in seconds. beresp.ttl is writable.</dd> +<dt>beresp.grace</dt> +<dd>Set to a period to enable grace.</dd> +<dt>beresp.saintmode</dt> +<dd>Set to a period to enable saint mode.</dd> +<dt>beresp.backend.name</dt> +<dd>Name of the backend this response was fetched from.</dd> +<dt>beresp.backend.ip</dt> +<dd>IP of the backend this response was fetched from.</dd> +<dt>beresp.backend.port</dt> +<dd>Port of the backend this response was fetched from.</dd> +<dt>beresp.storage</dt> +<dd>Set to force Varnish to save this object to a particular storage +backend.</dd> </dl> <p>After the object is entered into the cache, the following (mostly read-only) variables are available when the object has been located in @@ -692,13 +774,17 @@ <dt>obj.response</dt> <dd>The HTTP status message returned by the server.</dd> <dt>obj.ttl</dt> -<dd>The object’s remaining time to live, in seconds. obj.ttl is writable.</dd> +<dd>The object's remaining time to live, in seconds. obj.ttl is writable.</dd> <dt>obj.lastuse</dt> <dd>The approximate time elapsed since the object was last requests, in seconds.</dd> <dt>obj.hits</dt> <dd>The approximate number of times the object has been delivered. A value of 0 indicates a cache miss.</dd> +<dt>obj.grace</dt> +<dd>The object's grace period in seconds. obj.grace is writable.</dd> +<dt>obj.http.header</dt> +<dd>The corresponding HTTP header.</dd> </dl> <p>The following variables are available while determining the hash key of an object:</p> @@ -764,7 +850,7 @@ <div class="section" id="examples"> <h3>EXAMPLES<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h3> <p>The following code is the equivalent of the default configuration with -the backend address set to “backend.example.com” and no backend port +the backend address set to "backend.example.com" and no backend port specified::</p> <div class="highlight-python"><pre>backend default { .host = "backend.example.com"; @@ -788,7 +874,7 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS’’ AND + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE @@ -815,22 +901,22 @@ if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = - req.http.X-Forwarded-For + ”, ” + client.ip; + req.http.X-Forwarded-For + ", " + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } - if (req.request != “GET” && - req.request != “HEAD” && - req.request != “PUT” && - req.request != “POST” && - req.request != “TRACE” && - req.request != “OPTIONS” && - req.request != “DELETE”) { + if (req.request != "GET" && + req.request != "HEAD" && + req.request != "PUT" && + req.request != "POST" && + req.request != "TRACE" && + req.request != "OPTIONS" && + req.request != "DELETE") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } - if (req.request != “GET” && req.request != “HEAD”) { + if (req.request != "GET" && req.request != "HEAD") { /* We only deal with GET and HEAD by default */ return (pass); } @@ -845,7 +931,7 @@ # Note that only the first request to the backend will have # X-Forwarded-For set. If you use X-Forwarded-For and want to # have it set for all requests, make sure to have: - # set bereq.http.connection = “close”; + # set bereq.http.connection = "close"; # here. It is not set by default as it might break some broken web # applications, like IIS with NTLM authentication. return (pipe); @@ -876,9 +962,9 @@ sub vcl_fetch { if (beresp.ttl <= 0s || beresp.http.Set-Cookie || - beresp.http.Vary == “*”) { + beresp.http.Vary == "*") { /* - * Mark as “Hit-For-Pass” for the next 2 minutes + * Mark as "Hit-For-Pass" for the next 2 minutes */ set beresp.ttl = 120 s; return (hit_for_pass); @@ -891,26 +977,26 @@ } sub vcl_error { - set obj.http.Content-Type = “text/html; charset=utf-8”; - set obj.http.Retry-After = “5”; - synthetic {” -<?xml version=”1.0” encoding=”utf-8”?> -<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” - “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”> + set obj.http.Content-Type = "text/html; charset=utf-8"; + set obj.http.Retry-After = "5"; + synthetic {" +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> - <title>”} + obj.status + ” ” + obj.response + {“</title> + <title>"} + obj.status + " " + obj.response + {"</title> </head> <body> - <h1>Error “} + obj.status + ” ” + obj.response + {“</h1> - <p>”} + obj.response + {“</p> + <h1>Error "} + obj.status + " " + obj.response + {"</h1> + <p>"} + obj.response + {"</p> <h3>Guru Meditation:</h3> - <p>XID: “} + req.xid + {“</p> + <p>XID: "} + req.xid + {"</p> <hr> <p>Varnish cache server</p> </body> </html> -“}; +"}; return (deliver); } @@ -1022,8 +1108,8 @@ </div> <div class="section" id="copyright"> <h3>COPYRIGHT<a class="headerlink" href="#copyright" title="Permalink to this headline">¶</a></h3> -<p>This document is licensed under the same licence as Varnish -itself. See LICENCE for details.</p> +<p>This document is licensed under the same license as Varnish +itself. See LICENSE for details.</p> <ul class="simple"> <li>Copyright (c) 2006 Verdens Gang AS</li> <li>Copyright (c) 2006-2011 Varnish Software AS</li> @@ -1046,10 +1132,13 @@ <li><a class="reference internal" href="#syntax">SYNTAX</a><ul> <li><a class="reference internal" href="#backend-declarations">Backend declarations</a></li> <li><a class="reference internal" href="#directors">Directors</a><ul> +<li><a class="reference internal" href="#the-family-of-random-directors">The family of random directors</a><ul> <li><a class="reference internal" href="#the-random-director">The random director</a></li> -<li><a class="reference internal" href="#the-round-robin-director">The round-robin director</a></li> <li><a class="reference internal" href="#the-client-director">The client director</a></li> <li><a class="reference internal" href="#the-hash-director">The hash director</a></li> +</ul> +</li> +<li><a class="reference internal" href="#the-round-robin-director">The round-robin director</a></li> <li><a class="reference internal" href="#the-dns-director">The DNS director</a></li> <li><a class="reference internal" href="#the-fallback-director">The fallback director</a></li> </ul> @@ -1116,7 +1205,7 @@ <li class="right" > <a href="index.html" title="The Varnish Reference Manual" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/vmod.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>VMOD - Varnish Modules — Varnish version 3.0.1 documentation</title> + <title>VMOD - Varnish Modules — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="vmod_std" href="vmod_std.html" /> <link rel="prev" title="Shared Memory Logging and Statistics" href="shmem.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="shmem.html" title="Shared Memory Logging and Statistics" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -66,19 +66,19 @@ set resp.http.foo = std.toupper(req.url); }</pre> </div> -<p>The “std” vmod is one you get with Varnish, it will always be there -and we will put “boutique” functions in it, such as the “toupper” -function shown above. The full contents of the “std” module is +<p>The "std" vmod is one you get with Varnish, it will always be there +and we will put "boutique" functions in it, such as the "toupper" +function shown above. The full contents of the "std" module is documented in XXX:TBW.</p> <p>This part of the manual is about how you go about writing your own VMOD, how the language interface between C and VCC works etc. This -explanation will use the “std” VMOD as example, having a varnish +explanation will use the "std" VMOD as example, having a varnish source tree handy may be a good idea.</p> <div class="section" id="the-vmod-vcc-file"> <h2>The vmod.vcc file<a class="headerlink" href="#the-vmod-vcc-file" title="Permalink to this headline">¶</a></h2> -<p>The interface between your VMOD and the VCL compiler (“VCC”) and the -VCL runtime (“VRT”) is defined in the vmod.vcc file which a python -script called “vmod.py” turns into thaumathurgically challenged C +<p>The interface between your VMOD and the VCL compiler ("VCC") and the +VCL runtime ("VRT") is defined in the vmod.vcc file which a python +script called "vmod.py" turns into thaumathurgically challenged C data structures that does all the hard work.</p> <p>The std VMODs vmod.vcc file looks somewhat like this:</p> <div class="highlight-python"><pre>Module std @@ -88,7 +88,7 @@ Function VOID set_ip_tos(INT)</pre> </div> <p>The first line gives the name of the module, nothing special there.</p> -<p>The second line specifies an optional “Init” function, which will +<p>The second line specifies an optional "Init" function, which will be called whenever a VCL program which imports this VMOD is loaded. This gives a chance to initialize the module before any of the functions it implements are called.</p> @@ -96,7 +96,7 @@ types of the arguments, and that is probably where the hardest bit of writing a VMOD is to be found, so we will talk about that at length in a moment.</p> -<p>Notice that the third function returns VOID, that makes it a “procedure” +<p>Notice that the third function returns VOID, that makes it a "procedure" in VCL lingo, meaning that it cannot be used in expressions, right side of assignments and such places. Instead it can be used as a primary action, something functions which return a value can not:</p> @@ -104,8 +104,8 @@ std.set_ip_tos(32); }</pre> </div> -<p>Running vmod.py on the vmod.vcc file, produces an “vcc_if.c” and -“vcc_if.h” files, which you must use to build your shared library +<p>Running vmod.py on the vmod.vcc file, produces an "vcc_if.c" and +"vcc_if.h" files, which you must use to build your shared library file.</p> <p>Forget about vcc_if.c everywhere but your Makefile, you will never need to care about its contents, and you should certainly never @@ -125,7 +125,7 @@ <div class="section" id="vcl-and-c-data-types"> <h2>VCL and C data types<a class="headerlink" href="#vcl-and-c-data-types" title="Permalink to this headline">¶</a></h2> <p>VCL data types are targeted at the job, so for instance, we have data -types like “DURATION” and “HEADER”, but they all have some kind of C +types like "DURATION" and "HEADER", but they all have some kind of C language representation. Here is a description of them, from simple to nasty.</p> <dl class="docutils"> @@ -140,12 +140,12 @@ <dt>DURATION</dt> <dd><p class="first">C-type: <tt class="docutils literal"><span class="pre">double</span></tt></p> <p>Units: seconds</p> -<p class="last">A time interval, as in “25 minutes”.</p> +<p class="last">A time interval, as in "25 minutes".</p> </dd> <dt>TIME</dt> <dd><p class="first">C-type: <tt class="docutils literal"><span class="pre">double</span></tt></p> <p>Units: seconds since UNIX epoch</p> -<p class="last">An absolute time, as in “Mon Sep 13 19:06:01 UTC 2010”.</p> +<p class="last">An absolute time, as in "Mon Sep 13 19:06:01 UTC 2010".</p> </dd> <dt>STRING</dt> <dd><p class="first">C-type: <tt class="docutils literal"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></tt></p> @@ -155,7 +155,7 @@ <div class="highlight-python"><div class="highlight"><pre><span class="n">mymod</span><span class="o">.</span><span class="n">foo</span><span class="p">(</span><span class="n">req</span><span class="o">.</span><span class="n">http</span><span class="o">.</span><span class="n">foobar</span><span class="p">);</span> </pre></div> </div> -<p>If there were no “foobar” HTTP header, the vmod_foo() +<p>If there were no "foobar" HTTP header, the vmod_foo() function would be passed a NULL pointer as argument.</p> <p class="last">When used as a return value, the producing function is responsible for arranging memory management. Either by @@ -177,17 +177,17 @@ turn would return another freshly allocated string with the modified result. Remember: strings in VCL are <tt class="docutils literal"><span class="pre">const</span></tt>, we cannot just modify the string in place.</p> -<p>What we do instead, is declare that <tt class="docutils literal"><span class="pre">toupper()</span></tt> takes a “STRING_LIST” +<p>What we do instead, is declare that <tt class="docutils literal"><span class="pre">toupper()</span></tt> takes a "STRING_LIST" as argument. This makes the C function implementing <tt class="docutils literal"><span class="pre">toupper()</span></tt> a vararg function (see the prototype above) and responsible for considering all the <tt class="docutils literal"><span class="pre">const</span> <span class="pre">char</span> <span class="pre">*</span></tt> arguments it finds, until the -magic marker “vrt_magic_string_end” is encountered.</p> +magic marker "vrt_magic_string_end" is encountered.</p> <p>Bear in mind that the individual strings in a STRING_LIST can be NULL, as described under STRING, that is why we do not use NULL as the terminator.</p> <p>Right now we only support STRING_LIST being the last argument to a function, we may relax that at a latter time.</p> -<p class="last">If you don’t want to bother with STRING_LIST, just use STRING +<p class="last">If you don't want to bother with STRING_LIST, just use STRING and make sure your sess_workspace param is big enough.</p> </dd> <dt>PRIV_VCL</dt> @@ -208,13 +208,13 @@ <p>It is often useful for library functions to maintain local state, this can be anything from a precompiled regexp to open file descriptors and vast data structures.</p> -<p>The VCL compiler supports two levels of private pointers, “per call” -and “per VCL”</p> -<p>“per call” private pointers are useful to cache/store state relative +<p>The VCL compiler supports two levels of private pointers, "per call" +and "per VCL"</p> +<p>"per call" private pointers are useful to cache/store state relative to the specific call or its arguments, for instance a compiled regular expression specific to a regsub() statement or a simply caching the last output of some expensive lookup.</p> -<p>“per vcl” private pointers are useful for such global state that +<p>"per vcl" private pointers are useful for such global state that applies to all calls in this VCL, for instance flags that determine if regular expressions are case-sensitive in this vmod or similar.</p> <p>The way it works in the vmod code, is that a <tt class="docutils literal"><span class="pre">struct</span> <span class="pre">vmod_priv</span> <span class="pre">*</span></tt> is @@ -227,15 +227,15 @@ vmod_priv_free_f *free; };</pre> </div> -<p>The “priv” element can be used for whatever the vmod code wants to +<p>The "priv" element can be used for whatever the vmod code wants to use it for, it defaults to a NULL pointer.</p> -<p>The “free” element defaults to NULL, and it is the modules responsibility -to set it to a suitable function, which can clean up whatever the “priv” +<p>The "free" element defaults to NULL, and it is the modules responsibility +to set it to a suitable function, which can clean up whatever the "priv" pointer points to.</p> <p>When a VCL program is discarded, all private pointers are checked -to see if both the “priv” and “free” elements are non-NULL, and if -they are, the “free” function will be called with the “priv” pointer -as only argument. The “per vcl” pointers is guaranteed to be the +to see if both the "priv" and "free" elements are non-NULL, and if +they are, the "free" function will be called with the "priv" pointer +as only argument. The "per vcl" pointers is guaranteed to be the last one inspected.</p> </div> </div> @@ -296,7 +296,7 @@ <li class="right" > <a href="shmem.html" title="Shared Memory Logging and Statistics" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/vmod_std.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>vmod_std — Varnish version 3.0.1 documentation</title> + <title>vmod_std — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="Shared Memory Logging" href="vsl.html" /> <link rel="prev" title="VMOD - Varnish Modules" href="vmod.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="vmod.html" title="VMOD - Varnish Modules" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -75,7 +75,7 @@ <div class="section" id="description"> <h3>DESCRIPTION<a class="headerlink" href="#description" title="Permalink to this headline">¶</a></h3> <p>The Varnish standard module contains useful, generic function that -don’t quite fit in the VCL core, but are still considered very useful +don't quite fit in the VCL core, but are still considered very useful to a broad audience.</p> </div> <div class="section" id="functions"> @@ -90,7 +90,7 @@ <dt>Description</dt> <dd>Converts the STRING S to upper case.</dd> <dt>Example</dt> -<dd>set beresp.http.x-scream = std.toupper(“yes!”);</dd> +<dd>set beresp.http.x-scream = std.toupper("yes!");</dd> </dl> </div> <div class="section" id="tolower"> @@ -103,7 +103,7 @@ <dt>Description</dt> <dd>Converts the STRING to lower case.</dd> <dt>Example</dt> -<dd>set beresp.http.x-nice = std.tolower(“VerY”);</dd> +<dd>set beresp.http.x-nice = std.tolower("VerY");</dd> </dl> </div> <div class="section" id="set-up-tos"> @@ -152,7 +152,7 @@ <dt>Description</dt> <dd>Logs string to the shared memory log.</dd> <dt>Example</dt> -<dd>std.log(“Something fishy is going on with the vhost ” + req.host);</dd> +<dd>std.log("Something fishy is going on with the vhost " + req.host);</dd> </dl> </div> <div class="section" id="syslog"> @@ -165,7 +165,7 @@ <dt>Description</dt> <dd>Logs <em>string</em> to syslog marked with <em>priority</em>.</dd> <dt>Example</dt> -<dd>std.syslog( LOG_USER|LOG_ALERT, “There is serious troble”);</dd> +<dd>std.syslog( LOG_USER|LOG_ALERT, "There is serious troble");</dd> </dl> </div> <div class="section" id="fileread"> @@ -178,10 +178,10 @@ <dt>Description</dt> <dd>Reads a file and returns a string with the content. Please note that it is not recommended to send variables to this -function the caching in the function doesn’t take this into +function the caching in the function doesn't take this into account. Also, files are not re-read.</dd> <dt>Example</dt> -<dd>set beresp.http.x-served-by = std.fileread(“/etc/hostname”);</dd> +<dd>set beresp.http.x-served-by = std.fileread("/etc/hostname");</dd> </dl> </div> <div class="section" id="duration"> @@ -197,7 +197,7 @@ (weeks) units. If it fails to parse the string <em>fallback</em> will be used</dd> <dt>Example</dt> -<dd>set beresp.ttl = std.duration(“1w”, 3600);</dd> +<dd>set beresp.ttl = std.duration("1w", 3600);</dd> </dl> </div> <div class="section" id="integer"> @@ -328,7 +328,7 @@ <li class="right" > <a href="vmod.html" title="VMOD - Varnish Modules" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/reference/vsl.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Shared Memory Logging — Varnish version 3.0.1 documentation</title> + <title>Shared Memory Logging — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="The Varnish Reference Manual" href="index.html" /> <link rel="next" title="Frequently asked questions" href="../faq/index.html" /> <link rel="prev" title="vmod_std" href="vmod_std.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="vmod_std.html" title="vmod_std" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">The Varnish Reference Manual</a> »</li> </ul> </div> @@ -70,7 +70,7 @@ | +--------------------------- "RFC" or "VCL" +------------------------------ object XID</pre> </div> -<p>The last three fields are only present in “RFC” headers.</p> +<p>The last three fields are only present in "RFC" headers.</p> <p>Examples:</p> <div class="highlight-python"><pre>1001 RFC 19 -1 -1 1312966109 4 0 0 23 1001 VCL 10 -1 -1 1312966109 4 @@ -84,7 +84,7 @@ <h2>Gzip records<a class="headerlink" href="#gzip-records" title="Permalink to this headline">¶</a></h2> <p>A Gzip record is emitted for each instance of gzip or gunzip work performed. -Worst case, an ESI transaction stored in gzip’ed objects but delivered +Worst case, an ESI transaction stored in gzip'ed objects but delivered gunziped, will run into many of these.</p> <p>The format is:</p> <div class="highlight-python"><pre>%c %c %c %d %d %d %d %d @@ -160,7 +160,7 @@ <li class="right" > <a href="vmod_std.html" title="vmod_std" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >The Varnish Reference Manual</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/search.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Search — Varnish version 3.0.1 documentation</title> + <title>Search — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -23,7 +23,7 @@ <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/searchtools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="index.html" /> <script type="text/javascript"> jQuery(function() { Search.loadIndex("searchindex.js"); }); </script> @@ -37,7 +37,7 @@ <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="General Index" accesskey="I">index</a></li> - <li><a href="index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -85,7 +85,7 @@ <li class="right" style="margin-right: 10px"> <a href="genindex.html" title="General Index" >index</a></li> - <li><a href="index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/searchindex.js ^ |
@@ -1 +1 @@ -Search.setIndex({objects:{},terms:{saver:10,bear:47,secondli:10,prefix:[56,21,47],sleep:[55,46],vcl_acl:42,oldest:18,effienc:15,disappear:19,whose:[56,15],kqueue:[46,55,6],"const":[47,12],spew:6,sorri:16,under:[0,47,35,2,3,38,5,7,41,8,50,23,42,55,56,46,58,59,15],sha256:15,worth:[12,6],merchant:56,everi:[0,52,18,20,37,28,6,13,49,59,51],risk:[56,55,46],vastli:5,"void":[0,47,12],ptxmcgnnsdxsvdmv:15,affect:[56,5,55,43,46],vast:47,school:[27,32,2],tabyt:46,cmd:8,upload:15,string_list:47,session_max:[55,46],geoip:[],quilt:1,xsltproc:11,geekiest:16,direct:[25,55,56,45,15,46],enjoi:[20,48],consequ:56,second:[0,43,47,35,19,38,1,7,27,8,41,10,23,55,46,6,56,44,57,58,15],vanrishadm:15,libxslt:11,even:[54,47,16,2,5,31,23,25,56,27,55,43,28,44,13,57,33,59,46],anywher:57,thunder:10,lookback:20,fetch_maxchunks:[55,46],"new":[51,52,18,19,5,27,55,43,28,1,56,45,46,33,15],net:56,ever:[16,32,14,1],told:12,elimin:[55,46],kilobyt:[55,46],nanni:31,never:[47,6,46,55,44,57,59,31],accus:16,here:[33,47,44,5,6,23,40,39,25,10,12,56,45,46,14,59,15],herd:10,met:56,debugg:[55,46],path:[37,57,55,46],interpret:[5,46],acceptor:[55,46],dry:1,anymor:29,robin:[56,26,23,45],precis:[15,1],lingo:47,smoke:14,permit:[56,33,55,8,46],c89a:15,portabl:[44,12],carl:16,storage_malloc:14,trobl:0,unix:[25,30,44,47,15],"0x80000000":[55,46],total:[2,27,55,1,29,46,15],unit:[0,56,47,55,46],highli:57,plot:23,describ:[47,41,37,23,15,46],would:[5,12,8,6,18,20,27,37,23,28,29,32,52,43,44,45,46,47,57,56,16,59],lwp:59,gloss:23,choosen:15,call:[5,8,10,6,18,22,23,25,27,29,31,33,39,43,44,45,51,47,57,52,54,56,48],telegraph:33,recommend:[0,37,11,16,59,46],directornam:56,type:[0,47,19,20,5,39,37,26,23,11,6,56,49,46,14,15],until:[47,20,39,24,23,55,12,56,16,46],vmod_foo:47,autogen:11,relax:[47,32],relat:15,notic:[56,47,14,8,1],hurt:[46,55,12],warn:49,phone:23,warm:50,jpg:[13,25,56],loss:56,hole:[2,33],hold:[10,22,33],must:[47,3,20,27,40,10,55,1,56,29,30,46,45,59,15],worst:[4,44],join:[0,54,33,6],setup:59,work:[6,16,4,5,1,10,11,12,37,19,20,21,23,25,27,30,46,33,39,43,44,49,31,47,48,24,55,56,57,59],coalesc:[10,45],erl:[35,3,7,38,42,56,58,46],root:[37,30],"16gb":23,overrid:[25,23,55,56,59,46],give:[33,47,16,19,31,52,53,23,55,43,28,6,45,57,14,59,46],txreq:8,indic:[36,47,19,5,46,8,25,56,55,43,13,57,59,15],want:[0,37,47,48,16,19,20,5,51,25,11,43,12,56,45,31,14,59,33],vmod_std:[0,26,56],viceminist:32,attract:[27,23],txrespons:42,end:[0,1,19,6,23,8,25,10,55,12,56,49,46,15],quot:[56,33,15],polic:1,i686:14,how:[3,5,6,9,10,1,14,37,18,19,20,22,25,23,28,46,34,52,44,45,31,47,48,49,51,53,55,56,57,59],hot:28,confin:20,answer:[20,51,57,2,33],negoti:23,config:[52,23,11,56,45,46],connect_timeout:[56,55,46],"128k":[55,46],polit:2,dialect:44,dialin:[25,56],mess:40,chines:32,earlier:[23,42],diagram:2,befor:[47,16,18,5,44,52,25,56,23,11,43,6,31,55,30,46,33,15],wrong:[22,11,14,6],router:[25,56],cli_req:2,law:32,averag:[38,7,1],attempt:[50,5,55,44,56,46],third:[19,27,47,15],cnt_session:[55,46],exclud:[42,38,58,35,3],insuffer:44,receiv:[3,5,8,25,56,42,55,31,46,15],maintain:[45,47],environ:[37,12],max_restart:[56,55,46],enter:[19,56,10,8,15],exclus:7,ethernet:[16,44],order:[18,5,44,10,11,43,6,56,30,14,59,46],origin:[38,54,7,59],feedback:[39,46],objhead:[42,55,46],over:[50,3,19,20,7,23,41,56,27,6,38,49,46],fall:[56,49],becaus:[16,1,20,6,23,44,25,27,55,43,12,57,46],jpeg:[5,31],flexibl:23,vari:[34,18,5,56,23,13,59],digest:[46,55,15],streamlin:33,cli:[2,18,19,20,41,8,42,55,46,14,15],fit:[0,23,55,56,57,46],cld:2,fix:[6,11,59,1],better:[6,46,12,57,32,15],persist:[5,55,23,46],easier:[51,57,59,1],them:[2,3,5,6,10,11,12,15,20,37,23,28,29,32,35,39,42,43,44,45,46,47,48,56,57,58],gnu99:[55,46],woken:2,thei:[2,3,12,10,1,13,15,16,18,19,20,23,28,29,31,32,33,35,38,39,42,43,44,46,47,48,55,56,57,58,59],proce:[56,11,31],priv_cal:47,safe:[43,59],"break":[56,48,12],band:44,bang:12,promis:23,thaumathurg:47,interrupt:[56,15],wedg:6,rumour:6,choic:[23,12],arrow:2,each:[34,35,4,20,38,46,58,55,43,6,56,45,57,49,59,15],debug:[50,51,8,23,42,55,6,46,14,59,15],went:6,side:[34,47,19,21,40,23,49,57,59],mean:[51,47,48,20,31,23,27,11,43,6,56,55,45,46,15],doddl:1,pdflatex:27,reqstart:[19,23,42],spider:31,network:[25,56,46,55,15],goe:[6,22,37,23,12,45,14],god:10,content:[0,2,3,5,8,10,13,45,15,36,18,25,23,46,37,41,43,49,31,47,51,54,55,56,59],rewrit:[27,55,23,46],adjust:[56,29],rare:6,reader:[34,43],quantifi:0,forth:[19,20,52,25],outburst:[36,48],cli_auth:15,barrier:[48,2],nightmar:57,situat:[23,46,55,15],free:[23,55,47,46],standard:[0,26,16,8,46],precompil:47,workaround:52,haywir:6,openssl:[57,15],filter:[18,19,38,53,15,14,33],ish:[20,46,55,40,1],iso:[44,12],isn:[37,25,23,56,15,59,46],regress:[11,12],onti:52,confus:[1,39,23,6,29,16],lru_interv:[55,46],varnishreplai:[26,50],rang:[23,55,46],httpgarbag:42,independ:27,wast:[49,57,55,46],rank:[26,53,38,1],restrict:[37,27,15],hook:56,instruct:[5,23,25,10,11,13,14,59,31],alreadi:[33,16,5,46,8,55,1,57,14,15],primari:[47,55,46],xid:[4,56,23],rewritten:[5,38],top:[2,35,53,54,6,58,31],speci:46,sometim:[59,10,14,28,1],master:[19,55,6,46,14,31],too:[46,11,1,29,57,55,33],cassett:16,critter:15,john:[2,1],listen:[8,37,55,15,14,46],murder:1,consol:14,namespac:59,tool:[50,2,21,53,26,27,28,44,48,59],clueful:59,travers:23,wisdom:32,somewhat:[10,47,59,12],conserv:[21,46],technic:[2,12],tex:27,silli:44,target:47,keyword:[25,29,49,56,59],provid:[47,2,5,54,55,43,6,56,46],tree:[47,57,46],zero:[16,5,41,55,43,15,46],project:[27,32,12],matter:[27,11,44],frankli:27,"5mm":1,minut:[0,47,10,11,6,56,49],mini:44,fashion:45,ram:[23,55,46],mind:[23,47,33],automake1:11,parenthes:56,raw:[19,56,1],pessimist:12,manner:46,seen:[38,39,27,43,32,14],seem:[19,37,27,45],incompat:44,minu:57,recreat:[55,46],latter:47,objrequest:42,transmit:[55,46],vrt_magic_string_end:47,expens:[47,55,28,46],simplifi:56,plenti:[13,55,46],though:[6,15,1],"0x4196af":6,lastus:56,object:[51,58,56,2,18,4,5,23,53,25,26,10,55,31,28,13,49,46,21,59,15],legibl:56,supress:16,regular:[47,35,3,21,38,23,25,26,27,42,43,12,56,58,15],bsd:[23,44],objstatu:42,tradit:46,"0x00000001":[55,46],don:[0,37,47,16,21,25,11,56,55,33,32,59,46],"0x00000004":[55,46],vcl_fetch:[5,22,10,40,25,23,56,29,49,51,59,31],doc:[27,23],"0x00000008":[55,46],flow:33,doe:[2,16,5,12,10,6,14,15,17,22,23,37,27,29,31,33,52,43,46,47,57,51,53,55,56,48,59],declar:[47,20,26,10,56,45],fishi:0,encodign:13,wildcard:[20,23],gzip_stack_buff:[55,46],left:[2,35,7,53,27,56,58],scream:0,came:[32,44],thread_pool_min:[55,46],othervis:25,pragma:59,pope:16,random:[0,36,27,26,10,1,56,45,48,33],syntax:[20,5,41,26,11,56,29,46,15],pipe_timeout:[55,46],directli:[56,21,23],radio:16,pkg:11,admin_network:56,radic:27,protocol:[34,16,3,23,55,56,46,31],priv:47,absolut:[47,39,59,46],sewn:23,menu:27,explain:[18,5,22,44,59,33],configur:[9,24,11,15,37,20,22,25,26,23,51,34,46,43,44,45,31,52,54,56,57,59],apach:[17,23,51,26,3],bust:14,busi:[56,18,1],rick:59,"0x42bce1":6,thread_pool_purge_delai:[55,46],txurl:[42,59,53],nasti:[47,6],watch:[23,59,28,1],assum:[2,5,37,44,57,46],report:[22,1,5,6,12,16],txresp:8,transpir:44,bar:[56,47,59,51],ietf:59,log_local_address:[55,46],"public":[56,23,59],reload:[19,46],bad:[18,1,55,6,46,33],"sm\u00f8rgrav":[35,3,7,38,42,56,58,46],ban:[34,18,22,26,23,55,56,29,46,59,15],metadata:[59,18],vernisag:23,respond:14,gzip_tmp_spac:[55,46],pummel:20,motherboard:23,roadmap:49,nul:47,num:42,mandatori:[50,12],result:[47,35,3,38,5,44,7,39,41,52,42,55,43,12,31,45,15,58,59,46],respons:[47,2,3,31,8,25,23,55,56,46,59,15],fail:[0,27,8,25,10,11,43,55,46],themselv:[44,15],so_sndtimeo:[55,46],best:[20,51,23,27,11,55,57,46],subject:[21,33],awar:[18,55,28,6,59,46],said:[30,1],hopefulli:[5,14,1],databas:47,field_list:7,figur:[32,44,11,6],"0x00004000":[55,46],awai:[3,42,55,43,57,46],irc:[33,22,14,6],approach:[20,39],accord:[56,31,1],triplet:20,extend:[3,59,40,1],extent:56,statsess:42,toler:[48,12],setsockopt:[55,46],protect:27,expos:37,howev:[56,21],against:[2,18,25,55,56,15,46],do_stream:56,uncertainti:12,com:[18,51,25,23,56,45,15,49,59,33],fileformat:27,con:15,compromis:2,suggest:[36,21,33,1],assur:49,host_head:56,"16k":46,foobar:[47,5,23],"16g":28,exemplari:56,vcl_pipe:56,diff:27,guid:[36,21,59,40],truss:[14,6],nake:39,reciev:[19,59],liabil:56,tinu:15,three:[47,2,4,25,23,6,56,49],been:[2,39,24,25,23,55,56,29,15,32,33,59,46],accumul:[46,55,2,18],much:[33,22,2,19,20,1,37,23,11,43,28,12,55,57,14,59,46],dlopen:[55,46],interest:[21,6,25,27,11,12,59,33],basic:[34,19,20,54,40,25,23,12,56,59],vcl_deliv:[56,47],http_req:2,life:[12,10,6,1],xxx:[23,47,6],worker:[47,18,31,1,23,55,43,6,46,14,15],telnet:[27,16,52,15],argument:[47,3,44,41,23,11,43,6,56,29,15],vcc_err_unref:[55,46],virtualhostbas:23,cli_buff:[46,55,15],child:[2,31,46,8,55,6,57,14,15],spin:6,ident:[20,23,6,56,45,46],aix:[44,12],prefer_ipv6:[55,46],servic:[0,16,2,6,56,46,15],zlib:57,commerci:[22,33],calcul:[32,59,15],neat:43,alloc_seq:43,occat:33,sting:47,conf:14,tediou:44,"0x43ef68":6,thread_pool_stack:[55,46],sever:[0,54,52,21,23,53,25,10,1,56,45,15],perform:[18,4,23,10,55,12,45,57,46],nazi:20,make:[6,2,5,1,10,11,12,13,15,36,21,23,24,37,27,28,29,31,32,33,39,43,49,46,47,51,52,53,54,55,56,57,59],complex:[57,40,33],split:[34,46,55,6],vmod_dir:[55,46],complet:[21,46,8,53,25,55,40,56,57,14,15],raid:32,evid:23,hang:[33,6],hand:[1,39,23,44,56,31],fairli:30,afraid:12,portal:28,tune:[19,5,48,53],kid:57,kept:[56,59,28,46],undesir:52,bewar:25,thu:15,inherit:2,client:[3,5,8,10,6,13,18,19,21,25,26,23,31,35,38,46,42,51,52,53,55,56,58,59],cooloff:[55,46],thi:[0,2,3,5,6,7,8,10,11,12,13,14,15,18,19,20,21,22,23,25,27,29,31,33,34,35,38,41,40,42,43,44,45,46,47,16,49,50,51,52,53,54,55,56,57,58,59],mother:14,gzip:[4,5,26,55,56,1,13,48,46],programm:27,everyth:[47,19,5,22,21,23,53,11,12,57,14],unchang:5,identifi:[56,20,59],just:[37,47,16,2,20,31,1,44,53,25,55,43,12,13,29,45,33,32,14,59,46],bandwidth:5,lurker:[46,55,18],victim:1,unbuff:42,yet:[10,57,47,6],languag:[34,47,52,39,25,26,23,44,56,49,31,46],previous:29,"0x00000010":[55,46],easi:[59,2,6],interfer:49,royal:27,must_reload:[55,46],logformat:51,"0x00010000":[55,46],els:[22,5,6,56,10,12,13,45,57,14,51],save:5,hat:[22,11],vcl_return:42,gave:44,applic:[37,34,21,24,25,56,10,13,45,59],log_hashstr:[55,46],ktrace:6,background:18,elabor:14,dreamt:57,measur:[55,38,46],daemon:[26,46,42,3],rxrequest:[19,42],specif:[47,20,12,25,44,56,14,59,31],arbitrari:[19,56,45],manual:[0,36,47,50,35,3,38,22,7,41,8,26,42,6,56,46,58,15],darn:16,ncsa:[17,31,26,3],remind:33,channel:[22,2,33],hung:6,unnecessari:[5,21],el5:11,www:[52,23,11,56,49,15,59,51],right:[47,1,6,7,23,44,27,55,12,56,46],old:[35,3,19,20,38,8,58,10,42,14,59],deal:[20,46,10,55,56,57,33],hit_for_pass:[56,29,23,22],interv:[56,45,55,47,46],crown:44,somehow:20,percentag:[55,46],intern:[56,55,46],varnishd:[0,3,7,8,24,11,6,14,15,20,37,26,46,35,38,41,42,43,31,50,53,56,58],indirect:56,successfulli:[25,56],insensit:[19,56,23],cooper:[35,3,7,38,8,42,56,46],vcl_hash:56,bottom:27,acceptor_sleep_decai:[55,46],fpic:[55,46],haxlw:6,track:[39,21,14,33],healthcheck:56,fol:46,condit:[5,55,6,56,46,15],foo:[0,47,41,23,56,45,51,14,59,15],localhost:[37,18,19,41,8,25,54,56,15,46],core:[0,8,55,6,57,46],plu:[57,55,46],sensibl:[5,12,33,44,1],uncompress:[5,55,46],burn:57,st_dev:43,unreason:20,repositori:11,post:[56,33],chapter:[34,55,59,46],http_max_hdr:[55,46],obj:[25,23,56,29,49,15],slightli:5,simul:[31,6],personel:2,commit:20,produc:[47,5,27,23,44,46],net5501:1,"float":47,contriv:47,bound:[14,12],down:[25,55,56,45,15,14,59,46],resili:45,nuke_limit:[55,46],wrap:27,opportun:32,storag:[47,5,8,53,37,26,23,55,43,28,46],gnnsdxsvdmvfympg:15,git:[11,1],crowd:6,suffici:23,boutiqu:47,transform:1,happi:1,avail:[3,7,8,10,11,12,14,15,18,25,35,38,40,42,43,49,46,47,50,55,56,58],gif:[13,25],reli:[56,59,12],editor:[27,54,1],overhead:[55,28,46],clockskew:[55,46],lowest:39,head:[56,23,55,59,46],form:[56,16,50,6],offer:[33,46],forc:[20,5,23,55,56,59,46],hitrat:[37,34,14,59],linpro:[56,8,33],dead:[23,2],heap:18,renam:[29,22],"true":[5,39,40,11,6,56,29,49],mymod:47,reset:5,rxlosthead:42,bugfix:6,vcl_init:56,maximum:[20,5,55,56,15,14,46],tell:[16,19,20,5,44,54,25,23,11,6,13,45,57,33],strace:[14,6],minor:12,fundament:[20,54],"0x00002000":[55,46],autoconf:11,retir:20,nnn:15,vclexampl:23,openbsd:[30,12],semicolon:56,fritzvold:[41,50],nobodi:[10,2],diagnost:[55,59,46],workerthread:[55,46],exist:[52,3,39,46,23,43,44,56,57,15],trip:6,shit:1,when:[2,3,5,7,8,10,6,13,14,15,25,18,19,20,21,37,23,29,31,35,38,52,42,43,44,45,46,47,16,49,53,54,55,56,57,58,59],actor:2,fs2:56,role:[56,59,2],test:[50,4,44,5,1,54,8,26,24,11,40,12,56,30,31,49,15],tie:37,unlimit:46,epel6:11,intend:[56,34,6],expiry_sleep:[55,46],asterisk:15,fell:2,intent:12,consid:[0,47,3,28,56,59,15],outdat:18,younger:56,longer:[41,10,55,29,15,46],sighup:[42,3],ignor:[35,3,5,38,37,23,42,55,56,29,46,58,59,15],distro:12,time:[6,3,4,5,1,11,12,14,15,18,19,20,25,26,23,30,31,32,33,38,39,40,43,44,49,46,47,16,50,51,53,55,56,57,59],push:[52,46,55,43,15],serious:[40,12],concept:[54,43,1],cli_timeout:[55,46],snif:44,priv_vcl:47,skip:[5,42,11],global:[56,47,55,46],focus:33,known:[10,16,32],signific:[23,28,15],netbsd:[30,12],millisecond:[55,46],decid:[2,25,23,56,49,16,59],middl:1,depend:[22,23,37,27,11,6,56,59,31],graph:53,readabl:[27,47,12],"_that_":2,default_ttl:[56,55,46],certainli:[47,12,6],vec:5,addon:59,sourc:[54,47,44,22,23,46,53,27,11,12,56,55,57,33,15],string:[0,47,16,3,5,22,39,55,56,29,46,15],"3am":2,revalid:59,varnishncsa:[17,35,3,38,7,8,26,42,43,31,58,46],lru:[55,28,46],word:[56,27,22,23,15],exact:[55,46],cool:[43,2],"0x00000020":[55,46],hour:0,administr:[37,34,32,2],level:[47,5,6,8,27,55,12,46],did:[16,2,5,12,23,44,56,29,48],die:8,leftov:23,iter:8,item:[56,29,46,55,15],ccf_panic:6,cooki:[0,34,19,21,37,25,23,6,56,49,59,15],round:[56,26,23,45,46],prevent:[56,20,23],brave:11,peek:27,trend:1,compens:23,sign:[55,2,46],cost:[23,16,32],gzipe:5,unprotect:2,port:[34,52,16,50,19,20,41,24,37,23,11,56,55,45,46,54,14,15],comparis:15,appear:[56,23,46,55,15],cecili:[41,50],repli:[56,55,32,41,46],current:[0,3,51,46,23,42,6,56,57,15],rephras:6,gener:[0,33,1,2,44,6,39,40,9,56,23,55,28,12,13,46,14,15],satisfi:[46,11,12],slow:[0,55,46],modif:56,address:[37,16,50,20,51,38,23,8,41,25,10,55,56,49,46,14,15],along:[0,47,18,1,13,59],wait:[35,2,7,41,8,10,55,6,56,58,46],box:[23,6],buck:12,openinfo:51,errorhandl:6,txrequest:42,esi_syntax:[55,46],queue:[10,55,46],behav:[52,31,44],dusti:20,weird:[56,39,12],gzip_memlevel:[55,46],commonli:[38,53],ourselv:12,love:[47,12],humour:59,tweak:[5,46,55,48,6],modul:[0,36,47,2,26,55,51,46],prefer:[3,20,56,55,13,46],marker:[10,47],instal:[36,22,54,23,11,30],mobil:[23,45],regex:[35,3,19,38,23,42,56,58],memori:[0,2,3,4,25,14,17,19,37,26,23,28,35,38,41,42,43,46,47,53,55,56,58],subvert:2,franca:27,perl:[56,59],everybodi:[33,6],live:[18,12,27,44,56,46,59,33],handler:56,"417a":16,kristian:[56,58],ixslvvxrgkjptxmc:15,checkout:11,twitterif:18,afford:23,peopl:[1,18,20,6,23,12,29,16,59,33],clue:[14,33],suckag:[48,16],drown:33,prototyp:[0,47],examin:[56,5,43,6],effort:[57,12],easiest:59,religi:16,graphic:27,prepar:56,uniqu:[51,6],cat:15,descriptor:[47,46,55,6],hardest:47,can:[0,6,2,5,1,7,8,9,10,11,12,14,15,17,18,19,20,21,23,24,25,27,28,29,30,31,32,33,37,38,39,40,41,42,43,44,45,46,47,49,51,52,53,54,55,56,57,59],purpos:[24,39,25,54,56,46,59,51],ixsl:15,materi:56,heart:11,sourcefil:15,stream:[5,23],fragment:[49,55,40,46],smalloc:14,"1980i":31,backslash:[56,15],agent:[34,3,38,53,13,45,59,51],topic:[34,16,40,33],drawer:16,abort:57,"14b":6,hash_always_miss:56,unfortun:[21,11],occur:[29,38,53],alwai:[47,2,3,5,6,10,55,12,56,46,15],multipl:[35,3,20,26,23,42,55,43,56,58,46],oslo:1,charset:[56,23],ping:[19,46,55,15],write:[47,2,3,19,20,44,23,46,27,42,55,43,12,56,57,32,15],purg:[34,18,22,25,23,55,56,29,59,46],pure:[43,2],xhtml:[56,23],parameter:41,map:[45,23,32,14],product:[37,10,27,46],ban_lurker_sleep:[46,55,18],book:[21,32,1],max:[4,14,59,46],clone:11,spot:[27,2,33],usabl:[20,6],intrus:[33,12],mac:[16,12],mad:44,mai:[47,48,16,31,6,39,23,11,12,56,55,57,33,46],joani:59,suck:27,data:[47,2,26,4,1,39,25,19,10,55,43,28,6,56,45,57,14,59,46],grow:57,man:[52,21,40,23,56,14,15],ssm:[8,46],autotool:11,practic:[5,27,2],"0x00001000":[55,46],disabigu:20,stdin:[41,46],favorit:54,inform:[48,20,38,53,23,11,6,56,55,45,33,14,59,46],"switch":[20,24,25,27,56,46],wrt54g:12,combin:[17,51,42,26,3],stig:[8,46],talk:[47,20,27,56,16,15],shield:10,approv:23,ttl:[0,18,4,23,25,26,10,42,55,56,29,49,59,46],clock_skew:[55,46],still:[0,1,23,44,25,10,6,49,14,59],pointer:[20,47,26],dynam:[56,43],vtc:[11,8],group:[3,19,38,42,55,56,45,16,46],monitor:53,polici:[56,20,49,40,33],norwai:27,instantli:[20,47],platform:[27,48,14,12],window:[19,56,45,55,46],curli:56,mail:[22,33],main:[56,33,7,6],do_gzip:[56,5],non:[47,44,41,27,23,55,12,56,46,15],synopsi:[0,50,35,3,38,7,41,8,26,42,58,46],smarter:27,objprotocol:42,initi:[56,45,42,47,46],therebi:18,half:[27,55,46],anecdot:23,now:[5,12,24,11,1,45,25,19,20,22,23,14,37,27,29,39,40,44,49,47,16,10,53,54,56,57,59],widespread:27,nor:[35,3,38,42,55,56,58,46],introduct:23,wont:14,wagon:44,term:[31,59,12],name:[47,35,3,20,21,7,41,25,56,23,42,55,38,46,58,15],drop:[33,55,46],crypto:57,separ:[34,47,2,7,56,55,13,57,46],pcrepattern:21,careless:16,between_bytes_timeout:[56,55,46],collaps:0,compil:[47,2,22,23,11,44,56,29,31,55,46],domain:[25,56,23,2],replai:[26,50],replac:[22,37,55,44,56,29,16,46],individu:[23,49,47,40,15],yeah:16,vcl_trace:[46,55,42,6],contributor:[56,12],redistribut:56,significantli:[57,44],year:[27,1],happen:[2,18,5,1,23,40,27,55,43,6,33,14,46],shown:47,space:[16,19,8,23,55,28,15,46],repetoir:39,storage_fil:[55,8,46],priviledg:2,rational:59,internet:[16,2],ironi:[6,1],correct:[52,51],after:[16,35,3,38,25,42,55,43,56,33,58,46],varnishlog:[17,50,35,3,19,38,7,8,58,26,23,42,6,31,14,59,46],state:[36,47,20,23,55,46],migrat:20,xhtml1:[56,23],million:[23,1],libpcre3:11,theori:[56,5],ebcdic:31,org:[52,23,53,27,11,1,56,46,59,33],"byte":[52,3,4,5,46,25,56,55,31,57,58,15],rfc1884:16,vcc_if:47,care:[47,16,11,12,45,48,59,31],reusabl:56,wai:[47,16,1,2,18,20,6,23,40,41,10,55,43,12,56,44,57,33,59,46],badli:13,waiter:[55,46],dunno:8,"10mb":15,synchron:[55,46],shm:[55,46],thing:[47,2,20,5,1,44,21,28,6,45,57,14,46],place:[47,18,52,10,6,16,14,33],unwis:46,principl:32,think:[16,48,2,18,20,31,1,23,44,27,6,45,57,32,49,46],frequent:[9,36,38,59],first:[3,4,5,6,24,1,14,15,18,19,27,28,32,33,38,40,42,45,46,47,16,10,54,55,56,57,59],oper:[48,2,44,22,39,8,41,25,56,23,11,43,6,13,29,46,55,15],redhat:[22,11],carri:[59,57,28,2],onc:[36,20,7,23,11,6,38,29],yourself:2,reopen:[42,3],fetcher:[55,46],fast:[20,46,36,55,6],open:[33,47,20,6,24,8,23,11,43,12,55,46,54,14,15],size:[34,3,58,8,53,26,23,55,28,1,56,46,14,15],given:[3,20,39,8,41,23,46,15],sheet:57,teenag:1,autocrap:[48,44],paramt:[55,46],lognam:3,demonstr:56,conveni:[47,33],amonst:46,especi:59,copi:[51,5,56,10,42,55,44,13,46,33],resons:[55,46],specifi:[47,50,35,3,38,51,7,41,37,52,42,55,28,56,46,58,15],blacklist:10,enclos:[56,46,15],mostli:[25,55,56,46,59,33],quad:46,grunt:32,than:[2,3,5,6,10,11,1,15,20,22,23,27,33,39,41,42,44,46,16,55,56,57,59],png:[13,25,5,18],serv:[0,18,31,23,53,25,56,10,28,13,45,33,14,15],wide:59,glossi:23,sess_workspac:[47,55,46],posix:[23,44],balanc:[56,23,57,54,31],were:[47,50,35,3,38,41,23,42,44,48,32,58],posit:23,surrog:59,browser:[19,5,37,27,13,31],pre:46,fork:2,sai:[2,5,6,23,25,10,12,45,16],gottcha:39,ani:[33,47,2,3,18,5,6,38,52,53,20,10,55,56,12,31,29,45,46,14,15],subroutin:[25,26,56,40,18],doctyp:[56,23],deliv:[18,4,5,1,25,23,55,12,56,29,31,46],saw:[32,40],engin:[56,57],squar:[46,1],destroi:[55,46],note:[0,19,5,23,40,24,25,10,11,56,55,45,46,32,59,15],schmocument:27,"_end":6,take:[0,34,47,1,6,23,53,37,27,11,43,12,56,29,57,55,59,46],advis:56,noth:[20,47,33,55,46],plattform:30,begin:[8,25,44,56,45,46],sure:[47,2,20,5,6,52,37,56,43,12,13,45,33,59,15],trace:[56,15,55,46,6],normal:[52,35,3,19,5,38,39,25,56,23,42,1,13,58,59],multipli:[23,39],reqend:42,knew:44,compress:[4,5,23,55,1,13,51,46],clearer:29,server1:45,varnishs:[26,58,53],america:33,homepag:1,gunzip:[4,5,55,46],latex:27,synonym:56,later:[47,50,19,38,52,11,44,56,55,46,33],sale:33,"0x4193f6":6,varnishtest:[26,8,31],runtim:[47,46],bumbl:1,patchlevel:13,shop:33,backendreus:42,show:[35,19,44,21,1,41,40,53,56,27,42,55,6,31,46,58,59,15],cheap:28,merit:43,n900:[23,12],concurr:56,permiss:[14,15],hack:11,threshold:[56,45,55,46],corner:[58,35,2,53],boom:6,fifth:27,rotat:[42,3],xml:[7,23,55,56,49,46,31],onli:[2,3,4,5,6,1,13,14,15,37,18,19,20,27,25,23,28,29,31,33,35,38,41,42,43,44,49,46,47,16,50,51,52,55,56,57,58,59],explicitli:[56,46],ratio:[46,55,18],fenc:57,transact:[35,4,19,10,42,6,56,51,14,31],activ:[19,20,5,6,37,55,28,12,56,45,46,49,15],behind:[33,59,12],carrag:15,wood:1,analyz:21,enthusiasm:12,analyt:21,analys:32,overwritten:[42,58,35,3],variou:[50,2,5,56,32,14,59,15],get:[6,2,3,5,1,7,8,10,11,12,14,15,18,19,20,21,22,25,23,31,33,35,38,52,42,43,44,45,46,47,16,54,55,56,57,58,59],stomp:43,auto_restart:[55,46],repo:11,ssl:[57,48],cannot:[47,2,5,27,23,57],ssh:[16,41,2,43],master_pid:43,ssd:23,requir:[52,18,19,23,55,56,46,15,33],truli:20,seldom:18,dramat:40,sidewai:32,stupid:[20,2],mebibyt:46,where:[3,12,8,9,6,14,15,17,20,21,22,27,25,23,29,32,35,38,52,42,43,44,45,46,47,54,55,56,57,58],summari:[15,41,1],wiki:[51,52,21,27,23,15,59,33],kernel:[23,55,43,6,57,46],shm_reclen:[55,46],seal:46,reserv:56,wonder:[10,32,1],detect:[44,55,43,46],enough:[20,47,46,55,6],between:[0,47,35,2,19,20,5,7,41,23,55,56,49,31,58,59,46],"import":[0,47,48,2,20,1,39,25,6,56,29,57,59],across:[56,29],example_director:45,parent:[55,46],typedef:47,cycl:57,jobb:59,come:[37,47,19,21,1,8,25,56,23,6,13,45,16,14,59],"0x00000040":[55,46],quiet:[33,8,12],contract:56,emit:[4,23,55,56,15,46],audienc:0,tutori:[37,34,40,36],"80013339a":6,mani:[4,21,41,46,23,55,43,12,56,45,57,15],clf:3,evict:[28,18],acceler:[36,54,26,23,56,15,59,46],revers:46,overview:[40,53],period:[55,38,7,43,46],insist:8,exploit:2,featur:[19,20,10,23,1],colon:16,toupper:[0,26,47],typic:[5,25,11,56,33,31],poll:[56,20,45,53],damag:[56,16],libvarnish:15,hexdump:15,"0x8006b8b76":6,segfault:40,stretch:39,classic:46,mark:[0,35,53,58,1,56,45,46,49,15],varnish_nam:[35,3,7,38,42,58],listen_address:[55,46],hitpass:42,avian:27,repons:[31,46,55,59,15],bypass:21,thousand:[10,6],workspac:[47,46,55,6],those:[47,20,21,52,10,12,56,57,33],sound:6,myself:[56,2],hdr:8,ungzip:5,tinderbox:12,expban:42,trick:[23,16,45,2,33],career:32,invok:[18,15],outcom:56,shall:56,invoc:44,margin:[57,2],suse:23,advantag:[55,46],stdout:[41,46],henc:23,worri:[16,11,1],cluster:[56,54],pthread:[55,46],ascii:[16,2,31],develop:[35,3,38,7,8,42,1,56,46,58,33],author:[0,35,2,3,38,7,41,8,50,42,56,46,58,59,15],same:[0,2,3,5,7,8,10,12,13,15,18,19,20,25,23,35,38,41,42,43,45,46,50,53,56,16,58,59],check:[33,47,2,18,19,34,23,39,10,11,43,44,56,55,45,46,14,59,15],binari:[25,56,27,11],epoch:[56,47],html:[5,27,40,23,1,56,49,51,31],pad:6,timestamp:15,pai:[29,33,1],eventu:[56,16],medit:[56,23,14],vmod_tolow:47,week:[0,1],finish:[23,46,55,41,1],webserv:[16,31,59,1],rxresp:8,assist:32,driver:2,ness:5,director:[56,26,23,45,34],capabl:[27,5,10,14],appropri:[56,23,59],thread_stats_r:[55,46],megabyt:[46,15],patchwork:1,macro:44,markup:49,without:[48,3,18,5,6,41,44,37,20,11,12,56,49,33,32,15],model:2,roughli:[23,6],execut:[20,25,55,6,59,46],resp:[56,47,8],rest:[25,11,8],bitmap:[55,46],kill:[24,14,2,6],aspect:[56,57],stevedor:1,speed:6,http_resp_hdr_len:[55,46],ixslvvxrgkjptxmcgnnsdxsvdmvfympg:15,gibibyt:46,europ:33,struct:47,korken:59,except:[18,21,53,25,56,16,46],param:[47,41,55,6,46,15],apache2:51,pile:[46,10,55,1,56,57,33],session_ling:[55,46],real:[0,47,6,39,52,12,31,33],around:[1,6,10,55,12,16,32,46],libm:44,read:[0,2,3,5,11,6,15,36,21,27,25,23,35,38,41,40,42,43,52,53,56,58],arriv:[25,15,3],esi_level:5,traffic:[1,50,2,19,21,22,26,23,55,6,56,45,31,46],mon:[47,8],world:[37,52,57,59,33],dare:44,tolow:[0,26,47],whitespac:[55,46],vcl_dir:[55,46],pole:33,integ:[0,26,47,15],server:[2,3,8,10,1,13,15,36,19,21,25,27,46,33,34,35,38,40,42,45,31,52,50,51,24,54,56,58,59],benefit:[32,12],shmfile:[14,8],updat:[50,35,20,7,41,53,11,38,29,15,58,46],output:[47,3,4,20,5,7,23,8,26,27,42,55,6,49,46,15],strcmp:6,rxreq:8,"0x8006b4307":6,max_max_count:14,handshak:57,authent:[37,26,56,41,15],inlin:[56,47,46,55,15],"3f8":6,shmlog:[55,43,46],easili:[37,59],definit:[56,20,23],token:[23,15],legal:12,moon:32,exit:[2,35,3,38,7,41,26,42,56,58,46],"128kb":[55,46],complic:[5,21,51],overli:21,refer:[36,18,4,51,3,23,40,26,27,55,56,46,15],needlessli:[55,46],timeout:[56,45,55,41,46],power:[16,18],inspect:[56,47,16,14,15],sess:47,broken:[56,15],fulli:[37,23],regexp:[23,47,15],getnameinfo:16,"throw":[20,10,57,18],standstil:23,comparison:[25,56,46,39,15],deflat:[4,13,5],central:[27,2],coupl:[39,14,59,33],acl:[25,26,56,18],objlosthead:42,stand:[27,57,23],act:[52,35,3,38,42,12,58],luck:34,processor:[49,44],xnn:15,routin:6,pipe_if_loc:56,effici:[20,5,43],anybodi:27,n_lru_nuk:28,surviv:46,your:[12,25,10,11,6,13,14,15,36,18,19,20,22,23,37,27,28,29,31,32,33,34,52,40,44,45,46,47,24,53,54,55,56,59],stare:23,log:[0,2,3,4,6,7,9,1,14,17,19,22,27,25,26,23,29,31,33,34,35,37,38,40,42,43,46,50,51,53,55,56,58],her:[25,34],area:28,hex:15,overwrit:[19,42,43,3],strict:[56,23],compliant:[23,12],mindless:[27,2],interfac:[47,18,41,37,26,52,55,44,15,46],low:[29,55,2,46],lot:[37,16,49,18,5,6,39,53,25,56,23,11,28,12,13,55,45,51,21,59,46],ipv6:[16,20,48,55,46],hen:[16,36,48,35,2,3,20,12,7,39,8,56,27,42,1,38,44,57,32,46],unam:44,relic:44,bundl:23,jun:8,amongst:[56,44],opensolari:12,http_range_support:[55,46],conclus:20,faster:[19,37,55,43,46,33],notat:[20,55,46],rush:[55,46],fraud:1,possibl:[1,2,20,5,6,44,31,56,23,55,43,12,13,46,32,33,15],"default":[34,47,35,3,38,5,37,7,24,58,25,23,11,56,55,45,54,14,59,46],bucket:46,unusu:39,monopoli:2,deadlock:56,expect:[59,27,43,8,12],gone:[29,22,15],loadabl:[55,46],unreferenc:[55,46],creat:[43,2,5,8,53,25,56,23,55,40,31,45,46,15],certain:[18,19,25,10,56,59,46],decreas:[55,46],file:[0,6,2,3,5,1,8,12,15,17,19,27,25,26,23,33,35,38,41,42,43,44,49,46,47,50,52,54,55,56,57,58],legacy_broken_cm:59,proport:12,workdai:27,again:[2,20,31,23,55,56,46,14,33],collid:43,googl:[21,14,59,1],binocular:32,prepend:15,field:[16,4,38,51,7,8,55,43,13,15,46],valid:15,compet:32,copyright:[0,50,35,3,38,7,41,8,26,42,56,46,58,15],txlosthead:42,writabl:[25,56],you:[0,6,2,16,5,1,10,11,12,13,14,15,36,18,19,20,21,23,24,25,27,28,29,30,31,32,33,37,39,40,41,43,44,45,46,47,48,49,51,52,53,54,55,56,57,59],architectur:8,sequenc:15,symbol:7,listen_depth:[55,46],ansi:44,pool:[20,46,55,29],reduc:[29,55,40,46],bulk:57,neuter:27,directori:[25,55,46],descript:[0,47,50,35,3,38,7,41,8,26,42,56,46,58,15],tricki:[43,28,6],potenti:[56,10,6],escap:15,cpu:[57,55,46,18],unset:[25,56,5,21,59],represent:[20,47,48,58],all:[2,5,6,10,1,14,15,18,19,20,21,25,23,28,29,31,33,35,38,40,42,43,44,45,46,12,47,16,51,55,56,48,58,59],forget:[47,19,20,11,12,33,31],lack:[59,12],month:1,mp3:13,abil:[20,10],follow:[2,3,7,8,10,11,13,14,15,18,21,25,23,30,33,35,38,42,46,50,56,58,59],disk:[19,23],mathisen:[8,46],default_keep:[55,46],articl:[52,40],init:47,program:[47,2,19,6,23,8,39,26,27,53,55,43,12,31,14,59,46],scratch:6,neglig:56,introduc:[56,45,16,43],"case":[0,47,35,3,4,5,44,38,23,25,19,27,42,43,12,56,29,58,15],liter:27,fals:[56,39],secret_fil:41,faq:57,buer:[0,50,7,41,42,56,15,58,46],util:[0,17,50,35,3,38,7,41,53,23,42,58,15],candid:[46,55,12],mechan:18,failur:[55,46],veri:[0,47,2,20,6,23,40,39,27,12,56,49,59,33],ticket:[22,33,6],unalt:56,cookie2:21,list:[3,7,11,14,15,20,22,27,25,23,46,33,38,40,42,43,31,53,55,56,57,58],sane:23,stderr:[55,46],small:[55,28,12,56,49,46,31],synergi:23,queue_max:[55,46],tea:11,tee:6,past:[56,33,44,1],syslog:[0,40,26,55,6,14,46],rate:[19,40,55,13,59,46],design:[56,23,2],pass:[47,3,5,22,41,25,52,23,12,56,29,31,59,46],further:[25,55,56,46,14,59,33],ter:15,what:[6,16,5,1,9,11,12,13,14,18,19,20,21,37,23,51,32,39,40,43,44,45,31,47,48,52,53,56,57,59],sub:[47,49,18,5,10,40,25,23,56,29,45,21,59,51],clock:[55,46],section:[0,50,35,3,38,7,41,8,54,42,43,56,46,58,15],sandbeck:[8,46],abl:[2,6,23,41,27,12,57],brief:15,overload:56,delet:[53,25,23,55,43,56,15,46],version:[0,3,5,7,8,11,13,15,27,23,30,46,35,38,41,42,44,31,52,50,56,16,58,59],method:[56,23,18,11,3],movement:2,cookie1:21,hasn:[55,46],full:[16,47,57,46],hash:[35,22,53,26,55,56,29,58,46],variat:13,goodbi:57,sessionclos:42,"455c":15,behaviour:[29,22,31],http_resp_siz:[55,46],solari:[23,44,30,12],excess:[55,46],modifi:[47,5,23],valu:[0,47,35,4,7,53,23,55,43,44,56,15,58,46],arena:46,search:[36,33],ixslvvxrgkj:15,prior:52,amount:[5,23,55,28,56,45,14,46],saintmod:[56,10,55,46],pick:[18,21,28,12,56,48,33],action:[25,56,47,52,40],narrow:[39,15],via:[18,8,37,23,59,33],shorthand:46,transit:[55,46],filenam:[0,52,8,27,55,15,46],href:[23,49],famili:33,sanction:16,suddenli:[20,10,12],establish:41,select:[56,55,46],aggress:18,hexadecim:15,two:[47,16,18,20,5,1,25,56,10,11,6,13,45,31,59,15],formul:33,rhel:23,taken:[52,21,25,11,43,55,15,46],forcefulli:8,ncurs:11,more:[2,5,8,10,11,6,14,15,21,23,27,33,39,40,43,44,45,46,52,55,56,16,59],flaw:2,octal:15,desir:56,canon:57,hundr:33,mozilla:59,flag:[0,56,47,55,46],stick:16,particular:[20,5,23,11,56,15],shellscript:44,compani:[44,33],cach:[0,2,3,4,5,1,7,8,10,11,6,13,14,15,36,18,19,20,21,25,26,23,28,29,31,34,37,52,40,45,46,47,49,50,51,55,56,59],dictat:24,none:27,endpoint:[55,46],thread:[18,20,8,53,10,55,43,6,56,29,33,46],valuabl:6,dev:[11,14,33],histori:[0,50,35,3,38,7,41,8,26,42,56,46,58,15],remain:[56,49],rfc5952:16,nine:57,caveat:6,learn:33,abandon:[56,27,48,12],userbas:12,typograph:27,prompt:2,challeng:[47,15],share:[0,2,3,4,14,17,19,20,26,23,35,38,41,42,43,49,46,47,53,55,56,48,58],cacheabl:[56,29,23,22],accept:[5,10,8,53,56,23,55,13,31,46],minimum:[56,55,46],pong:19,varnishsoftwar:59,huge:[10,57],ntlm:56,cours:[23,2,1],newlin:15,freshli:47,divid:[25,39],rather:[3,44,27,39,10,42,6,57,14,15],anoth:[51,47,16,2,18,20,5,25,56,10,55,44,13,31,46],comfort:11,snippet:[56,21],rxstatu:42,heck:1,reject:56,simpl:[51,47,21,6,56,45,46,49,15],unabl:[56,10,23],regener:49,absentmindedli:32,resourc:[23,55,46],referenc:56,variant:[13,18],buffer:[16,55,46],unlink:8,"0x8006b51c1":6,circumst:2,"short":[34,40,25,55,14,46],onto:[52,22],diag_bitmap:[55,46],proto:56,caus:[56,55,46,32,6],thread_pool_max:[29,55,46],dream:57,sysctl:14,help:[0,33,2,22,39,41,53,55,43,6,46,14,15],mission:36,held:[55,46],paper:1,through:[33,43,18,19,36,5,46,37,24,55,40,56,57,21,59,15],suffer:13,paramet:[2,18,5,41,26,23,11,56,6,31,55,46,59,15],logic:[25,56,23,46],style:[23,31,15],render:49,late:1,harmless:16,pend:23,"80013822c":6,might:[52,18,10,37,27,23,11,28,56,45,32,14,59,51],alter:[25,23],"0x00020000":[55,46],foon:15,good:[34,47,21,46,53,23,56,45,57,33],"return":[0,47,16,18,31,22,41,25,52,23,56,29,46,15],authorized_keys2:2,sentenc:33,uhm:25,libwww:59,detour:[55,46],somebodi:[23,32,44],bigger:[55,46],document:[0,3,7,8,11,12,14,15,36,22,27,25,23,35,38,41,42,46,47,50,52,53,56,58],pkgconfig:11,incl:4,troubleshoot:[9,34,23,14],txheader:[23,42,59],userid:15,unlik:56,refresh:[23,59],micro:44,achiev:[37,34,23,14,59],ceas:21,found:[47,23,53,27,55,56,57,59,46],difficult:21,truncat:46,iden:56,send_timeout:[55,46],needless:[55,2,46],bereq:[56,47,5,23],set_ip_to:[0,47],hard:[47,46,14,44,12],idea:[47,5,44,46,55,1,57,32,33,15],procedur:[27,47],realli:[48,2,18,19,5,23,39,37,10,6,13,45,33,59,15],connect:[52,2,19,20,51,41,8,25,54,55,43,56,46,15],inflict:44,stabl:43,beyond:10,event:[56,46],encod:[5,53,56,23,55,13,46,31],vmod_toupp:47,varnishhist:[35,3,38,7,8,53,26,42,31,58,46],publish:16,footnot:12,health:[34,20,23,10,45,48],print:[17,7,38,20,59,46],occurr:[56,55,46],foreground:[46,15],qualifi:23,proxi:[23,57,52],advanc:[34,23,45,40],guess:[45,8],reason:[33,52,2,23,27,11,12,56,57,32,14,15],base:[2,18,58,37,56,27,11,13,45,49],put:[34,47,16,19,44,31,1,23,40,24,27,55,12,56,57,46],backendopen:42,basi:[27,45,12],thrown:10,driven:8,vmod:[47,22,26,55,1,56,29,46],launch:[15,14,6],drupal:[21,59],vararg:47,circuit:25,corkscrew:57,lifetim:[23,7],assign:[25,56,47,55,46],feed:12,sess_timeout:[55,46],managebl:37,dont:33,obviou:20,upper:[0,55,46],cache_cli:6,famou:[39,1],misc:33,number:[0,3,5,7,8,11,6,14,15,19,20,23,35,38,39,42,46,47,57,55,56,16,58],barbarian:32,done:[51,18,21,22,25,54,11,6,29,57,55,46],unhealthi:[56,45],blank:[55,46],horribl:[20,11],miss:[35,18,5,3,53,6,56,58,31],can_gzip:56,differ:[25,52,20,5,40,9,56,23,43,44,13,29,45,57,59,46],exponenti:[55,46],construct:[49,46],"0x8006b3ef2":6,rawprob:56,stori:23,station:16,expand:46,statement:[47,40,25,6,56,49],ton:44,scheme:20,store:[37,47,18,4,5,25,55,28,56,31,46],pare:56,shmlogsiz:46,saint:[20,26,10,55,56,46],relationship:2,blindli:39,park:[20,55,46],part:[47,18,19,21,44,59,15],pars:[0,50,5,25,55,56,15,46],tebibyt:46,grace:[4,23,26,10,55,56,46],std:[0,47,22,55,56,29,46],kind:[47,6,43,1],grew:12,grep:59,prebuilt:11,whenev:[4,47,12],remot:3,remov:[0,51,18,5,24,25,56,23,55,13,49,46,21,15],dtd:[56,23],bugfre:2,stall:43,str:56,consumpt:[55,46],stale:[56,10,45,15],randomli:[57,15],stataddr:[42,38],comput:[1,2,12,23,27,44],default_grac:[55,46],packag:[23,22,11,54,12],expir:[4,39,23,55,56,46],dedic:1,"null":[47,14],option:[47,50,35,3,19,38,7,41,8,53,37,26,24,42,58,56,45,46,14,59,15],imagin:[20,44],built:[25,37,32,56,18],lib:[46,55,15],self:[46,44,15],troublesom:16,efh:6,also:[0,3,5,6,7,8,10,12,15,18,20,21,25,26,28,51,32,33,35,38,39,41,42,43,44,45,46,52,16,50,55,56,57,58,59],build:[32,23,22,11,47],cc_command:[55,46],brace:56,pipelin:[52,1],distribut:[35,53,11,56,45,58],exec:[55,46],previou:[23,55,46],reach:[19,25,56],react:14,most:[5,6,9,11,1,15,18,20,27,25,23,29,33,38,39,40,44,49,46,52,53,55,56,16,59],plai:[45,35],must_restart:[55,46],plan:[23,57,32,46,1],gzip_level:[55,46],metacharact:16,amaz:44,fileread:[0,26],clear:[27,57,2,33],cover:[23,40,12],clean:[56,47,11],subgroup:56,bargraph:8,carefulli:32,"131g":15,session:[0,47,19,37,55,56,57,15,14,46],particularli:30,thread_pool_fail_delai:[55,46],finn:59,fine:23,find:[17,47,2,20,5,54,21,23,11,43,44,56,51,14,59,46],impact:[46,55,18],firewal:37,ban_url:[56,29],pretti:[23,22,33],slowli:19,writer:43,solut:[20,23,44,18],"0x429f8b":6,queu:[23,55,46],templat:13,factor:37,lennon:1,hit:[51,35,3,19,18,5,1,23,40,53,20,10,42,55,56,6,13,31,58,59,46],backendxid:42,express:[47,48,35,3,21,38,23,39,25,26,27,42,56,46,58,15],sfile:6,nativ:31,liabl:56,cgi:[56,49,40],him:32,restart:[2,5,10,55,6,56,29,14,46],silo:46,synthet:[56,23,18],diffabl:27,procesess:43,rfc:[4,16,59],tfheen:[],statist:[34,2,20,31,7,53,26,55,43,38,15,59,46],switzerland:23,rxprotocol:[19,42],nowher:11,rivet:23,wrote:44,certif:57,cramp:23,set:[0,2,4,5,10,6,13,45,15,18,21,14,25,23,28,29,51,39,40,44,49,46,47,24,54,55,56,59],art:[36,23,2,31],dump:[46,53,55,6,57,15],sep:47,jade:16,startup:[35,3,38,42,58,15],proc:14,see:[0,2,3,5,7,8,11,6,14,15,37,18,19,21,25,26,23,51,33,35,38,41,42,45,46,47,16,49,50,52,55,56,57,58,59],arg:8,close:[2,20,8,25,55,12,56,46,14,15],horizont:[58,35,53],advers:46,someth:[0,47,22,1,21,6,23,40,37,27,11,12,29,51,32,14,15],reus:[52,55,46],mutex:[55,43,46],experi:[5,27,46],vmod_priv:47,altern:[25,11],appreci:1,numer:[16,44],javascript:21,incident:56,succeed:[56,41],arrang:47,distinguish:44,popul:[25,51],disclaim:56,last:[47,35,4,7,53,58,55,56,45,14,46],delimit:56,hyperlink:27,start_child:6,alon:[27,57,23],anon:2,kamp:[35,3,7,38,8,42,56,46],context:[20,39,9,27,6,56],pdf:27,whole:[56,11,14,59],load:[54,47,2,20,31,23,40,52,10,55,56,45,15,46],simpli:[47,42,56,57,33,31],point:[47,20,5,46,25,56,23,13,45,57,59,15],tgz:13,sky:10,filedescriptor:[2,15],leon:59,header:[0,3,4,5,6,13,15,19,21,25,23,29,31,46,43,44,51,47,53,55,56,59],littl:[23,28,6],hash_data:[56,29,22],linux:[23,30,14,44,12],backend:[2,3,5,8,10,15,37,18,19,20,21,25,26,23,28,31,34,35,38,42,43,45,46,52,50,51,24,53,54,55,56,48,58,59],vertic:[58,35,53],java:[37,21,45],devic:[45,31],first_byte_timeout:[56,55,46],empti:[20,3],secret:[57,41,46,6,16,15],txt:27,nonexist:47,modern:[23,30],imag:[25,56,5,23,28],shuffl:25,convert:[0,41],understand:[59,21,14,2,31],demand:[5,55,46],insan:57,repetit:6,look:[2,5,12,8,10,6,14,15,25,19,37,23,32,41,40,44,45,46,47,53,54,55,56,16,59],solid:46,straight:[23,33],budget:32,durat:[0,47,39,26,23,55,56,46],formatt:3,"while":[52,3,19,1,23,10,42,11,43,28,6,56,29,49,33],match:[35,18,19,3,38,8,25,23,42,56,33,58,59,15],abov:[47,18,5,56,11,13,55,49,15,46],doubli:46,flaki:10,vmod_:47,everyon:[25,56,24],loop:56,earli:[55,46],malloc:[37,24,55,28,14,46],pound:23,hcritbit:[14,6],readi:20,rip:44,varnishcombin:51,itself:[0,50,35,3,38,7,41,8,42,56,46,58,59,15],cento:[23,22,11],demot:12,time_firstbyt:3,spectacular:33,belong:18,shorter:[55,46],zope:23,higher:[56,55,46],optim:[19,57,46],banter:33,alert:12,healthi:[56,10,45],moment:[47,40,37,6,45,49,33],temporari:[55,46],user:[34,2,3,51,1,38,53,37,56,23,55,12,13,45,33,59,46],stack:[46,55,15],recent:[23,39,15],lower:[0,15],task:[54,2,39,25,23,28,15],equival:56,older:[18,15],entri:[35,3,19,38,51,7,53,26,23,42,58,43,56,46,14,15],spent:[23,43,1],person:11,"2gb":8,www3:56,www2:[56,23],www1:[56,23],tast:[11,12],spend:[23,33,6],propos:32,explan:[47,2,6,15,14,33],altmodish:12,obscur:[44,6],thoughtlessli:[55,46],shape:1,pan_ic:6,poller:20,sessionopen:[19,42,55,46],mandat:44,"455ce847f0073c7ab3b1465f74507b75d3dc064c1e7de3b71e00de9092fdc89a":15,cup:11,scenario:20,restructuredtext:[27,48],shortcut:[20,46],notifi:18,input:[4,20,39,55,56,15,46],subsequ:[25,56,23,52],app:19,useless:[55,46],bin:[49,40],format:[17,16,3,4,5,51,26,27,55,31,46,15],big:[47,20,53,27,55,28,1,57,46],do_gunzip:[56,5],nginx:23,simple_list:46,bit:[54,47,16,18,4,20,5,1,23,8,19,10,11,40,6,30,57,59,46],paint:1,docutil:[27,11],signal:[14,6],resolv:56,elaps:56,collect:[0,2,26,27,6,16],"boolean":[56,39],popular:[40,53],vcl_error:[56,10,23],encount:[47,5,14],often:[47,2,23,55,6,45,46],creation:[5,55,46],some:[2,6,8,10,11,12,13,14,15,21,25,23,28,29,32,33,41,44,45,46,47,52,54,55,56,57,59],back:[37,52,2,20,23,25,10,44,56,49,46,33,15],txprotocol:42,sampl:52,"30m":10,sight:57,mirror:[],sizeof:12,scale:[20,53,58,35,46],chunksiz:[55,46],per:[0,47,50,7,41,58,10,42,55,28,56,29,46,33,15],cli_resp:2,substitut:[56,20,49],retri:56,larg:[29,55,46],slash:46,init_funct:47,reproduc:[56,50,6],either:[47,18,20,5,44,27,41,25,56,10,55,6,13,30,21,59,46],machin:[20,16,14],run:[6,2,4,5,1,7,8,24,11,12,13,14,15,36,37,26,23,31,33,34,41,40,43,44,45,46,47,16,52,53,55,56,57,59],step:11,logrecord:[55,46],squeez:6,prerequisit:[30,22],meantim:44,from:[0,3,4,5,6,7,8,10,11,1,13,14,15,18,19,20,21,22,23,25,27,28,29,30,31,32,33,35,38,39,42,43,44,45,46,47,16,50,52,54,55,56,57,58,59],major:[46,55,2,1],subtract:39,constraint:28,preclud:27,prove:15,manag:[34,47,52,2,31,41,37,26,23,11,6,56,45,46,14,15],idl:[55,46],"32bit":[23,55,46],fetch_chunks:[55,46],block:[4,56,23,14],doubl:[47,55,28,56,15,46],pkill:[37,24],plethora:14,within:[56,46,55,40,15],grydeland:0,pastebin:33,ensur:5,disturbingli:1,announc:33,pcre:[56,23,11],occupi:[55,46],inclus:[55,46],institut:12,spam:33,errno:6,question:[36,20,39,9,23,56,51,33],"long":[0,18,20,23,55,43,12,56,46,33,59,15],custom:23,includ:[34,52,35,18,20,5,3,38,46,56,23,42,11,40,31,55,49,57,58,59,15],forward:[3,8,23,56,46,33,51],paren:56,"0x00000002":[55,46],properli:[37,40,2],reorgan:12,lockless:46,poster:23,log_alert:0,criteria:25,varnishadm:[26,46,41,15],server2:45,link:[27,43,28,56,46,33],translat:[25,56,16,15],newer:[23,18],atom:39,line:[33,47,3,19,44,46,8,25,26,23,42,55,40,6,57,14,15],mitig:59,redpil:56,concaten:[56,29,47,22],utf:[56,23],consist:[43,15],munin:53,pkg_add:11,sum:10,similar:[47,18,5,1,56,21],derang:44,constant:39,curs:7,palisad:32,parser:[5,55,46],lyx:27,doesn:[0,19,21,46,27,44,57,14,59,15],repres:[20,8],"char":[47,6],incomplet:25,webcach:59,guarante:[47,57,43],"200c":16,annoi:33,titl:[56,23,55,59],invalid:[56,18,15],bracket:46,responsetim:31,nice:[0,19,53,1],gigabyt:37,critbit:[55,46],cs101:43,libtool:11,enhanc:33,ago:[20,14,1],algorithm:[13,26,56,46],verden:[35,3,7,38,42,56,46],virtualhost:51,orbit:32,depth:[55,46],dot:46,acceptor_sleep_max:[55,46],leak:[57,2],far:[16,57,40,12],fresh:[56,18],marvel:21,scroll:19,code:[47,16,2,56,44,5,6,23,46,53,25,52,27,11,40,12,13,55,57,33,15],partial:23,edg:[34,40,55,49,32,59,46],queri:[23,3],gang:[35,3,7,38,42,56,33,46],privat:[26,47],procur:56,secur:[23,33,48,2,46],sensit:[23,11,47,6],friendli:[32,59],send:[0,37,50,19,5,6,23,8,53,25,56,10,55,12,13,45,31,21,59,46],granular:46,vcl_conf:47,becam:[16,44],"256k":[55,46],aris:56,sent:[3,5,41,23,55,13,59,46],nett:59,fly:[46,55,59,15],unzip:56,whichev:15,reinterpret:27,implicitli:56,relev:[15,11,14,6],tri:[2,55,44,56,49,46,33],log_us:0,magic:[47,5,10,55,15,46],notabl:[5,23],"try":[2,5,12,10,11,6,14,15,18,20,25,27,46,32,33,43,44,31,47,55,56,48],forsiden:59,freed:43,pleas:[0,33,52,5,40,23,11,6,56,55,45,46,14,59,15],impli:[56,38],smaller:1,fortun:23,natur:15,"0x0":0,jump:44,parkinsson:32,detrim:[55,46],download:11,odd:[14,59],append:[3,42,43,56,29,15],compat:[56,42],index:[36,23,51],compar:[56,15],"64k":[14,46],multimedia:59,access:[37,2,18,21,10,24,25,56,27,55,43,51,30,46,59,15],experiment:[23,55,46],munmap:14,whatev:[52,18,47,23,43,6,59,51],bitor:[55,46],http_req_siz:[29,55,46],bodi:[52,40,23,55,8,56,49,46,31],srvr:57,let:[37,49,18,5,27,21,25,10,53,6,56,45,57,54,14,59],ubuntu:[23,22,11],http_resp:2,max_esi_depth:[55,46],myhost:15,becom:[12,37,27,44,29,49],sinc:[47,20,5,7,52,21,23,55,56,29,46,32,14,59,15],great:[25,27],mailinglist:33,northern:32,respon:25,conceiv:[12,6],larger:[5,57,6],vacat:[22,6],headerninja:59,"_only_":52,chang:[54,22,2,20,51,1,24,25,23,55,11,43,6,29,45,46,33,59,15],maker:23,chanc:[37,47,5,43],firefox:59,claim:23,attend:1,appli:[47,5,23,55,15,32,46],approxim:56,apt:11,api:[16,12],deputi:32,beresp:[0,18,5,22,40,25,10,56,29,49,59,51],tailor:39,feel:[2,1],crap:44,max_connect:56,commun:[2,35,3,38,42,12,58],frob:[5,48],upgrad:[20,22,29,12],next:[47,20,39,52,23,11,12,56,16],websit:31,few:[40,37,28,6,13,33],doubt:[33,6],usr:[24,37,54,11,55,14,46],stage:[25,5,52],sort:[2,18,19,38,39,1,49,32,31],src:[49,40],about:[6,16,5,1,9,11,12,20,22,27,23,28,31,32,33,46,43,44,45,51,47,57,53,48,59],"transient":[26,55,46],vclexamplehitmisshead:59,actual:[37,22,2,18,19,31,1,41,44,25,10,28,6,33,59,15],iii:44,had:[20,8,11,43,6,29,32],high:[34,10,27,24,37,23,55,6,46,14,59,15],account:[0,2],retriev:[25,56,15],heard:12,rxheader:[19,42,38,53],cumbersom:59,poul:[16,36,48,35,2,3,20,12,7,39,8,56,27,42,1,38,44,57,32,46],obvious:[37,16,39,12],vcl_recv:[47,18,20,5,23,25,52,10,56,29,45,21,51],fetch:[51,4,5,10,25,56,23,55,31,29,46,15],aliv:[19,31,8,15],control:[16,2,18,4,5,23,41,25,26,27,55,56,46,59,15],dgst:15,process:[2,3,5,7,8,6,14,15,18,19,25,23,31,32,33,35,38,41,40,42,43,49,46,47,51,53,55,56,57,58],lock:[55,43,8,46],sudo:11,sniplet:18,customlog:51,tag:[35,3,19,38,26,42,49,58],tab:15,tarbal:11,onlin:21,crimin:[2,31],delai:[55,7,58,35,46],insuffi:[55,46],gcc:[55,46],sit:[25,36],vcl_miss:[18,5,25,23,56,29],instead:[51,47,35,3,19,38,5,7,24,8,58,23,42,11,43,29,46,55,15],panic:[46,55,6],circular:46,everywher:47,overridden:56,stop:[37,8,25,24,45,15,46],attent:29,fcj8cnd5188:59,tier:12,redund:56,hasher:[55,46],physic:20,villag:32,alloc:[47,37,26,55,43,46],essenti:59,bind:[24,14,8],guru:[56,23,14],robot:31,element:[47,55,46],issu:[18,6,41,27,12,13,33,14,59,15],freebsd:[22,6,7,8,23,42,11,12,56,30,57,33],furious:6,fallback:[0,26,56],least:[35,23,55,43,13,58,46],lingua:27,move:[29,31,22,55,46],comma:[7,46],bunch:59,chosen:[16,32],youtub:59,suppli:[56,23,46],willing:5,infrastructur:56,decai:[55,46],anyon:[8,12],therefor:[2,20,21,1,23,6,33],clientaddr:42,dag:[35,3,7,38,42,56,58,46],crash:[22,15,14,40,6],fourth:27,python:[27,11,47],nokia:12,dai:[0,2,18,44,23,1,59,33],auth:[15,3],devel:11,mention:[5,30,32,10,16],log_info:[55,40,46],kiss:57,front:[36,18,23,42,55,28,56,46],thread_pool_timeout:[55,46],libvarnishapi:20,somewher:54,trac:[52,59],anyth:[47,5,6,39,27,55,12,46],edit:[47,24,27,55,56,46],orderto:[55,46],nocach:59,slide:45,mode:[52,50,5,8,26,10,55,43,56,46,14,15],thread_pool_workspac:[55,46],disregard:[56,21],subset:49,activit:44,intellig:33,"_catch_bug":6,consum:14,mar:14,"static":[25,12],our:[36,51,39,25,23,11,12,55,45,33,54,14,46],patch:[12,1],special:[47,5,27,23,56,49,21,31],out:[6,2,5,1,8,10,11,12,18,20,21,25,23,32,33,43,44,45,46,55,56,59],variabl:[0,3,5,39,26,27,56,49,51,15],vcc:[26,27,47,2],gentoo:23,influenc:[55,46],defend:2,req:[0,47,49,18,5,22,23,40,25,56,10,13,29,45,51,21,59,15],vcl:[0,2,4,5,6,8,9,10,11,1,13,14,15,37,18,20,21,22,24,25,26,23,29,31,33,34,39,40,41,45,46,47,49,52,54,55,56,48,59],suitabl:[47,38,53],rel:[47,39,23,55,43,46],mod_extract_forward:51,hardwar:[57,44],typcal:50,ref:[37,40],ban_dup:[55,46],red:[22,11],common:[25,23,51],insid:[55,43,59,46],workflow:56,manipul:[25,56,21,31],w3c:[56,23],hash_ignore_busi:56,york:1,dictionari:23,advisor:32,releas:[0,47,23,52,10,11,1,55,33,46],vclexamplepip:52,txstatu:[42,14],critbit_cooloff:[55,46],shkoq5:8,http_req_hdr_len:[29,55,46],could:[18,44,8,23,1,49,32,14,59,15],latest:[56,11],ask:[36,2,5,53,9,10,6,32,33],keep:[2,4,20,31,12,23,8,39,19,10,42,11,6,13,55,45,46,32,33,59,15],scari:21,length:[47,4,8,42,55,15,46],outsid:[40,28],retain:56,timezon:33,scare:57,softwar:[0,50,35,3,38,21,12,7,41,8,58,23,42,11,1,56,46,33,59,15],suffix:[56,46],mit:56,qualiti:12,echo:[49,41],date:[0,50,35,3,4,20,7,41,8,56,42,40,38,49,46,58,15],meta_funct:47,resurect:6,underscor:21,utc:47,prioriti:0,start:[2,3,6,7,8,10,11,1,14,15,36,19,21,37,23,31,34,35,38,42,43,45,46,52,49,24,54,55,56,57,58],unknown:56,licens:[0,50,35,3,38,7,41,8,42,56,46,58,15],perfectli:59,system:[34,2,22,23,44,25,27,11,43,6,13,55,30,37,46],messag:[19,8,23,55,43,6,56,14,46],attach:[56,46,55,12],attack:2,"lyngst\u00f8l":[56,58],termin:[47,19,56,57,15,46],licenc:[0,50,35,3,38,7,41,8,23,42,56,46,58,15],accessori:12,"final":[20,49,11,2],ipv4:[20,16,55,50,46],shell:[23,16,46],rxurl:[19,42,38,53],soekri:1,ogg:[13,15],exactli:[57,15,6],haven:40,cli_common:15,hitmiss:3,bother:[47,32],structur:[25,27,46,47,6],charact:[35,53,25,56,58,15],probe:[56,20,45,26],sens:[21,39,28,12,13,59],seriou:0,dubiou:[55,46],"function":[0,47,22,39,44,26,23,1,56,29,15],counter:[20,53,55,43,28,56,46,15,31],set_up_to:[0,26],msec:[55,46],clearli:1,unkown:13,correspond:[56,18],have:[6,2,5,1,8,10,11,12,13,14,15,36,18,19,20,21,23,25,27,28,29,30,32,33,34,37,39,40,44,45,46,47,16,49,53,54,55,56,57,59],tabl:[36,46],need:[5,11,6,13,45,15,25,18,20,21,27,37,23,29,51,33,43,44,49,46,47,16,54,55,56,57,59],blix:0,turn:[47,50,25,23,56,57],border:32,jemalloc:57,soak:[55,46],min:46,builtin:[56,46],preced:[25,56,39],decis:[56,32],which:[6,2,3,5,1,11,12,15,25,20,27,37,23,31,32,35,38,41,42,44,45,46,47,51,52,53,55,56,57,58,59],fulltim:59,divers:44,singl:[2,23,11,6,13,45],lastst:15,unless:[33,35,3,5,23,46,58,27,42,51,57,21,59,15],rfc3986:16,who:[25,20,33,1],oracl:12,discov:43,rush_expon:[55,46],bz2:13,shm_workspac:[55,46],segment:[19,14],why:[47,48,2,16,5,27,9,10,23,57,32,14,33],won:[37,18,25,56,10,13,14],url:[0,3,5,8,10,13,45,15,18,21,25,23,29,38,40,49,46,47,53,55,56,16,59],instig:23,request:[0,3,5,8,10,13,15,25,18,19,37,26,23,29,46,35,38,42,45,31,52,51,53,55,56,58,59],pipe:[52,35,3,5,53,25,55,56,29,31,58,46],determin:[56,5,47,59],north:1,"0x0a":15,fact:[23,2,44],malamud:16,affair:32,text:[47,7,54,37,23,56,49,15,46],verbos:8,bring:[23,32],skimpi:25,trivial:43,anywai:[20,16],redirect:59,"0x7fea4fcb0580":15,highest:39,locat:[4,56,23,41],tire:6,should:[0,2,5,10,11,6,25,20,24,37,23,28,29,34,41,40,45,46,47,16,52,55,56,57,59],restructur:41,tape:16,elseif:49,local:[37,47,54,25,24,11,56,55,14,46],hope:[48,2,1,12,57,32],expkil:42,varnishtop:[35,3,38,7,8,53,26,42,31,58,59,46],tbz:13,familiar:21,tbw:47,regularli:53,mgr:2,increas:[18,40,55,28,56,29,45,14,59,46],varnish:[0,6,2,3,5,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,41,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59],nish:23,httperror:42,enabl:[18,5,10,55,56,29,45,14,46],"0x00040000":[55,46],stuff:[2,11,43,28,44,59],vcl_someth:40,contain:[0,51,47,5,46,25,23,13,57,15],grab:33,st_inod:43,do_esi:[5,22,40,56,29,49],view:[49,43,31],conform:5,btw:44,legaci:59,modulo:46,vcl_pass:[56,29,5],horrend:23,knowledg:34,ipng:16,flip:19,patternmatch:20,thread_pool_add_threshold:[55,46],statu:[3,20,23,8,41,26,10,56,48,59,15],error:[52,18,20,3,23,25,10,42,55,43,6,56,29,14,46],correctli:52,pattern:[44,33],tend:6,b00000:[11,8],written:[0,16,50,35,3,19,38,1,7,41,8,23,42,6,56,46,32,58,59,15],crude:2,neither:[35,3,38,41,42,55,58,46],email:[33,6],exppick:42,entic:5,kei:[56,10,46],vrt:47,saintmode_threshold:[56,55,46],job:[20,47,59,33],entir:[56,46,55,6],crc32:46,succesful:[55,46],addit:[56,20],doxygen:27,instant:[20,1],plugin:[59,53],admin:[21,48,2,15],mpg:15,ramp:[55,46],equal:39,etc:[0,54,47,22,2,48,5,6,24,44,37,27,11,12,55,31,14,46],instanc:[2,3,4,5,7,8,12,15,20,26,23,46,35,38,39,41,42,43,51,47,55,56,16,58],virtualhostroot:23,freeli:56,comment:[25,56,49,57,54],anti:[55,46],wall:32,rfc2616:[56,23],vcl_fini:56,walk:[20,18],solv:[10,12,47,6],ssl_clear:57,cli_run:6,respect:[29,5,43,15],rpm:11,quit:[0,18,19,21,39,27,12,45,33,14,59,15],mailman:33,tread:[55,46],tort:56,addition:41,compos:33,compon:[47,55,2,46],besid:23,immedi:[46,55,33,15],both:[47,35,3,20,38,39,25,27,42,11,43,12,56,55,51,58,59,46],assert:6,togeth:[47,35,3,54,40,23,42,56,45,58,15],"8001337af":6,present:[17,35,3,4,38,21,7,53,23,42,56,31,58,15],multi:47,plain:[4,6],shortliv:[55,46],defin:[47,18,19,20,54,42,55,56,45,59,46],decept:23,glossari:[36,31],kibibyt:46,observ:46,layer:44,almost:[46,11,6],squid:[56,23,18],site:[36,21,24,40,37,23,28,6,56,45,49,59],roll:8,substanti:38,fiddl:[20,1],incom:[37,56,45],greater:15,gzip_window:[55,46],ping_interv:[55,46],welcom:[20,33,36,39,46],parti:1,cross:33,clase:6,member:47,handl:[52,18,31,3,23,25,10,55,6,56,45,57,59,46],vmod_priv_free_f:47,constel:39,objurl:42,backtrac:6,phk:[7,8,42,56,15,33],competit:23,spell:56,http:[0,3,5,8,9,24,11,6,13,14,15,37,18,19,21,27,25,26,23,29,31,34,39,49,46,47,50,51,52,53,55,56,16,59],hostnam:[0,56,59],futil:6,upon:56,effect:[23,18,55,46,15],handi:47,beast:6,logfil:43,dealloc:[26,43],php:[37,45],fympg:15,off:[5,25,24,55,43,1,33,59,46],varnishstat:[35,3,38,31,7,8,53,26,23,42,28,6,46,58,15],well:[37,2,19,27,25,10,30,16,59],regsubal:[56,21],thought:[2,23,27,1,48,33],exampl:[0,51,47,52,18,4,21,38,41,8,25,26,23,42,11,56,45,57,49,59,15],command:[41,26,23,42,55,6,46,14,59,15],choos:[37,32,45,11,56],undefin:56,usual:[0,47,16,18,25,23,11,6,33,14,59,15],virtualhostmonst:23,newest:15,http_gzip_support:[5,48,55,46],less:[33,10,46,23,1],obtain:41,tcp:[23,55,50,46],tcl:27,skill:40,py3k:27,web:[34,2,36,19,21,37,23,40,24,25,56,10,6,13,45,49,59],amd64:6,omit:23,onward:56,makefil:[47,44],discuss:40,script:[47,2,21,8,26,27,11,44,49,31,15],add:[18,39,25,23,43,44,56,45,14,59,51],cleanup:14,bool:[47,55,39,46],smart:[5,33],gmt:8,unprivileg:[55,46],sick:10,webpag:23,piec:[47,54],five:[45,46,55,1],know:[34,47,48,16,19,5,1,25,23,11,43,12,57,59,15],burden:12,press:[19,27],password:6,libncurs:11,insert:[56,5],unplan:46,resid:[25,46],like:[6,2,5,1,10,11,12,13,14,15,18,19,20,21,23,46,32,39,40,43,49,31,47,52,54,55,56,16,59],success:[23,46,55,8,1],necessari:[56,46,55,15],martin:0,workthread:42,page:[0,3,7,8,10,13,14,15,36,18,19,21,23,27,28,33,35,38,41,40,42,49,46,50,56,58,59],candi:31,"80013801e":6,didn:[5,16],shutdown:46,captur:6,twitter:1,"0x8006b8d84":6,logarithm:[58,35,53],repeat:[14,46],"export":47,shabbi:1,flush:[5,55,46],home:[57,39,59],peter:32,vsm:2,librari:[23,57,47,59],tmp:[57,46,6],trust:[37,5,27,2,44],competitor:44,lead:46,broad:0,avoid:[47,20,5,27,10,56,33,46],thank:12,leav:14,settl:39,happend:32,duplic:[56,46,55,15],kiddi:31,esi:[4,5,22,40,25,23,55,1,56,29,49,48,46],acronym:52,has_j:21,usag:[59,18],symlink:44,vhost:[0,41],host:[0,16,35,3,19,38,5,18,7,54,8,23,42,55,1,56,45,46,58,59,15],although:56,expiri:[23,55,46],continu:[35,7,38,53,55,56,15,58,46],negat:[25,56,15],sbin:11,misbehav:[45,34,10,14,59],child_main:6,socket:[16,41,8,55,12,56,57,14,46],linger:[55,46],column:[19,7],vcl_hit:[25,29,56,18],objrespons:42,carrier:27,thread_pool_add_delai:[55,46],discard:[47,18,20,21,10,56,45,15,59,46],emperor:32,disabl:[56,49,55,46],backendclos:42,thread_pool:[55,46],own:[47,5,39,37,23,11,56,55,57,46],vcl_call:42,lenght:15,seamlessli:20,automat:[56,10,46,55,6],due:[13,56,55,28,46],warranti:[56,47],automak:11,guard:2,merk:59,rxrespons:42,pitfal:[13,34],pointless:33,purge_url:29,nuke:[55,46],pictur:47,transfer:56,support:[51,47,50,18,5,22,52,44,23,3,12,56,55,57,33,59,46],regsub:[56,47,21,23],bump:12,vax:23,trigger:[25,6],"var":[51,23,42,14,41],groff:11,deliveri:[5,57,55,43,46],alexa:1,subscrib:[27,2,33],weight:56,histogram:[26,53,58,35,31],gain:37,overflow:[55,46],ear:33,bug:[22,1,5,6,12,33],count:[53,14,35,15],made:[56,23,55,46],wise:[27,57],krypto:57,whether:[37,3,19,25,56,59],shrunk:44,unload:45,smooth:23,displai:[35,3,19,38,7,53,26,42,46,58,15],troubl:[23,22,2,33],record:[3,4,38,53,26,23,42,55,6,58,46],below:[5,11,47,46],limit:[31,10,8,39,23,55,28,12,56,29,46,14,15],monument:32,otherwis:[56,41,8,6],problem:[47,6,10,44,25,27,23,55,12,13,45,33,14,46],epel:11,sockaddr:16,evalu:18,"int":[0,47,39],dure:[56,5,57],pid:[46,14,42,3],implement:[47,48,20,5,10,23,55,44,56,49,57,46],ing:[23,35],girl:1,probabl:[0,33,47,54,40,37,23,11,1,55,57,32,14,59,46],syslog_cli_traff:[55,46],contest:[55,46],allow:[2,18,5,3,25,23,42,55,6,56,49,51,46],guidanc:23,hairi:[20,5],detail:[0,52,16,50,35,3,38,7,41,8,26,42,56,46,58,15],virtual:[56,23,15],other:[6,2,5,1,10,11,12,14,25,19,20,21,22,23,37,27,28,30,38,40,43,45,46,52,48,49,53,55,56,57,59],lookup:[47,18,5,25,56,29,59],futur:[10,46,33,12],rememb:[47,20,5,6,16,46],deliber:56,servernam:51,stat:[20,7,55,43,15,46],dismiss:20,elsif:[13,56],confignam:[52,15],"class":[27,43],consequenti:56,debian:[23,22,11,46],stai:[23,15],acceptor_sleep_incr:[55,46],sphinx:[27,48,11],implict:[55,46],rule:[37,59,39,2],profit:56,portion:56,openoffic:27},objtypes:{},titles:["vmod_std","Thoughts on the eve of Varnish 3.0","Security barriers in Varnish","varnishncsa","Shared Memory Logging","How GZIP, and GZIP+ESI works in Varnish","Reporting bugs","varnishstat","varnishtest","Frequently asked questions","Misbehaving servers","Installing Varnish","Picking platforms","Vary","Troubleshooting Varnish","varnish","IPv6 Suckage","Logging","Purging and banning","Logging in Varnish","What do you mean by ‘backend’ ?","Cookies","Varnish Installation","General questions","Put Varnish on port 80","Varnish Configuration Language - VCL","The Varnish Reference Manual","Why Sphinx and reStructuredText ?","Sizing your cache","Upgrading from Varnish 2.1 to 3.0","Prerequisites","Varnish Glossary","What were they thinking ?","Getting hold of us","Using Varnish","varnishhist","Welcome to Varnish’s documentation!","Starting Varnish","varnishtop","VCL Expressions","Advanced topics","varnishadm","varnishlog","Shared Memory Logging and Statistics","Did you call them <em>autocrap</em> tools ?","Advanced Backend configuration","varnishd","VMOD - Varnish Modules","Poul-Hennings random outbursts","Edge Side Includes","varnishreplay","HTTP","Configuration","Statistics","Backend servers","<no title>","VCL","Why no SSL ?","varnishsizes","Achieving a high hitrate"],objnames:{},filenames:["reference/vmod_std","phk/three-zero","phk/barriers","reference/varnishncsa","reference/vsl","phk/gzip","installation/bugs","reference/varnishstat","reference/varnishtest","faq/index","tutorial/handling_misbehaving_servers","installation/install","phk/platforms","tutorial/vary","tutorial/troubleshooting","reference/varnish-cli","phk/ipv6suckage","faq/logging","tutorial/purging","tutorial/logging","phk/backends","tutorial/cookies","installation/index","faq/general","tutorial/putting_varnish_on_port_80","tutorial/vcl","reference/index","phk/sphinx","tutorial/sizing_your_cache","installation/upgrade","installation/prerequisites","glossary/index","phk/thoughts","installation/help","tutorial/index","reference/varnishhist","index","tutorial/starting_varnish","reference/varnishtop","phk/vcl_expr","tutorial/advanced_topics","reference/varnishadm","reference/varnishlog","reference/shmem","phk/autocrap","tutorial/advanced_backend_servers","reference/varnishd","reference/vmod","phk/index","tutorial/esi","reference/varnishreplay","faq/http","faq/configuration","tutorial/statistics","tutorial/backend_servers","reference/params","reference/vcl","phk/ssl","reference/varnishsizes","tutorial/increasing_your_hitrate"]}) \ No newline at end of file +Search.setIndex({objects:{},terms:{divers:43,saver:11,secondli:11,prefix:[56,21,46],sleep:30,vcl_acl:41,oldest:18,effienc:16,whose:[56,16],kqueue:[30,7],"const":[46,13],spew:7,sorri:57,under:[0,46,34,2,3,37,6,8,40,9,50,26,41,56,30,58,59,16],sha256:16,worth:[13,7],merchant:56,everi:[0,47,18,20,36,56,27,7,14,49,59,51],risk:[56,30],vastli:6,"void":[0,46,13],ptxmcgnnsdxsvdmv:16,affect:[56,6,42,30],vast:46,school:[23,31,2],tabyt:30,cmd:9,upload:16,string_list:46,session_max:30,quilt:1,xsltproc:12,geekiest:57,direct:[24,56,44,30,16],enjoi:[20,55],consequ:56,second:[0,46,48,34,19,37,1,8,26,9,40,23,11,42,7,56,43,30,58,16],vanrishadm:16,libxslt:12,even:[54,46,48,2,6,23,30,24,56,26,42,27,43,14,57,32,59,45],anywher:48,thunder:11,lookback:20,fetch_maxchunks:30,child_main:7,"new":[51,47,18,19,6,30,23,42,27,1,56,44,32,16],net:56,ever:[57,31,15,1],told:13,elimin:30,manipul:[24,56,21,45],nanni:45,never:[46,7,30,43,48,59,45],accus:57,here:[46,43,6,7,30,26,39,38,24,11,13,56,44,32,15,59,16],herd:11,met:56,debugg:30,path:[36,48,30],interpret:[6,30],acceptor:30,dry:1,anymor:28,vclexamplehitmisshead:59,precis:[16,1],crap:43,loop:56,smoke:15,permit:[56,30,9,32],c89a:16,portabl:[43,13],carl:57,storage_malloc:15,trobl:0,unix:[24,29,43,46,16],"0x80000000":30,total:[2,23,1,28,30,16],unit:[0,56,46,30],highli:48,plot:26,describ:[46,40,36,26,16,30],would:[6,13,9,7,24,18,20,26,36,23,27,28,31,46,42,43,44,30,47,57,56,48,59],found:[46,23,53,26,56,48,59,30],lwp:59,gloss:26,choosen:16,call:[6,9,11,7,18,22,23,24,26,28,45,32,46,38,42,43,44,51,47,55,54,56,48],telegraph:32,recommend:[0,5,36,12,57,59,30],shkoq5:9,type:[0,46,19,20,6,38,36,25,26,12,7,56,49,30,15,16],until:[46,20,38,52,26,13,56,57,30],vmod_foo:46,autogen:12,relax:[46,31],relat:16,notic:[56,46,15,9,1],hurt:[30,13],warn:49,phone:26,warm:50,rip:43,hole:[2,32],hold:[11,22,32],must:[46,3,20,1,23,39,11,5,56,28,29,30,44,59,16],worst:[4,43],join:[0,54,32,7],setup:59,work:[7,4,6,1,52,12,13,36,55,19,20,21,23,24,26,29,30,32,38,42,43,49,45,46,48,11,57,59],coalesc:[11,44],erl:[34,3,8,37,41,56,58,30],sbin:12,root:[36,29],"16gb":26,overrid:[24,56,26,59,30],give:[32,47,48,19,46,30,53,26,42,27,7,56,44,57,15,59,45],txreq:9,indic:[35,46,48,19,6,9,24,56,42,14,30,59,16],want:[0,32,46,55,19,20,6,36,51,24,12,42,13,56,44,57,15,59,45],vmod_std:[0,25,56],viceminist:31,attract:[26,23],txrespons:41,joani:59,quot:[56,32,16],polic:1,i686:15,how:[3,6,7,10,11,1,15,36,18,19,20,22,24,26,27,45,33,46,43,44,30,47,55,49,51,53,56,48,59],hot:27,confin:20,answer:[20,51,48,2,32],negoti:26,config:[47,26,12,56,44,30],connect_timeout:[56,30],"128k":30,polit:2,dialect:43,mess:39,chines:31,earlier:[26,41],diagram:2,badli:14,wrong:[22,12,15,7],router:[24,56],cli_req:2,law:31,parallel:5,averag:[37,8,1],attempt:[56,6,30,50,43],third:[19,23,46,16],cnt_session:30,exclud:[41,37,58,34,3],insuffer:43,receiv:[3,6,30,9,24,41,56,45,16],maintain:[44,46],environ:[36,13],max_restart:[56,30],enter:[19,56,11,9,16],exclus:8,ethernet:[57,43],order:[18,6,43,11,12,42,7,56,29,15,59,30],origin:[37,54,8,59],feedback:[38,30],objhead:[41,30],over:[50,3,19,20,8,23,40,56,26,7,37,49,30],failur:30,becaus:[48,1,20,7,23,43,24,26,42,13,57,30],jpeg:[6,45],flexibl:26,vari:[33,18,6,56,26,14,59],digest:[30,16],streamlin:32,cli:[2,18,19,20,40,9,41,30,15,16],fit:[0,56,26,48,30],cld:2,fix:[7,12,59,1],better:[7,30,13,48,31,16],persist:[6,26,30],easier:[51,48,59,1],them:[2,3,6,7,11,12,13,16,20,36,26,27,28,31,34,38,41,42,43,44,30,46,55,56,48,58],gnu99:30,woken:2,thei:[2,3,13,11,1,14,16,18,19,20,26,27,28,30,31,32,34,37,38,41,42,43,45,46,48,55,56,57,58,59],proce:[56,12,45],priv_cal:46,safe:[42,59],"break":[56,55,13],band:43,bang:13,promis:26,thaumathurg:46,interrupt:[56,16],yourself:2,rumour:7,choic:[26,13],arrow:2,each:[33,48,34,4,20,37,58,42,7,56,44,30,49,59,16],debug:[50,51,9,26,41,7,30,15,59,16],went:7,side:[33,46,19,21,39,24,26,49,48,59],mean:[46,55,20,51,23,30,26,12,42,7,56,44,45,16],doddl:1,pdflatex:23,reqstart:[19,26,41],exactli:[48,16,7],spider:45,network:[24,56,30,16],goe:[7,22,36,26,13,44,15],god:11,content:[0,2,3,6,9,11,14,44,16,35,18,24,26,45,36,40,42,49,30,46,51,54,56,59],rewrit:[26,23,30],sane:26,reader:[33,42],quantifi:0,forth:[19,20,47,24],outburst:[35,55],cli_auth:16,barrier:[55,2],written:[0,50,34,3,19,37,1,8,40,9,26,41,30,7,56,57,31,58,59,16],nightmar:48,situat:[26,30,16],free:[26,46,30],standard:[0,25,57,9,30],precompil:46,workaround:47,haywir:7,openssl:[48,16],filter:[18,19,37,53,16,15,32],ish:[20,30,39,1],iso:[43,13],isn:[36,24,26,16,59,30],regress:[12,13],onti:47,confus:[1,38,26,7,28,57],user:[33,2,3,51,1,37,53,36,56,26,13,14,44,30,59,32],rang:[26,30],httpgarbag:41,independ:23,wast:[49,48,30],rank:[25,53,37,1],restrict:[36,23,16],hook:56,instruct:[6,11,24,26,12,14,15,59,45],alreadi:[32,48,6,30,9,1,57,15,16],primari:[46,30],xid:[4,56,26],rewritten:[6,37],top:[2,34,53,54,7,56,58,45],speci:30,sometim:[59,11,15,27,1],master:[19,45,15,30,7],too:[30,12,1,28,48,32],lognam:3,critter:16,john:[2,1],listen:[36,30,15,9,16],murder:1,consol:15,namespac:59,tool:[50,2,21,53,25,23,27,43,55,59],clueful:59,travers:26,wisdom:31,somewhat:[11,46,59,13],conserv:[21,30],technic:[2,13],past:[56,32,43,1],silli:43,target:46,keyword:[24,28,49,56,59],provid:[46,2,6,54,42,7,56,30],tree:[46,48,30],zero:[6,40,42,57,16,30],project:[23,31,13],matter:[23,12,43],frankli:23,"5mm":1,minut:[0,46,11,12,7,56,49],expected_respons:56,mini:43,fashion:44,close:[2,20,9,24,13,56,30,15,16],ram:[26,30],mind:[26,46,32],automake1:12,spent:[26,42,1],raw:[19,56,1],pessimist:13,seed:56,manner:[56,30],seen:[37,38,23,42,31,15],seem:[19,36,23,44],incompat:43,minu:48,recreat:30,latter:46,objrequest:41,transmit:30,thoroughli:56,vrt_magic_string_end:46,www2:[56,26],simplifi:[56,28],plenti:[14,30],though:[7,16,1],"0x4196af":7,lastus:56,object:[51,2,18,4,6,26,30,53,24,25,11,58,56,27,14,49,45,21,59,16],legibl:56,supress:57,regular:[46,34,3,21,37,23,24,25,26,41,42,13,56,58,16],bsd:[26,43],objstatu:41,tradit:30,"0x00000001":30,don:[0,36,46,21,30,24,12,56,57,31,59,32],"0x00000004":30,vcl_fetch:[6,22,11,39,24,26,56,28,49,51,59,45],doc:[26,23],"0x00000008":30,flow:32,doe:[2,6,13,11,7,15,16,17,55,22,23,36,26,28,30,32,45,46,42,51,47,57,53,56,48,59],declar:[46,20,25,11,56,44],annoi:32,encodign:14,wildcard:[20,26],gzip_stack_buff:30,left:[2,34,8,53,23,56,58],scream:0,came:[31,43],thread_pool_min:30,othervis:24,pragma:59,pope:57,random:[0,35,23,25,11,1,56,44,55,32],syntax:[20,6,40,25,12,56,28,30,16],pipe_timeout:30,directli:[56,21,26],radio:57,pkg:12,admin_network:56,radic:23,protocol:[33,3,30,26,56,57,45],priv:46,absolut:[46,38,59,30],sewn:26,menu:23,explain:[18,6,22,43,59,32],configur:[10,52,12,16,36,20,22,24,25,26,30,33,45,42,43,44,51,47,54,56,48,59],apach:[17,26,51,25,3],bust:15,busi:[56,18,1],rick:59,"0x42bce1":7,thread_pool_purge_delai:30,txurl:[41,59,53],nasti:[46,7],watch:[26,59,27,1],report:[22,1,6,7,13,57],txresp:9,transpir:43,bar:[56,46,59,51],ietf:59,shape:1,method:[56,26,18,12,3],reload:[19,30],bad:[18,7,32,30,1],"sm\u00f8rgrav":[34,3,8,37,41,56,58,30],ban:[33,18,22,25,26,56,28,30,59,16],metadata:[59,18],vernisag:26,respond:15,gzip_tmp_spac:30,pummel:20,motherboard:26,roadmap:49,nul:[56,46],num:41,mandatori:[50,13],result:[46,47,34,3,37,6,43,8,38,30,40,41,42,13,56,44,16,58,59,45],respons:[46,2,3,30,9,24,26,56,45,59,16],fail:[0,5,23,9,24,11,12,42,56,30],hash:[34,22,53,25,56,28,58,30],so_sndtimeo:30,best:[20,51,23,26,12,48,30],subject:[56,21,32],awar:[18,30,59,27,7],said:[29,1],hopefulli:[6,15,1],databas:46,field_list:8,figur:[31,43,12,7],"0x00004000":30,awai:[48,41,42,30,3],irc:[32,22,15,7],approach:[20,38],accord:[56,45,1],triplet:20,extend:[3,59,39,1],unabl:[56,11,26],extent:56,statsess:41,toler:[55,13],setsockopt:30,protect:23,expos:36,howev:[56,21],against:[2,18,24,56,16,30],do_stream:56,uncertainti:13,com:[18,51,24,26,56,44,16,49,59,32],fileformat:23,con:16,compromis:2,suggest:[35,21,32,1],assur:49,host_head:56,"16k":30,foobar:[46,6,26],"16g":27,exemplari:56,shortcut:[20,30],diff:23,guid:[35,21,59,39],assum:[2,6,36,43,48,30],nake:38,reciev:[19,59],liabil:56,tinu:16,three:[46,2,4,24,26,7,56,49],been:[2,52,30,38,24,26,56,28,32,31,59,16],accumul:[30,2,18],much:[22,2,19,5,1,36,20,26,48,12,42,27,13,30,15,59,32],dlopen:30,interest:[21,7,24,23,12,13,59,32],basic:[33,19,20,54,39,24,26,13,56,59],futur:[56,11,32,30,13],vcl_deliv:[56,46],http_req:2,life:[13,11,7,1],xxx:[26,46,7],worker:[46,18,1,30,26,42,7,45,15,16],telnet:[23,57,47,16],argument:[46,3,43,40,26,12,42,7,56,28,16],vcc_err_unref:30,virtualhostbas:26,cli_buff:[30,16],child:[48,2,30,9,7,16,15,45],spin:7,ident:[20,26,7,56,44,30],aix:[43,13],prefer_ipv6:30,servic:[0,2,30,7,56,57,16],zlib:48,commerci:[22,32],calcul:[31,59,16],neat:42,alloc_seq:42,occat:32,printabl:28,sting:46,conf:15,tediou:43,"0x43ef68":7,thread_pool_stack:30,sever:[0,54,47,21,11,53,24,26,1,56,44,16],perform:[18,4,5,26,11,13,44,48,30],nazi:20,make:[7,2,5,6,1,52,12,13,14,16,35,21,23,36,26,27,28,30,31,32,38,42,49,45,46,47,51,11,53,54,56,48,59],complex:[48,39,32],split:[33,30,7],vmod_dir:30,complet:[48,21,39,53,24,9,56,30,15,16],raid:31,evid:26,hang:[32,7],hand:[1,38,26,43,56,45],fairli:29,afraid:13,portal:27,tune:[19,6,55,53],kid:48,kept:[56,59,27,30],undesir:47,bewar:24,thu:16,itself:[0,50,34,3,37,8,40,9,41,56,30,58,59,16],inherit:2,client:[3,6,9,11,7,14,18,19,21,24,25,26,30,34,45,37,41,51,47,53,56,58,59],cooloff:30,thi:[0,2,3,6,7,8,9,11,12,13,14,15,16,18,19,20,21,22,23,24,26,28,30,32,33,34,37,40,39,41,42,43,44,45,47,48,49,50,51,46,53,54,56,57,58,59],mother:15,gzip:[4,6,25,56,1,14,55,30],programm:23,everyth:[46,19,6,22,21,26,53,12,13,48,15],unchang:6,identifi:[56,20,59],just:[32,46,36,2,20,1,30,43,53,24,56,42,13,14,28,44,57,31,15,59,45],bandwidth:6,via:[18,9,36,26,59,32],victim:1,unbuff:41,yet:[11,48,46,7],languag:[33,47,46,38,24,25,26,43,56,49,30,45],previous:28,"0x00000010":30,easi:[59,2,7],interfer:49,royal:23,must_reload:30,logformat:51,"0x00010000":30,els:[22,6,7,56,11,13,14,44,48,15,51],save:[56,6],hat:[22,12],transit:30,gave:43,applic:[33,21,36,52,24,56,11,14,44,59],log_hashstr:30,ktrace:7,background:18,elabor:15,dreamt:48,measur:[37,30],daemon:[25,41,30,3],rxrequest:[19,41],specif:[46,20,13,24,43,56,15,59,45],arbitrari:[19,56,44],manual:[0,35,46,50,34,3,37,22,8,40,9,25,41,7,56,30,58,16],mit:56,remind:32,plattform:29,hung:7,unnecessari:[6,21],el5:12,www:[47,26,12,56,49,16,59,51],right:[46,1,7,8,23,43,26,13,56,30],old:[34,3,19,20,37,9,58,11,41,15,59],deal:[20,11,56,48,32,30],hit_for_pass:[24,28,26,22,56],interv:[56,44,46,30],crown:43,somehow:20,percentag:30,intern:[56,30],sure:[47,2,20,6,7,46,36,56,42,13,14,44,32,59,16],indirect:56,successfulli:[24,56],insensit:[19,56,26],cooper:[34,3,8,37,9,41,56,30],vcl_hash:56,bottom:23,establish:40,fpic:30,haxlw:7,multipli:[26,38],healthcheck:56,fol:30,condit:[56,6,16,30,7],foo:[0,46,40,26,56,44,51,15,59,16],localhost:[36,18,19,40,9,24,54,56,30,16],peek:23,plu:[48,30],sensibl:[6,13,32,43,1],uncompress:[6,30],burn:48,st_dev:42,unreason:20,repositori:12,post:[56,32],chapter:[33,59,30],http_max_hdr:30,obj:[24,28,26,56,16],smalloc:15,unfortun:[21,12],commit:20,produc:[46,6,23,26,43,56,30],net5501:1,"float":46,contriv:46,bound:[15,13],down:[24,56,44,16,15,59,30],resili:44,nuke_limit:30,wrap:23,opportun:31,storag:[46,6,9,53,36,25,26,42,27,56,30],often:[46,2,26,7,56,44,30],git:[12,1],crowd:7,wai:[46,48,1,2,18,20,7,30,26,39,40,11,42,13,56,43,57,59,32],boutiqu:46,transform:1,happi:1,avail:[42,46,50,34,3,37,18,8,9,58,24,11,41,12,39,13,56,49,30,15,16],gif:[14,24],reli:[56,59,13],editor:[23,54,1],overhead:[56,27,30],clockskew:30,lowest:38,head:[56,26,59,30],form:[56,57,50,7],offer:[30,32],forc:[20,6,26,56,59,30],hitrat:[36,33,15,59],linpro:[56,9,32],dead:[26,2],heap:18,renam:[28,22],"true":[6,38,39,12,7,56,28,49],mymod:46,reset:6,rxlosthead:41,full:[56,48,46,57,30],mebibyt:30,vcl_init:56,maximum:[20,6,5,56,16,15,30],tell:[48,19,20,6,43,54,24,26,12,7,14,44,57,32],url:[0,3,6,9,11,14,44,16,18,21,24,26,28,37,39,49,30,46,53,56,57,59],ncurs:12,fundament:[20,54],sampl:47,autoconf:12,emit:[4,56,26,30,16],nnn:16,vclexampl:26,openbsd:[29,13],semicolon:56,classic:30,diagnost:[59,30],workerthread:30,exist:[47,48,3,38,26,42,43,56,30,16],check:[33,46,2,18,19,26,30,38,11,12,42,43,56,44,32,15,59,16],shit:1,spend:[26,32,7],when:[2,3,6,8,9,11,7,14,15,16,24,18,19,20,21,36,26,28,30,34,37,46,41,42,43,44,45,47,48,49,53,54,56,57,58,59],actor:2,fs2:56,role:[56,59,2],test:[50,4,43,6,1,54,9,25,52,12,39,13,56,29,45,49,16],tie:36,unlimit:30,epel6:12,intend:[56,33,7],"128kb":30,asterisk:16,fell:2,intent:13,consid:[0,46,3,27,56,59,16],outdat:18,younger:56,faster:[35,19,36,42,32,30],sighup:[41,3],ignor:[34,3,6,37,36,26,41,56,28,30,58,59,16],listen_depth:30,push:[47,30,42,16],serious:[39,13],concept:[54,42,1],cli_timeout:30,snif:43,affair:31,skip:[56,6,41,12],global:[56,46,30],focus:32,shellscript:43,signific:[26,27,16],netbsd:[29,13],millisecond:30,decid:[2,24,26,56,49,57,59],middl:1,depend:[22,23,36,26,12,7,56,59,45],graph:53,readabl:[23,46,13],"_that_":2,rel:[46,26,30,38,42],default_ttl:[56,30],certainli:[46,13,7],vec:6,addon:59,sourc:[54,46,48,22,30,26,43,53,23,12,13,56,32,16],string:[0,46,3,6,22,38,30,56,28,57,16],"3am":2,revalid:59,varnishncsa:[17,34,3,37,8,9,25,41,42,30,58,45],lru:[27,30],word:[56,26,22,23,16],exact:30,zope:26,cool:[42,2],"0x00000020":30,valuabl:7,administr:[36,33,31,2],level:[46,6,7,9,23,13,56,30],did:[55,2,6,43,26,13,56,28,57],die:9,leftov:26,iter:[56,9],item:[56,28,30,16],ccf_panic:7,cooki:[0,33,19,21,36,24,26,7,56,49,59,16],round:[56,25,26,44,30],prevent:[56,20,26],brave:12,core:[0,48,30,9,7],trend:1,compens:26,sign:[2,30],cost:[26,57,31],gzipe:6,unprotect:2,port:[33,47,50,19,20,52,30,40,36,26,12,56,44,57,54,15,16],comparis:16,appear:[56,26,30,16],cecili:[40,50],repli:[56,31,40,30],"64bit":5,current:[0,48,3,51,26,41,7,56,30,16],rephras:7,gener:[0,1,2,43,7,30,38,39,10,56,26,27,13,14,32,15,16],satisfi:[30,12,13],explicitli:[56,30],modif:56,address:[36,50,20,51,37,26,9,40,24,11,30,56,49,57,15,16],along:[0,46,18,1,14,59],wait:[2,34,8,40,9,11,7,56,58,30],box:[26,7],buck:13,openinfo:51,errorhandl:7,txrequest:41,esi_syntax:30,queue:[24,11,30],behav:[47,43,45],dusti:20,weird:[56,38,13],commonli:[37,53],ourselv:13,love:[46,13],humour:59,activ:[19,20,6,7,36,27,13,56,44,30,49,16],modul:[0,35,46,2,25,30,51],prefer:[14,20,30,56,3],marker:[11,46],instal:[35,22,54,26,12,29],mobil:[26,44],regex:[34,3,19,37,26,41,56,58],memori:[0,2,3,4,5,24,15,17,19,36,25,26,27,34,37,40,41,42,30,46,53,56,58],subvert:2,franca:23,perl:[56,59],everybodi:[32,7],live:[18,13,23,43,56,32,59,30],handler:56,"417a":57,kristian:[56,58],tape:57,checkout:12,twitterif:18,afford:26,peopl:[1,18,20,7,26,13,28,57,59,32],clue:[15,32],suckag:[57,55],drown:32,prototyp:[0,46],examin:[56,6,42,7],effort:[48,13],easiest:59,religi:57,graphic:23,prepar:56,uniqu:[56,51,7],cat:16,descriptor:[46,30,7],hardest:46,can:[0,7,2,6,1,8,9,10,11,12,13,15,16,17,18,19,20,21,23,24,26,27,28,29,30,31,32,36,37,38,39,40,41,42,43,44,45,46,47,49,51,52,53,54,56,48,59],purpos:[52,38,24,54,56,30,59,51],preclud:23,heart:12,sourcefil:16,stream:[6,26],fragment:[49,39,30],slightli:6,"1980i":45,backslash:[56,16],agent:[33,3,37,53,14,44,59,51],topic:[33,57,39,32],drawer:57,abort:48,"14b":7,hash_always_miss:56,simul:[45,7],occur:[28,37,53],alwai:[46,2,3,6,7,11,13,56,30,16],multipl:[34,3,20,25,26,41,42,56,58,30],oslo:1,charset:[56,26],ping:[19,30,16],write:[46,48,2,3,19,20,43,23,26,41,42,13,56,30,31,16],purg:[33,18,22,24,26,56,28,59,30],pure:[42,2],familiar:21,xhtml:[56,26],parameter:40,map:[44,26,31,15],product:[36,11,23,30],ban_lurker_sleep:[30,18],max:[4,15,59,30],clone:12,spot:[23,2,32],usabl:[20,7],intrus:[32,13],mac:[57,13],mad:43,mai:[46,48,3,7,38,30,26,12,55,13,56,57,32,45],end:[0,1,19,7,26,9,24,11,13,56,49,30,16],suck:23,data:[46,2,25,4,1,38,24,19,11,42,27,7,56,44,48,15,59,30],grow:48,man:[47,21,39,26,56,15,16],ssm:[9,30],autotool:12,practic:[6,23,2],"0x00001000":30,disabigu:20,stdin:[40,30],favorit:54,inform:[55,20,37,53,26,12,7,56,44,30,15,59,32],"switch":[20,23,24,52,56,30],wrt54g:13,combin:[17,51,41,25,3],block:[4,56,26,15],anoth:[51,46,2,18,20,6,30,24,56,11,43,14,57,45],talk:[46,20,23,56,57,16],shield:11,approv:26,ttl:[0,18,4,26,24,25,11,41,56,28,49,59,30],clock_skew:30,still:[0,1,11,43,24,26,7,49,15,59],pointer:[20,46,25],dynam:[56,42],futil:7,vtc:[12,9],group:[3,19,37,41,56,44,57,30],monitor:53,polici:[56,20,49,39,32],norwai:23,instantli:[20,46],platform:[23,55,15,13],window:[19,56,44,30],curli:56,mail:[22,32],main:[56,32,8,7],do_gzip:[56,6],non:[46,43,40,23,26,13,56,28,30,16],synopsi:[0,50,34,3,37,8,40,9,25,41,58,30],smarter:23,objprotocol:41,initi:[56,44,41,46,30],therebi:18,half:[23,30],anecdot:26,now:[6,13,52,12,1,44,24,19,20,22,23,15,36,26,28,38,39,43,49,46,57,11,53,54,56,48,59],widespread:23,nor:[34,3,37,41,56,58,30],introduct:26,wont:15,wagon:43,term:[45,59,13],name:[46,34,3,20,21,8,40,24,56,26,41,37,30,58,16],drop:[30,32],revert:56,crypto:48,separ:[33,46,2,8,56,14,48,30],pcrepattern:21,careless:57,between_bytes_timeout:[56,30],collaps:0,compil:[46,2,22,26,12,43,56,28,30,45],domain:[24,56,26,2],replai:[25,50],replac:[22,36,43,56,28,57,30],individu:[46,26,49,39,16],yeah:57,vcl_trace:[41,30,7],ensur:6,redistribut:56,significantli:[48,43],year:[23,1],happen:[2,18,6,1,23,39,24,26,42,7,30,15,32],subnet:56,shown:46,space:[19,30,9,26,27,57,16],repetoir:38,storage_fil:[9,30],priviledg:2,rational:59,internet:[57,2],ironi:[7,1],correct:[47,51],after:[34,3,37,30,24,41,42,56,57,58,32],migrat:20,xhtml1:[56,26],million:[26,1],libpcre3:12,theori:[56,6],ebcdic:45,org:[47,23,53,26,12,1,56,30,59,32],"byte":[47,48,3,4,6,30,24,56,45,58,16],rfc1884:57,vcc_if:46,care:[46,55,12,13,44,57,59,45],reusabl:56,suffici:26,befor:[47,18,5,6,43,46,30,24,56,26,12,42,7,45,29,57,32,16],waiter:30,dunno:9,"10mb":16,synchron:30,do_esi:[6,22,39,56,28,49],thing:[46,2,20,6,1,43,21,27,7,44,48,15,30],place:[47,18,46,24,11,7,57,15,32],unwis:30,principl:31,think:[48,2,18,20,1,30,23,43,26,55,7,44,57,31,49,45],frequent:[10,35,37,59],first:[3,4,6,7,52,1,15,16,18,19,23,27,31,32,37,39,41,44,30,46,57,11,54,56,48,59],oper:[55,2,43,22,38,9,40,24,56,26,12,42,7,14,28,30,16],redhat:[22,12],carri:[59,48,27,2],onc:[35,20,8,56,26,12,7,37,28],tbw:46,wedg:7,reopen:[41,3],fetcher:30,"long":[0,18,20,30,26,42,13,56,32,59,16],open:[54,46,20,7,30,52,9,26,12,42,13,32,15,16],size:[33,3,5,9,53,25,26,58,27,1,56,30,15,16],given:[3,20,38,9,40,26,30,16],sheet:48,teenag:1,mailman:32,autocrap:[55,43],paramt:30,cassett:57,demonstr:56,white:56,conveni:[46,32],amonst:30,especi:59,copi:[51,6,56,11,41,43,14,30,32],circumst:2,specifi:[46,47,50,34,3,37,51,8,40,36,41,27,56,30,58,16],blacklist:11,enclos:[56,30,16],mostli:[24,56,30,59,32],quad:30,grunt:31,than:[2,3,6,7,11,12,1,16,20,22,23,26,32,38,40,41,43,30,57,56,48,59],png:[14,24,6,18],serv:[0,32,18,26,53,24,56,11,27,14,44,45,15,16],wide:59,glossi:26,sess_workspac:[46,30],posix:[26,43],balanc:[56,26,48,54,45],were:[46,50,34,3,37,40,26,41,43,55,31,58],posit:26,surrog:59,browser:[19,6,36,23,14,45],pre:30,fork:2,sai:[2,6,7,26,24,11,13,44,57],gottcha:38,ani:[32,47,2,3,18,6,7,37,46,30,53,24,20,11,13,56,28,44,45,15,16],subroutin:[24,25,56,39,18],properli:[36,39,2],deliv:[18,4,6,1,24,26,13,56,28,30,45],saw:[31,39],engin:[56,48],squar:[30,1],destroi:30,note:[0,19,6,26,52,24,11,12,39,56,44,30,31,59,16],schmocument:23,"_end":7,take:[0,33,46,1,7,23,53,24,26,12,42,13,56,28,48,36,59,30],advis:56,noth:[20,46,30,32],channel:[22,2,32],begin:[9,24,43,56,44,30],varnishd:[0,3,8,9,52,12,7,15,16,20,36,25,45,34,37,40,41,42,30,50,53,56,58],trace:[56,16,30,7],normal:[47,34,3,19,6,37,38,24,56,26,41,1,14,58,59],track:[38,21,15,32],reqend:41,knew:43,compress:[4,6,26,1,14,51,30],clearer:28,varnishadm:[25,30,40,16],varnishs:[25,58,53],america:32,homepag:1,gunzip:[4,6,30],latex:23,synonym:56,later:[47,50,19,37,46,12,43,56,32,30],sale:32,"0x4193f6":7,varnishtest:[25,9,45],runtim:[46,30],bumbl:1,patchlevel:14,shop:32,backendreus:41,show:[34,19,43,21,1,30,40,39,53,23,41,7,56,45,58,59,16],cheap:27,merit:42,n900:[26,13],concurr:56,permiss:[15,16],hack:12,threshold:[56,44,30],corner:[58,34,2,53],fifth:23,help:[0,2,22,38,30,40,53,42,7,32,15,16],xml:[8,26,56,49,45,30],onli:[2,3,4,6,7,1,14,15,16,36,18,19,20,26,24,23,27,28,30,32,34,37,40,41,42,43,49,45,47,48,50,51,46,56,57,58,59],slow:[0,30],ratio:[30,18],fenc:48,transact:[34,4,19,11,41,7,56,51,15,45],proportion:56,behind:[32,59,13],carrag:16,wood:1,analyz:21,enthusiasm:13,analyt:21,analys:31,overwritten:[41,58,34,3],variou:[50,2,6,56,31,15,59,16],get:[7,2,3,6,1,8,9,11,12,13,15,16,18,19,20,21,22,24,26,30,32,34,37,46,41,42,43,44,45,47,48,54,56,57,58,59],stomp:42,auto_restart:30,repo:12,ssl:[48,55],cannot:[46,2,6,23,26,48],ssh:[57,40,2,42],master_pid:42,ssd:26,requir:[47,18,19,26,56,30,16,32],truli:20,seldom:18,dramat:39,sidewai:31,stupid:[20,2],bugfix:7,where:[3,13,9,10,7,15,16,17,20,21,22,26,24,23,28,31,34,37,46,41,42,43,44,30,47,54,56,48,58],summari:[16,40,1],wiki:[51,47,21,26,23,16,59,32],kernel:[48,26,30,42,7],shm_reclen:30,seal:30,wonder:[11,31,1],detect:[30,42,43],enough:[20,46,30,7],between:[0,46,34,2,19,20,6,8,40,26,56,49,30,58,59,45],"import":[0,46,55,2,20,1,38,24,7,56,28,48,59],across:[56,28],example_director:44,parent:30,style:[26,45,16],cycl:48,jobb:59,come:[36,46,19,21,1,9,24,56,26,7,14,44,57,15,59],"0x00000040":30,quiet:[32,9,13],contract:56,retir:20,audienc:0,tutori:[36,33,39,35],"80013339a":7,mani:[48,4,21,40,26,42,13,56,44,30,16],clf:3,evict:[27,18],among:56,acceler:[35,54,25,26,56,16,59,30],overview:[39,53],period:[56,37,8,42,30],insist:9,exploit:2,featur:[19,20,11,26,1],colon:57,toupper:[0,25,46],poll:[56,20,44,53],damag:[56,57],libvarnish:16,hexdump:16,"0x8006b8b76":7,harmless:57,stretch:38,fritzvold:[40,50],mark:[0,34,53,58,1,56,44,30,49,16],varnish_nam:[34,3,8,37,41,58],listen_address:30,hitpass:41,avian:23,repons:[45,59,30,16],"80013822c":7,thousand:[11,7],workspac:[46,30,7],those:[47,20,21,46,11,13,48,32],sound:7,myself:[56,2],hdr:9,ungzip:6,tinderbox:13,expban:41,trick:[26,57,44,2,32],admin:[21,55,2,16],invok:[18,16],outcom:56,invoc:43,margin:[48,2],misbehav:[44,33,11,15,59],suse:26,advantag:30,stdout:[40,30],henc:26,worri:[57,12,1],cluster:[56,54],pthread:30,ascii:[57,2,45],subscrib:[23,2,32],develop:[34,3,37,8,9,41,1,56,30,58,32],author:[0,34,2,3,37,8,40,9,50,41,56,30,58,59,16],same:[0,2,3,6,8,9,11,13,14,16,18,19,20,24,26,34,37,40,41,42,44,30,50,53,56,57,58,59],trip:7,binari:[24,56,23,12],epoch:[56,46],html:[6,26,39,23,1,56,49,51,45],pad:7,sentenc:32,pai:[28,32,1],eventu:[56,57],medit:[56,26,15],vmod_tolow:46,week:[0,1],finish:[26,30,40,1],webserv:[45,57,59,1],rxresp:9,assist:31,driver:2,ness:6,director:[56,25,26,44,33],capabl:[23,6,11,15],immedi:[32,30,16],appropri:[56,26,59],patchwork:1,macro:43,markup:49,page:[0,3,8,9,11,14,15,16,35,18,19,21,23,26,27,32,34,37,40,39,41,49,30,50,56,58,59],without:[55,3,18,6,7,40,43,36,20,12,13,56,49,32,31,16],alexa:1,model:2,roughli:[26,7],execut:[24,20,30,59,7],resp:[56,46,9],rest:[24,12,9],bitmap:30,kill:[52,15,2,7],aspect:[56,48],stevedor:1,speed:7,http_resp_hdr_len:30,ixslvvxrgkjptxmcgnnsdxsvdmvfympg:16,gibibyt:30,europ:32,struct:46,korken:59,except:[18,21,53,24,56,57,30],param:[46,16,40,30,7],apache2:51,identif:56,pile:[30,11,1,56,48,32],session_ling:30,real:[0,46,47,7,38,13,32,45],around:[1,7,11,13,57,31,30],libm:43,read:[0,2,3,6,12,7,16,35,21,26,24,23,34,37,40,39,41,42,47,53,56,58],rfc2616:[56,26],esi_level:[56,6],traffic:[22,50,2,19,5,21,1,25,26,7,56,44,30,45],mon:[46,9],world:[36,47,48,59,32],dare:43,tolow:[0,25,46],whitespac:30,vcl_dir:30,pole:32,integ:[0,25,46,16],server:[2,3,9,52,1,14,16,35,19,21,24,23,45,32,33,34,37,39,41,44,30,47,50,51,11,54,56,58,59],benefit:[31,13],shmfile:[15,9],updat:[50,34,20,8,40,53,12,37,28,30,58,16],output:[46,3,4,20,6,8,23,9,25,26,41,7,49,30,16],strcmp:7,txheader:[26,41,59],max_max_count:15,handshak:48,refresh:[26,59],inlin:[56,28,46,30,16],gigabyt:36,shmlog:[42,30],micro:43,definit:[56,20,26],achiev:[36,33,26,15,59],legal:13,moon:31,exit:[2,34,3,8,37,40,25,41,56,58,30],expiry_sleep:30,complic:[6,21,51],overli:21,refer:[35,18,4,51,3,23,39,25,26,56,30,16],needlessli:30,timeout:[56,44,40,30],power:[57,18],inspect:[56,46,57,15,16],sess:46,broken:[56,16],fulli:[36,26],regexp:[26,46,16],getnameinfo:57,"throw":[20,11,48,18],standstil:26,comparison:[24,56,30,38,16],deflat:[4,14,6],central:[23,2],coupl:[38,15,59,32],acl:[24,25,56,18],objlosthead:41,stand:[26,48,23],act:[47,34,3,37,41,13,56,58],luck:33,processor:[49,43],xnn:16,routin:7,pipe_if_loc:56,effici:[20,6,42],surviv:30,your:[13,52,12,7,14,15,16,35,18,19,20,22,23,24,26,27,28,30,31,32,33,36,46,39,43,44,45,47,11,53,54,56,59],stare:26,log:[0,2,3,4,7,8,10,1,15,17,19,22,26,24,25,23,28,30,32,33,34,36,37,39,41,42,45,50,51,53,56,58],her:[24,33],area:27,hex:16,overwrit:[19,41,42,3],strict:[56,26],compliant:[26,13],mindless:[23,2],interfac:[46,47,18,40,36,25,43,30,16],low:[28,2,30],lot:[36,49,18,6,7,38,53,24,56,26,12,27,13,14,44,57,51,21,59,30],ipv6:[56,20,57,55,30],hen:[35,48,34,2,3,20,1,8,38,9,56,23,41,55,13,37,43,57,31,30],machin:[5,33,57,15,20],unam:43,relic:43,verbatim:3,bundl:26,jun:9,amongst:[56,43],opensolari:13,http_range_support:30,conclus:20,longer:[28,11,30,40,16],notat:[20,30],rush:30,fraud:1,possibl:[1,2,56,5,6,7,30,43,20,26,42,13,14,45,31,32,16],"default":[33,46,34,3,5,6,36,8,52,58,24,56,26,12,37,44,54,15,59,30],bucket:30,unusu:38,monopoli:2,deadlock:56,connect:[47,2,19,20,51,40,9,24,54,42,56,30,16],gone:[28,22,16],loadabl:30,unreferenc:30,creat:[42,2,6,30,9,53,24,26,39,56,44,45,16],certain:[18,19,24,11,56,59,30],decreas:30,file:[0,7,2,3,6,1,9,13,16,17,19,26,24,25,23,32,34,37,40,41,42,43,49,30,47,50,46,54,56,48,58],legacy_broken_cm:59,proport:13,workdai:23,again:[2,20,30,26,56,45,15,32],collid:42,googl:[21,15,59,1],binocular:31,prepend:16,field:[3,4,37,51,8,9,30,42,14,57,16],valid:16,compet:31,txlosthead:41,writabl:[24,56],you:[0,7,2,5,6,1,52,12,13,14,15,16,35,18,19,20,21,23,24,26,27,28,29,30,31,32,36,38,39,40,42,43,44,45,46,47,48,49,51,11,53,54,55,56,57,59],architectur:9,sequenc:16,symbol:8,time:[7,3,4,6,1,12,13,15,16,18,19,20,24,25,26,29,30,31,32,37,38,39,42,43,49,45,46,48,50,51,53,56,57,59],ansi:43,reproduc:[56,50,7],pool:[20,30,28],reduc:[5,30,39,28],assert:7,neuter:23,directori:[24,30],descript:[0,46,50,34,3,37,8,40,9,25,41,56,30,58,16],tricki:[42,27,7],lockless:30,potenti:[24,56,11,7],escap:[28,22,16],cpu:[48,30,18],unset:[24,56,6,21,59],represent:[20,46,55,58],all:[2,6,7,11,1,15,16,18,19,20,21,24,26,27,28,30,32,34,37,39,41,42,43,44,45,13,46,55,51,56,57,58,59],forget:[46,19,20,12,13,32,45],lack:[59,13],month:1,mp3:14,abil:[20,11],follow:[2,3,8,9,11,12,14,15,16,18,21,24,26,29,32,34,37,41,30,50,56,58,59],disk:[19,26],mathisen:[9,30],default_keep:30,discard:[46,18,20,21,11,56,44,30,59,16],articl:[47,39],init:46,program:[46,2,19,7,23,9,38,25,26,53,42,13,30,15,59,45],queri:[26,3],neglig:56,introduc:[56,44,57,42],"case":[0,46,34,3,4,6,43,37,23,24,19,26,41,42,13,56,28,58,16],liter:23,fals:[56,38],secret_fil:40,faq:48,buer:[0,50,8,40,41,56,16,58,30],util:[0,17,50,34,3,37,8,40,53,26,41,58,16],candid:[30,13],mechan:18,fall:[56,49],veri:[0,46,2,20,7,23,39,38,26,13,56,49,59,32],ticket:[22,32,7],unalt:56,list:[32,48,58,3,56,20,22,8,23,39,53,24,30,26,41,12,42,37,45,15,16],adjust:[56,28],stderr:30,small:[27,13,56,49,30,45],synergi:26,queue_max:30,tea:12,tee:7,tex:23,syslog:[0,39,25,7,15,30],rate:[14,19,59,39,30],design:[56,26,2],pass:[46,47,3,6,22,40,24,26,13,56,28,30,59,45],further:[24,56,32,15,59,30],ter:16,what:[6,7,10,12,1,14,15,18,19,20,21,36,26,51,31,38,39,42,43,44,45,13,47,48,46,53,55,56,57,59],sub:[46,49,18,6,11,39,24,26,56,28,44,21,59,51],clock:30,section:[0,50,34,3,37,8,40,9,54,41,42,56,30,58,16],advanc:[33,26,44,39],abl:[2,7,40,26,13,48,23],brief:16,overload:56,delet:[53,24,26,42,56,16,30],version:[0,3,6,8,9,12,14,16,26,23,29,30,34,37,40,41,43,45,47,50,56,57,58,59],"public":[56,26,59],movement:2,cookie1:21,hasn:30,cookie2:21,themselv:[43,16],chunksiz:30,variat:14,goodbi:48,sessionclos:41,"455c":16,behaviour:[28,22,45],http_resp_siz:30,solari:[26,43,29,13],excess:30,modifi:[46,6,26],valu:[0,46,34,4,8,53,26,42,43,56,30,58,16],arena:30,search:[35,32],ixslvvxrgkj:16,newlin:[56,16],prior:47,amount:[6,26,27,56,44,15,30],saintmod:[56,11,30],pick:[18,21,27,13,56,55,32],action:[24,56,47,46,39],dismiss:20,narrow:[38,16],virtualhostroot:26,lurker:[30,18],shorthand:30,vcl_return:41,filenam:[0,47,9,23,16,30],href:[26,49],famili:[56,25,32],sanction:57,suddenli:[20,11,13],acceptor_sleep_decai:30,select:[56,30],aggress:18,hexadecim:16,two:[46,45,18,20,6,1,24,56,11,12,7,14,44,57,59,16],formul:32,rhel:26,taken:[47,21,24,12,42,16,30],forcefulli:9,minor:13,more:[2,6,9,11,12,7,15,16,21,22,23,26,28,32,38,39,42,43,44,30,47,56,57,59],flaw:2,desir:56,openvz:5,canon:48,hundr:32,mozilla:59,flag:[0,56,46,30],stick:57,particular:[20,6,26,12,56,16],known:[11,57,31,3],compani:[43,32],cach:[0,2,3,4,6,1,8,9,11,12,7,14,15,16,35,18,19,20,21,24,25,26,27,28,30,33,36,46,39,44,45,47,49,50,51,56,59],dictat:52,none:23,endpoint:30,vmod:[46,22,25,1,56,28,30],hour:0,dev:[12,15,32],histori:[0,50,34,3,37,8,40,9,25,41,56,30,58,16],remain:[56,49],rfc5952:57,nine:48,caveat:7,learn:32,abandon:[56,23,55,13],broad:0,userbas:13,typograph:23,prompt:2,challeng:[46,16],share:[0,2,3,4,15,17,19,20,25,26,34,37,40,41,42,49,30,46,53,56,55,58],cacheabl:[56,28,26,22],accept:[6,11,9,53,56,26,14,30,45],minimum:[56,30],pong:19,varnishsoftwar:59,huge:[11,48],cours:[26,2,1],ixsl:16,freshli:46,divid:[24,56,38],rather:[3,43,11,38,23,41,7,48,15,16],stig:[9,30],comfort:12,snippet:[56,21],rxstatu:41,heck:1,reject:56,simpl:[51,46,21,7,56,49,30,44,16],distro:13,regener:49,absentmindedli:31,resourc:[26,30],referenc:56,variant:[14,18],buffer:[57,30],unlink:9,"0x8006b51c1":7,resons:30,"short":[24,33,15,39,30],onto:[47,22],diag_bitmap:30,proto:56,caus:[56,30,31,7],thread_pool_max:[28,30],dream:48,sysctl:15,rotat:[41,3],soon:5,held:30,paper:1,through:[35,48,18,19,6,30,39,36,52,42,56,32,21,59,16],suffer:14,paramet:[2,18,6,40,30,25,26,12,7,56,45,59,16],typedef:46,render:49,late:1,segfault:39,pend:26,bypass:21,might:[47,18,11,36,23,26,12,27,56,44,31,15,59,51],alter:[24,26],"0x00020000":30,foon:16,good:[33,46,48,21,53,26,56,44,32,30],"return":[0,46,47,18,45,22,40,30,24,26,56,28,57,16],authorized_keys2:2,timestamp:16,uhm:24,libwww:59,detour:30,somebodi:[26,31,43],barbarian:31,bigger:30,document:[0,3,8,9,12,13,15,16,35,22,26,24,23,34,37,46,40,41,30,47,50,53,56,58],objurl:41,troubleshoot:[10,33,26,15],"0x8006b4307":7,userid:16,unlik:[24,56],authent:[36,25,56,40,16],easili:[36,59],token:[26,16],ceas:21,dialin:[24,56],backtrac:7,truncat:30,n_lru_nuk:27,send_timeout:30,needless:[2,30],bereq:[56,46,6,26],set_ip_to:[0,46],hard:[46,43,15,30,13],idea:[46,48,6,1,30,43,32,31,16],procedur:[23,46],realli:[55,2,18,19,6,26,38,36,11,7,14,44,32,59,16],expect:[9,23,42,13,56,59],inflict:43,horribl:[20,12],beyond:[56,11],event:[56,30],encod:[6,53,56,26,14,28,45,30],vmod_toupp:46,varnishhist:[34,3,37,8,9,53,25,41,30,58,45],publish:57,footnot:13,health:[33,20,26,11,56,44,55],print:[17,8,37,20,59,30],occurr:[56,30],foreground:[30,16],qualifi:26,proxi:[26,48,47],sandbeck:[9,30],differ:[24,47,20,6,39,10,56,26,42,43,14,28,44,48,59,30],reason:[47,48,2,23,26,12,13,56,32,31,15,16],base:[2,18,58,36,56,23,12,14,44,49],put:[33,46,48,19,43,45,1,30,52,39,26,13,56,57,23],backendopen:41,basi:[23,44,13],thrown:11,driven:9,thread:[18,20,7,9,53,11,42,5,56,28,30,32],launch:[16,15,7],drupal:[21,59],exponenti:30,circuit:24,corkscrew:48,lifetim:[26,8],assign:[24,56,46,30],feed:13,sess_timeout:30,managebl:36,dont:32,obviou:20,upper:[0,30],cache_cli:7,famou:[38,1],misc:32,number:[0,3,5,6,8,9,12,7,15,16,19,20,26,34,37,38,41,30,46,57,56,48,58],pkgconfig:12,done:[51,18,21,22,24,54,12,7,28,48,30],unhealthi:[56,44],blank:30,stabl:42,miss:[34,18,6,3,53,7,56,58,45],can_gzip:56,guess:[44,9],vararg:46,construct:[49,30],"0x8006b3ef2":7,paint:1,stori:26,station:57,fympg:16,statement:[46,39,24,7,56,49],ton:43,scheme:20,store:[36,46,18,4,6,24,27,56,30,45],pare:56,shmlogsiz:30,saint:[56,20,11,30,25],relationship:2,blindli:38,park:[20,30],part:[46,18,19,21,43,59,16],pars:[0,50,6,24,56,16,30],tebibyt:30,grace:[4,26,25,11,56,30],std:[0,46,22,56,28,30],kind:[46,7,42,1],grew:13,grep:59,prebuilt:12,whenev:[4,46,13],remot:3,remov:[0,51,18,6,52,24,56,26,14,28,49,30,21,16],horizont:[58,34,53],bugfre:2,stall:42,str:56,consumpt:30,stale:[56,11,44,16],randomli:[48,16],stataddr:[41,37],comput:[1,2,13,23,26,43],default_grac:30,packag:[26,22,12,54,13],expir:[4,56,26,38,30],propos:31,dedic:1,"null":[46,15],option:[46,50,34,3,19,37,8,40,9,53,36,25,52,41,58,56,44,30,15,59,16],imagin:[20,43],built:[24,36,31,56,18],lib:[30,16],self:[43,30,16],troublesom:57,efh:7,also:[0,3,6,7,8,9,11,13,16,18,20,21,24,25,27,51,31,32,34,37,38,40,41,42,43,44,30,47,48,50,56,57,58,59],build:[31,26,22,12,46],cc_command:30,brace:56,pipelin:[47,1],distribut:[34,53,12,56,44,58],exec:30,previou:[56,26,30],reach:[19,24,56],react:15,most:[6,7,10,12,1,16,18,20,26,24,23,28,32,37,38,39,43,49,30,47,53,56,57,59],plai:[44,34],must_restart:30,plan:[48,26,30,31,1],gzip_level:30,metacharact:57,amaz:43,fileread:[0,25],clear:[23,48,2,32],cover:[26,39,13],clean:[56,46,12],subgroup:56,bargraph:9,carefulli:31,"131g":16,session:[0,46,48,19,36,56,16,15,30],particularli:29,thread_pool_fail_delai:30,finn:59,fine:26,find:[17,46,2,20,6,54,21,26,12,42,43,56,51,15,59,30],impact:[30,18],firewal:36,http_gzip_support:[6,55,30],copyright:[0,50,34,3,37,8,40,9,25,41,56,30,58,16],writer:42,solut:[20,26,43,18],"0x429f8b":7,queu:[26,30],templat:14,factor:36,lennon:1,hit:[51,34,3,19,18,6,1,26,39,53,20,11,41,56,7,14,30,58,59,45],backendxid:41,express:[46,55,34,3,21,37,23,38,24,25,26,41,56,30,58,16],sfile:7,nativ:45,liabl:56,him:31,restart:[2,6,11,7,56,28,15,30],silo:30,synthet:[56,26,18],diffabl:23,synthes:3,rfc:[4,57,59],statist:[33,2,20,8,30,53,25,42,37,16,59,45],switzerland:26,rxprotocol:[19,41],nowher:12,rivet:26,wrote:43,certif:48,cramp:26,set:[0,2,4,6,52,7,14,44,16,18,21,15,24,26,27,28,51,38,39,43,49,30,46,11,54,56,59],art:[35,26,2,45],dump:[48,16,53,30,7],sep:46,jade:57,startup:[34,3,5,37,41,58,16],see:[0,2,3,6,8,9,12,7,15,16,36,18,19,21,24,25,26,51,32,34,37,40,41,44,30,47,48,49,50,46,56,57,58,59],arg:9,reserv:56,dtd:[56,26],someth:[0,46,22,1,21,7,23,39,36,26,12,13,28,51,31,15,16],reus:[47,30],mutex:[42,30],experi:[6,23,30],vmod_priv:46,altern:[24,12],appreci:1,numer:[57,43],javascript:21,incident:56,succeed:[56,40],arrang:46,distinguish:43,varnishlog:[17,50,34,3,19,37,8,9,58,25,26,41,7,30,15,59,45],disclaim:56,last:[46,34,4,8,53,58,56,44,15,30],delimit:56,hyperlink:23,start_child:7,alon:[26,48,23],anon:2,kamp:[34,3,8,37,9,41,56,30],context:[20,38,10,23,7,56],pdf:23,whole:[56,12,15,59],becam:[57,43],load:[46,47,2,20,30,26,39,11,56,44,16,54,45],simpli:[46,45,41,56,48,32],point:[46,48,20,6,24,56,26,14,44,30,59,16],tgz:14,makefil:[46,43],ubuntu:[26,22,12],leon:59,header:[0,51,46,56,3,4,6,43,30,53,24,19,26,42,7,14,28,45,21,59,16],littl:[26,27,7],hash_data:[56,28,22],linux:[26,29,15,43,13],mission:35,backend:[2,3,6,9,52,16,36,18,19,20,21,24,25,26,27,30,33,34,37,41,42,44,45,47,50,51,11,53,54,56,55,58,59],becom:[13,36,23,43,28,49],java:[36,21,44],devic:[44,45],first_byte_timeout:[56,30],empti:[20,3],secret:[48,40,30,7,57,16],txt:23,nonexist:46,modern:[26,29],imag:[24,56,6,26,27],shuffl:24,great:[24,23],understand:[59,21,15,2,45],demand:[6,30],insan:48,repetit:7,look:[2,6,13,9,11,7,15,16,24,19,36,26,31,40,39,43,44,30,46,53,54,56,57,59],solid:30,straight:[26,32],budget:31,durat:[0,46,38,25,26,56,30],formatt:3,"while":[47,3,19,1,26,11,41,12,42,27,7,56,28,49,32],smart:[6,32],abov:[46,18,6,56,12,14,49,16,30],doubli:30,vmod_:46,robin:[56,25,26,44],lingo:46,earli:30,malloc:[36,52,15,27,30],pound:26,hcritbit:[15,7],readi:20,jpg:[14,24,56],varnishcombin:51,rxreq:9,cento:[26,22,12],demot:13,time_firstbyt:3,spectacular:32,belong:18,shorter:30,octal:16,higher:[56,30],optim:[19,48,30],banter:32,alert:13,healthi:[56,11,44],moment:[46,39,36,7,44,49,32],temporari:30,varnishreplai:[25,50],stack:[5,30,16],recent:[26,38,16],lower:[0,56,16],task:[54,2,38,24,26,27,16],equival:56,older:[18,16],entri:[34,3,19,37,51,8,53,25,26,41,58,42,56,30,15,16],parenthes:56,maker:26,person:12,"2gb":9,www3:56,expens:[46,27,30],www1:[56,26],tast:[12,13],anybodi:23,darn:57,explan:[46,2,7,16,15,32],altmodish:13,obscur:[43,7],press:[19,23],log_local_address:30,pan_ic:7,regardless:56,question:[35,20,38,10,26,56,51,32],northern:31,poller:20,sessionopen:[19,41,30],mandat:43,seriou:0,"455ce847f0073c7ab3b1465f74507b75d3dc064c1e7de3b71e00de9092fdc89a":16,cup:12,scenario:20,restructuredtext:[23,55],vcl_pipe:56,notifi:18,tweak:[6,30,55,7],input:[4,20,38,56,16,30],subsequ:[24,56,26,47],approxim:56,useless:30,bin:[49,39],format:[17,3,4,6,51,30,25,23,45,57,16],big:[46,20,53,23,27,1,48,30],do_gunzip:[56,6],nginx:26,simple_list:30,insert:[56,6],bit:[54,46,48,18,4,20,6,1,26,9,19,11,12,39,7,29,57,59,30],docutil:[23,12],signal:[15,7],resolv:56,elaps:56,collect:[0,2,25,23,7,57],api:[57,13],popular:[39,53],vcl_error:[56,11,26],encount:[46,6,15],scare:48,gnnsdxsvdmvfympg:16,creation:[6,30],some:[2,13,9,11,12,7,14,15,16,21,24,26,27,28,31,32,40,43,44,30,47,46,54,56,48,59],back:[36,47,2,20,26,30,24,11,43,56,49,32,16],txprotocol:41,"0x00002000":30,"30m":11,sight:48,sizeof:13,scale:[20,53,58,34,30],shall:56,per:[0,46,50,5,8,40,30,11,41,27,56,28,32,58,16],cli_resp:2,substitut:[56,20,49],retri:56,larg:[28,30],slash:30,init_funct:46,proc:15,either:[46,18,20,6,43,23,40,24,56,11,7,14,29,21,59,30],cgi:[56,49,39],run:[7,2,4,5,6,1,8,9,52,12,13,14,15,16,35,36,25,26,30,32,33,40,39,42,43,44,45,47,48,46,53,56,57,59],step:12,logrecord:30,squeez:7,prerequisit:[29,22],meantim:43,from:[0,3,4,6,7,8,9,11,12,1,14,15,16,18,19,20,21,22,23,24,26,27,28,29,30,31,32,34,37,38,41,42,43,44,45,47,48,50,46,54,56,57,58,59],major:[30,2,1],subtract:38,constraint:27,materi:56,prove:16,manag:[33,47,2,40,30,36,25,26,46,12,7,56,44,45,15,16],idl:30,"32bit":[26,30],"80013801e":7,fetch_chunks:30,uncach:24,frob:[6,55],pkill:[36,52],plethora:15,within:[56,30,39,16],grydeland:0,pastebin:32,contributor:[56,13],chang:[54,22,2,20,51,1,52,30,24,26,12,42,7,56,28,44,32,59,16],disturbingli:1,announc:32,pcre:[56,26,12],occupi:30,inclus:30,institut:13,spam:32,errno:7,megabyt:[30,16],fast:[56,20,30,7],custom:26,includ:[33,47,48,34,18,20,6,3,37,39,26,41,12,30,56,49,45,58,59,16],forward:[3,30,26,9,56,32,51],paren:56,"0x00000002":30,doctyp:[56,26],reorgan:13,fishi:0,poster:26,log_alert:0,criteria:24,server1:44,server2:44,link:[23,42,27,56,32,30],translat:[24,56,57,16],newer:[26,18],atom:38,line:[46,48,3,19,43,30,9,24,25,26,41,39,7,32,15,16],mitig:59,redpil:56,concaten:[56,28,46,22],utf:[56,26],consist:[56,42,16],munin:53,pkg_add:12,sum:11,similar:[46,18,6,24,1,56,21],derang:43,constant:38,curs:8,palisad:31,parser:[6,30],lyx:23,doesn:[0,48,19,21,23,43,30,15,59,16],repres:[20,9],"char":[46,7],incomplet:24,webcach:59,home:[48,38,59],"200c":57,titl:[56,26,59],invalid:[56,18,16],bracket:30,responsetim:45,nice:[0,19,53,1],"3f8":7,critbit:30,cs101:42,libtool:12,enhanc:32,ago:[20,15,1],algorithm:[14,25,56,30],verden:[34,3,8,37,41,56,30],virtualhost:51,orbit:31,depth:30,dot:30,acceptor_sleep_max:30,leak:[48,2],far:[48,57,39,13],fresh:[56,18],marvel:21,scroll:19,code:[46,47,48,2,43,6,7,30,23,39,53,24,56,26,12,13,14,57,32,16],partial:26,edg:[33,39,49,31,59,30],scratch:7,gang:[34,3,8,37,41,56,30,32],privat:[25,46],procur:56,secur:[26,30,55,2,32],ulimit:5,friendli:[31,59],send:[0,36,50,19,6,7,26,9,53,24,56,11,13,14,44,30,21,59,45],granular:30,vcl_conf:46,gzip_memlevel:30,"256k":30,aris:56,sent:[3,6,40,26,14,59,30],nett:59,fly:[30,59,16],unzip:56,rollback:56,whichev:16,reinterpret:23,implicitli:56,relev:[16,12,15,7],tri:[49,43,30,2,32],log_us:0,magic:[46,6,30,11,16],notabl:[6,26],"try":[32,46,55,2,18,20,6,7,30,23,43,24,11,12,42,13,56,45,31,15,16],forsiden:59,freed:42,rawprob:56,pleas:[0,47,6,30,39,26,12,7,56,44,32,15,59,16],impli:[56,37],smaller:1,fortun:26,natur:16,"0x0":0,jump:43,parkinsson:31,detrim:30,download:12,odd:[15,59],append:[3,41,42,56,28,16],compat:[56,41],index:[35,26,51],compar:[56,16],"64k":[15,30],multimedia:59,access:[36,2,18,56,21,11,24,23,52,42,51,29,30,59,16],experiment:[26,30],munmap:15,whatev:[47,18,46,26,42,7,59,51],bitor:30,http_req_siz:[28,30],bodi:[47,39,26,9,56,49,45,30],srvr:48,let:[36,49,18,6,23,21,24,11,53,7,56,44,48,54,15,59],filedescriptor:[2,16],http_resp:2,max_esi_depth:30,myhost:16,vertic:[58,34,53],sinc:[47,20,6,8,46,21,26,56,28,30,31,15,59,16],convert:[0,40],didn:[6,57],mailinglist:32,pretti:[26,22,32],respon:24,conceiv:[13,7],larger:[56,6,48,7],vacat:[22,7],host:[0,34,3,19,37,6,18,8,54,9,26,41,30,1,56,44,57,58,59,16],"_only_":47,typic:[6,24,12,56,45,32],honor:56,chanc:[36,46,6,42],firefox:59,claim:26,attend:1,appli:[46,6,26,16,31,30],app:19,apt:12,"boolean":[56,38],deputi:31,beresp:[0,18,6,22,39,24,11,56,28,49,59,51],tailor:38,feel:[2,1],personel:2,dgst:16,commun:[2,34,3,37,41,13,58],doubl:[56,46,30,27,16],upgrad:[20,22,28,13],next:[46,47,20,38,26,12,13,56,57],websit:45,few:[39,36,27,7,14,32],doubt:[32,7],usr:[52,36,54,12,15,30],expiri:[26,30],sort:[2,18,19,37,38,1,49,31,45],src:[49,39],about:[6,7,10,12,1,55,20,22,26,23,27,30,31,32,45,42,43,44,51,13,46,57,53,48,59],"transient":[25,30],log_info:[39,30],actual:[36,22,2,18,19,1,40,43,24,11,27,7,56,45,32,59,16],iii:43,had:[20,9,12,42,7,28,31],customlog:51,account:[0,2],retriev:[24,56,16],heard:13,rxheader:[19,41,37,53],cumbersom:59,poul:[35,48,34,2,3,20,1,8,38,9,56,23,41,55,13,37,43,57,31,30],obvious:[36,57,38,13],vcl_recv:[46,47,18,20,6,11,24,26,56,28,44,21,51],fetch:[51,4,6,11,30,24,26,56,28,45,16],aliv:[19,45,9,16],control:[2,18,4,6,23,30,40,24,25,26,56,57,59,16],max_connect:56,process:[2,3,6,8,9,7,15,16,18,19,24,26,45,31,32,34,37,40,39,41,42,49,30,46,51,53,56,48,58],lock:[42,9,30],sudo:12,sniplet:18,high:[33,5,11,52,36,23,26,7,30,15,59,16],tag:[34,3,19,37,25,41,49,58],tab:16,tarbal:12,onlin:21,crimin:[2,45],delai:[8,58,34,30],insuffi:30,gcc:30,sit:[24,35],vcl_miss:[18,6,24,26,56,28],instead:[51,46,34,3,19,37,6,8,52,9,26,41,12,42,28,30,58,16],panic:[56,30,7],circular:30,everywher:46,overridden:56,stop:[36,9,24,52,44,30,16],attent:28,fcj8cnd5188:59,tier:13,redund:56,hasher:30,physic:20,villag:31,alloc:[46,5,36,25,42,30],essenti:59,bind:[52,15,9],guru:[56,26,15],robot:45,element:[46,30],issu:[18,7,40,23,13,14,32,15,59,16],freebsd:[7,22,8,9,26,41,12,13,56,29,48,32],furious:7,fallback:[0,25,56],least:[34,26,42,14,58,30],lingua:23,move:[28,22,30,45],tcl:23,comma:[8,30],bunch:59,chosen:[57,31],youtub:59,suppli:[56,26,30],willing:6,infrastructur:56,decai:30,anyon:[9,13],therefor:[2,20,21,1,26,7,32],clientaddr:41,dag:[34,3,8,37,41,56,58,30],crash:[22,39,7,56,15,16],fourth:23,python:[23,12,46],nokia:13,dai:[0,2,18,43,26,1,59,32],auth:[16,3],devel:12,mention:[31,6,57,29,11],kiss:48,front:[35,18,26,41,27,56,30],thread_pool_timeout:30,libvarnishapi:20,somewher:54,trac:[47,59],anyth:[46,6,7,38,23,13,30],edit:[56,46,52,23,30],orderto:30,nocach:59,slide:44,mode:[47,50,6,9,25,11,42,56,30,15,16],thread_pool_workspac:30,disregard:[56,21],subset:49,activit:43,intellig:32,"_catch_bug":7,consum:15,mar:15,"static":[24,13],our:[35,51,38,24,26,12,13,44,30,54,15,32],patch:[13,1],special:[46,6,23,26,56,49,21,45],out:[13,2,18,20,6,1,26,9,24,11,12,42,7,56,43,44,30,31,21,59,32],variabl:[0,3,6,38,25,23,56,49,51,16],vcc:[25,23,46,2],gentoo:26,influenc:30,defend:2,req:[0,46,49,18,6,22,26,39,24,56,11,14,28,44,51,21,59,16],vcl:[0,2,4,6,7,9,10,52,12,1,14,15,16,36,18,20,21,22,24,25,26,28,30,32,33,38,39,40,44,45,46,47,49,11,54,56,55,59],suitabl:[46,37,53],disappear:19,mod_extract_forward:51,hardwar:[5,48,43],typcal:50,ref:[36,39],ban_dup:30,red:[22,12],common:[24,26,51],insid:[5,30,42,59,33],workflow:56,kilobyt:30,purge_url:28,hash_ignore_busi:56,york:1,dictionari:26,advisor:31,releas:[0,46,47,26,11,12,1,30,32],vclexamplepip:47,txstatu:[41,15],critbit_cooloff:30,directornam:56,http_req_hdr_len:[28,30],could:[18,43,9,26,1,49,31,15,59,16],latest:[56,12],ask:[35,2,6,53,10,11,7,31,32],keep:[2,4,20,13,30,26,9,38,19,11,41,12,7,14,44,45,31,32,59,16],scari:21,length:[46,4,9,41,16,30],outsid:[39,27],retain:56,timezon:32,thread_stats_r:30,softwar:[0,50,34,3,37,21,13,8,40,9,26,41,12,30,1,56,32,58,59,16],suffix:[56,30],qualiti:13,echo:[49,40],date:[0,50,34,3,4,20,8,40,9,56,41,39,37,49,30,58,16],meta_funct:46,resurect:7,underscor:21,utc:46,prioriti:0,start:[2,3,5,7,8,9,52,12,1,15,16,35,19,21,36,26,30,33,34,37,41,42,44,45,47,49,11,54,56,48,58],unknown:56,licens:[0,50,34,3,37,8,40,9,41,56,30,58,16],perfectli:59,system:[33,2,22,23,43,24,26,12,42,7,14,29,36,30],messag:[19,9,26,42,7,56,15,30],attach:[56,30,13],attack:2,"lyngst\u00f8l":[56,58],termin:[46,19,56,48,16,30],licenc:[0,50,34,3,37,8,40,9,26,41,30,58,16],accessori:13,"final":[20,49,12,2],ipv4:[20,57,50,30],shell:[26,57,30],rxurl:[19,41,37,53],soekri:1,ogg:[14,16],nobodi:[11,2],haven:39,cli_common:16,hitmiss:3,bother:[46,31],structur:[24,23,30,46,7],charact:[34,53,24,56,28,58,16],probe:[56,20,44,25],sens:[21,38,27,13,14,59],sensit:[26,12,46,7],dubiou:30,other:[7,2,3,6,1,11,12,13,15,24,19,20,21,22,23,36,26,27,29,37,39,42,44,30,47,55,49,53,56,48,59],deliveri:[6,48,42,30],counter:[20,53,42,27,56,30,16,45],set_up_to:[0,25],hitforpass:24,msec:30,clearli:1,unkown:14,correspond:[56,18],have:[7,2,6,1,9,11,12,13,14,15,16,35,18,19,20,21,23,24,26,27,28,29,31,32,33,36,38,39,43,44,30,46,48,49,53,54,56,57,59],tabl:[35,30],need:[6,12,7,14,44,16,24,18,20,21,26,36,23,28,51,32,42,43,49,30,46,57,54,56,48,59],blix:0,turn:[46,50,24,26,56,48],border:31,jemalloc:48,soak:30,min:30,"0x00":56,builtin:[56,30],preced:[24,56,38],which:[7,2,3,5,6,1,12,13,16,24,20,26,36,23,30,31,34,37,40,41,43,44,45,47,51,46,53,56,48,58,59],fulltim:59,ncsa:[17,45,25,3],singl:[2,56,26,12,7,14,44],lastst:16,unless:[51,48,34,3,6,23,30,58,26,41,32,21,59,16],rfc3986:57,who:[24,20,32,1],oracl:13,discov:42,rush_expon:30,histogram:[25,53,58,34,45],segment:[19,15],why:[32,46,48,2,55,6,26,10,11,57,31,15,23],strace:[15,7],instig:26,request:[0,3,6,9,11,14,16,24,18,19,36,25,26,28,45,34,37,41,44,30,47,51,53,56,58,59],pipe:[47,34,3,6,53,24,56,28,30,58,45],determin:[56,6,46,59],"0x0a":16,fact:[26,2,43],malamud:57,priv_vcl:46,text:[46,8,54,36,26,56,49,16,30],verbos:9,bring:[26,31],skimpi:24,trivial:42,anywai:[20,57],redirect:59,"0x7fea4fcb0580":16,ear:32,locat:[4,56,26,40],tire:7,should:[0,2,6,52,12,7,24,20,36,26,27,28,33,40,39,44,30,46,47,57,11,56,48,59],won:[36,18,24,56,11,14,15],ixslvvxrgkjptxmc:16,elseif:49,local:[36,46,54,24,52,12,56,15,30],hope:[55,2,1,13,48,31],expkil:41,varnishtop:[34,3,37,8,9,53,25,41,30,58,59,45],tbz:14,virtualis:5,bear:46,regularli:53,mgr:2,increas:[18,5,39,27,56,28,44,15,59,30],varnish:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,40,39,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59],nish:26,httperror:41,enabl:[18,6,11,56,28,44,15,30],"0x00040000":30,stuff:[2,12,42,27,43,59],vcl_someth:39,contain:[0,51,46,48,6,24,56,26,14,30,16],grab:32,st_inod:42,shm:30,view:[49,42,45],conform:6,btw:43,legaci:59,modulo:30,vcl_pass:[56,28,6],horrend:26,knowledg:33,ipng:57,displai:[34,3,19,37,8,53,25,41,30,58,16],patternmatch:20,thread_pool_add_threshold:30,statu:[3,20,26,9,40,25,11,56,55,59,16],error:[47,18,20,3,26,24,11,41,42,7,56,28,15,30],correctli:47,pattern:[43,32],tend:7,b00000:[12,9],state:[20,26,30,46,35],crude:2,neither:[34,3,37,40,41,58,30],email:[32,7],exppick:41,entic:6,kei:[56,11,30],vrt:46,saintmode_threshold:[56,30],job:[20,46,59,32],entir:[56,30,7],crc32:30,succesful:30,addit:[56,20],doxygen:23,instant:[20,1],plugin:[59,53],career:31,mpg:16,ramp:30,equal:[56,38],etc:[0,54,46,22,2,55,6,7,23,43,36,52,12,13,30,15,45],instanc:[2,3,4,6,8,9,13,16,20,25,26,30,34,37,38,40,41,42,51,46,56,57,58],lru_interv:30,freeli:56,comment:[24,56,49,48,54],anti:30,wall:31,arriv:[24,16,3],vcl_fini:56,walk:[20,18],solv:[11,13,46,7],ssl_clear:48,cli_run:7,respect:[28,6,42,16],rpm:12,quit:[0,18,19,21,38,23,13,44,32,15,59,16],slowli:19,tread:30,tort:56,addition:40,compos:32,compon:[46,2,30],besid:26,popul:[24,51],both:[46,34,3,20,37,38,23,41,12,42,13,56,51,58,59,30],bulk:48,togeth:[46,34,3,54,39,26,41,56,44,58,16],"8001337af":7,present:[17,34,3,4,37,21,8,53,26,41,56,45,58,16],multi:46,plain:[4,7],shortliv:30,defin:[46,18,19,20,54,41,56,44,59,30],decept:26,glossari:[35,45],kibibyt:30,observ:30,layer:43,almost:[30,12,7],squid:[56,26,18],site:[35,21,52,39,36,26,27,7,56,44,49,59],roll:9,substanti:37,fiddl:[20,1],incom:[36,56,44],greater:16,gzip_window:30,ping_interv:30,welcom:[20,30,35,38,32],parti:1,cross:32,clase:7,member:46,handl:[47,48,18,3,26,24,11,7,56,44,30,59,45],vmod_priv_free_f:46,constel:38,incl:4,difficult:21,phk:[8,9,41,56,16,32],competit:26,spell:56,http:[0,3,6,9,10,52,12,7,14,15,16,36,18,19,21,23,24,25,26,28,30,33,38,49,45,47,50,51,46,53,56,57,59],hostnam:[0,56,59],logic:[24,56,26,30],upon:56,effect:[24,26,18,30,16],handi:46,beast:7,logfil:42,dealloc:[25,42],php:[36,44],expand:30,off:[6,24,52,42,1,30,59,32],varnishstat:[34,3,37,8,9,53,25,26,41,30,27,7,45,58,16],well:[36,2,19,23,24,11,29,57,59],regsubal:[56,21],thought:[2,23,26,1,55,32],exampl:[0,51,47,46,18,4,21,37,40,9,24,25,26,41,12,56,44,48,49,59,16],command:[40,25,26,41,7,30,15,59,16],choos:[36,31,44,12,56],undefin:56,usual:[0,32,46,18,24,26,12,7,57,15,59,16],virtualhostmonst:26,newest:16,ban_url:[56,28],less:[26,11,1,56,30,32],obtain:40,tcp:[26,50,30],procesess:42,skill:39,py3k:23,web:[33,2,35,19,21,36,26,52,24,56,11,39,7,14,44,49,59],amd64:7,omit:26,sky:11,discuss:39,script:[46,2,5,21,9,25,23,12,43,49,45,16],add:[18,38,24,26,42,43,56,44,15,59,51],cleanup:15,lookup:[46,18,6,24,56,28,59],match:[34,18,19,3,37,9,24,26,41,56,32,58,59,16],gmt:9,unprivileg:30,rememb:[46,20,6,7,57,30],webpag:26,piec:[46,54],five:[44,30,1],know:[33,46,48,55,19,6,1,24,26,12,42,13,57,59,16],burden:13,thoughtlessli:30,password:7,libncurs:12,loss:56,unplan:30,resid:[24,30],like:[7,2,6,1,11,12,13,14,15,16,18,19,20,21,26,45,31,38,39,42,49,30,47,46,54,56,57,59],success:[26,30,9,1],necessari:[24,56,30,16],martin:0,workthread:41,decis:[24,56,31],candi:45,restructur:40,revers:30,shutdown:30,captur:7,twitter:1,"0x8006b8d84":7,logarithm:[58,34,53],"export":46,shabbi:1,flush:[6,30],guarante:[46,48,42],peter:31,vsm:2,librari:[26,48,46,59],tmp:[48,30,7],trust:[36,6,23,2,43],competitor:43,lead:30,truss:[15,7],avoid:[46,20,6,23,11,56,30,32],thank:13,leav:15,settl:38,happend:31,duplic:[56,30,16],kiddi:45,esi:[4,6,22,39,24,26,1,56,28,49,55,30],acronym:47,has_j:21,usag:[59,18],symlink:43,vhost:[0,40],headerninja:59,although:56,stage:[24,6,47],continu:[34,8,37,53,56,16,58,30],negat:[24,56,16],flaki:11,ntlm:56,rare:7,socket:[48,40,9,13,56,57,15,30],linger:30,column:[19,8],vcl_hit:[24,28,56,18],objrespons:41,carrier:23,thread_pool_add_delai:30,bz2:14,emperor:31,disabl:[56,49,30],backendclos:41,thread_pool:30,own:[46,6,38,36,26,12,56,48,30],vcl_call:41,lenght:16,seamlessli:20,automat:[56,11,30,7],due:[14,56,27,30],warranti:[56,46],automak:12,guard:2,merk:59,rxrespons:41,pitfal:[14,33],pointless:32,w3c:[56,26],nuke:30,pictur:46,transfer:56,support:[51,47,48,50,18,6,22,46,43,26,3,13,56,30,59,32],regsub:[56,46,21,26],bump:13,vax:26,trigger:[24,7],"var":[51,26,41,15,40],groff:12,"function":[0,46,22,38,43,25,26,1,56,28,16],north:1,advers:30,weight:56,shm_workspac:30,gain:36,everyon:[24,56,52],overflow:30,highest:38,bug:[22,1,6,7,13,32],count:[56,53,15,34,16],made:[56,26,30],wise:[23,48],krypto:48,whether:[36,3,19,24,56,59],shrunk:43,unload:44,smooth:26,flip:19,troubl:[26,22,2,32],record:[3,4,37,53,25,26,41,7,58,30],below:[6,12,46,30],limit:[30,11,9,38,26,27,13,56,28,45,15,16],monument:31,otherwis:[56,40,9,7],problem:[46,7,30,11,43,24,26,13,14,44,32,15,23],epel:12,sockaddr:57,evalu:18,"int":[0,46,38],dure:[56,6,48],pid:[41,15,30,3],implement:[46,55,20,6,11,26,43,56,49,48,30],ing:[26,34],girl:1,probabl:[0,46,48,54,39,36,26,12,1,30,31,15,59,32],syslog_cli_traff:30,contest:30,allow:[2,18,6,3,24,26,41,7,56,49,51,30],guidanc:26,hairi:[20,6],detail:[0,47,50,34,3,37,8,40,9,25,41,30,56,57,58,16],virtual:[56,5,26,33,16],book:[21,31,1],bool:[46,38,30],boom:7,sick:11,deliber:56,servernam:51,stat:[20,30,8,42,16],repeat:[15,30],openoffic:23,confignam:[47,16],"class":[23,42],consequenti:56,debian:[26,22,12,30],stai:[26,16],acceptor_sleep_incr:30,sphinx:[23,55,12],implict:30,rule:[36,59,38,2],profit:56,elsif:[14,56]},objtypes:{},titles:["vmod_std","Thoughts on the eve of Varnish 3.0","Security barriers in Varnish","varnishncsa","Shared Memory Logging","Running inside a virtual machine (VM)","How GZIP, and GZIP+ESI works in Varnish","Reporting bugs","varnishstat","varnishtest","Frequently asked questions","Misbehaving servers","Installing Varnish","Picking platforms","Vary","Troubleshooting Varnish","varnish","Logging","Purging and banning","Logging in Varnish","What do you mean by 'backend' ?","Cookies","Varnish Installation","Why Sphinx and reStructuredText ?","Varnish Configuration Language - VCL","The Varnish Reference Manual","General questions","Sizing your cache","Upgrading from Varnish 2.1 to 3.0","Prerequisites","varnishd","What were they thinking ?","Getting hold of us","Using Varnish","varnishhist","Welcome to Varnish's documentation!","Starting Varnish","varnishtop","VCL Expressions","Advanced topics","varnishadm","varnishlog","Shared Memory Logging and Statistics","Did you call them <em>autocrap</em> tools ?","Advanced Backend configuration","Varnish Glossary","VMOD - Varnish Modules","Configuration","Why no SSL ?","Edge Side Includes","varnishreplay","HTTP","Put Varnish on port 80","Statistics","Backend servers","Poul-Hennings random outbursts","VCL","IPv6 Suckage","varnishsizes","Achieving a high hitrate"],objnames:{},filenames:["reference/vmod_std","phk/three-zero","phk/barriers","reference/varnishncsa","reference/vsl","tutorial/virtualised","phk/gzip","installation/bugs","reference/varnishstat","reference/varnishtest","faq/index","tutorial/handling_misbehaving_servers","installation/install","phk/platforms","tutorial/vary","tutorial/troubleshooting","reference/varnish-cli","faq/logging","tutorial/purging","tutorial/logging","phk/backends","tutorial/cookies","installation/index","phk/sphinx","tutorial/vcl","reference/index","faq/general","tutorial/sizing_your_cache","installation/upgrade","installation/prerequisites","reference/varnishd","phk/thoughts","installation/help","tutorial/index","reference/varnishhist","index","tutorial/starting_varnish","reference/varnishtop","phk/vcl_expr","tutorial/advanced_topics","reference/varnishadm","reference/varnishlog","reference/shmem","phk/autocrap","tutorial/advanced_backend_servers","glossary/index","reference/vmod","faq/configuration","phk/ssl","tutorial/esi","reference/varnishreplay","faq/http","tutorial/putting_varnish_on_port_80","tutorial/statistics","tutorial/backend_servers","phk/index","reference/vcl","phk/ipv6suckage","reference/varnishsizes","tutorial/increasing_your_hitrate"]}) \ No newline at end of file | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/advanced_backend_servers.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Advanced Backend configuration — Varnish version 3.0.1 documentation</title> + <title>Advanced Backend configuration — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,10 +22,10 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Misbehaving servers" href="handling_misbehaving_servers.html" /> - <link rel="prev" title="Edge Side Includes" href="esi.html" /> + <link rel="prev" title="Running inside a virtual machine (VM)" href="virtualised.html" /> </head> <body> <div class="related"> @@ -38,9 +38,9 @@ <a href="handling_misbehaving_servers.html" title="Misbehaving servers" accesskey="N">next</a> |</li> <li class="right" > - <a href="esi.html" title="Edge Side Includes" + <a href="virtualised.html" title="Running inside a virtual machine (VM)" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -80,7 +80,7 @@ } }</pre> </div> -<p>It’s quite simple, really. Lets stop and think about this for a +<p>It's quite simple, really. Lets stop and think about this for a moment. As you can see you can define how you choose backends based on really arbitrary data. You want to send mobile devices to a different backend? No problem. if (req.User-agent ~ /mobile/) .... should do the @@ -199,8 +199,8 @@ </ul> <h4>Previous topic</h4> - <p class="topless"><a href="esi.html" - title="previous chapter">Edge Side Includes</a></p> + <p class="topless"><a href="virtualised.html" + title="previous chapter">Running inside a virtual machine (VM)</a></p> <h4>Next topic</h4> <p class="topless"><a href="handling_misbehaving_servers.html" title="next chapter">Misbehaving servers</a></p> @@ -236,9 +236,9 @@ <a href="handling_misbehaving_servers.html" title="Misbehaving servers" >next</a> |</li> <li class="right" > - <a href="esi.html" title="Edge Side Includes" + <a href="virtualised.html" title="Running inside a virtual machine (VM)" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/advanced_topics.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Advanced topics — Varnish version 3.0.1 documentation</title> + <title>Advanced topics — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Troubleshooting Varnish" href="troubleshooting.html" /> <link rel="prev" title="Misbehaving servers" href="handling_misbehaving_servers.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="handling_misbehaving_servers.html" title="Misbehaving servers" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -54,11 +54,11 @@ <span id="tutorial-advanced-topics"></span><h1>Advanced topics<a class="headerlink" href="#advanced-topics" title="Permalink to this headline">¶</a></h1> <p>This tutorial has covered the basics in Varnish. If you read through it all you should now have the skills to run Varnish.</p> -<p>Here is a short overview of topics that we haven’t covered in the tutorial.</p> +<p>Here is a short overview of topics that we haven't covered in the tutorial.</p> <div class="section" id="more-vcl"> <h2>More VCL<a class="headerlink" href="#more-vcl" title="Permalink to this headline">¶</a></h2> -<p>VCL is a bit more complex then what we’ve covered so far. There are a -few more subroutines available and there a few actions that we haven’t +<p>VCL is a bit more complex then what we've covered so far. There are a +few more subroutines available and there a few actions that we haven't discussed. For a complete(ish) guide to VCL have a look at the VCL man page - ref:<cite>reference-vcl</cite>.</p> </div> @@ -161,7 +161,7 @@ <li class="right" > <a href="handling_misbehaving_servers.html" title="Misbehaving servers" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/backend_servers.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Backend servers — Varnish version 3.0.1 documentation</title> + <title>Backend servers — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Starting Varnish" href="starting_varnish.html" /> <link rel="prev" title="Using Varnish" href="index.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="index.html" title="Using Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -52,7 +52,7 @@ <div class="section" id="backend-servers"> <span id="tutorial-backend-servers"></span><h1>Backend servers<a class="headerlink" href="#backend-servers" title="Permalink to this headline">¶</a></h1> -<p>Varnish has a concept of “backend” or “origin” servers. A backend +<p>Varnish has a concept of "backend" or "origin" servers. A backend server is the server providing the content Varnish will accelerate.</p> <p>Our first task is to tell Varnish where it can find its content. Start your favorite text editor and open the varnish default configuration @@ -129,7 +129,7 @@ <li class="right" > <a href="index.html" title="Using Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/cookies.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Cookies — Varnish version 3.0.1 documentation</title> + <title>Cookies — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Vary" href="vary.html" /> <link rel="prev" title="Achieving a high hitrate" href="increasing_your_hitrate.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="increasing_your_hitrate.html" title="Achieving a high hitrate" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -69,15 +69,15 @@ </div> <p>Quite simple. If, however, you need to do something more complicated, like removing one out of several cookies, things get -difficult. Unfortunately Varnish doesn’t have good tools for +difficult. Unfortunately Varnish doesn't have good tools for manipulating the Cookies. We have to use regular expressions to do the -work. If you are familiar with regular expressions you’ll understand -whats going on. If you don’t I suggest you either pick up a book on +work. If you are familiar with regular expressions you'll understand +whats going on. If you don't I suggest you either pick up a book on the subject, read through the <em>pcrepattern</em> man page or read through one of many online guides.</p> <p>Let me show you what Varnish Software uses. We use some cookies for Google Analytics tracking and similar tools. The cookies are all set -and used by Javascript. Varnish and Drupal doesn’t need to see those +and used by Javascript. Varnish and Drupal doesn't need to see those cookies and since Varnish will cease caching of pages when the client sends cookies we will discard these unnecessary cookies in VCL.</p> <p>In the following VCL we discard all cookies that start with a @@ -152,7 +152,7 @@ <li class="right" > <a href="increasing_your_hitrate.html" title="Achieving a high hitrate" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/esi.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Edge Side Includes — Varnish version 3.0.1 documentation</title> + <title>Edge Side Includes — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,9 +22,9 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> - <link rel="next" title="Advanced Backend configuration" href="advanced_backend_servers.html" /> + <link rel="next" title="Running inside a virtual machine (VM)" href="virtualised.html" /> <link rel="prev" title="Purging and banning" href="purging.html" /> </head> <body> @@ -35,12 +35,12 @@ <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > - <a href="advanced_backend_servers.html" title="Advanced Backend configuration" + <a href="virtualised.html" title="Running inside a virtual machine (VM)" accesskey="N">next</a> |</li> <li class="right" > <a href="purging.html" title="Purging and banning" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -59,13 +59,13 @@ pages. Regenerating this content for every page view is wasteful and ESI tries to address that letting you decide the cache policy for each fragment individually.</p> -<p>In Varnish we’ve only implemented a small subset of ESI. As of 2.1 we +<p>In Varnish we've only implemented a small subset of ESI. As of 2.1 we have three ESI statements:</p> <blockquote> <div><ul class="simple"> <li>esi:include</li> <li>esi:remove</li> -<li><!–esi ...–></li> +<li><!--esi ...--></li> </ul> </div></blockquote> <p>Content substitution based on variables and cookies is not implemented @@ -92,9 +92,9 @@ <div class="highlight-python"><pre>sub vcl_fetch { if (req.url == "/test.html") { set beresp.do_esi = true; /* Do ESI processing */ - set obj.ttl = 24 h; /* Sets the TTL on the HTML above */ + set beresp.ttl = 24 h; /* Sets the TTL on the HTML above */ } elseif (req.url == "/cgi-bin/date.cgi") { - set obj.ttl = 1m; /* Sets a one minute TTL on */ + set beresp.ttl = 1m; /* Sets a one minute TTL on */ /* the included object */ } }</pre> @@ -111,10 +111,10 @@ </div> </div> <div class="section" id="example-esi"> -<h2>Example: <!–esi ... –><a class="headerlink" href="#example-esi" title="Permalink to this headline">¶</a></h2> +<h2>Example: <!--esi ... --><a class="headerlink" href="#example-esi" title="Permalink to this headline">¶</a></h2> <p>This is a special construct to allow HTML marked up with ESI to render -without processing. ESI Processors will remove the start (“<!–esi”) -and end (“–>”) when the page is processed, while still processing the +without processing. ESI Processors will remove the start ("<!--esi") +and end ("-->") when the page is processed, while still processing the contents. If the page is not processed, it will remain, becoming an HTML/XML comment tag. For example:</p> <div class="highlight-python"><pre><!--esi @@ -137,7 +137,7 @@ <li><a class="reference internal" href="#">Edge Side Includes</a><ul> <li><a class="reference internal" href="#example-esi-include">Example: esi include</a></li> <li><a class="reference internal" href="#example-esi-remove">Example: esi remove</a></li> -<li><a class="reference internal" href="#example-esi">Example: <!–esi ... –></a></li> +<li><a class="reference internal" href="#example-esi">Example: <!--esi ... --></a></li> </ul> </li> </ul> @@ -146,8 +146,8 @@ <p class="topless"><a href="purging.html" title="previous chapter">Purging and banning</a></p> <h4>Next topic</h4> - <p class="topless"><a href="advanced_backend_servers.html" - title="next chapter">Advanced Backend configuration</a></p> + <p class="topless"><a href="virtualised.html" + title="next chapter">Running inside a virtual machine (VM)</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/tutorial/esi.txt" @@ -177,12 +177,12 @@ <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > - <a href="advanced_backend_servers.html" title="Advanced Backend configuration" + <a href="virtualised.html" title="Running inside a virtual machine (VM)" >next</a> |</li> <li class="right" > <a href="purging.html" title="Purging and banning" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/handling_misbehaving_servers.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Misbehaving servers — Varnish version 3.0.1 documentation</title> + <title>Misbehaving servers — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Advanced topics" href="advanced_topics.html" /> <link rel="prev" title="Advanced Backend configuration" href="advanced_backend_servers.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="advanced_backend_servers.html" title="Advanced Backend configuration" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -74,7 +74,7 @@ set beresp.grace = 30m; }</pre> </div> -<p>Varnish still won’t serve the stale objects. In order to enable +<p>Varnish still won't serve the stale objects. In order to enable Varnish to actually serve the stale object we must enable this on the request. Lets us say that we accept serving 15s old object.:</p> <div class="highlight-python"><pre>sub vcl_recv { @@ -126,9 +126,9 @@ </div> <div class="section" id="known-limitations-on-grace-and-saint-mode"> <h2>Known limitations on grace- and saint mode<a class="headerlink" href="#known-limitations-on-grace-and-saint-mode" title="Permalink to this headline">¶</a></h2> -<p>If your request fails while it is being fetched you’re thrown into +<p>If your request fails while it is being fetched you're thrown into vcl_error. vcl_error has access to a rather limited set of data so you -can’t enable saint mode or grace mode here. This will be addressed in a +can't enable saint mode or grace mode here. This will be addressed in a future release but a work-around available.</p> <ul class="simple"> <li>Declare a backend that is always sick.</li> @@ -201,7 +201,7 @@ <li class="right" > <a href="advanced_backend_servers.html" title="Advanced Backend configuration" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/increasing_your_hitrate.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Achieving a high hitrate — Varnish version 3.0.1 documentation</title> + <title>Achieving a high hitrate — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Cookies" href="cookies.html" /> <link rel="prev" title="Statistics" href="statistics.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="statistics.html" title="Statistics" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -54,12 +54,12 @@ <span id="tutorial-increasing-your-hitrate"></span><h1>Achieving a high hitrate<a class="headerlink" href="#achieving-a-high-hitrate" title="Permalink to this headline">¶</a></h1> <p>Now that Varnish is up and running, and you can access your web application through Varnish. Unless your application is specifically -written to work behind a web accelerator you’ll probably need to do +written to work behind a web accelerator you'll probably need to do some changes to either the configuration or the application in order to get a high hit rate in Varnish.</p> -<p>Varnish will not cache your data unless it’s absolutely sure it is +<p>Varnish will not cache your data unless it's absolutely sure it is safe to do so. So, for you to understand how Varnish decides if and -how to cache a page, I’ll guide you through a couple of tools that you +how to cache a page, I'll guide you through a couple of tools that you will find useful.</p> <p>Note that you need a tool to see what HTTP headers fly between you and the web server. On the Varnish server, the easiest is to use @@ -82,12 +82,12 @@ </div> <div class="section" id="tool-lwp-request"> <h2>Tool: lwp-request<a class="headerlink" href="#tool-lwp-request" title="Permalink to this headline">¶</a></h2> -<p>lwp-request is part of The World-Wide Web library for Perl. It’s a +<p>lwp-request is part of The World-Wide Web library for Perl. It's a couple of really basic programs that can execute an HTTP request and give you the result. I mostly use two programs, GET and HEAD.</p> <p>vg.no was the first site to use Varnish and the people running Varnish -there are quite clueful. So it’s interesting to look at their HTTP -Headers. Let’s send a GET request for their home page:</p> +there are quite clueful. So it's interesting to look at their HTTP +Headers. Let's send a GET request for their home page:</p> <div class="highlight-python"><pre>$ GET -H 'Host: www.vg.no' -Used http://vg.no/ GET http://vg.no/ Host: www.vg.no @@ -108,7 +108,7 @@ <p>OK. Let me explain what it does. GET usually sends off HTTP 0.9 requests, which lack the Host header. So I add a Host header with the -H option. -U print request headers, -s prints response status, -e -prints response headers and -d discards the actual content. We don’t +prints response headers and -d discards the actual content. We don't really care about the content, only the headers.</p> <p>As you can see, VG adds quite a bit of information in their headers. Some of the headers, like the X-Rick-Would-Never are specific @@ -123,7 +123,7 @@ <p>There is also a plugin for Firefox. <em>Live HTTP Headers</em> can show you what headers are being sent and recieved. Live HTTP Headers can be found at <a class="reference external" href="https://addons.mozilla.org/en-US/firefox/addon/3829/">https://addons.mozilla.org/en-US/firefox/addon/3829/</a> or by -googling “Live HTTP Headers”.</p> +googling "Live HTTP Headers".</p> </div> <div class="section" id="the-role-of-http-headers"> <h2>The role of HTTP Headers<a class="headerlink" href="#the-role-of-http-headers" title="Permalink to this headline">¶</a></h2> @@ -137,17 +137,17 @@ <p>The term <em>surrogate origin cache</em> is not really well defined by the IETF so RFC 2616 so the various ways Varnish works might differ from your expectations.</p> -<p>Let’s take a look at the important headers you should be aware of:</p> +<p>Let's take a look at the important headers you should be aware of:</p> </div> <div class="section" id="cache-control"> <h2>Cache-Control<a class="headerlink" href="#cache-control" title="Permalink to this headline">¶</a></h2> <p>The Cache-Control instructs caches how to handle the content. Varnish cares about the <em>max-age</em> parameter and uses it to calculate the TTL for an object.</p> -<p>“Cache-Control: nocache” is ignored but if you need this you can +<p>"Cache-Control: nocache" is ignored but if you need this you can easily add support for it.</p> <p>So make sure you issue a Cache-Control header with a max-age -header. You can have a look at what Varnish Software’s drupal server +header. You can have a look at what Varnish Software's drupal server issues:</p> <div class="highlight-python"><pre>$ GET -Used http://www.varnish-software.com/|grep ^Cache-Control Cache-Control: public, max-age=600</pre> @@ -162,7 +162,7 @@ </div> <div class="section" id="pragma"> <h2>Pragma<a class="headerlink" href="#pragma" title="Permalink to this headline">¶</a></h2> -<p>An HTTP 1.0 server might send “Pragma: nocache”. Varnish ignores this +<p>An HTTP 1.0 server might send "Pragma: nocache". Varnish ignores this header. You could easily add support for this header in VCL.</p> <p>In vcl_fetch:</p> <div class="highlight-python"><pre>if (beresp.http.Pragma ~ "nocache") { @@ -193,18 +193,18 @@ </div> <div class="section" id="forcing-caching-for-certain-requests-and-certain-responses"> <h2>Forcing caching for certain requests and certain responses<a class="headerlink" href="#forcing-caching-for-certain-requests-and-certain-responses" title="Permalink to this headline">¶</a></h2> -<p>Since you still have this cumbersome backend that isn’t very friendly +<p>Since you still have this cumbersome backend that isn't very friendly to work with you might want to override more stuff in Varnish. We recommend that you rely as much as you can on the default caching rules. It is perfectly easy to force Varnish to lookup an object in -the cache but it isn’t really recommended.</p> +the cache but it isn't really recommended.</p> </div> <div class="section" id="normalizing-your-namespace"> <h2>Normalizing your namespace<a class="headerlink" href="#normalizing-your-namespace" title="Permalink to this headline">¶</a></h2> <p>Some sites are accessed via lots of hostnames. <a class="reference external" href="http://www.varnish-software.com/">http://www.varnish-software.com/</a>, <a class="reference external" href="http://varnish-software.com/">http://varnish-software.com/</a> and <a class="reference external" href="http://varnishsoftware.com/">http://varnishsoftware.com/</a> all point -at the same site. Since Varnish doesn’t know they are different, +at the same site. Since Varnish doesn't know they are different, Varnish will cache different versions of every page for every hostname. You can mitigate this in your web server configuration by setting up redirects or by using the following VCL:</p> @@ -294,7 +294,7 @@ <li class="right" > <a href="statistics.html" title="Statistics" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/index.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Using Varnish — Varnish version 3.0.1 documentation</title> + <title>Using Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="next" title="Backend servers" href="backend_servers.html" /> <link rel="prev" title="Upgrading from Varnish 2.1 to 3.0" href="../installation/upgrade.html" /> </head> @@ -39,7 +39,7 @@ <li class="right" > <a href="../installation/upgrade.html" title="Upgrading from Varnish 2.1 to 3.0" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> @@ -71,6 +71,7 @@ <li class="toctree-l1"><a class="reference internal" href="vary.html#pitfall-vary-user-agent">Pitfall - Vary: User-Agent</a></li> <li class="toctree-l1"><a class="reference internal" href="purging.html">Purging and banning</a></li> <li class="toctree-l1"><a class="reference internal" href="esi.html">Edge Side Includes</a></li> +<li class="toctree-l1"><a class="reference internal" href="virtualised.html">Running inside a virtual machine (VM)</a></li> <li class="toctree-l1"><a class="reference internal" href="advanced_backend_servers.html">Advanced Backend configuration</a></li> <li class="toctree-l1"><a class="reference internal" href="advanced_backend_servers.html#directors">Directors</a></li> <li class="toctree-l1"><a class="reference internal" href="advanced_backend_servers.html#health-checks">Health checks</a></li> @@ -127,7 +128,7 @@ <li class="right" > <a href="../installation/upgrade.html" title="Upgrading from Varnish 2.1 to 3.0" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> </ul> </div> <div class="footer"> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/logging.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Logging in Varnish — Varnish version 3.0.1 documentation</title> + <title>Logging in Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Sizing your cache" href="sizing_your_cache.html" /> <link rel="prev" title="Starting Varnish" href="starting_varnish.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="starting_varnish.html" title="Starting Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -56,23 +56,23 @@ works. Instead of logging to normal log file Varnish logs to a shared memory segment. When the end of the segment is reached we start over, overwriting old data. This is much, much faster then logging to a file -and it doesn’t require disk space.</p> +and it doesn't require disk space.</p> <p>The flip side is that is you forget to have program actually write the logs to disk they will disappear.</p> <p>varnishlog is one of the programs you can use to look at what Varnish is logging. Varnishlog gives you the raw logs, everything that is -written to the logs. There are other clients as well, we’ll show you +written to the logs. There are other clients as well, we'll show you these later.</p> <p>In the terminal window you started varnish now type <em>varnishlog</em> and press enter.</p> -<p>You’ll see lines like these scrolling slowly by.:</p> +<p>You'll see lines like these scrolling slowly by.:</p> <div class="highlight-python"><pre>0 CLI - Rd ping 0 CLI - Wr 200 PONG 1273698726 1.0</pre> </div> <p>These is the Varnish master process checking up on the caching process to see that everything is OK.</p> <p>Now go to the browser and reload the page displaying your web -app. You’ll see lines like these.:</p> +app. You'll see lines like these.:</p> <div class="highlight-python"><pre>11 SessionOpen c 127.0.0.1 58912 0.0.0.0:8080 11 ReqStart c 127.0.0.1 58912 595005213 11 RxRequest c GET @@ -105,7 +105,7 @@ <td>Same as -b but for client side traffic.</td></tr> <tr><td class="option-group"> <kbd><span class="option">-i <var>tag</var></span></kbd></td> -<td>Only show lines with a certain tag. “varnishlog -i SessionOpen” +<td>Only show lines with a certain tag. "varnishlog -i SessionOpen" will only give you new sessions. Note that the tags are case insensitive.</td></tr> <tr><td class="option-group"> @@ -118,7 +118,7 @@ <td>Group log entries by request ID.</td></tr> </tbody> </table> -<p>Now that Varnish seem to work OK it’s time to put Varnish on port 80 +<p>Now that Varnish seem to work OK it's time to put Varnish on port 80 while we tune it.</p> </div> @@ -168,7 +168,7 @@ <li class="right" > <a href="starting_varnish.html" title="Starting Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/purging.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Purging and banning — Varnish version 3.0.1 documentation</title> + <title>Purging and banning — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Edge Side Includes" href="esi.html" /> <link rel="prev" title="Vary" href="vary.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="vary.html" title="Vary" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -53,7 +53,7 @@ <div class="section" id="purging-and-banning"> <span id="tutorial-purging"></span><h1>Purging and banning<a class="headerlink" href="#purging-and-banning" title="Permalink to this headline">¶</a></h1> <p>One of the most effective way of increasing your hit ratio is to -increase the time-to-live (ttl) of your objects. But, as you’re aware +increase the time-to-live (ttl) of your objects. But, as you're aware of, in this twitterific day of age serving content that is outdated is bad for business.</p> <p>The solution is to notify Varnish when there is fresh content @@ -65,7 +65,7 @@ and discard it along with its variants. Usually a purge is invoked through HTTP with the method PURGE.</p> <p>An HTTP purge is similar to an HTTP GET request, except that the -<em>method</em> is PURGE. Actually you can call the method whatever you’d +<em>method</em> is PURGE. Actually you can call the method whatever you'd like, but most people refer to this as purging. Squid supports the same mechanism. In order to support purging in Varnish you need the following VCL in place:</p> @@ -211,7 +211,7 @@ <li class="right" > <a href="vary.html" title="Vary" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/putting_varnish_on_port_80.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Put Varnish on port 80 — Varnish version 3.0.1 documentation</title> + <title>Put Varnish on port 80 — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Varnish Configuration Language - VCL" href="vcl.html" /> <link rel="prev" title="Sizing your cache" href="sizing_your_cache.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="sizing_your_cache.html" title="Sizing your cache" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -52,7 +52,7 @@ <div class="section" id="put-varnish-on-port-80"> <h1>Put Varnish on port 80<a class="headerlink" href="#put-varnish-on-port-80" title="Permalink to this headline">¶</a></h1> -<p>Until now we’ve been running with Varnish on a high port, for testing +<p>Until now we've been running with Varnish on a high port, for testing purposes. You should test your application and if it works OK we can switch, so Varnish will be running on port 80 and your web server on a high port.</p> @@ -67,7 +67,7 @@ <div class="highlight-python"><div class="highlight"><pre><span class="c"># varnishd -f /usr/local/etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000</span> </pre></div> </div> -<p>Note that we’ve removed the -a option. Now Varnish, as its default +<p>Note that we've removed the -a option. Now Varnish, as its default setting dictates, will bind to the http port (80). Now everyone accessing your site will be accessing through Varnish.</p> </div> @@ -118,7 +118,7 @@ <li class="right" > <a href="sizing_your_cache.html" title="Sizing your cache" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/sizing_your_cache.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Sizing your cache — Varnish version 3.0.1 documentation</title> + <title>Sizing your cache — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Put Varnish on port 80" href="putting_varnish_on_port_80.html" /> <link rel="prev" title="Logging in Varnish" href="logging.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="logging.html" title="Logging in Varnish" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -122,7 +122,7 @@ <li class="right" > <a href="logging.html" title="Logging in Varnish" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/starting_varnish.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Starting Varnish — Varnish version 3.0.1 documentation</title> + <title>Starting Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Logging in Varnish" href="logging.html" /> <link rel="prev" title="Backend servers" href="backend_servers.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="backend_servers.html" title="Backend servers" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -53,7 +53,7 @@ <div class="section" id="starting-varnish"> <span id="tutorial-starting-varnish"></span><h1>Starting Varnish<a class="headerlink" href="#starting-varnish" title="Permalink to this headline">¶</a></h1> <p>I assume varnishd is in your path. You might want to run <tt class="docutils literal"><span class="pre">pkill</span> -<span class="pre">varnishd</span></tt> to make sure varnishd isn’t running. Become root and type:</p> +<span class="pre">varnishd</span></tt> to make sure varnishd isn't running. Become root and type:</p> <p><tt class="docutils literal"><span class="pre">#</span> <span class="pre">varnishd</span> <span class="pre">-f</span> <span class="pre">/usr/local/etc/varnish/default.vcl</span> <span class="pre">-s</span> <span class="pre">malloc,1G</span> <span class="pre">-T</span> <span class="pre">127.0.0.1:2000</span> <span class="pre">-a</span> <span class="pre">0.0.0.0:8080</span></tt></p> <p>I added a few options, lets go through them:</p> <dl class="docutils"> @@ -69,10 +69,10 @@ <dd>Varnish has a built-in text-based administration interface. Activating the interface makes Varnish manageble without stopping it. You can specify what interface the management interface -should listen to. Make sure you don’t expose the management interface +should listen to. Make sure you don't expose the management interface to the world as you can easily gain root access to a system via the Varnish management interface. I recommend tieing it to localhost. If -you have users on your system that you don’t fully trust, use firewall +you have users on your system that you don't fully trust, use firewall rules to restrict access to the interface to root only.</dd> <dt><tt class="docutils literal"><span class="pre">-a</span> <span class="pre">0.0.0.0:8080</span></tt></dt> <dd>I specify that I want Varnish to listen on port 8080 for incomming @@ -87,10 +87,10 @@ Varnish depends on a few factors. If you application uses cookies for every session (a lot of PHP and Java applications seem to send a session cookie if it is needed or not) or if it uses authentication -chances are Varnish won’t do much caching. Ignore that for the moment, +chances are Varnish won't do much caching. Ignore that for the moment, we come back to that in <a class="reference internal" href="increasing_your_hitrate.html#tutorial-increasing-your-hitrate"><em>Achieving a high hitrate</em></a>.</p> <p>Lets make sure that Varnish really does do something to your web -site. To do that we’ll take a look at the logs.</p> +site. To do that we'll take a look at the logs.</p> </div> @@ -139,7 +139,7 @@ <li class="right" > <a href="backend_servers.html" title="Backend servers" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/statistics.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Statistics — Varnish version 3.0.1 documentation</title> + <title>Statistics — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Achieving a high hitrate" href="increasing_your_hitrate.html" /> <link rel="prev" title="Varnish Configuration Language - VCL" href="vcl.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="vcl.html" title="Varnish Configuration Language - VCL" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -52,7 +52,7 @@ <div class="section" id="statistics"> <span id="tutorial-statistics"></span><h1>Statistics<a class="headerlink" href="#statistics" title="Permalink to this headline">¶</a></h1> -<p>Now that your varnish is up and running let’s have a look at how it is +<p>Now that your varnish is up and running let's have a look at how it is doing. There are several tools that can help.</p> <div class="section" id="varnishtop"> <h2>varnishtop<a class="headerlink" href="#varnishtop" title="Permalink to this headline">¶</a></h2> @@ -73,8 +73,8 @@ presents a continuously updated histogram showing the distribution of the last N requests by their processing. The value of N and the vertical scale are displayed in the top left corner. The horizontal -scale is logarithmic. Hits are marked with a pipe character (“|”), -and misses are marked with a hash character (“#”).</p> +scale is logarithmic. Hits are marked with a pipe character ("|"), +and misses are marked with a hash character ("#").</p> </div> <div class="section" id="varnishsizes"> <h2>varnishsizes<a class="headerlink" href="#varnishsizes" title="Permalink to this headline">¶</a></h2> @@ -152,7 +152,7 @@ <li class="right" > <a href="vcl.html" title="Varnish Configuration Language - VCL" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/troubleshooting.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Troubleshooting Varnish — Varnish version 3.0.1 documentation</title> + <title>Troubleshooting Varnish — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="The Varnish Reference Manual" href="../reference/index.html" /> <link rel="prev" title="Advanced topics" href="advanced_topics.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="advanced_topics.html" title="Advanced topics" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -57,9 +57,9 @@ /var/log/syslog, /var/log/messages are all places where varnish might leave clues of whats going on.</p> <div class="section" id="when-varnish-won-t-start"> -<h2>When Varnish won’t start<a class="headerlink" href="#when-varnish-won-t-start" title="Permalink to this headline">¶</a></h2> +<h2>When Varnish won't start<a class="headerlink" href="#when-varnish-won-t-start" title="Permalink to this headline">¶</a></h2> <p>Sometimes Varnish wont start. There is a plethora of reasons why -Varnish wont start on your machine. We’ve seen everything from wrong +Varnish wont start on your machine. We've seen everything from wrong permissions on /dev/null to other processes blocking the ports.</p> <p>Starting Varnish in debug mode to see what is going on.</p> <p>Try to start varnish by:</p> @@ -82,15 +82,15 @@ Type 'start' to launch worker process.</pre> </div> <p>Now Varnish is running. Only the master process is running, in debug -mode the cache does not start. Now you’re on the console. You can -instruct the master process to start the cache by issuing “start”.:</p> +mode the cache does not start. Now you're on the console. You can +instruct the master process to start the cache by issuing "start".:</p> <div class="highlight-python"><pre>start bind(): Address already in use 300 22 Could not open sockets</pre> </div> <p>And here we have our problem. Something else is bound to the HTTP port -of Varnish. If this doesn’t help try strace or truss or come find us +of Varnish. If this doesn't help try strace or truss or come find us on IRC.</p> </div> <div class="section" id="varnish-is-crashing"> @@ -104,7 +104,7 @@ Mar 8 13:23:43 smoke varnishd[15670]: Child cleanup complete Mar 8 13:23:43 smoke varnishd[15670]: child (15697) Started</pre> </div> -<p>Specifically if you see the “Error in munmap” error on Linux you might +<p>Specifically if you see the "Error in munmap" error on Linux you might want to increase the amount of maps available. Linux is limited to a maximum of 64k maps. Setting vm.max_max_count i sysctl.conf will enable you to increase this limit. You can inspect the number of maps @@ -129,7 +129,7 @@ filtering capabilities and explanation of the various options.</p> </div> <div class="section" id="varnish-doesn-t-cache"> -<h2>Varnish doesn’t cache<a class="headerlink" href="#varnish-doesn-t-cache" title="Permalink to this headline">¶</a></h2> +<h2>Varnish doesn't cache<a class="headerlink" href="#varnish-doesn-t-cache" title="Permalink to this headline">¶</a></h2> <p>See <a class="reference internal" href="increasing_your_hitrate.html#tutorial-increasing-your-hitrate"><em>Achieving a high hitrate</em></a>.</p> </div> </div> @@ -143,10 +143,10 @@ <h3><a href="../index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Troubleshooting Varnish</a><ul> -<li><a class="reference internal" href="#when-varnish-won-t-start">When Varnish won’t start</a></li> +<li><a class="reference internal" href="#when-varnish-won-t-start">When Varnish won't start</a></li> <li><a class="reference internal" href="#varnish-is-crashing">Varnish is crashing</a></li> <li><a class="reference internal" href="#varnish-gives-me-guru-meditation">Varnish gives me Guru meditation</a></li> -<li><a class="reference internal" href="#varnish-doesn-t-cache">Varnish doesn’t cache</a></li> +<li><a class="reference internal" href="#varnish-doesn-t-cache">Varnish doesn't cache</a></li> </ul> </li> </ul> @@ -191,7 +191,7 @@ <li class="right" > <a href="advanced_topics.html" title="Advanced topics" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/vary.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Vary — Varnish version 3.0.1 documentation</title> + <title>Vary — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Purging and banning" href="purging.html" /> <link rel="prev" title="Cookies" href="cookies.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="cookies.html" title="Cookies" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -54,10 +54,10 @@ <span id="tutorial-vary"></span><h1>Vary<a class="headerlink" href="#vary" title="Permalink to this headline">¶</a></h1> <p>The Vary header is sent by the web server to indicate what makes a HTTP object Vary. This makes a lot of sense with headers like -Accept-Encoding. When a server issues a “Vary: Accept-Encoding” it +Accept-Encoding. When a server issues a "Vary: Accept-Encoding" it tells Varnish that its needs to cache a separate version for every different Accept-Encoding that is coming from the clients. So, if a -clients only accepts gzip encoding Varnish won’t serve the version of +clients only accepts gzip encoding Varnish won't serve the version of the page encoded with the deflate encoding.</p> <p>The problem is that the Accept-Encoding field contains a lot of different encodings. If one browser sends:</p> @@ -152,7 +152,7 @@ <li class="right" > <a href="cookies.html" title="Cookies" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/vcl.html ^ |
@@ -7,13 +7,13 @@ <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Varnish Configuration Language - VCL — Varnish version 3.0.1 documentation</title> + <title>Varnish Configuration Language - VCL — Varnish version 3.0.2 documentation</title> <link rel="stylesheet" href="../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', - VERSION: '3.0.1', + VERSION: '3.0.2', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true @@ -22,7 +22,7 @@ <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> - <link rel="top" title="Varnish version 3.0.1 documentation" href="../index.html" /> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> <link rel="up" title="Using Varnish" href="index.html" /> <link rel="next" title="Statistics" href="statistics.html" /> <link rel="prev" title="Put Varnish on port 80" href="putting_varnish_on_port_80.html" /> @@ -40,7 +40,7 @@ <li class="right" > <a href="putting_varnish_on_port_80.html" title="Put Varnish on port 80" accesskey="P">previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> </ul> </div> @@ -63,16 +63,16 @@ request, another when files are fetched from the backend server.</p> <p>Varnish will execute these subroutines of code at different stages of its work. Because it is code it is execute line by line precedence -isn’t a problem. At some point you call an action in this subroutine +isn't a problem. At some point you call an action in this subroutine and then the execution of the subroutine stops.</p> -<p>If you don’t call an action in your subroutine and it reaches the end +<p>If you don't call an action in your subroutine and it reaches the end Varnish will execute some built in VCL code. You will see this VCL code commented out in default.vcl.</p> -<p>99% of all the changes you’ll need to do will be done in two of these +<p>99% of all the changes you'll need to do will be done in two of these subroutines. <em>vcl_recv</em> and <em>vcl_fetch</em>.</p> <div class="section" id="vcl-recv"> <h2>vcl_recv<a class="headerlink" href="#vcl-recv" title="Permalink to this headline">¶</a></h2> -<p>vcl_recv (yes, we’re skimpy with characters, it’s Unix) is called at +<p>vcl_recv (yes, we're skimpy with characters, it's Unix) is called at the beginning of a request, after the complete request has been received and parsed. Its purpose is to decide whether or not to serve the request, how to do it, and, if applicable, which backend to use.</p> @@ -96,19 +96,26 @@ <dl class="docutils"> <dt><em>pass</em></dt> <dd>When you return pass the request and subsequent response will be passed to -and from the backend server. It won’t be cached. pass can be returned from -both vcl_recv and vcl_fetch.</dd> +and from the backend server. It won't be cached. pass can be returned from +vcl_recv</dd> +<dt><em>hit_for_pass</em></dt> +<dd>Similar to pass, but accessible from vcl_fetch. Unlike pass, hit_for_pass +will create a hitforpass object in the cache. This has the side-effect of +caching the decision not to cache. This is to allow would-be uncachable +requests to be passed to the backend at the same time. The same logic is +not necessary in vcl_recv because this happens before any potential +queueing for an object takes place.</dd> <dt><em>lookup</em></dt> <dd>When you return lookup from vcl_recv you tell Varnish to deliver content from cache even if the request othervise indicates that the request -should be passed. You can’t return lookup from vcl_fetch.</dd> +should be passed. You can't return lookup from vcl_fetch.</dd> <dt><em>pipe</em></dt> <dd>Pipe can be returned from vcl_recv as well. Pipe short circuits the client and the backend connections and Varnish will just sit there and shuffle bytes back and forth. Varnish will not look at the data being send back and forth - so your logs will be incomplete. Beware that with HTTP 1.1 a client can send several requests on the same -connection and so you should instruct Varnish to add a “Connection: close” +connection and so you should instruct Varnish to add a "Connection: close" header before actually returning pipe.</dd> <dt><em>deliver</em></dt> <dd>Deliver the cached object to the client. Usually returned from vcl_fetch.</dd> @@ -287,7 +294,7 @@ <li class="right" > <a href="putting_varnish_on_port_80.html" title="Put Varnish on port 80" >previous</a> |</li> - <li><a href="../index.html">Varnish version 3.0.1 documentation</a> »</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> <li><a href="index.html" >Using Varnish</a> »</li> </ul> </div> | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/doc/sphinx/=build/html/tutorial/virtualised.html ^ |
@@ -0,0 +1,132 @@ + + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + + <title>Running inside a virtual machine (VM) — Varnish version 3.0.2 documentation</title> + <link rel="stylesheet" href="../_static/default.css" type="text/css" /> + <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> + <script type="text/javascript"> + var DOCUMENTATION_OPTIONS = { + URL_ROOT: '../', + VERSION: '3.0.2', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true + }; + </script> + <script type="text/javascript" src="../_static/jquery.js"></script> + <script type="text/javascript" src="../_static/underscore.js"></script> + <script type="text/javascript" src="../_static/doctools.js"></script> + <link rel="top" title="Varnish version 3.0.2 documentation" href="../index.html" /> + <link rel="up" title="Using Varnish" href="index.html" /> + <link rel="next" title="Advanced Backend configuration" href="advanced_backend_servers.html" /> + <link rel="prev" title="Edge Side Includes" href="esi.html" /> + </head> + <body> + <div class="related"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + accesskey="I">index</a></li> + <li class="right" > + <a href="advanced_backend_servers.html" title="Advanced Backend configuration" + accesskey="N">next</a> |</li> + <li class="right" > + <a href="esi.html" title="Edge Side Includes" + accesskey="P">previous</a> |</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> + <li><a href="index.html" accesskey="U">Using Varnish</a> »</li> + </ul> + </div> + + <div class="document"> + <div class="documentwrapper"> + <div class="bodywrapper"> + <div class="body"> + + <div class="section" id="running-inside-a-virtual-machine-vm"> +<h1>Running inside a virtual machine (VM)<a class="headerlink" href="#running-inside-a-virtual-machine-vm" title="Permalink to this headline">¶</a></h1> +<p>It is possible, but not recommended for high performance, to run Varnish on virtualised +hardware.</p> +<div class="section" id="openvz"> +<h2>OpenVZ<a class="headerlink" href="#openvz" title="Permalink to this headline">¶</a></h2> +<p>If you are running on 64bit OpenVZ (or Parallels VPS), you must reduce the +maximum stack size before starting Varnish. The default allocates to much memory per thread, +which will make varnish fail as soon as the number of threads (==traffic) increases.</p> +<p>Reduce the maximum stack size by running:</p> +<div class="highlight-python"><pre>ulimit -s 256</pre> +</div> +<p>in the startup script.</p> +</div> +</div> + + + </div> + </div> + </div> + <div class="sphinxsidebar"> + <div class="sphinxsidebarwrapper"> + <h3><a href="../index.html">Table Of Contents</a></h3> + <ul> +<li><a class="reference internal" href="#">Running inside a virtual machine (VM)</a><ul> +<li><a class="reference internal" href="#openvz">OpenVZ</a></li> +</ul> +</li> +</ul> + + <h4>Previous topic</h4> + <p class="topless"><a href="esi.html" + title="previous chapter">Edge Side Includes</a></p> + <h4>Next topic</h4> + <p class="topless"><a href="advanced_backend_servers.html" + title="next chapter">Advanced Backend configuration</a></p> + <h3>This Page</h3> + <ul class="this-page-menu"> + <li><a href="../_sources/tutorial/virtualised.txt" + rel="nofollow">Show Source</a></li> + </ul> +<div id="searchbox" style="display: none"> + <h3>Quick search</h3> + <form class="search" action="../search.html" method="get"> + <input type="text" name="q" size="18" /> + <input type="submit" value="Go" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> + <p class="searchtip" style="font-size: 90%"> + Enter search terms or a module, class or function name. + </p> +</div> +<script type="text/javascript">$('#searchbox').show(0);</script> + </div> + </div> + <div class="clearer"></div> + </div> + <div class="related"> + <h3>Navigation</h3> + <ul> + <li class="right" style="margin-right: 10px"> + <a href="../genindex.html" title="General Index" + >index</a></li> + <li class="right" > + <a href="advanced_backend_servers.html" title="Advanced Backend configuration" + >next</a> |</li> + <li class="right" > + <a href="esi.html" title="Edge Side Includes" + >previous</a> |</li> + <li><a href="../index.html">Varnish version 3.0.2 documentation</a> »</li> + <li><a href="index.html" >Using Varnish</a> »</li> + </ul> + </div> + <div class="footer"> + © Copyright 2010, Varnish Project. + Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. + </div> + </body> +</html> \ No newline at end of file | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/conf.py ^ |
@@ -45,9 +45,9 @@ # built documents. # # The short X.Y version. -version = '3.0.1' +version = '3.0.2' # The full version, including alpha/beta/rc tags. -release = '3.0.1' +release = '3.0.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -64,7 +64,7 @@ # List of directories, relative to source directory, that shouldn't be searched # for source files. -exclude_trees = ['=build'] +exclude_patterns = ['=build','reference/params.rst'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None @@ -130,7 +130,7 @@ # The name for this set of Sphinx documents. If None, it defaults to # "<project> v<release> documentation". -html_title = "Varnish version 3.0.1 documentation" +html_title = "Varnish version 3.0.2 documentation" # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None @@ -147,7 +147,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['=static'] +#html_static_path = ['=static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -155,7 +155,7 @@ # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. -#html_use_smartypants = True +html_use_smartypants = False # Custom sidebar templates, maps document names to template names. #html_sidebars = {} | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/conf.py.in ^ |
@@ -64,7 +64,7 @@ # List of directories, relative to source directory, that shouldn't be searched # for source files. -exclude_trees = ['=build'] +exclude_patterns = ['=build','reference/params.rst'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None @@ -147,7 +147,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['=static'] +#html_static_path = ['=static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -155,7 +155,7 @@ # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. -#html_use_smartypants = True +html_use_smartypants = False # Custom sidebar templates, maps document names to template names. #html_sidebars = {} | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/faq/general.rst ^ |
@@ -337,7 +337,7 @@ * Client 2..N are now given the **hit for pass** object instructing them to go to the backend The **hit for pass** object will stay cached for the duration of its ttl. This means that subsequent clients requesting /foo will be sent straight to the backend as long as the **hit for pass** object exists. -The :command:`varnishstat` can tell you how many **hit for pass** objects varnish has served. The default vcl will set ttl for a hit_for_pass object to 120s. But you can override this, using the following logic: +The :command:`varnishstat` can tell you how many **hit for pass** objects varnish has served. The default vcl will set ttl for a hit_for_pass object to 120s. But you can override this, using the following logic:: sub vcl_fetch { if (!obj.cacheable) { | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/index.rst ^ |
@@ -5,8 +5,8 @@ =================================== Varnish is a state of the art web accelerator. Its mission is to sit -in front of a web server an cache the content. It makes your web site -go fast. +in front of a web server and cache content. It makes your web site +go faster. We suggest you start by reading the installation guide :ref:`install-index`. Once you have Varnish up and running go through | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/installation/upgrade.rst ^ |
@@ -13,14 +13,18 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ String concatenation did not have an operator previously, but this has now been changed to ``+``. +no more %-escapes in strings +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To simplify strings, the %-encoding has been removed. If you need non-printable characters, you need to use inline C. + ``log`` moved to the std vmod ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``log`` has moved to the std vmod: +``log`` has moved to the std vmod:: log "log something"; -becomes +becomes:: import std; std.log("log something"); @@ -30,15 +34,15 @@ purges are now called bans ~~~~~~~~~~~~~~~~~~~~~~~~~~ -``purge()`` and ``purge_url()`` are now respectively ``ban()`` and ``ban_url()``, so you should replace all occurences: +``purge()`` and ``purge_url()`` are now respectively ``ban()`` and ``ban_url()``, so you should replace all occurences:: purge("req.url = " req.url); -becomes +becomes:: ban("req.url = " + req.url); -``purge`` does not take any arguments anymore, but can be used in vcl_hit or vcl_miss to purge the item from the cache, where you would reduce ttl to 0 in Varnish 2.1. +``purge`` does not take any arguments anymore, but can be used in vcl_hit or vcl_miss to purge the item from the cache, where you would reduce ttl to 0 in Varnish 2.1:: sub vcl_hit { if (req.request == "PURGE") { @@ -47,7 +51,7 @@ } } -becomes +becomes:: sub vcl_hit { if (req.request == "PURGE") { @@ -64,13 +68,13 @@ returns are now done with the ``return()`` function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``pass``, ``pipe``, ``lookup``, ``deliver``, ``fetch``, ``hash``, ``pipe`` and ``restart`` are no longer keywords, but arguments to ``return()``, so +``pass``, ``pipe``, ``lookup``, ``deliver``, ``fetch``, ``hash``, ``pipe`` and ``restart`` are no longer keywords, but arguments to ``return()``, so:: sub vcl_pass { pass; } -becomes +becomes:: sub vcl_pass { return(pass); @@ -80,22 +84,22 @@ ``req.hash`` is replaced with ``hash_data()`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You no longer append to the hash with ``+=``, so +You no longer append to the hash with ``+=``, so:: set req.hash += req.url; -becomes +becomes:: hash_data(req.url); ``esi`` is replaced with ``beresp.do_esi`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -You no longer enable ESI with ``esi``, so +You no longer enable ESI with ``esi``, so:: esi; -in ``vcl_fetch`` becomes +in ``vcl_fetch`` becomes:: set beresp.do_esi = true; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/reference/params.rst ^ |
@@ -238,7 +238,7 @@ http_req_hdr_len - Units: bytes - - Default: 4096 + - Default: 8192 Maximum length of any HTTP client request header we will allow. The limit is inclusive its continuation lines. @@ -251,7 +251,7 @@ http_resp_hdr_len - Units: bytes - - Default: 4096 + - Default: 8192 Maximum length of any HTTP backend response header we will allow. The limit is inclusive its continuation lines. @@ -311,7 +311,7 @@ nuke_limit - Units: allocations - - Default: 10 + - Default: 50 - Flags: experimental Maximum number of objects we attempt to nuke in orderto make space for a object body. | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/reference/varnishncsa.rst ^ |
@@ -52,7 +52,7 @@ -F format Specify the log format used. If no format is specified the default log format is used. Currently it is: - %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" + %h %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i" Supported formatters are: @@ -62,10 +62,12 @@ bytes are sent. %H - The request protocol + The request protocol. Defaults to HTTP/1.0 if not + known. %h - Remote host + Remote host. Defaults to '-' if not known. + Defaults to 127.0.0.1 for backend requests. %{X}i The contents of request header line X. @@ -74,16 +76,18 @@ Remote logname (always '-') %m - Request method + Request method. Defaults to '-' if not known. %q - The query string, if no query string exists, an empty string. + The query string, if no query string exists, an + empty string. %{X}o The contents of response header line X. %r - The first line of the request + The first line of the request. Synthesized from other + fields, so it may not be the request verbatim. %s Status sent to the client @@ -93,7 +97,8 @@ format. %U - The request URL without any query string. + The request URL without any query string. Defaults to + '-' if not known. %u Remote user from auth | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/reference/vcl.rst ^ |
@@ -39,6 +39,12 @@ boolean (!, && and \|\|) operators, VCL supports both regular expression and ACL matching using the ~ and the !~ operators. +Basic strings are enclosed in " ... ", and may not contain newlines. + +Long strings are enclosed in {" ... "}. They may contain any +character including ", newline and other control characters except +for the NUL (0x00) character. + Unlike C and Perl, the backslash (\) character has no special meaning in strings in VCL, so it can be freely used in regular expressions without doubling. @@ -55,6 +61,15 @@ remove headers with the *remove* or *unset* keywords, which are synonym. +You can use the *rollback* keyword to revert any changes to req at +any time. + +The *synthetic* keyword is used to produce a synthetic response +body in vcl_error. It takes a single string as argument. + +You can force a crash of the client process with the *panic* keyword. +*panic* takes a string as argument. + The ``return(action)`` keyword terminates the subroutine. *action* can be, depending on context one of @@ -148,65 +163,76 @@ } } -The random director -~~~~~~~~~~~~~~~~~~~ +The family of random directors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The random director takes one per director option .retries. This -specifies how many tries it will use to find a working backend. The -default is the same as the number of backends defined for the -director. +There are three directors that share the same logic, called the random +director, client director and hash director. They each distribute traffic +among the backends assigned to it using a random distribution seeded with +either the client identity, a random number or the cache hash (typically +url). Beyond the initial seed, they act the same. + +Each backend requires a .weight option which sets the amount of traffic +each backend will get compared to the others. Equal weight means equal +traffic. A backend with lower weight than an other will get proportionally +less traffic. + +The director has an optional .retries option which defaults to the number +of backends the director has. The director will attempt .retries times to +find a healthy backend if the first attempt fails. Each attempt re-uses the +previous seed in an iterative manner. For the random director this detail +is of no importance as it will give different results each time. For the +hash and client director, this means the same URL or the same client will +fail to the same server consistently. -There is also a per-backend option: weight which defines the portion -of traffic to send to the particular backend. - -The round-robin director -~~~~~~~~~~~~~~~~~~~~~~~~ - -The round-robin director does not take any options. +The random director +................... +This uses a random number to seed the backend selection. The client director -~~~~~~~~~~~~~~~~~~~ +................... The client director picks a backend based on the clients *identity*. You can set the VCL variable *client.identity* to identify the client by picking up the value of a session cookie or similar. -Note: from 2.1.0 to 2.1.3 *client.identity* isn't available and the -director will use automatically set the idenity based on client.ip In -2.1.4 and onwards you can set client.identity to any string available. - -The client director takes one option - *retries* which set the number -of retries the director should take in order to find a healthy -backend. - - - The hash director -~~~~~~~~~~~~~~~~~ +................. The hash director will pick a backend based on the URL hash -value. +value. This is useful is you are using Varnish to load balance in front of other Varnish caches or other web accelerators as objects won't be duplicated across caches. -The client director takes one option - *retries* which set the number -of retries the director should take in order to find a healthy -backend. +It will use the value of req.hash, just as the normal cache-lookup methods. + + +The round-robin director +~~~~~~~~~~~~~~~~~~~~~~~~ + +The round-robin director does not take any options. + +It will use the first backend for the first request, the second backend for +the second request and so on, and start from the top again when it gets to +the end. + +If a backend is unhealthy or Varnish fails to connect, it will be skipped. +The round-robin director will try all the backends once before giving up. The DNS director ~~~~~~~~~~~~~~~~ -The DNS director can use backends in three different ways. Either like the +The DNS director can use backends in two different ways. Either like the random or round-robin director or using .list:: director directorname dns { .list = { .host_header = "www.example.com"; .port = "80"; - .connect_timeout = 0.4; + .connect_timeout = 0.4s; "192.168.15.0"/24; "192.168.16.128"/25; } @@ -216,6 +242,9 @@ This will specify 384 backends, all using port 80 and a connection timeout of 0.4s. Options must come before the list of IPs in the .list statement. +The .list-method does not support IPv6. It is not a white-list, it is an +actual list of backends that will be created internally in Varnish - the +larger subnet the more overhead. The .ttl defines the cache duration of the DNS lookups. @@ -223,6 +252,12 @@ header supplied by the client, before looking it up. All settings are optional. +Health checks are not thoroughly supported. + +DNS round robin balancing is supported. If a hostname resolves to multiple +backends, the director will divide the traffic between all of them in a +round-robin manner. + The fallback director ~~~~~~~~~~~~~~~~~~~~~ @@ -245,11 +280,36 @@ Backends can be probed to see whether they should be considered healthy or not. The return status can also be checked by using -req.backend.healthy .window is how many of the latest polls we -examine, while .threshold is how many of those must have succeeded for -us to consider the backend healthy. .initial is how many of the -probes are considered good when Varnish starts - defaults to the same -amount as the threshold. +req.backend.healthy. + +Probes take the following parameters: + +.url + Specify a URL to request from the backend. + Defaults to "/". +.request + Specify a full HTTP request using multiple strings. .request will + have \\r\\n automatically inserted after every string. + If specified, .request will take precedence over .url. +.window + How many of the latest polls we examine to determine backend health. + Defaults to 8. +.threshold + How many of the polls in .window must have succeeded for us to consider + the backend healthy. + Defaults to 3. +.initial + How many of the probes are considered good when Varnish starts. + Defaults to the same amount as the threshold. +.expected_response + The expected backend HTTP response code. + Defaults to 200. +.interval + Defines how often the probe should check the backend. + Default is every 5 seconds. +.timeout + How fast each probe times out. + Default is 2 seconds. A backend with a probe can be defined like this, together with the backend or director::: @@ -275,6 +335,7 @@ .window = 8; .threshold = 3; .initial = 3; + .expected_response = 200; } backend www { @@ -626,6 +687,9 @@ client.ip The client's IP address. +client.identity + Identification of the client, used to load balance in the client director. + server.hostname The host name of the server. @@ -672,6 +736,23 @@ req.can_gzip Does the client accept the gzip transfer encoding. +req.restarts + A count of how many times this request has been restarted. + +req.esi + Boolean. Set to false to disable ESI processing regardless of any + value in beresp.do_esi. Defaults to true. This variable is subject + to change in future versions, you should avoid using it. + +req.esi_level + A count of how many levels of ESI requests we're currently at. + +req.grace + Set to a period to enable grace. + +req.xid + Unique ID of this request. + The following variables are available while preparing a backend request (either for a cache miss or for pass or pipe mode): @@ -709,8 +790,9 @@ as it is delivered so only client can access the object. beresp.do_esi - Boolean. ESI-process the object after fetching it. Defaults to false. Set it - to true to parse the object for ESI directives. + Boolean. ESI-process the object after fetching it. Defaults to + false. Set it to true to parse the object for ESI directives. Will + only be honored if req.esi is true. beresp.do_gzip Boolean. Gzip the object before storing it. Defaults to false. @@ -731,6 +813,25 @@ beresp.ttl The object's remaining time to live, in seconds. beresp.ttl is writable. +beresp.grace + Set to a period to enable grace. + +beresp.saintmode + Set to a period to enable saint mode. + +beresp.backend.name + Name of the backend this response was fetched from. + +beresp.backend.ip + IP of the backend this response was fetched from. + +beresp.backend.port + Port of the backend this response was fetched from. + +beresp.storage + Set to force Varnish to save this object to a particular storage + backend. + After the object is entered into the cache, the following (mostly read-only) variables are available when the object has been located in cache, typically in vcl_hit and vcl_deliver. @@ -755,6 +856,12 @@ The approximate number of times the object has been delivered. A value of 0 indicates a cache miss. +obj.grace + The object's grace period in seconds. obj.grace is writable. + +obj.http.header + The corresponding HTTP header. + The following variables are available while determining the hash key of an object: @@ -939,8 +1046,8 @@ COPYRIGHT ========= -This document is licensed under the same licence as Varnish -itself. See LICENCE for details. +This document is licensed under the same license as Varnish +itself. See LICENSE for details. * Copyright (c) 2006 Verdens Gang AS * Copyright (c) 2006-2011 Varnish Software AS | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/tutorial/esi.rst ^ |
@@ -48,9 +48,9 @@ sub vcl_fetch { if (req.url == "/test.html") { set beresp.do_esi = true; /* Do ESI processing */ - set obj.ttl = 24 h; /* Sets the TTL on the HTML above */ + set beresp.ttl = 24 h; /* Sets the TTL on the HTML above */ } elseif (req.url == "/cgi-bin/date.cgi") { - set obj.ttl = 1m; /* Sets a one minute TTL on */ + set beresp.ttl = 1m; /* Sets a one minute TTL on */ /* the included object */ } } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/tutorial/index.rst ^ |
@@ -26,6 +26,7 @@ vary purging esi + virtualised advanced_backend_servers handling_misbehaving_servers advanced_topics | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/doc/sphinx/tutorial/vcl.rst ^ |
@@ -58,7 +58,15 @@ *pass* When you return pass the request and subsequent response will be passed to and from the backend server. It won't be cached. pass can be returned from - both vcl_recv and vcl_fetch. + vcl_recv + +*hit_for_pass* + Similar to pass, but accessible from vcl_fetch. Unlike pass, hit_for_pass + will create a hitforpass object in the cache. This has the side-effect of + caching the decision not to cache. This is to allow would-be uncachable + requests to be passed to the backend at the same time. The same logic is + not necessary in vcl_recv because this happens before any potential + queueing for an object takes place. *lookup* When you return lookup from vcl_recv you tell Varnish to deliver content | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/etc/zope-plone.vcl ^ |
@@ -14,8 +14,8 @@ # Default backend is the Zope CMS backend default { - set backend.host = "127.0.0.1"; - set backend.port = "9673"; + .host = "127.0.0.1"; + .port = "9673"; } acl purge { @@ -29,10 +29,10 @@ # requests for unknown hosts if (req.http.host ~ "(www.)?example.com") { set req.http.host = "example.com"; - set req.url = "/VirtualHostBase/http/example.com:80/example.com/VirtualHostRoot" req.url; + set req.url = "/VirtualHostBase/http/example.com:80/example.com/VirtualHostRoot" + req.url; } elsif (req.http.host ~ "(www.)?example.org") { set req.http.host = "example.org"; - set req.url = "/VirtualHostBase/http/example.org:80/example.org/VirtualHostRoot" req.url; + set req.url = "/VirtualHostBase/http/example.org:80/example.org/VirtualHostRoot" + req.url; } else { error 404 "Unknown virtual host."; } @@ -42,7 +42,7 @@ # POST - Logins and edits if (req.request == "POST") { - pass; + return(pass); } # PURGE - The CacheFu product can invalidate updated URLs @@ -50,7 +50,7 @@ if (!client.ip ~ purge) { error 405 "Not allowed."; } - lookup; + return(lookup); } } @@ -60,9 +60,9 @@ # Force lookup of specific urls unlikely to need protection if (req.url ~ "\.(js|css)") { remove req.http.cookie; - lookup; + return(lookup); } - pass; + return(pass); } # The default vcl_recv is used from here. @@ -71,13 +71,14 @@ # Do the PURGE thing sub vcl_hit { if (req.request == "PURGE") { - set obj.ttl = 0s; + purge; error 200 "Purged"; } } sub vcl_miss { if (req.request == "PURGE") { - error 404 "Not in cache"; + purge; + error 200 "Purged"; } } @@ -85,7 +86,7 @@ # from Zope by using the CacheFu product sub vcl_fetch { - if (obj.ttl < 3600s) { - set obj.ttl = 3600s; + if (beresp.ttl < 3600s) { + set beresp.ttl = 3600s; } } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/libvarnish.h ^ |
@@ -56,16 +56,24 @@ #define VTCP_ADDRBUFSIZE 64 #define VTCP_PORTBUFSIZE 16 +static inline int +VTCP_Check(int a) +{ + if (a == 0) + return (1); + if (errno == ECONNRESET || errno == ENOTCONN) + return (1); #if (defined (__SVR4) && defined (__sun)) || defined (__NetBSD__) -/* - * Solaris returns EINVAL if the other end unexepectedly reset the - * connection. This is a bug in Solaris and documented behaviour on NetBSD. - */ -#define VTCP_Check(a) ((a) == 0 || errno == ECONNRESET || errno == ENOTCONN \ - || errno == EINVAL) -#else -#define VTCP_Check(a) ((a) == 0 || errno == ECONNRESET || errno == ENOTCONN) + /* + * Solaris returns EINVAL if the other end unexepectedly reset the + * connection. + * This is a bug in Solaris and documented behaviour on NetBSD. + */ + if (errno == EINVAL || errno == ETIMEDOUT) + return (1); #endif + return (0); +} #define VTCP_Assert(a) assert(VTCP_Check(a)) | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/varnishapi.h ^ |
@@ -109,7 +109,7 @@ * -1 failure to reopen. */ -unsigned VSM_Seq(struct VSM_data *vd); +unsigned VSM_Seq(const struct VSM_data *vd); /* * Return the allocation sequence number */ @@ -260,6 +260,7 @@ int VSL_Dispatch(struct VSM_data *vd, VSL_handler_f *func, void *priv); int VSL_NextLog(const struct VSM_data *lh, uint32_t **pp, uint64_t *bitmap); int VSL_Matched(const struct VSM_data *vd, uint64_t bitmap); +int VSL_Name2Tag(const char *name, int l); extern const char *VSL_tags[256]; #endif | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/vcl.h ^ |
@@ -7,7 +7,7 @@ struct sess; struct cli; -typedef void vcl_init_f(struct cli *); +typedef int vcl_init_f(struct cli *); typedef void vcl_fini_f(struct cli *); typedef int vcl_func_f(struct sess *sp); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/vcs_version.h ^ |
@@ -1,10 +1,10 @@ -/* 6152bf7 */ +/* 55e70a4 */ /* * NB: This file is machine generated, DO NOT EDIT! * * Run make to regenerate * */ -/* 6152bf7 */ +/* 55e70a4 */ -#define VCS_Version "6152bf7" +#define VCS_Version "55e70a4" | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/vmod_abi.h ^ |
@@ -1 +1 @@ -#define VMOD_ABI_Version "Varnish 3.0.1 6152bf7" +#define VMOD_ABI_Version "Varnish 3.0.2 55e70a4" | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/vrt.h ^ |
@@ -183,8 +183,8 @@ void VRT_fini_dir(struct cli *, struct director *); /* VMOD/Modules related */ -void VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm, - const char *path); +int VRT_Vmod_Init(void **hdl, void *ptr, int len, const char *nm, + const char *path, struct cli *cli); void VRT_Vmod_Fini(void **hdl); struct vmod_priv; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/vsc.h ^ |
@@ -38,7 +38,7 @@ #define VSC_TYPE_VBE "VBE" #define VSC_TYPE_LCK "LCK" -#define VSC_F(n, t, l, f, e) t n; +#define VSC_F(n, t, l, f, e, d) t n; #define VSC_DO(u,l,t) struct VSC_C_##l { #define VSC_DONE(u,l,t) }; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/include/vsc_fields.h ^ |
@@ -20,7 +20,7 @@ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION, "") * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF @@ -33,134 +33,138 @@ * XXX: turned into a major mess, causing trouble already for backends. * XXX: * XXX: Please converge on: - * XXX: c_* counter (total bytes ever allocated from sma) - * XXX: g_* gauge (presently allocated bytes from sma) + * XXX: c_* counter (total bytes ever allocated from sma, "") + * XXX: g_* gauge (presently allocated bytes from sma, "") */ /**********************************************************************/ #ifdef VSC_DO_MAIN -VSC_F(client_conn, uint64_t, 0, 'a', "Client connections accepted") +VSC_F(client_conn, uint64_t, 1, 'a', "Client connections accepted", "") VSC_F(client_drop, uint64_t, 0, 'a', - "Connection dropped, no sess/wrk") -VSC_F(client_req, uint64_t, 1, 'a', "Client requests received") + "Connection dropped, no sess/wrk", "") +VSC_F(client_req, uint64_t, 1, 'a', "Client requests received", "") -VSC_F(cache_hit, uint64_t, 1, 'a', "Cache hits") -VSC_F(cache_hitpass, uint64_t, 1, 'a', "Cache hits for pass") -VSC_F(cache_miss, uint64_t, 1, 'a', "Cache misses") - -VSC_F(backend_conn, uint64_t, 0, 'a', "Backend conn. success") -VSC_F(backend_unhealthy, uint64_t, 0, 'a', "Backend conn. not attempted") -VSC_F(backend_busy, uint64_t, 0, 'a', "Backend conn. too many") -VSC_F(backend_fail, uint64_t, 0, 'a', "Backend conn. failures") -VSC_F(backend_reuse, uint64_t, 0, 'a', "Backend conn. reuses") -VSC_F(backend_toolate, uint64_t, 0, 'a', "Backend conn. was closed") -VSC_F(backend_recycle, uint64_t, 0, 'a', "Backend conn. recycles") -VSC_F(backend_retry, uint64_t, 0, 'a', "Backend conn. retry") - -VSC_F(fetch_head, uint64_t, 1, 'a', "Fetch head") -VSC_F(fetch_length, uint64_t, 1, 'a', "Fetch with Length") -VSC_F(fetch_chunked, uint64_t, 1, 'a', "Fetch chunked") -VSC_F(fetch_eof, uint64_t, 1, 'a', "Fetch EOF") -VSC_F(fetch_bad, uint64_t, 1, 'a', "Fetch had bad headers") -VSC_F(fetch_close, uint64_t, 1, 'a', "Fetch wanted close") -VSC_F(fetch_oldhttp, uint64_t, 1, 'a', "Fetch pre HTTP/1.1 closed") -VSC_F(fetch_zero, uint64_t, 1, 'a', "Fetch zero len") -VSC_F(fetch_failed, uint64_t, 1, 'a', "Fetch failed") -VSC_F(fetch_1xx, uint64_t, 1, 'a', "Fetch no body (1xx)") -VSC_F(fetch_204, uint64_t, 1, 'a', "Fetch no body (204)") -VSC_F(fetch_304, uint64_t, 1, 'a', "Fetch no body (304)") - - -VSC_F(n_sess_mem, uint64_t, 0, 'i', "N struct sess_mem") -VSC_F(n_sess, uint64_t, 0, 'i', "N struct sess") -VSC_F(n_object, uint64_t, 1, 'i', "N struct object") -VSC_F(n_vampireobject, uint64_t, 1, 'i', "N unresurrected objects") -VSC_F(n_objectcore, uint64_t, 1, 'i', "N struct objectcore") -VSC_F(n_objecthead, uint64_t, 1, 'i', "N struct objecthead") -VSC_F(n_waitinglist, uint64_t, 1, 'i', "N struct waitinglist") - -VSC_F(n_vbc, uint64_t, 0, 'i', "N struct vbc") -VSC_F(n_wrk, uint64_t, 0, 'i', "N worker threads") -VSC_F(n_wrk_create, uint64_t, 0, 'a', "N worker threads created") +VSC_F(cache_hit, uint64_t, 1, 'a', "Cache hits", "") +VSC_F(cache_hitpass, uint64_t, 1, 'a', "Cache hits for pass", "") +VSC_F(cache_miss, uint64_t, 1, 'a', "Cache misses", "") + +VSC_F(backend_conn, uint64_t, 0, 'a', "Backend conn. success", "") +VSC_F(backend_unhealthy, uint64_t, 0, 'a', "Backend conn. not attempted", "") +VSC_F(backend_busy, uint64_t, 0, 'a', "Backend conn. too many", "") +VSC_F(backend_fail, uint64_t, 0, 'a', "Backend conn. failures", "") +VSC_F(backend_reuse, uint64_t, 0, 'a', "Backend conn. reuses", "") +VSC_F(backend_toolate, uint64_t, 0, 'a', "Backend conn. was closed", "") +VSC_F(backend_recycle, uint64_t, 0, 'a', "Backend conn. recycles", "") +VSC_F(backend_retry, uint64_t, 0, 'a', "Backend conn. retry", "") + +VSC_F(fetch_head, uint64_t, 1, 'a', "Fetch head", "") +VSC_F(fetch_length, uint64_t, 1, 'a', "Fetch with Length", "") +VSC_F(fetch_chunked, uint64_t, 1, 'a', "Fetch chunked", "") +VSC_F(fetch_eof, uint64_t, 1, 'a', "Fetch EOF", "") +VSC_F(fetch_bad, uint64_t, 1, 'a', "Fetch had bad headers", "") +VSC_F(fetch_close, uint64_t, 1, 'a', "Fetch wanted close", "") +VSC_F(fetch_oldhttp, uint64_t, 1, 'a', "Fetch pre HTTP/1.1 closed", "") +VSC_F(fetch_zero, uint64_t, 1, 'a', "Fetch zero len", "") +VSC_F(fetch_failed, uint64_t, 1, 'a', "Fetch failed", "") +VSC_F(fetch_1xx, uint64_t, 1, 'a', "Fetch no body (1xx)", "") +VSC_F(fetch_204, uint64_t, 1, 'a', "Fetch no body (204)", "") +VSC_F(fetch_304, uint64_t, 1, 'a', "Fetch no body (304)", "") + +/*--------------------------------------------------------------------- + * Session Memory + * see: cache_session.c + */ + +VSC_F(n_sess_mem, uint64_t, 0, 'i', "N struct sess_mem", "") +VSC_F(n_sess, uint64_t, 0, 'i', "N struct sess", "") +VSC_F(n_object, uint64_t, 1, 'i', "N struct object", "") +VSC_F(n_vampireobject, uint64_t, 1, 'i', "N unresurrected objects", "") +VSC_F(n_objectcore, uint64_t, 1, 'i', "N struct objectcore", "") +VSC_F(n_objecthead, uint64_t, 1, 'i', "N struct objecthead", "") +VSC_F(n_waitinglist, uint64_t, 1, 'i', "N struct waitinglist", "") + +VSC_F(n_vbc, uint64_t, 0, 'i', "N struct vbc", "") +VSC_F(n_wrk, uint64_t, 0, 'i', "N worker threads", "") +VSC_F(n_wrk_create, uint64_t, 0, 'a', "N worker threads created", "") VSC_F(n_wrk_failed, uint64_t, 0, 'a', - "N worker threads not created") -VSC_F(n_wrk_max, uint64_t, 0, 'a', "N worker threads limited") -VSC_F(n_wrk_lqueue, uint64_t, 0, 'a', "work request queue length") -VSC_F(n_wrk_queued, uint64_t, 0, 'a', "N queued work requests") -VSC_F(n_wrk_drop, uint64_t, 0, 'a', "N dropped work requests") -VSC_F(n_backend, uint64_t, 0, 'i', "N backends") - -VSC_F(n_expired, uint64_t, 0, 'i', "N expired objects") -VSC_F(n_lru_nuked, uint64_t, 0, 'i', "N LRU nuked objects") -VSC_F(n_lru_moved, uint64_t, 0, 'i', "N LRU moved objects") + "N worker threads not created", "") +VSC_F(n_wrk_max, uint64_t, 0, 'a', "N worker threads limited", "") +VSC_F(n_wrk_lqueue, uint64_t, 0, 'a', "work request queue length", "") +VSC_F(n_wrk_queued, uint64_t, 0, 'a', "N queued work requests", "") +VSC_F(n_wrk_drop, uint64_t, 0, 'a', "N dropped work requests", "") +VSC_F(n_backend, uint64_t, 0, 'i', "N backends", "") + +VSC_F(n_expired, uint64_t, 0, 'i', "N expired objects", "") +VSC_F(n_lru_nuked, uint64_t, 0, 'i', "N LRU nuked objects", "") +VSC_F(n_lru_moved, uint64_t, 0, 'i', "N LRU moved objects", "") -VSC_F(losthdr, uint64_t, 0, 'a', "HTTP header overflows") +VSC_F(losthdr, uint64_t, 0, 'a', "HTTP header overflows", "") -VSC_F(n_objsendfile, uint64_t, 0, 'a', "Objects sent with sendfile") -VSC_F(n_objwrite, uint64_t, 0, 'a', "Objects sent with write") +VSC_F(n_objsendfile, uint64_t, 0, 'a', "Objects sent with sendfile", "") +VSC_F(n_objwrite, uint64_t, 0, 'a', "Objects sent with write", "") VSC_F(n_objoverflow, uint64_t, 1, 'a', - "Objects overflowing workspace") + "Objects overflowing workspace", "") -VSC_F(s_sess, uint64_t, 1, 'a', "Total Sessions") -VSC_F(s_req, uint64_t, 1, 'a', "Total Requests") -VSC_F(s_pipe, uint64_t, 1, 'a', "Total pipe") -VSC_F(s_pass, uint64_t, 1, 'a', "Total pass") -VSC_F(s_fetch, uint64_t, 1, 'a', "Total fetch") -VSC_F(s_hdrbytes, uint64_t, 1, 'a', "Total header bytes") -VSC_F(s_bodybytes, uint64_t, 1, 'a', "Total body bytes") - -VSC_F(sess_closed, uint64_t, 1, 'a', "Session Closed") -VSC_F(sess_pipeline, uint64_t, 1, 'a', "Session Pipeline") -VSC_F(sess_readahead, uint64_t, 1, 'a', "Session Read Ahead") -VSC_F(sess_linger, uint64_t, 1, 'a', "Session Linger") -VSC_F(sess_herd, uint64_t, 1, 'a', "Session herd") - -VSC_F(shm_records, uint64_t, 0, 'a', "SHM records") -VSC_F(shm_writes, uint64_t, 0, 'a', "SHM writes") -VSC_F(shm_flushes, uint64_t, 0, 'a', "SHM flushes due to overflow") -VSC_F(shm_cont, uint64_t, 0, 'a', "SHM MTX contention") -VSC_F(shm_cycles, uint64_t, 0, 'a', "SHM cycles through buffer") - -VSC_F(sms_nreq, uint64_t, 0, 'a', "SMS allocator requests") -VSC_F(sms_nobj, uint64_t, 0, 'i', "SMS outstanding allocations") -VSC_F(sms_nbytes, uint64_t, 0, 'i', "SMS outstanding bytes") -VSC_F(sms_balloc, uint64_t, 0, 'i', "SMS bytes allocated") -VSC_F(sms_bfree, uint64_t, 0, 'i', "SMS bytes freed") - -VSC_F(backend_req, uint64_t, 0, 'a', "Backend requests made") - -VSC_F(n_vcl, uint64_t, 0, 'a', "N vcl total") -VSC_F(n_vcl_avail, uint64_t, 0, 'a', "N vcl available") -VSC_F(n_vcl_discard, uint64_t, 0, 'a', "N vcl discarded") - -VSC_F(n_ban, uint64_t, 0, 'i', "N total active bans") -VSC_F(n_ban_add, uint64_t, 0, 'a', "N new bans added") -VSC_F(n_ban_retire, uint64_t, 0, 'a', "N old bans deleted") -VSC_F(n_ban_obj_test, uint64_t, 0, 'a', "N objects tested") -VSC_F(n_ban_re_test, uint64_t, 0, 'a', "N regexps tested against") -VSC_F(n_ban_dups, uint64_t, 0, 'a', "N duplicate bans removed") - -VSC_F(hcb_nolock, uint64_t, 0, 'a', "HCB Lookups without lock") -VSC_F(hcb_lock, uint64_t, 0, 'a', "HCB Lookups with lock") -VSC_F(hcb_insert, uint64_t, 0, 'a', "HCB Inserts") - -VSC_F(esi_errors, uint64_t, 0, 'a', "ESI parse errors (unlock)") -VSC_F(esi_warnings, uint64_t, 0, 'a', "ESI parse warnings (unlock)") -VSC_F(accept_fail, uint64_t, 0, 'a', "Accept failures") -VSC_F(client_drop_late, uint64_t, 0, 'a', "Connection dropped late") -VSC_F(uptime, uint64_t, 0, 'a', "Client uptime") - -VSC_F(dir_dns_lookups, uint64_t, 0, 'a', "DNS director lookups") -VSC_F(dir_dns_failed, uint64_t, 0, 'a', "DNS director failed lookups") -VSC_F(dir_dns_hit, uint64_t, 0, 'a', "DNS director cached lookups hit") -VSC_F(dir_dns_cache_full, uint64_t, 0, 'a', "DNS director full dnscache") +VSC_F(s_sess, uint64_t, 1, 'a', "Total Sessions", "") +VSC_F(s_req, uint64_t, 1, 'a', "Total Requests", "") +VSC_F(s_pipe, uint64_t, 1, 'a', "Total pipe", "") +VSC_F(s_pass, uint64_t, 1, 'a', "Total pass", "") +VSC_F(s_fetch, uint64_t, 1, 'a', "Total fetch", "") +VSC_F(s_hdrbytes, uint64_t, 1, 'a', "Total header bytes", "") +VSC_F(s_bodybytes, uint64_t, 1, 'a', "Total body bytes", "") + +VSC_F(sess_closed, uint64_t, 1, 'a', "Session Closed", "") +VSC_F(sess_pipeline, uint64_t, 1, 'a', "Session Pipeline", "") +VSC_F(sess_readahead, uint64_t, 1, 'a', "Session Read Ahead", "") +VSC_F(sess_linger, uint64_t, 1, 'a', "Session Linger", "") +VSC_F(sess_herd, uint64_t, 1, 'a', "Session herd", "") + +VSC_F(shm_records, uint64_t, 0, 'a', "SHM records", "") +VSC_F(shm_writes, uint64_t, 0, 'a', "SHM writes", "") +VSC_F(shm_flushes, uint64_t, 0, 'a', "SHM flushes due to overflow", "") +VSC_F(shm_cont, uint64_t, 0, 'a', "SHM MTX contention", "") +VSC_F(shm_cycles, uint64_t, 0, 'a', "SHM cycles through buffer", "") + +VSC_F(sms_nreq, uint64_t, 0, 'a', "SMS allocator requests", "") +VSC_F(sms_nobj, uint64_t, 0, 'i', "SMS outstanding allocations", "") +VSC_F(sms_nbytes, uint64_t, 0, 'i', "SMS outstanding bytes", "") +VSC_F(sms_balloc, uint64_t, 0, 'i', "SMS bytes allocated", "") +VSC_F(sms_bfree, uint64_t, 0, 'i', "SMS bytes freed", "") + +VSC_F(backend_req, uint64_t, 0, 'a', "Backend requests made", "") + +VSC_F(n_vcl, uint64_t, 0, 'a', "N vcl total", "") +VSC_F(n_vcl_avail, uint64_t, 0, 'a', "N vcl available", "") +VSC_F(n_vcl_discard, uint64_t, 0, 'a', "N vcl discarded", "") + +VSC_F(n_ban, uint64_t, 0, 'i', "N total active bans", "") +VSC_F(n_ban_add, uint64_t, 0, 'a', "N new bans added", "") +VSC_F(n_ban_retire, uint64_t, 0, 'a', "N old bans deleted", "") +VSC_F(n_ban_obj_test, uint64_t, 0, 'a', "N objects tested", "") +VSC_F(n_ban_re_test, uint64_t, 0, 'a', "N regexps tested against", "") +VSC_F(n_ban_dups, uint64_t, 0, 'a', "N duplicate bans removed", "") + +VSC_F(hcb_nolock, uint64_t, 0, 'a', "HCB Lookups without lock", "") +VSC_F(hcb_lock, uint64_t, 0, 'a', "HCB Lookups with lock", "") +VSC_F(hcb_insert, uint64_t, 0, 'a', "HCB Inserts", "") + +VSC_F(esi_errors, uint64_t, 0, 'a', "ESI parse errors (unlock)", "") +VSC_F(esi_warnings, uint64_t, 0, 'a', "ESI parse warnings (unlock)", "") +VSC_F(accept_fail, uint64_t, 0, 'a', "Accept failures", "") +VSC_F(client_drop_late, uint64_t, 0, 'a', "Connection dropped late", "") +VSC_F(uptime, uint64_t, 0, 'a', "Client uptime", "") + +VSC_F(dir_dns_lookups, uint64_t, 0, 'a', "DNS director lookups", "") +VSC_F(dir_dns_failed, uint64_t, 0, 'a', "DNS director failed lookups", "") +VSC_F(dir_dns_hit, uint64_t, 0, 'a', "DNS director cached lookups hit", "") +VSC_F(dir_dns_cache_full, uint64_t, 0, 'a', "DNS director full dnscache", "") -VSC_F(vmods, uint64_t, 0, 'i', "Loaded VMODs") +VSC_F(vmods, uint64_t, 0, 'i', "Loaded VMODs", "") -VSC_F(n_gzip, uint64_t, 0, 'a', "Gzip operations") -VSC_F(n_gunzip, uint64_t, 0, 'a', "Gunzip operations") +VSC_F(n_gzip, uint64_t, 0, 'a', "Gzip operations", "") +VSC_F(n_gunzip, uint64_t, 0, 'a', "Gunzip operations", "") #endif @@ -168,10 +172,10 @@ #ifdef VSC_DO_LCK -VSC_F(creat, uint64_t, 0, 'a', "Created locks") -VSC_F(destroy, uint64_t, 0, 'a', "Destroyed locks") -VSC_F(locks, uint64_t, 0, 'a', "Lock Operations") -VSC_F(colls, uint64_t, 0, 'a', "Collisions") +VSC_F(creat, uint64_t, 0, 'a', "Created locks", "") +VSC_F(destroy, uint64_t, 0, 'a', "Destroyed locks", "") +VSC_F(locks, uint64_t, 0, 'a', "Lock Operations", "") +VSC_F(colls, uint64_t, 0, 'a', "Collisions", "") #endif @@ -180,13 +184,13 @@ */ #if defined(VSC_DO_SMA) || defined (VSC_DO_SMF) -VSC_F(c_req, uint64_t, 0, 'a', "Allocator requests") -VSC_F(c_fail, uint64_t, 0, 'a', "Allocator failures") -VSC_F(c_bytes, uint64_t, 0, 'a', "Bytes allocated") -VSC_F(c_freed, uint64_t, 0, 'a', "Bytes freed") -VSC_F(g_alloc, uint64_t, 0, 'i', "Allocations outstanding") -VSC_F(g_bytes, uint64_t, 0, 'i', "Bytes outstanding") -VSC_F(g_space, uint64_t, 0, 'i', "Bytes available") +VSC_F(c_req, uint64_t, 0, 'a', "Allocator requests", "") +VSC_F(c_fail, uint64_t, 0, 'a', "Allocator failures", "") +VSC_F(c_bytes, uint64_t, 0, 'a', "Bytes allocated", "") +VSC_F(c_freed, uint64_t, 0, 'a', "Bytes freed", "") +VSC_F(g_alloc, uint64_t, 0, 'i', "Allocations outstanding", "") +VSC_F(g_bytes, uint64_t, 0, 'i', "Bytes outstanding", "") +VSC_F(g_space, uint64_t, 0, 'i', "Bytes available", "") #endif @@ -199,17 +203,17 @@ /**********************************************************************/ #ifdef VSC_DO_SMF -VSC_F(g_smf, uint64_t, 0, 'i', "N struct smf") -VSC_F(g_smf_frag, uint64_t, 0, 'i', "N small free smf") -VSC_F(g_smf_large, uint64_t, 0, 'i', "N large free smf") +VSC_F(g_smf, uint64_t, 0, 'i', "N struct smf", "") +VSC_F(g_smf_frag, uint64_t, 0, 'i', "N small free smf", "") +VSC_F(g_smf_large, uint64_t, 0, 'i', "N large free smf", "") #endif /**********************************************************************/ #ifdef VSC_DO_VBE -VSC_F(vcls, uint64_t, 0, 'i', "VCL references") -VSC_F(happy, uint64_t, 0, 'b', "Happy health probes") +VSC_F(vcls, uint64_t, 0, 'i', "VCL references", "") +VSC_F(happy, uint64_t, 0, 'b', "Happy health probes", "") #endif | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvarnish/tcp.c ^ |
@@ -267,7 +267,13 @@ timeout.tv_sec = (int)floor(seconds); timeout.tv_usec = (int)(1e6 * (seconds - timeout.tv_sec)); #ifdef SO_RCVTIMEO_WORKS - AZ(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof timeout)); + /* + * Solaris bug (present at least in snv_151 and older): If this fails + * with EINVAL, the socket is half-closed (SS_CANTSENDMORE) and the + * timeout does not get set. Needs to be fixed in Solaris, there is + * nothing we can do about this. + */ + VTCP_Assert(setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof timeout)); #else (void)s; #endif | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvarnishapi/vsc.c ^ |
@@ -295,7 +295,7 @@ sp.class = t; \ sp.ident = sha->ident; -#define VSC_F(nn,tt,ll,ff,dd) \ +#define VSC_F(nn,tt,ll,ff,dd,ee) \ sp.name = #nn; \ sp.fmt = #tt; \ sp.flag = ff; \ @@ -330,8 +330,8 @@ CHECK_OBJ_NOTNULL(sha, VSM_CHUNK_MAGIC); if (strcmp(sha->class, VSC_CLASS)) continue; - -#define VSC_F(a,b,c,d,e) + /*lint -save -e525 -e539 */ +#define VSC_F(n,t,l,f,d,e) #define VSC_DONE(a,b,c) #define VSC_DO(U,l,t) \ if (!strcmp(sha->type, t)) { \ @@ -343,6 +343,7 @@ #undef VSC_F #undef VSC_DO #undef VSC_DONE + /*lint -restore */ break; } return (i); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvarnishapi/vsl.c ^ |
@@ -206,7 +206,7 @@ } int -VSL_NextLog(const struct VSM_data *vd, uint32_t **pp, uint64_t *mb) +VSL_NextLog(const struct VSM_data *vd, uint32_t **pp, uint64_t *bits) { struct vsl *vsl; uint32_t *p; @@ -268,7 +268,7 @@ if (i != VRE_ERROR_NOMATCH) continue; } - if (mb != NULL) { + if (bits != NULL) { struct vsl_re_match *vrm; int j = 0; VTAILQ_FOREACH(vrm, &vsl->matchers, next) { @@ -276,7 +276,7 @@ i = VRE_exec(vrm->re, VSL_DATA(p), VSL_LEN(p), 0, 0, NULL, 0); if (i >= 0) - *mb |= 1 << j; + *bits |= (uintmax_t)1 << j; } j++; } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvarnishapi/vsl_arg.c ^ |
@@ -41,7 +41,6 @@ #include <unistd.h> #include "vas.h" -#include "vin.h" #include "vre.h" #include "vbm.h" #include "miniobj.h" @@ -50,6 +49,34 @@ #include "vsm_api.h" #include "vsl_api.h" +/*-------------------------------------------------------------------- + * Look up a tag + * 0..255 tag number + * -1 no tag matches + * -2 multiple tags match + */ + +int +VSL_Name2Tag(const char *name, int l) +{ + int i, n; + + if (l == -1) + l = strlen(name); + n = -1; + for (i = 0; i < 256; i++) { + if (VSL_tags[i] != NULL && + !strncasecmp(name, VSL_tags[i], l)) { + if (n == -1) + n = i; + else + n = -2; + } + } + return (n); +} + + /*--------------------------------------------------------------------*/ static int @@ -99,8 +126,8 @@ static int vsl_ix_arg(const struct VSM_data *vd, const char *opt, int arg) { - int i, j, l; - const char *b, *e, *p, *q; + int i, l; + const char *b, *e; CHECK_OBJ_NOTNULL(vd, VSM_MAGIC); /* If first option is 'i', set all bits for supression */ @@ -120,24 +147,17 @@ e++; while (isspace(b[l - 1])) l--; - for (i = 0; i < 256; i++) { - if (VSL_tags[i] == NULL) - continue; - p = VSL_tags[i]; - q = b; - for (j = 0; j < l; j++) - if (tolower(*q++) != tolower(*p++)) - break; - if (j != l || *p != '\0') - continue; - + i = VSL_Name2Tag(b, l); + if (i >= 0) { if (arg == 'x') vbit_set(vd->vsl->vbm_supress, i); else vbit_clr(vd->vsl->vbm_supress, i); - break; - } - if (i == 256) { + } else if (i == -2) { + fprintf(stderr, + "\"%*.*s\" matches multiple tags\n", l, l, b); + return (-1); + } else { fprintf(stderr, "Could not match \"%*.*s\" to any tag\n", l, l, b); return (-1); @@ -148,19 +168,6 @@ /*--------------------------------------------------------------------*/ -static int -name2tag(const char *n) -{ - int i; - - for (i = 0; i < 256; i++) { - if (VSL_tags[i] == NULL) - continue; - if (!strcasecmp(n, VSL_tags[i])) - return (i); - } - return (-1); -} static int vsl_m_arg(const struct VSM_data *vd, const char *opt) @@ -171,8 +178,6 @@ int erroroffset; CHECK_OBJ_NOTNULL(vd, VSM_MAGIC); - ALLOC_OBJ(m, VSL_RE_MATCH_MAGIC); - AN(m); if (!strchr(opt, ':')) { fprintf(stderr, "No : found in -o option %s\n", opt); @@ -185,10 +190,13 @@ *regex = '\0'; regex++; - m->tag = name2tag(o); - if (m->tag == -1) { + ALLOC_OBJ(m, VSL_RE_MATCH_MAGIC); + AN(m); + m->tag = VSL_Name2Tag(o, -1); + if (m->tag < 0) { fprintf(stderr, "Illegal tag %s specified\n", o); free(o); + FREE_OBJ(m); return (-1); } /* Get tag, regex */ @@ -196,6 +204,7 @@ if (m->re == NULL) { fprintf(stderr, "Illegal regex: %s\n", error); free(o); + FREE_OBJ(m); return (-1); } vd->vsl->num_matchers++; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvarnishapi/vsm.c ^ |
@@ -224,7 +224,7 @@ CHECK_OBJ_NOTNULL(vd, VSM_MAGIC); AZ(vd->VSM_head); if (!vd->n_opt) - VSM_n_Arg(vd, ""); + (void)VSM_n_Arg(vd, ""); return (vsm_open(vd, diag)); } @@ -331,7 +331,7 @@ CHECK_OBJ_NOTNULL(vd, VSM_MAGIC); vd->alloc_seq = vd->VSM_head->alloc_seq; while (vd->alloc_seq == 0) { - usleep(50000); + (void)usleep(50000); vd->alloc_seq = vd->VSM_head->alloc_seq; } CHECK_OBJ_NOTNULL(&vd->VSM_head->head, VSM_CHUNK_MAGIC); @@ -358,7 +358,7 @@ /*--------------------------------------------------------------------*/ unsigned -VSM_Seq(struct VSM_data *vd) +VSM_Seq(const struct VSM_data *vd) { CHECK_OBJ_NOTNULL(vd, VSM_MAGIC); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvarnishcompat/srandomdev.c ^ |
@@ -40,20 +40,33 @@ #include "compat/srandomdev.h" +static int +trydev(const char *fn, unsigned long *seed) +{ + int fd; + ssize_t sz; + + fd = open(fn, O_RDONLY); + if (fd < 0) + return (-1); + sz = read(fd, seed, sizeof *seed); + (void)close(fd); + if (sz != sizeof *seed) + return (-1); + return (0); +} + void srandomdev(void) { struct timeval tv; unsigned long seed; - int fd; - if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 || - (fd = open("/dev/random", O_RDONLY)) >= 0) { - read(fd, &seed, sizeof seed); - close(fd); - } else { - gettimeofday(&tv, NULL); - seed = (getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec; + if (trydev("/dev/urandom", &seed)) { + if (trydev("/dev/random", &seed)) { + gettimeofday(&tv, NULL); + seed = (getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec; + } } srandom(seed); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/generate.py ^ |
@@ -712,7 +712,7 @@ struct sess; struct cli; -typedef void vcl_init_f(struct cli *); +typedef int vcl_init_f(struct cli *); typedef void vcl_fini_f(struct cli *); typedef int vcl_func_f(struct sess *sp); """) | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_action.c ^ |
@@ -327,7 +327,7 @@ } action_table[] = { { "error", parse_error, VCL_MET_RECV | VCL_MET_PIPE | VCL_MET_PASS | VCL_MET_HASH | - VCL_MET_MISS | VCL_MET_HIT | VCL_MET_FETCH | VCL_MET_DELIVER + VCL_MET_MISS | VCL_MET_HIT | VCL_MET_FETCH }, #define VCL_RET_MAC(l, U, B) \ | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_backend.c ^ |
@@ -305,8 +305,9 @@ status = vcc_UintVal(tl); if (status < 100 || status > 999) { VSB_printf(tl->sb, - "Must specify .status with exactly three " - " digits (100 <= x <= 999)\n"); + "Must specify .expected_response with " + "exactly three digits " + "(100 <= x <= 999)\n"); vcc_ErrWhere(tl, tl->t); return; } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_compile.c ^ |
@@ -310,9 +310,10 @@ EmitInitFunc(const struct vcc *tl) { - Fc(tl, 0, "\nstatic void\nVGC_Init(struct cli *cli)\n{\n\n"); + Fc(tl, 0, "\nstatic int\nVGC_Init(struct cli *cli)\n{\n\n"); AZ(VSB_finish(tl->fi)); VSB_cat(tl->fc, VSB_data(tl->fi)); + Fc(tl, 0, "\treturn(0);\n"); Fc(tl, 0, "}\n"); } | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_expr.c ^ |
@@ -886,6 +886,7 @@ NUM_REL(INT), NUM_REL(DURATION), NUM_REL(BYTES), + NUM_REL(REAL), {STRING, T_EQ, "!VRT_strcmp(\v1, \v2)" }, {STRING, T_NEQ, "VRT_strcmp(\v1, \v2)" }, | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_fixed_token.c ^ |
@@ -159,8 +159,8 @@ VSB_cat(sb, "/*\n * NB: This file is machine generated, DO " "NOT EDIT!\n *\n * Edit and run generate.py instead\n" - " */\n\nstruct sess;\nstruct cli;\n\ntypedef void vcl_init_f(stru" - "ct cli *);\ntypedef void vcl_fini_f(struct cli *);\n" + " */\n\nstruct sess;\nstruct cli;\n\ntypedef int vcl_init_f(struc" + "t cli *);\ntypedef void vcl_fini_f(struct cli *);\n" "typedef int vcl_func_f(struct sess *sp);\n\n/* VCL Methods " "*/\n#define VCL_MET_RECV\t\t(1U << 0)\n#define VCL_MET_PIPE\t" "\t(1U << 1)\n#define VCL_MET_PASS\t\t(1U << 2)\n#define VCL_MET_" @@ -280,26 +280,26 @@ "struct cli *, struct director **, const char *name,\n" " int idx, const void *priv);\nvoid VRT_fini_dir(struct " "cli *, struct director *);\n\n/* VMOD/Modules related */\n" - "void VRT_Vmod_Init(void **hdl, void *ptr, int len, const char " - "*nm,\n const char *path);\nvoid VRT_Vmod_Fini(void **hdl);\n" - "\nstruct vmod_priv;\ntypedef void vmod_priv_free_f(void *);\n" - "struct vmod_priv {\n\tvoid\t\t\t*priv;\n\tvmod_priv_free_f\t" - "*free;\n};\n\ntypedef int vmod_init_f(struct vmod_priv *, " - " const struct VCL_conf *);\n\nstatic inline void\n" - "vmod_priv_fini(const struct vmod_priv *p)\n{\n\n\tif (p->priv " - "!= (void*)0 && p->free != (void*)0)\n\t\tp->free(p->priv);\n" - "}\n\n/* Stevedore related functions */\nint VRT_Stv(const " - "char *nm);\n\n/* Convert things to string */\n\nchar *VRT_IP_str" - "ing(const struct sess *sp, const struct sockaddr_storage *sa);\n" - "char *VRT_int_string(const struct sess *sp, int);\n" - "char *VRT_double_string(const struct sess *sp, double);\n" - "char *VRT_time_string(const struct sess *sp, double);\n" - "const char *VRT_bool_string(const struct sess *sp, unsigned);\n" - "const char *VRT_backend_string(const struct sess *sp, const " - "struct director *d);\n\n#define VRT_done(sp, hand)\t\t\t\\\n" - "\tdo {\t\t\t\t\t\\\n\t\tVRT_handling(sp, hand);\t\t\\\n" - "\t\treturn (1);\t\t\t\\\n\t} while (0)\n\nconst char *VRT_WrkStr" - "ing(const struct sess *sp, const char *p, ...);\n" + "int VRT_Vmod_Init(void **hdl, void *ptr, int len, const char " + "*nm,\n const char *path, struct cli *cli);\nvoid VRT_Vmod_Fin" + "i(void **hdl);\n\nstruct vmod_priv;\ntypedef void vmod_priv_free" + "_f(void *);\nstruct vmod_priv {\n\tvoid\t\t\t*priv;\n" + "\tvmod_priv_free_f\t*free;\n};\n\ntypedef int vmod_init_f(struct" + " vmod_priv *, const struct VCL_conf *);\n\nstatic inline " + "void\nvmod_priv_fini(const struct vmod_priv *p)\n" + "{\n\n\tif (p->priv != (void*)0 && p->free != (void*)0)\n" + "\t\tp->free(p->priv);\n}\n\n/* Stevedore related functions " + "*/\nint VRT_Stv(const char *nm);\n\n/* Convert things to string " + "*/\n\nchar *VRT_IP_string(const struct sess *sp, const struct " + "sockaddr_storage *sa);\nchar *VRT_int_string(const struct " + "sess *sp, int);\nchar *VRT_double_string(const struct sess " + "*sp, double);\nchar *VRT_time_string(const struct sess *sp, " + "double);\nconst char *VRT_bool_string(const struct sess *sp, " + "unsigned);\nconst char *VRT_backend_string(const struct sess " + "*sp, const struct director *d);\n\n#define VRT_done(sp, hand)\t" + "\t\t\\\n\tdo {\t\t\t\t\t\\\n\t\tVRT_handling(sp, hand);\t\t" + "\\\n\t\treturn (1);\t\t\t\\\n\t} while (0)\n\nconst char *VRT_Wr" + "kString(const struct sess *sp, const char *p, ...);\n" ); /* ../include/vrt_obj.h */ | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_token.c ^ |
@@ -492,7 +492,7 @@ continue; } - /* Match strings, with \\ and \" escapes */ + /* Match strings */ if (*p == '"') { for (q = p + 1; q < sp->e; q++) { if (*q == '"') { | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvcl/vcc_vmod.c ^ |
@@ -102,13 +102,15 @@ Fh(tl, 0, "static void *VGC_vmod_%.*s;\n", PF(mod)); - Fi(tl, 0, "\tVRT_Vmod_Init(&VGC_vmod_%.*s,\n", PF(mod)); + Fi(tl, 0, "\tif (VRT_Vmod_Init(&VGC_vmod_%.*s,\n", PF(mod)); Fi(tl, 0, "\t &Vmod_Func_%.*s,\n", PF(mod)); Fi(tl, 0, "\t sizeof(Vmod_Func_%.*s),\n", PF(mod)); Fi(tl, 0, "\t \"%.*s\",\n", PF(mod)); Fi(tl, 0, "\t "); EncString(tl->fi, fn, NULL, 0); - Fi(tl, 0, ");\n"); + Fi(tl, 0, ",\n\t "); + Fi(tl, 0, "cli))\n"); + Fi(tl, 0, "\t\treturn(1);\n"); SkipToken(tl, ';'); | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvmod_std/vcc_if.c ^ |
@@ -97,4 +97,5 @@ 0 }; const char Vmod_Varnish_ABI[] = VMOD_ABI_Version; +const void * const Vmod_Id = &Vmod_Id; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvmod_std/vcc_if.h ^ |
@@ -20,3 +20,4 @@ int vmod_integer(struct sess *, const char *, int); void vmod_collect(struct sess *, enum gethdr_e, const char *); int init_function(struct vmod_priv *, const struct VCL_conf *); +extern const void * const Vmod_Id; | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/lib/libvmod_std/vmod.py ^ |
@@ -308,5 +308,9 @@ fc.write('const char * const Vmod_Spec[] = {\n' + slist + '\t0\n};\n') fc.write('const char Vmod_Varnish_ABI[] = VMOD_ABI_Version;\n') + +fh.write('extern const void * const Vmod_Id;\n') +fc.write('const void * const Vmod_Id = &Vmod_Id;\n') + fc.write("\n") | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/ltmain.sh ^ |
@@ -69,7 +69,7 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4 Debian-2.4-3 +# $progname: (GNU libtool) 2.4 Debian-2.4-4 # automake: $automake_version # autoconf: $autoconf_version # @@ -79,7 +79,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4 Debian-2.4-3" +VERSION="2.4 Debian-2.4-4" TIMESTAMP="" package_revision=1.3293 | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/man/Makefile.am ^ |
@@ -1,6 +1,14 @@ # -dist_man_MANS = vcl.7 varnish-cli.7 +if HAVE_RST2MAN +noinst_PROGRAMS = vsc2rst +endif +vsc2rst_SOURCES = vsc2rst.c \ + $(top_srcdir)/include/vsc_fields.h + +INCLUDES = -I$(top_srcdir)/include + +dist_man_MANS = vcl.7 varnish-cli.7 varnish-counters.7 MAINTAINERCLEANFILES = $(dist_man_MANS) vcl.7: $(top_srcdir)/doc/sphinx/reference/vcl.rst \ @@ -21,5 +29,16 @@ @echo "========================================" @echo "You need rst2man installed to make dist" @echo "========================================" + @false +endif + +if HAVE_RST2MAN +varnish-counters.7: vsc2rst + ./vsc2rst | ${RST2MAN} - $@ +else +varnish-counters.7: $(top_srcdir)/include/vsc_fields.h + @echo "========================================" + @echo "You need rst2man installed to make dist" + @echo "========================================" @false endif | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/man/Makefile.in ^ |
@@ -16,6 +16,7 @@ @SET_MAKE@ # + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ @@ -36,6 +37,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +@HAVE_RST2MAN_TRUE@noinst_PROGRAMS = vsc2rst$(EXEEXT) subdir = man DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -51,8 +53,25 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = -SOURCES = -DIST_SOURCES = +PROGRAMS = $(noinst_PROGRAMS) +am_vsc2rst_OBJECTS = vsc2rst.$(OBJEXT) +vsc2rst_OBJECTS = $(am_vsc2rst_OBJECTS) +vsc2rst_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(vsc2rst_SOURCES) +DIST_SOURCES = $(vsc2rst_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -78,6 +97,8 @@ am__installdirs = "$(DESTDIR)$(man7dir)" NROFF = nroff MANS = $(dist_man_MANS) +ETAGS = etags +CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -224,11 +245,16 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ varnishconfdir = @varnishconfdir@ -dist_man_MANS = vcl.7 varnish-cli.7 +vsc2rst_SOURCES = vsc2rst.c \ + $(top_srcdir)/include/vsc_fields.h + +INCLUDES = -I$(top_srcdir)/include +dist_man_MANS = vcl.7 varnish-cli.7 varnish-counters.7 MAINTAINERCLEANFILES = $(dist_man_MANS) all: all-am .SUFFIXES: +.SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -260,6 +286,47 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +vsc2rst$(EXEEXT): $(vsc2rst_OBJECTS) $(vsc2rst_DEPENDENCIES) + @rm -f vsc2rst$(EXEEXT) + $(LINK) $(vsc2rst_OBJECTS) $(vsc2rst_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsc2rst.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + mostlyclean-libtool: -rm -f *.lo @@ -303,12 +370,58 @@ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man7dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man7dir)" && rm -f $$files; } + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique tags: TAGS -TAGS: +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi ctags: CTAGS -CTAGS: +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ @@ -355,7 +468,7 @@ done check-am: all-am check: check-am -all-am: Makefile $(MANS) +all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(man7dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -388,11 +501,14 @@ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am -clean-am: clean-generic clean-libtool mostlyclean-am +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am distclean: distclean-am + -rm -rf ./$(DEPDIR) -rm -f Makefile -distclean-am: clean-am distclean-generic +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags dvi: dvi-am @@ -435,12 +551,14 @@ installcheck-am: maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am -mostlyclean-am: mostlyclean-generic mostlyclean-libtool +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf: pdf-am @@ -456,17 +574,19 @@ .MAKE: install-am install-strip -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - distclean distclean-generic distclean-libtool distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dvi install-dvi-am \ - install-exec install-exec-am install-html install-html-am \ - install-info install-info-am install-man install-man7 \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-man uninstall-man7 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man7 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-man uninstall-man7 vcl.7: $(top_srcdir)/doc/sphinx/reference/vcl.rst \ @@ -482,6 +602,14 @@ @HAVE_RST2MAN_FALSE@ @echo "========================================" @HAVE_RST2MAN_FALSE@ @echo "You need rst2man installed to make dist" @HAVE_RST2MAN_FALSE@ @echo "========================================" +@HAVE_RST2MAN_FALSE@ @false + +@HAVE_RST2MAN_TRUE@varnish-counters.7: vsc2rst +@HAVE_RST2MAN_TRUE@ ./vsc2rst | ${RST2MAN} - $@ +@HAVE_RST2MAN_FALSE@varnish-counters.7: $(top_srcdir)/include/vsc_fields.h +@HAVE_RST2MAN_FALSE@ @echo "========================================" +@HAVE_RST2MAN_FALSE@ @echo "You need rst2man installed to make dist" +@HAVE_RST2MAN_FALSE@ @echo "========================================" @HAVE_RST2MAN_FALSE@ @false # Tell versions [3.59,3.63) of GNU make to not export all variables. | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/man/varnish-cli.7 ^ |
@@ -40,28 +40,23 @@ .INDENT 0.0 .TP .B configuration -. You can upload, change and delete VCL files from the CLI. .TP .B parameters -. You can inspect and change the various parameters Varnish has available through the CLI. The individual parameters are documented in the varnishd(1) man page. .TP .B statistics -. Statistic counters are available from the CLI. .TP .B bans -. Bans are filters that are applied to keep Varnish from serving stale content. When you issue a ban Varnish will not serve any \fIbanned\fP object from cache, but rather re\-fetch it from its backend servers. .TP .B process management -. You can stop and start the cache (child) process though the CLI. You can also retrieve the lastst stack trace if the child process has crashed. @@ -105,18 +100,15 @@ .INDENT 0.0 .TP .B help [command] -. Display a list of available commands. .sp If the command is specified, display help for this command. .TP .B param.set param value -. Set the parameter specified by param to the specified value. See Run\-Time Parameters for a list of parame‐ ters. .TP .B param.show [\-l] [param] -. Display a list if run\-time parameters and their values. .sp If the \-l option is specified, the list includes a brief @@ -126,17 +118,14 @@ for this parameter. .TP .B ping [timestamp] -. Ping the Varnish cache process, keeping the connection alive. .TP .B ban \fIfield operator argument\fP [&& field operator argument [...]] -.sp Immediately invalidate all documents matching the ban expression. See \fIBan Expressions\fP for more documentation and examples. .TP .B ban.list -. All requests for objects from the cache are matched against items on the ban list. If an object in the cache is older than a matching ban list item, it is considered "banned", and will be @@ -168,7 +157,6 @@ Then follows the actual ban it self. .TP .B ban.url regexp -. Immediately invalidate all documents whose URL matches the specified regular expression. Please note that the Host part of the URL is ignored, so if you have several virtual hosts all of @@ -176,15 +164,12 @@ need to narrow it down. .TP .B quit -. Close the connection to the varnish admin port. .TP .B start -. Start the Varnish cache process if it is not already running. .TP .B stats -. Show summary statistics. .sp All the numbers presented are totals since server startup; for a @@ -192,41 +177,33 @@ utility. .TP .B status -. Check the status of the Varnish cache process. .TP .B stop -. Stop the Varnish cache process. .TP .B vcl.discard configname -. Discard the configuration specified by configname. This will have no effect if the specified configuration has a non\-zero reference count. .TP .B vcl.inline configname vcl -. Create a new configuration named configname with the VCL code specified by vcl, which must be a quoted string. .TP .B vcl.list -. List available configurations and their respective reference counts. The active configuration is indicated with an asterisk ("*"). .TP .B vcl.load configname filename -. Create a new configuration named configname with the contents of the specified file. .TP .B vcl.show configname -. Display the source code for the specified configuration. .TP .B vcl.use configname -. Start using the configuration specified by configname for all new requests. Existing requests will con‐ tinue using whichever configuration was in use when they arrived. @@ -307,19 +284,14 @@ following byte sequence: .INDENT 0.0 .IP \(bu 2 -. Challenge string .IP \(bu 2 -. Newline (0x0a) character. .IP \(bu 2 -. Contents of the secret file .IP \(bu 2 -. Challenge string .IP \(bu 2 -. Newline (0x0a) character. .UNINDENT .sp @@ -383,13 +355,10 @@ .SH SEE ALSO .INDENT 0.0 .IP \(bu 2 -. varnishd(1) .IP \(bu 2 -. vanrishadm(1) .IP \(bu 2 -. vcl(7) .UNINDENT .SH HISTORY @@ -403,7 +372,6 @@ itself. See LICENCE for details. .INDENT 0.0 .IP \(bu 2 -. Copyright (c) 2011 Varnish Software AS .UNINDENT .SH AUTHOR | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/man/varnish-counters.7 ^ |
@@ -0,0 +1,280 @@ +.\" Man page generated from reStructeredText. +. +.TH VARNISH-COUNTERS 7 "2011-09-20" "1.0" "" +.SH NAME +varnish-counters \- Varnish counter field definitions +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.SH MAIN COUNTERS +.sp +client_conn – Client connections accepted +.sp +client_drop – Connection dropped, no sess/wrk +.sp +client_req – Client requests received +.sp +cache_hit – Cache hits +.sp +cache_hitpass – Cache hits for pass +.sp +cache_miss – Cache misses +.sp +backend_conn – Backend conn. success +.sp +backend_unhealthy – Backend conn. not attempted +.sp +backend_busy – Backend conn. too many +.sp +backend_fail – Backend conn. failures +.sp +backend_reuse – Backend conn. reuses +.sp +backend_toolate – Backend conn. was closed +.sp +backend_recycle – Backend conn. recycles +.sp +backend_retry – Backend conn. retry +.sp +fetch_head – Fetch head +.sp +fetch_length – Fetch with Length +.sp +fetch_chunked – Fetch chunked +.sp +fetch_eof – Fetch EOF +.sp +fetch_bad – Fetch had bad headers +.sp +fetch_close – Fetch wanted close +.sp +fetch_oldhttp – Fetch pre HTTP/1.1 closed +.sp +fetch_zero – Fetch zero len +.sp +fetch_failed – Fetch failed +.sp +fetch_1xx – Fetch no body (1xx) +.sp +fetch_204 – Fetch no body (204) +.sp +fetch_304 – Fetch no body (304) +.sp +n_sess_mem – N struct sess_mem +.sp +n_sess – N struct sess +.sp +n_object – N struct object +.sp +n_vampireobject – N unresurrected objects +.sp +n_objectcore – N struct objectcore +.sp +n_objecthead – N struct objecthead +.sp +n_waitinglist – N struct waitinglist +.sp +n_vbc – N struct vbc +.sp +n_wrk – N worker threads +.sp +n_wrk_create – N worker threads created +.sp +n_wrk_failed – N worker threads not created +.sp +n_wrk_max – N worker threads limited +.sp +n_wrk_lqueue – work request queue length +.sp +n_wrk_queued – N queued work requests +.sp +n_wrk_drop – N dropped work requests +.sp +n_backend – N backends +.sp +n_expired – N expired objects +.sp +n_lru_nuked – N LRU nuked objects +.sp +n_lru_moved – N LRU moved objects +.sp +losthdr – HTTP header overflows +.sp +n_objsendfile – Objects sent with sendfile +.sp +n_objwrite – Objects sent with write +.sp +n_objoverflow – Objects overflowing workspace +.sp +s_sess – Total Sessions +.sp +s_req – Total Requests +.sp +s_pipe – Total pipe +.sp +s_pass – Total pass +.sp +s_fetch – Total fetch +.sp +s_hdrbytes – Total header bytes +.sp +s_bodybytes – Total body bytes +.sp +sess_closed – Session Closed +.sp +sess_pipeline – Session Pipeline +.sp +sess_readahead – Session Read Ahead +.sp +sess_linger – Session Linger +.sp +sess_herd – Session herd +.sp +shm_records – SHM records +.sp +shm_writes – SHM writes +.sp +shm_flushes – SHM flushes due to overflow +.sp +shm_cont – SHM MTX contention +.sp +shm_cycles – SHM cycles through buffer +.sp +sms_nreq – SMS allocator requests +.sp +sms_nobj – SMS outstanding allocations +.sp +sms_nbytes – SMS outstanding bytes +.sp +sms_balloc – SMS bytes allocated +.sp +sms_bfree – SMS bytes freed +.sp +backend_req – Backend requests made +.sp +n_vcl – N vcl total +.sp +n_vcl_avail – N vcl available +.sp +n_vcl_discard – N vcl discarded +.sp +n_ban – N total active bans +.sp +n_ban_add – N new bans added +.sp +n_ban_retire – N old bans deleted +.sp +n_ban_obj_test – N objects tested +.sp +n_ban_re_test – N regexps tested against +.sp +n_ban_dups – N duplicate bans removed +.sp +hcb_nolock – HCB Lookups without lock +.sp +hcb_lock – HCB Lookups with lock +.sp +hcb_insert – HCB Inserts +.sp +esi_errors – ESI parse errors (unlock) +.sp +esi_warnings – ESI parse warnings (unlock) +.sp +accept_fail – Accept failures +.sp +client_drop_late – Connection dropped late +.sp +uptime – Client uptime +.sp +dir_dns_lookups – DNS director lookups +.sp +dir_dns_failed – DNS director failed lookups +.sp +dir_dns_hit – DNS director cached lookups hit +.sp +dir_dns_cache_full – DNS director full dnscache +.sp +vmods – Loaded VMODs +.sp +n_gzip – Gzip operations +.sp +n_gunzip – Gunzip operations +.SH LOCK COUNTERS +.sp +creat – Created locks +.sp +destroy – Destroyed locks +.sp +locks – Lock Operations +.sp +colls – Collisions +.SH PER MALLOC STORAGE COUNTERS +.sp +c_req – Allocator requests +.sp +c_fail – Allocator failures +.sp +c_bytes – Bytes allocated +.sp +c_freed – Bytes freed +.sp +g_alloc – Allocations outstanding +.sp +g_bytes – Bytes outstanding +.sp +g_space – Bytes available +.SH PER FILE STORAGE COUNTERS +.sp +c_req – Allocator requests +.sp +c_fail – Allocator failures +.sp +c_bytes – Bytes allocated +.sp +c_freed – Bytes freed +.sp +g_alloc – Allocations outstanding +.sp +g_bytes – Bytes outstanding +.sp +g_space – Bytes available +.sp +g_smf – N struct smf +.sp +g_smf_frag – N small free smf +.sp +g_smf_large – N large free smf +.SH PER BACKEND COUNTERS +.sp +vcls – VCL references +.sp +happy – Happy health probes +.SH AUTHOR +Tollef Fog Heen +.\" Generated by docutils manpage writer. +.\" +. | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/man/vcl.7 ^ |
@@ -50,6 +50,12 @@ boolean (!, && and ||) operators, VCL supports both regular expression and ACL matching using the ~ and the !~ operators. .sp +Basic strings are enclosed in " ... ", and may not contain newlines. +.sp +Long strings are enclosed in {" ... "}. They may contain any +character including ", newline and other control characters except +for the NUL (0x00) character. +.sp Unlike C and Perl, the backslash () character has no special meaning in strings in VCL, so it can be freely used in regular expressions without doubling. @@ -66,38 +72,37 @@ remove headers with the \fIremove\fP or \fIunset\fP keywords, which are synonym. .sp +You can use the \fIrollback\fP keyword to revert any changes to req at +any time. +.sp +The \fIsynthetic\fP keyword is used to produce a synthetic response +body in vcl_error. It takes a single string as argument. +.sp +You can force a crash of the client process with the \fIpanic\fP keyword. +\fIpanic\fP takes a string as argument. +.sp The \fBreturn(action)\fP keyword terminates the subroutine. \fIaction\fP can be, depending on context one of .INDENT 0.0 .IP \(bu 2 -. deliver .IP \(bu 2 -. error .IP \(bu 2 -. fetch .IP \(bu 2 -. hash .IP \(bu 2 -. hit_for_pass .IP \(bu 2 -. lookup .IP \(bu 2 -. ok .IP \(bu 2 -. pass .IP \(bu 2 -. pipe .IP \(bu 2 -. restart .UNINDENT .sp @@ -191,31 +196,34 @@ } .ft P .fi -.SS The random director +.SS The family of random directors .sp -The random director takes one per director option .retries. This -specifies how many tries it will use to find a working backend. The -default is the same as the number of backends defined for the -director. -.sp -There is also a per\-backend option: weight which defines the portion -of traffic to send to the particular backend. -.SS The round\-robin director +There are three directors that share the same logic, called the random +director, client director and hash director. They each distribute traffic +among the backends assigned to it using a random distribution seeded with +either the client identity, a random number or the cache hash (typically +url). Beyond the initial seed, they act the same. +.sp +Each backend requires a .weight option which sets the amount of traffic +each backend will get compared to the others. Equal weight means equal +traffic. A backend with lower weight than an other will get proportionally +less traffic. +.sp +The director has an optional .retries option which defaults to the number +of backends the director has. The director will attempt .retries times to +find a healthy backend if the first attempt fails. Each attempt re\-uses the +previous seed in an iterative manner. For the random director this detail +is of no importance as it will give different results each time. For the +hash and client director, this means the same URL or the same client will +fail to the same server consistently. +.SS The random director .sp -The round\-robin director does not take any options. +This uses a random number to seed the backend selection. .SS The client director .sp The client director picks a backend based on the clients \fIidentity\fP. You can set the VCL variable \fIclient.identity\fP to identify the client by picking up the value of a session cookie or similar. -.sp -Note: from 2.1.0 to 2.1.3 \fIclient.identity\fP isn\(aqt available and the -director will use automatically set the idenity based on client.ip In -2.1.4 and onwards you can set client.identity to any string available. -.sp -The client director takes one option \- \fIretries\fP which set the number -of retries the director should take in order to find a healthy -backend. .SS The hash director .sp The hash director will pick a backend based on the URL hash @@ -225,12 +233,20 @@ other Varnish caches or other web accelerators as objects won\(aqt be duplicated across caches. .sp -The client director takes one option \- \fIretries\fP which set the number -of retries the director should take in order to find a healthy -backend. +It will use the value of req.hash, just as the normal cache\-lookup methods. +.SS The round\-robin director +.sp +The round\-robin director does not take any options. +.sp +It will use the first backend for the first request, the second backend for +the second request and so on, and start from the top again when it gets to +the end. +.sp +If a backend is unhealthy or Varnish fails to connect, it will be skipped. +The round\-robin director will try all the backends once before giving up. .SS The DNS director .sp -The DNS director can use backends in three different ways. Either like the +The DNS director can use backends in two different ways. Either like the random or round\-robin director or using .list: .sp .nf @@ -239,7 +255,7 @@ .list = { .host_header = "www.example.com"; .port = "80"; - .connect_timeout = 0.4; + .connect_timeout = 0.4s; "192.168.15.0"/24; "192.168.16.128"/25; } @@ -251,12 +267,21 @@ .sp This will specify 384 backends, all using port 80 and a connection timeout of 0.4s. Options must come before the list of IPs in the .list statement. +The .list\-method does not support IPv6. It is not a white\-list, it is an +actual list of backends that will be created internally in Varnish \- the +larger subnet the more overhead. .sp The .ttl defines the cache duration of the DNS lookups. .sp The above example will append "internal.example.net" to the incoming Host header supplied by the client, before looking it up. All settings are optional. +.sp +Health checks are not thoroughly supported. +.sp +DNS round robin balancing is supported. If a hostname resolves to multiple +backends, the director will divide the traffic between all of them in a +round\-robin manner. .SS The fallback director .sp The fallback director will pick the first backend that is healthy. It @@ -280,11 +305,45 @@ .sp Backends can be probed to see whether they should be considered healthy or not. The return status can also be checked by using -req.backend.healthy .window is how many of the latest polls we -examine, while .threshold is how many of those must have succeeded for -us to consider the backend healthy. .initial is how many of the -probes are considered good when Varnish starts \- defaults to the same -amount as the threshold. +req.backend.healthy. +.sp +Probes take the following parameters: +.INDENT 0.0 +.TP +.B .url +Specify a URL to request from the backend. +Defaults to "/". +.TP +.B .request +Specify a full HTTP request using multiple strings. .request will +have \er\en automatically inserted after every string. +If specified, .request will take precedence over .url. +.TP +.B .window +How many of the latest polls we examine to determine backend health. +Defaults to 8. +.TP +.B .threshold +How many of the polls in .window must have succeeded for us to consider +the backend healthy. +Defaults to 3. +.TP +.B .initial +How many of the probes are considered good when Varnish starts. +Defaults to the same amount as the threshold. +.TP +.B .expected_response +The expected backend HTTP response code. +Defaults to 200. +.TP +.B .interval +Defines how often the probe should check the backend. +Default is every 5 seconds. +.TP +.B .timeout +How fast each probe times out. +Default is 2 seconds. +.UNINDENT .sp A backend with a probe can be defined like this, together with the backend or director:: @@ -316,6 +375,7 @@ .window = 8; .threshold = 3; .initial = 3; + .expected_response = 200; } backend www { @@ -394,12 +454,10 @@ .INDENT 0.0 .TP .B hash_data(str) -. Adds a string to the hash input. In default.vcl hash_data() is called on the host and URL of the \fIrequest\fP. .TP .B regsub(str, regex, sub) -. Returns a copy of str with the first occurrence of the regular expression regex replaced with sub. Within sub, 0 (which can also be spelled &) is replaced with the entire matched string, @@ -407,7 +465,6 @@ matched string. .TP .B regsuball(str, regex, sub) -. As regsuball() but this replaces all occurrences. .UNINDENT .sp @@ -415,7 +472,6 @@ .INDENT 0.0 .TP .B ban_url(regex) -. Bans all objects in cache whose URLs match regex. .UNINDENT .SS Subroutines @@ -447,7 +503,6 @@ .INDENT 0.0 .TP .B vcl_init -. Called when VCL is loaded, before any requests pass through it. Typically used to initialize VMODs. .sp @@ -455,12 +510,10 @@ .INDENT 7.0 .TP .B ok -. Normal return, VCL continues loading. .UNINDENT .TP .B vcl_recv -. Called at the beginning of a request, after the complete request has been received and parsed. Its purpose is to decide whether or not to serve the request, how to do it, and, if applicable, which backend @@ -471,26 +524,21 @@ .INDENT 7.0 .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B pass -. Switch to pass mode. Control will eventually pass to vcl_pass. .TP .B pipe -. Switch to pipe mode. Control will eventually pass to vcl_pipe. .TP .B lookup -. Look up the requested object in the cache. Control will eventually pass to vcl_hit or vcl_miss, depending on whether the object is in the cache. .UNINDENT .TP .B vcl_pipe -. Called upon entering pipe mode. In this mode, the request is passed on to the backend, and any further data from either client or backend is passed on unaltered until either end closes the @@ -501,16 +549,13 @@ .INDENT 7.0 .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B pipe -. Proceed with pipe mode. .UNINDENT .TP .B vcl_pass -. Called upon entering pass mode. In this mode, the request is passed on to the backend, and the backend\(aqs response is passed on to the client, but is not entered into the cache. Subsequent requests sub‐ @@ -521,22 +566,18 @@ .INDENT 7.0 .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B pass -. Proceed with pass mode. .TP .B restart -. Restart the transaction. Increases the restart counter. If the number of restarts is higher than \fImax_restarts\fP varnish emits a guru meditation error. .UNINDENT .TP .B vcl_hash -. You may call hash_data() on the data you would like to add to the hash. .sp The vcl_hash subroutine may terminate with calling return() with one of @@ -544,12 +585,10 @@ .INDENT 7.0 .TP .B hash -. Proceed. .UNINDENT .TP .B vcl_hit -. Called after a cache lookup if the requested document was found in the cache. .sp The vcl_hit subroutine may terminate with calling return() with one of @@ -557,27 +596,22 @@ .INDENT 7.0 .TP .B deliver -. Deliver the cached object to the client. Control will eventually pass to vcl_deliver. .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B pass -. Switch to pass mode. Control will eventually pass to vcl_pass. .TP .B restart -. Restart the transaction. Increases the restart counter. If the number of restarts is higher than \fImax_restarts\fP varnish emits a guru meditation error. .UNINDENT .TP .B vcl_miss -. Called after a cache lookup if the requested document was not found in the cache. Its purpose is to decide whether or not to attempt to retrieve the document from the backend, and which backend to use. @@ -587,21 +621,17 @@ .INDENT 7.0 .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B pass -. Switch to pass mode. Control will eventually pass to vcl_pass. .TP .B fetch -. Retrieve the requested object from the backend. Control will eventually pass to vcl_fetch. .UNINDENT .TP .B vcl_fetch -. Called after a document has been successfully retrieved from the backend. .sp The vcl_fetch subroutine may terminate with calling return() with @@ -609,16 +639,13 @@ .INDENT 7.0 .TP .B deliver -. Possibly insert the object into the cache, then deliver it to the client. Control will eventually pass to vcl_deliver. .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B hit_for_pass -. Pass in fetch. This will create a hit_for_pass object. Note that the TTL for the hit_for_pass object will be set to what the current value of beresp.ttl. Control will be handled to @@ -626,14 +653,12 @@ go directly to vcl_pass based on the hit_for_pass object. .TP .B restart -. Restart the transaction. Increases the restart counter. If the number of restarts is higher than \fImax_restarts\fP varnish emits a guru meditation error. .UNINDENT .TP .B vcl_deliver -. Called before a cached object is delivered to the client. .sp The vcl_deliver subroutine may terminate with one of the following @@ -641,22 +666,18 @@ .INDENT 7.0 .TP .B deliver -. Deliver the object to the client. .TP .B error code [reason] -. Return the specified error code to the client and abandon the request. .TP .B restart -. Restart the transaction. Increases the restart counter. If the number of restarts is higher than \fImax_restarts\fP varnish emits a guru meditation error. .UNINDENT .TP .B vcl_error -. Called when we hit an error, either explicitly or implicitly due to backend or internal errors. .sp @@ -665,18 +686,15 @@ .INDENT 7.0 .TP .B deliver -. Deliver the error object to the client. .TP .B restart -. Restart the transaction. Increases the restart counter. If the number of restarts is higher than \fImax_restarts\fP varnish emits a guru meditation error. .UNINDENT .TP .B vcl_fini -. Called when VCL is discarded only after all requests have exited the VCL. Typically used to clean up VMODs. .sp @@ -684,7 +702,6 @@ .INDENT 7.0 .TP .B ok -. Normal return, VCL will be discarded. .UNINDENT .UNINDENT @@ -736,7 +753,6 @@ .INDENT 0.0 .TP .B now -. The current time, in seconds since the epoch. .UNINDENT .sp @@ -744,11 +760,9 @@ .INDENT 0.0 .TP .B .host -.sp Host name or IP address of a backend. .TP .B .port -.sp Service name or port number of a backend. .UNINDENT .sp @@ -756,67 +770,73 @@ .INDENT 0.0 .TP .B client.ip -. The client\(aqs IP address. .TP +.B client.identity +Identification of the client, used to load balance in the client director. +.TP .B server.hostname -. The host name of the server. .TP .B server.identity -. The identity of the server, as set by the \-i parameter. If the \-i parameter is not passed to varnishd, server.identity will be set to the name of the instance, as specified by the \-n parameter. .TP .B server.ip -. The IP address of the socket on which the client connection was received. .TP .B server.port -. The port number of the socket on which the client connection was received. .TP .B req.request -. The request type (e.g. "GET", "HEAD"). .TP .B req.url -. The requested URL. .TP .B req.proto -. The HTTP protocol version used by the client. .TP .B req.backend -. The backend to use to service the request. .TP .B req.backend.healthy -. Whether the backend is healthy or not. Requires an active probe to be set on the backend. .TP .B req.http.header -. The corresponding HTTP header. .TP .B req.hash_always_miss -. Force a cache miss for this request. If set to true Varnish will disregard any existing objects and always (re)fetch from the backend. .TP .B req.hash_ignore_busy -. Ignore any busy object during cache lookup. You would want to do this if you have two server looking up content from each other to avoid potential deadlocks. .TP .B req.can_gzip -. Does the client accept the gzip transfer encoding. +.TP +.B req.restarts +A count of how many times this request has been restarted. +.TP +.B req.esi +Boolean. Set to false to disable ESI processing regardless of any +value in beresp.do_esi. Defaults to true. This variable is subject +to change in future versions, you should avoid using it. +.TP +.B req.esi_level +A count of how many levels of ESI requests we\(aqre currently at. +.TP +.B req.grace +Set to a period to enable grace. +.TP +.B req.xid +Unique ID of this request. .UNINDENT .sp The following variables are available while preparing a backend @@ -824,32 +844,25 @@ .INDENT 0.0 .TP .B bereq.request -. The request type (e.g. "GET", "HEAD"). .TP .B bereq.url -. The requested URL. .TP .B bereq.proto -. The HTTP protocol version used to talk to the server. .TP .B bereq.http.header -. The corresponding HTTP header. .TP .B bereq.connect_timeout -. The time in seconds to wait for a backend connection. .TP .B bereq.first_byte_timeout -. The time in seconds to wait for the first byte from the backend. Not available in pipe mode. .TP .B bereq.between_bytes_timeout -. The time in seconds to wait between each received byte from the backend. Not available in pipe mode. .UNINDENT @@ -860,41 +873,53 @@ .INDENT 0.0 .TP .B beresp.do_stream -. Deliver the object to the client directly without fetching the whole object into varnish. If this request is pass\(aqed it will not be stored in memory. As of Varnish Cache 3.0 the object will marked as busy as it is delivered so only client can access the object. .TP .B beresp.do_esi -. -Boolean. ESI\-process the object after fetching it. Defaults to false. Set it -to true to parse the object for ESI directives. +Boolean. ESI\-process the object after fetching it. Defaults to +false. Set it to true to parse the object for ESI directives. Will +only be honored if req.esi is true. .TP .B beresp.do_gzip -. Boolean. Gzip the object before storing it. Defaults to false. .TP .B beresp.do_gunzip -. Boolean. Unzip the object before storing it in the cache. Defaults to false. .TP .B beresp.proto -. The HTTP protocol version used the backend replied with. .TP .B beresp.status -. The HTTP status code returned by the server. .TP .B beresp.response -. The HTTP status message returned by the server. .TP .B beresp.ttl -. The object\(aqs remaining time to live, in seconds. beresp.ttl is writable. +.TP +.B beresp.grace +Set to a period to enable grace. +.TP +.B beresp.saintmode +Set to a period to enable saint mode. +.TP +.B beresp.backend.name +Name of the backend this response was fetched from. +.TP +.B beresp.backend.ip +IP of the backend this response was fetched from. +.TP +.B beresp.backend.port +Port of the backend this response was fetched from. +.TP +.B beresp.storage +Set to force Varnish to save this object to a particular storage +backend. .UNINDENT .sp After the object is entered into the cache, the following (mostly @@ -903,30 +928,30 @@ .INDENT 0.0 .TP .B obj.proto -. The HTTP protocol version used when the object was retrieved. .TP .B obj.status -. The HTTP status code returned by the server. .TP .B obj.response -. The HTTP status message returned by the server. .TP .B obj.ttl -. The object\(aqs remaining time to live, in seconds. obj.ttl is writable. .TP .B obj.lastuse -. The approximate time elapsed since the object was last requests, in seconds. .TP .B obj.hits -. The approximate number of times the object has been delivered. A value of 0 indicates a cache miss. +.TP +.B obj.grace +The object\(aqs grace period in seconds. obj.grace is writable. +.TP +.B obj.http.header +The corresponding HTTP header. .UNINDENT .sp The following variables are available while determining the hash key @@ -934,7 +959,6 @@ .INDENT 0.0 .TP .B req.hash -. The hash key used to refer to an object in the cache. Used when both reading from and writing to the cache. .UNINDENT @@ -943,19 +967,15 @@ .INDENT 0.0 .TP .B resp.proto -. The HTTP protocol version to use for the response. .TP .B resp.status -. The HTTP status code that will be returned. .TP .B resp.response -. The HTTP status message that will be returned. .TP .B resp.http.header -. The corresponding HTTP header. .UNINDENT .sp @@ -1283,10 +1303,8 @@ .SH SEE ALSO .INDENT 0.0 .IP \(bu 2 -. varnishd(1) .IP \(bu 2 -. vmod_std(7) .UNINDENT .SH HISTORY @@ -1297,14 +1315,12 @@ and Per Buer. .SH COPYRIGHT .sp -This document is licensed under the same licence as Varnish -itself. See LICENCE for details. +This document is licensed under the same license as Varnish +itself. See LICENSE for details. .INDENT 0.0 .IP \(bu 2 -. Copyright (c) 2006 Verdens Gang AS .IP \(bu 2 -. Copyright (c) 2006\-2011 Varnish Software AS .UNINDENT .SH AUTHOR | ||
[-] [+] | Added | varnish-3.0.2.tar.bz2/man/vsc2rst.c ^ |
@@ -0,0 +1,67 @@ + +#include <stdio.h> + +#define P(x, ...) printf(x "\n", ##__VA_ARGS__) +#define VSC_F(n, t, l, f, e, d) printf("%s – %s\n\t%s\n\n", #n, e, d); + +int main(int argc, char **argv) +{ + (void)argc; + (void)argv; + P("================"); + P("varnish-counters"); + P("================"); + P(""); + + P("---------------------------------"); + P("Varnish counter field definitions"); + P("---------------------------------"); + + P(":Author: Tollef Fog Heen"); + P(":Date: 2011-09-20"); + P(":Version: 1.0"); + P(":Manual section: 7"); + P(""); + + P("MAIN COUNTERS"); + P("============="); + P(""); +#define VSC_DO_MAIN +#include "vsc_fields.h" +#undef VSC_DO_MAIN + + P(""); + P("LOCK COUNTERS"); + P("============="); + P(""); +#define VSC_DO_LCK +#include "vsc_fields.h" +#undef VSC_DO_LCK + + P(""); + P("PER MALLOC STORAGE COUNTERS"); + P("==========================="); + P(""); +#define VSC_DO_SMA +#include "vsc_fields.h" +#undef VSC_DO_SMA + + P(""); + P("PER FILE STORAGE COUNTERS"); + P("========================="); + P(""); +#define VSC_DO_SMF +#include "vsc_fields.h" +#undef VSC_DO_SMF + + P(""); + P("PER BACKEND COUNTERS"); + P("===================="); + P(""); +#define VSC_DO_VBE +#include "vsc_fields.h" +#undef VSC_DO_VBE + + return 0; +} + | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/redhat/varnish.spec ^ |
@@ -1,12 +1,13 @@ +#% define v_rc "" Summary: High-performance HTTP accelerator Name: varnish -Version: 3.0.1 +Version: 3.0.2 Release: 1%{?dist} License: BSD Group: System Environment/Daemons URL: http://www.varnish-cache.org/ #Source0: http://repo.varnish-cache.org/source/%{name}-%{version}.tar.gz -Source0: %{name}-%{version}.tar.gz +Source0: %{name}-%{version}%{?v_rc:-%{v_rc}}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # To build from git, start with a make dist, see redhat/README.redhat # You will need at least automake autoconf libtool python-docutils @@ -72,7 +73,7 @@ %prep #%setup -q -%setup -q -n varnish-%{version} +%setup -q -n varnish-%{version}%{?v_rc:-%{?v_rc}} mkdir examples cp bin/varnishd/default.vcl etc/zope-plone.vcl examples @@ -87,9 +88,9 @@ # Remove "--disable static" if you want to build static libraries # jemalloc is not compatible with Red Hat's ppc64 RHEL kernel :-( %ifarch ppc64 ppc - %configure --disable-static --localstatedir=/var/lib --disable-jemalloc + %configure --disable-static --localstatedir=/var/lib --without-jemalloc %else - %configure --disable-static --localstatedir=/var/lib + %configure --disable-static --localstatedir=/var/lib --without-rst2man --without-rst2html %endif # We have to remove rpath - not allowed in Fedora @@ -369,7 +370,7 @@ - Whitespace changes to make rpmlint more happy * Fri Sep 12 2008 Ingvar Hagelund <ingvar@linpro.no> - 2.0-0.9.20080912svn3184 -- Added varnisnsca init script (Colin Hill) +- Added varnisncsa init script (Colin Hill) - Corrected varnishlog init script (Colin Hill) * Tue Sep 09 2008 Ingvar Hagelund <ingvar@linpro.no> - 2.0-0.8.beta1 | ||
[-] [+] | Changed | varnish-3.0.2.tar.bz2/redhat/varnishncsa.initrc ^ |
@@ -1,6 +1,6 @@ #! /bin/sh # -# varnishncsa Control the Varnish NSCA logging daemon +# varnishncsa Control the Varnish NCSA logging daemon # # chkconfig: - 90 10 # description: Varnish Cache logging daemon @@ -15,7 +15,7 @@ # Default-Start: # Default-Stop: # Short-Description: start and stop varnishncsa -# Description: Varnish Cache NSCA logging daemon +# Description: Varnish Cache NCSA logging daemon ### END INIT INFO # Source function library. |