[master] 4ad0d5b Remove the outdated and increasingly misleading dot(1) state graphs from the source code. We now have a working documentation system and these state engines should be documented there, using appropriate tools.
Poul-Henning Kamp
phk at FreeBSD.org
Tue Sep 30 11:20:41 CEST 2014
commit 4ad0d5bdfe45eb31111fb1d0b1a4aa72942b477d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Sep 30 09:19:45 2014 +0000
Remove the outdated and increasingly misleading dot(1) state graphs
from the source code. We now have a working documentation system
and these state engines should be documented there, using appropriate
tools.
Fixes #1487
diff --git a/bin/varnishd/cache/cache_http1_fsm.c b/bin/varnishd/cache/cache_http1_fsm.c
index b85b099..d3438f8 100644
--- a/bin/varnishd/cache/cache_http1_fsm.c
+++ b/bin/varnishd/cache/cache_http1_fsm.c
@@ -29,41 +29,6 @@
* This file contains the two central state machine for pushing HTTP1
* sessions through their states.
*
- * The following dot-graph shows the big picture, and the two major
- * complicating features:
- *
- * - The blue path is where a request disembarks its worker thread while
- * waiting for a busy object to become available:
- *
- * - The green path is where we time out waiting for the next request to
- * arrive, release the worker thread and hand the session to the waiter.
- *
- * Render the graph with:
- * sed -n '/^..DOT/s///p' % | dot -Tps > /tmp/_.ps
- *
- *DOT digraph vcl_center {
- *DOT size="7.2,10.5"
- *DOT margin="0.5"
- *DOT center="1"
- *DOT
- *DOT acceptor -> http1_wait [label=S_STP_NEWREQ, align=center]
- *DOT hash -> CNT_Request [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP"
- *DOT color=blue]
- *DOT disembark -> hash [style=dotted, color=blue]
- *DOT http1_wait -> CNT_Request [label="S_STP_WORKING\nR_STP_RECV"]
- *DOT http1_wait -> disembark [label="Session close"]
- *DOT http1_wait -> disembark [label="Timeout" color=green]
- *DOT disembark -> waiter [style=dotted, color=green]
- *DOT waiter -> http1_wait [color=green]
- *DOT CNT_Request -> disembark
- *DOT [label="Busy object\nS_STP_WORKING\nR_STP_LOOKUP" color=blue]
- *DOT CNT_Request -> http1_cleanup
- *DOT http1_cleanup -> disembark [label="Session close"]
- *DOT http1_cleanup -> CNT_Request [label="S_STP_WORKING\nR_STP_RECV"]
- *DOT http1_cleanup -> http1_wait [label="S_STP_NEWREQ"]
- *DOT
- *DOT }
- *
*/
#include "config.h"
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index bba2dea..c9bdb35 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -34,28 +34,6 @@
* A special complication is the fact that we can suspend processing of
* a request when hash-lookup finds a busy objhdr.
*
- * Since the states are rather nasty in detail, I have decided to embedd
- * a dot(1) graph in the source code comments. So to see the big picture,
- * extract the DOT lines and run though dot(1), for instance with the
- * command:
- * sed -n '/^DOT/s///p' cache/cache_req_fsm.c | dot -Tps > /tmp/_.ps
- */
-
-/*
-DOT digraph vcl_center {
-xDOT page="8.2,11.5"
-DOT size="7.2,10.5"
-DOT margin="0.5"
-DOT center="1"
-DOT acceptor [
-DOT shape=hexagon
-DOT label="Request received"
-DOT ]
-DOT ESI_REQ [ shape=hexagon ]
-DOT ESI_REQ -> recv
-DOT SYNTH [shape=plaintext]
-DOT RESTART [shape=plaintext]
-DOT acceptor -> recv [style=bold,color=green]
*/
#include "config.h"
@@ -72,16 +50,7 @@ DOT acceptor -> recv [style=bold,color=green]
#include "vtim.h"
/*--------------------------------------------------------------------
- * Deliver an already stored object
- *
-DOT deliver [
-DOT shape=record
-DOT label="{cnt_deliver:|Filter obj.-\>resp.|{vcl_deliver\{\}|{req.|resp.}}|{restart?|<deliver>deliver?}}"
-DOT ]
-DOT deliver:deliver:s -> DONE [style=bold,color=green]
-DOT deliver:deliver:s -> DONE [style=bold,color=red]
-DOT deliver:deliver:s -> DONE [style=bold,color=blue]
- *
+ * Deliver an object to client
*/
static enum req_fsm_nxt
@@ -199,15 +168,6 @@ cnt_deliver(struct worker *wrk, struct req *req)
/*--------------------------------------------------------------------
* Emit a synthetic response
- *
-DOT subgraph xcluster_synth {
-DOT synth [
-DOT shape=record
-DOT label="{cnt_synth:|{vcl_synth\{\}|resp.}|{<del>deliver?|<restart>restart?}}"
-DOT ]
-DOT SYNTH -> synth
-DOT synth:del:s -> deliver [label=deliver]
-DOT }
*/
static enum req_fsm_nxt
@@ -275,16 +235,6 @@ cnt_synth(struct worker *wrk, struct req *req)
/*--------------------------------------------------------------------
* Initiated a fetch (pass/miss) which we intend to deliver
- *
-DOT subgraph xcluster_body {
-DOT fetch [
-DOT shape=record
-DOT label="{cnt_fetch:|wait for fetch|{<ok>OK|<err>Failed}}"
-DOT ]
-DOT }
-DOT fetch:ok:s -> deliver [style=bold,color=red]
-DOT fetch:ok:s -> deliver [style=bold,color=blue]
-DOT fetch:err:s -> vcl_error
*/
static enum req_fsm_nxt
@@ -311,31 +261,8 @@ cnt_fetch(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- * LOOKUP
- * Hash things together and look object up in hash-table.
- *
- * LOOKUP consists of two substates so that we can reenter if we
- * encounter a busy object.
- *
-DOT subgraph xcluster_lookup {
-DOT lookup [
-DOT shape=record
-DOT label="{<top>cnt_lookup:|hash lookup|{<busy>busy?|<e>exp?|<eb>exp+busy?|<h>hit?|<miss>miss?|<hfp>hit-for-pass?}}"
-DOT ]
-DOT lookup2 [
-DOT shape=record
-DOT label="{<top>cnt_lookup:|{vcl_hit\{\}|req.*, obj.*}|{<deliver>deliver?|synth?|restart?|<fetch>fetch?|<pass>pass?}}"
-DOT ]
-DOT }
-DOT lookup:busy:w -> lookup:top:w [label="(waitinglist)"]
-DOT lookup:miss:s -> miss [style=bold,color=blue]
-DOT lookup:hfp:s -> pass [style=bold,color=red]
-DOT lookup:e:s -> lookup2 [style=bold,color=green]
-DOT lookup:eb:s -> lookup2 [style=bold,color=green]
-DOT lookup:h:s -> lookup2 [style=bold,color=green]
-DOT lookup2:pass:s -> pass [style=bold,color=red]
-DOT lookup2:fetch:s -> miss [style=bold,color=blue]
-DOT lookup2:deliver:s -> deliver:n [style=bold,color=green]
+ * Attempt to lookup objhdr from hash. We disembark and reenter
+ * this state if we get suspended on a busy objhdr.
*/
static enum req_fsm_nxt
@@ -467,17 +394,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- * We had a miss, ask VCL, proceed as instructed
- *
-DOT subgraph xcluster_miss {
-DOT miss [
-DOT shape=record
-DOT label="{cnt_miss:|{vcl_miss\{\}|req.*}|{<fetch>fetch?|<synth>synth?|<rst>restart?|<pass>pass?}}"
-DOT ]
-DOT }
-DOT miss:fetch:s -> fetch [label="fetch",style=bold,color=blue]
-DOT miss:pass:s -> pass [label="pass",style=bold,color=red]
-DOT
+ * Cache miss.
*/
static enum req_fsm_nxt
@@ -518,20 +435,7 @@ cnt_miss(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- * Start pass processing by getting headers from backend, then
- * continue in passbody.
- *
-DOT subgraph xcluster_pass {
-DOT pass [
-DOT shape=record
-DOT label="{cnt_pass:|{vcl_pass\{\}|req.*}|{<fetch>fetch?|<synth>synth?|<rst>restart?}}"
-DOT ]
-DOT }
-DOT pass:fetch:s -> fetch:n [style=bold, color=red]
-XDOT pass:rst -> rst_pass [label="restart",color=purple]
-XDOT rst_pass [label="RESTART",shape=plaintext]
-XDOT pass:err -> err_pass [label="error"]
-XDOT err_pass [label="ERROR",shape=plaintext]
+ * Pass processing
*/
static enum req_fsm_nxt
@@ -565,21 +469,7 @@ cnt_pass(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- * Ship the request header to the backend unchanged, then pipe
- * until one of the ends close the connection.
- *
-DOT subgraph xcluster_pipe {
-DOT pipe [
-DOT shape=record
-DOT label="{cnt_pipe:|filter req.*-\>bereq.*|{vcl_pipe()|req.*, bereq\.*}|{<pipe>pipe?|<synth>synth?}}"
-DOT ]
-DOT pipe_do [
-DOT shape=ellipse
-DOT label="send bereq.\npipe until close"
-DOT ]
-DOT pipe:pipe -> pipe_do [label="pipe",style=bold,color=orange]
-DOT }
-DOT pipe_do -> DONE [style=bold,color=orange]
+ * Pipe mode
*/
static enum req_fsm_nxt
@@ -618,17 +508,7 @@ cnt_pipe(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- *
-DOT subgraph xcluster_restart {
-DOT restart [
-DOT shape=record
-DOT label="{cnt_restart}"
-DOT ]
-DOT }
-DOT RESTART -> restart [color=purple]
-DOT restart -> recv [color=purple]
-DOT restart -> err_restart
-DOT err_restart [label="SYNTH",shape=plaintext]
+ * Handle restart events
*/
static enum req_fsm_nxt
@@ -656,23 +536,9 @@ cnt_restart(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- * RECV
* We have a complete request, set everything up and start it.
* We can come here both with a request from the client and with
* a interior request during ESI delivery.
- *
-DOT subgraph xcluster_recv {
-DOT recv [
-DOT shape=record
-DOT label="{cnt_recv:|{vcl_recv\{\}|req.*}|{vcl_hash\{\}|req.*}|{<lookup>lookup?|<pass>pass?|<pipe>pipe?|<synth>synth?|<purge>purge?}}"
-DOT ]
-DOT }
-DOT recv:pipe -> pipe [style=bold,color=orange]
-DOT recv:pass -> pass [style=bold,color=red]
-DOT recv:lookup:s -> lookup [style=bold,color=green]
-DOT recv:purge:s -> purge [style=bold,color=purple]
-#DOT recv:error -> err_recv
-#DOT err_recv [label="ERROR",shape=plaintext]
*/
static enum req_fsm_nxt
@@ -791,17 +657,9 @@ cnt_recv(struct worker *wrk, struct req *req)
}
/*--------------------------------------------------------------------
- * PURGE
- * Find the objhead, purge it and ask VCL if we should fetch or
- * just return.
- * XXX: fetching not implemented yet.
+ * Find the objhead, purge it.
*
-DOT subgraph xcluster_purge {
-DOT purge [
-DOT shape=record
-DOT label="{cnt_purge:|{vcl_purge\{\}|req.*}|{<synth>synth?}}"
-DOT ]
-DOT }
+ * XXX: We should ask VCL if we should fetch a new copy of the object.
*/
static enum req_fsm_nxt
@@ -953,7 +811,3 @@ CNT_AcctLogCharge(struct dstat *ds, struct req *req)
#include "tbl/acct_fields_req.h"
#undef ACCT
}
-
-/*
-DOT }
-*/
More information about the varnish-commit
mailing list