]> err.no Git - varnish/commitdiff
Add a unique transaction-ID to each request, and register it in the
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 29 Jun 2006 13:04:55 +0000 (13:04 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Thu, 29 Jun 2006 13:04:55 +0000 (13:04 +0000)
shmlog so we can match backend transactions with client transactions.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@265 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_backend.c
varnish-cache/bin/varnishd/cache_fetch.c
varnish-cache/bin/varnishd/cache_http.c
varnish-cache/bin/varnishd/cache_pass.c
varnish-cache/bin/varnishd/cache_pipe.c
varnish-cache/bin/varnishd/cache_pool.c
varnish-cache/include/shmlog_tags.h

index f2861d69a32d3dc43b7c44595d997eb0c726a1a3..6ebdbfe7e77a46c7df4c362bf793587e06d4f053 100644 (file)
@@ -92,6 +92,7 @@ struct objhead {
 
 struct sess {
        int                     fd;
+       unsigned                xid;
 
        /* formatted ascii client address */
        char                    addr[VCA_ADDRBUFSIZE];
@@ -143,7 +144,7 @@ void VCA_Init(void);
 
 /* cache_backend.c */
 void VBE_Init(void);
-int VBE_GetFd(struct backend *bp, void **ptr);
+int VBE_GetFd(struct backend *bp, void **ptr, unsigned xid);
 void VBE_ClosedFd(void *ptr);
 void VBE_RecycleFd(void *ptr);
 
index 951bdfb0e4502f9b05f5f9941db21fdc06989eab..961264e447ba7bd523cf718223f709eb86c671ef 100644 (file)
@@ -201,7 +201,7 @@ vbe_main(void *priv __unused)
  */
 
 int
-VBE_GetFd(struct backend *bp, void **ptr)
+VBE_GetFd(struct backend *bp, void **ptr, unsigned xid)
 {
        struct vbe *vp;
        struct vbe_conn *vc;
@@ -244,6 +244,7 @@ VBE_GetFd(struct backend *bp, void **ptr)
                event_base_set(vbe_evb, &vc->ev);
        }
        *ptr = vc;
+       VSL(SLT_BackendXID, vc->fd, "%u", xid);
        return (vc->fd);
 }
 
index 4aa1de52ea1445b61ffe7f6ee0b16f96d2e3f50f..a363e90641e3af57fac1cdd7236f7b2564410837 100644 (file)
@@ -245,7 +245,7 @@ FetchSession(struct worker *w, struct sess *sp)
        time_t t_req, t_resp;
        int body;
 
-       fd = VBE_GetFd(sp->backend, &fd_token);
+       fd = VBE_GetFd(sp->backend, &fd_token, sp->xid);
        assert(fd != -1);
        VSL(SLT_Backend, sp->fd, "%d %s", fd, sp->backend->vcl_name);
 
index 37cf0b8fdf52b96fbd4b90cc47b7fda8f792f7dc..fa486284f9f44a35d5307c90141060c2c76fcff1 100644 (file)
@@ -335,11 +335,6 @@ http_read_f(int fd, short event, void *arg)
        }
        hp->t = ++p;
 
-#if 0
-printf("Head:\n%#H\n", hp->s, hp->t - hp->s);
-printf("Tail:\n%#H\n", hp->t, hp->v - hp->t);
-#endif
-
        event_del(&hp->ev);
        if (hp->callback != NULL)
                hp->callback(hp->arg, 1);
index 01ef5af3951ac812895fb74ca0d27dbf2e576573..339f43aa543e787f8f8a7fd79c6ae61b3a4b09c8 100644 (file)
@@ -157,7 +157,7 @@ PassSession(struct worker *w, struct sess *sp)
        char *b;
        int cls;
 
-       fd = VBE_GetFd(sp->backend, &fd_token);
+       fd = VBE_GetFd(sp->backend, &fd_token, sp->xid);
        assert(fd != -1);
 
        http_BuildSbuf(fd, 1, w->sb, sp->http);
index 68866fc1f36abd15a3bb074bc5ddbab1fecb5104..6457fc7f0b4b2b90a4291b32a7e0c57802a7438f 100644 (file)
@@ -48,7 +48,7 @@ PipeSession(struct worker *w, struct sess *sp)
        void *fd_token;
        struct edir e1, e2;
 
-       fd = VBE_GetFd(sp->backend, &fd_token);
+       fd = VBE_GetFd(sp->backend, &fd_token, sp->xid);
        assert(fd != -1);
 
        http_BuildSbuf(fd, 0, w->sb, sp->http); /* XXX: 0 ?? */
index 3fd10e2ada6a1594dc80b15408ad494d19a0b2d6..5c02f5fa0bea9169c5c22b5ca49b0584b9148903 100644 (file)
@@ -21,6 +21,7 @@
 static TAILQ_HEAD(, sess) shd = TAILQ_HEAD_INITIALIZER(shd);
 
 static pthread_cond_t  shdcnd;
+static unsigned                xids;
 
 /*--------------------------------------------------------------------*/
 
@@ -131,6 +132,13 @@ DealWithSession(void *arg, int good)
                vca_return_session(sp);
                return;
        }
+
+       /*
+        * No locking necessary, we're serialized in the acceptor thread
+        */
+       sp->xid = xids++;
+       VSL(SLT_XID, sp->fd, "%u", sp->xid);
+
        VSL_stats->client_req++;
        AZ(pthread_mutex_lock(&sessmtx));
        TAILQ_INSERT_TAIL(&shd, sp, list);
@@ -149,4 +157,6 @@ CacheInitPool(void)
        for (i = 0; i < 5; i++)
                AZ(pthread_create(&tp, NULL, CacheWorker, NULL));
        AZ(pthread_detach(tp));
+       srandomdev();
+       xids = random();
 }
index f2e104ee244b103833912e8d3983923147dc9111..bbe13c0c02ef9580cbe2e04dbe6459c628b4e788 100644 (file)
@@ -13,6 +13,7 @@ SLTM(SessionOpen)
 SLTM(SessionReuse)
 SLTM(SessionClose)
 SLTM(BackendOpen)
+SLTM(BackendXID)
 SLTM(BackendReuse)
 SLTM(BackendClose)
 SLTM(HttpError)
@@ -32,3 +33,4 @@ SLTM(Header)
 SLTM(BldHdr)
 SLTM(LostHeader)
 SLTM(VCL)
+SLTM(XID)