Commit 02fe13d4 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Make the director opaque outside the backend code.



git-svn-id: http://www.varnish-cache.org/svn/trunk@3119 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 617608c9
......@@ -76,6 +76,7 @@ enum {
struct cli;
struct vsb;
struct sess;
struct director;
struct object;
struct objhead;
struct objexp;
......@@ -372,22 +373,6 @@ struct sess {
const char **hashptr;
};
/* -------------------------------------------------------------------
* A director is a piece of code which selects one of possibly multiple
* backends to use.
*/
typedef struct backend *vdi_choose_f(struct sess *sp);
typedef void vdi_fini_f(struct director *d);
struct director {
unsigned magic;
#define DIRECTOR_MAGIC 0x3336351d
const char *name;
vdi_choose_f *choose;
vdi_fini_f *fini;
void *priv;
};
/* -------------------------------------------------------------------*/
......
......@@ -71,6 +71,23 @@
struct vbp_target;
struct vrt_backend_probe;
/* -------------------------------------------------------------------
* A director is a piece of code which selects one of possibly multiple
* backends to use.
*/
typedef struct backend *vdi_choose_f(struct sess *sp);
typedef void vdi_fini_f(struct director *d);
struct director {
unsigned magic;
#define DIRECTOR_MAGIC 0x3336351d
const char *name;
vdi_choose_f *choose;
vdi_fini_f *fini;
void *priv;
};
/* Backend indstance */
struct backend {
unsigned magic;
......
......@@ -388,12 +388,11 @@ cnt_fetch(struct sess *sp)
CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
AN(sp->bereq);
CHECK_OBJ_NOTNULL(sp->director, DIRECTOR_MAGIC);
AN(sp->director);
i = Fetch(sp);
CHECK_OBJ_NOTNULL(sp->director, DIRECTOR_MAGIC);
AN(sp->director);
if (i) {
VSL(SLT_Debug, sp->fd, "Fetch = %d", i);
sp->err_code = 503;
sp->step = STP_ERROR;
VBE_free_bereq(sp->bereq);
......@@ -854,7 +853,7 @@ cnt_recv(struct sess *sp)
/* By default we use the first backend */
AZ(sp->director);
sp->director = sp->vcl->director[0];
CHECK_OBJ_NOTNULL(sp->director, DIRECTOR_MAGIC);
AN(sp->director);
VCL_recv_method(sp);
......@@ -996,7 +995,6 @@ CNT_Session(struct sess *sp)
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
CHECK_OBJ_ORNULL(w->nobj, OBJECT_MAGIC);
CHECK_OBJ_ORNULL(w->nobjhead, OBJHEAD_MAGIC);
CHECK_OBJ_ORNULL(sp->director, DIRECTOR_MAGIC);
switch (sp->step) {
#define STEP(l,u) \
......
......@@ -43,6 +43,7 @@
#include "shmlog.h"
#include "cache.h"
#include "cache_backend.h"
#include "vrt.h"
/*--------------------------------------------------------------------*/
......
......@@ -41,6 +41,7 @@
#include "shmlog.h"
#include "cache.h"
#include "cache_backend.h"
#include "vrt.h"
/*--------------------------------------------------------------------*/
......
......@@ -43,6 +43,7 @@
#include "shmlog.h"
#include "cache.h"
#include "cache_backend.h"
#include "vrt.h"
/*--------------------------------------------------------------------*/
......
......@@ -321,7 +321,7 @@ Fetch(struct sess *sp)
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
CHECK_OBJ_NOTNULL(sp->bereq, BEREQ_MAGIC);
CHECK_OBJ_NOTNULL(sp->director, DIRECTOR_MAGIC);
AN(sp->director);
assert(sp->obj->busy != 0);
w = sp->wrk;
bereq = sp->bereq;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment