[master] 5acde03 Expose the transaction reason through the API
Martin Blix Grydeland
martin at varnish-software.com
Thu Jan 9 15:16:26 CET 2014
commit 5acde036d493f79beaa9b55350ec97882f0ce3e8
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date: Thu Jan 9 14:29:29 2014 +0100
Expose the transaction reason through the API
This allows the parsed transaction reason to be visible in the
transactions returned from the API.
This is to pave the way for varnishncsa to see which req transactions
are ESI's and skip these.
diff --git a/include/vapi/vsl.h b/include/vapi/vsl.h
index cecdaf6..fee24d1 100644
--- a/include/vapi/vsl.h
+++ b/include/vapi/vsl.h
@@ -65,11 +65,24 @@ enum VSL_transaction_e {
VSL_t__MAX,
};
+enum VSL_reason_e {
+ VSL_r_unknown,
+ VSL_r_http_1,
+ VSL_r_rxreq,
+ VSL_r_esi,
+ VSL_r_restart,
+ VSL_r_pass,
+ VSL_r_fetch,
+ VSL_r_bgfetch,
+ VSL_r__MAX,
+};
+
struct VSL_transaction {
unsigned level;
int32_t vxid;
int32_t vxid_parent;
enum VSL_transaction_e type;
+ enum VSL_reason_e reason;
struct VSL_cursor *c;
};
diff --git a/lib/libvarnishapi/vsl_dispatch.c b/lib/libvarnishapi/vsl_dispatch.c
index 9c589a0..b4fdc59 100644
--- a/lib/libvarnishapi/vsl_dispatch.c
+++ b/lib/libvarnishapi/vsl_dispatch.c
@@ -56,16 +56,15 @@ static const char * const vsl_t_names[VSL_t__MAX] = {
[VSL_t_raw] = "raw",
};
-/* The transaction reasons we care about */
-enum vsl_reason_e {
- vsl_r_unknown,
- vsl_r_restart,
- vsl_r__MAX,
-};
-
-static const char * const vsl_r_names[vsl_r__MAX] = {
- [vsl_r_unknown] = "unknown",
- [vsl_r_restart] = "restart",
+static const char * const vsl_r_names[VSL_r__MAX] = {
+ [VSL_r_unknown] = "unknown",
+ [VSL_r_http_1] = "HTTP/1",
+ [VSL_r_rxreq] = "rxreq",
+ [VSL_r_esi] = "esi",
+ [VSL_r_restart] = "restart",
+ [VSL_r_pass] = "pass",
+ [VSL_r_fetch] = "fetch",
+ [VSL_r_bgfetch] = "bgfetch",
};
struct vtx;
@@ -151,7 +150,7 @@ struct vtx {
complete */
enum VSL_transaction_e type;
- enum vsl_reason_e reason;
+ enum VSL_reason_e reason;
struct vtx *parent;
VTAILQ_HEAD(,vtx) child;
@@ -500,7 +499,7 @@ vtx_new(struct VSLQ *vslq)
vtx->t_start = VTIM_mono();
vtx->flags = 0;
vtx->type = VSL_t_unknown;
- vtx->reason = vsl_r_unknown;
+ vtx->reason = VSL_r_unknown;
vtx->parent = NULL;
vtx->n_child = 0;
vtx->n_childready = 0;
@@ -672,7 +671,7 @@ vtx_set_parent(struct vtx *parent, struct vtx *child)
successfully parsed. */
static int
vtx_parse_link(const char *str, enum VSL_transaction_e *ptype,
- unsigned *pvxid, enum vsl_reason_e *preason)
+ unsigned *pvxid, enum VSL_reason_e *preason)
{
char type[16], reason[16];
unsigned vxid;
@@ -698,13 +697,13 @@ vtx_parse_link(const char *str, enum VSL_transaction_e *ptype,
*pvxid = vxid;
if (i == 2)
return (2);
- for (j = 0; j < vsl_r__MAX; j++)
+ for (j = 0; j < VSL_r__MAX; j++)
if (!strcmp(reason, vsl_r_names[j]))
break;
- if (j < vsl_r__MAX)
+ if (j < VSL_r__MAX)
*preason = j;
else
- *preason = vsl_r_unknown;
+ *preason = VSL_r_unknown;
return (3);
}
@@ -714,7 +713,7 @@ vtx_scan_begin(struct VSLQ *vslq, struct vtx *vtx, const uint32_t *ptr)
{
int i;
enum VSL_transaction_e type;
- enum vsl_reason_e reason;
+ enum VSL_reason_e reason;
unsigned p_vxid;
struct vtx *p_vtx;
@@ -778,7 +777,7 @@ vtx_scan_link(struct VSLQ *vslq, struct vtx *vtx, const uint32_t *ptr)
{
int i;
enum VSL_transaction_e c_type;
- enum vsl_reason_e c_reason;
+ enum VSL_reason_e c_reason;
unsigned c_vxid;
struct vtx *c_vtx;
@@ -913,6 +912,7 @@ vslq_callback(const struct VSLQ *vslq, struct vtx *vtx, VSLQ_dispatch_f *func,
trans[0].vxid = vtx->key.vxid;
trans[0].vxid_parent = 0;
trans[0].type = vtx->type;
+ trans[0].reason = vtx->reason;
trans[0].c = &vtx->c.cursor;
i = 1;
j = 0;
@@ -921,7 +921,7 @@ vslq_callback(const struct VSLQ *vslq, struct vtx *vtx, VSLQ_dispatch_f *func,
assert(i < n);
(void)vslc_vtx_reset(&vtx->c.cursor);
vtxs[i] = vtx;
- if (vtx->reason == vsl_r_restart)
+ if (vtx->reason == VSL_r_restart)
/* Restarts stay at the same level as parent */
trans[i].level = trans[j].level;
else
@@ -929,6 +929,7 @@ vslq_callback(const struct VSLQ *vslq, struct vtx *vtx, VSLQ_dispatch_f *func,
trans[i].vxid = vtx->key.vxid;
trans[i].vxid_parent = trans[j].vxid;
trans[i].type = vtx->type;
+ trans[i].reason = vtx->reason;
trans[i].c = &vtx->c.cursor;
i++;
}
@@ -1063,6 +1064,7 @@ VSLQ_New(struct VSL_data *vsl, struct VSL_cursor **cp,
vslq->raw.c.cursor.priv_data = &vslq->raw.c;
vslq->raw.trans.level = 0;
vslq->raw.trans.type = VSL_t_raw;
+ vslq->raw.trans.reason = VSL_r_unknown;
vslq->raw.trans.c = &vslq->raw.c.cursor;
vslq->raw.ptrans[0] = &vslq->raw.trans;
vslq->raw.ptrans[1] = NULL;
More information about the varnish-commit
mailing list