Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
2f869e04
Commit
2f869e04
authored
Apr 27, 2018
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allocate the director structure centrally
parent
4d568263
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
41 additions
and
54 deletions
+41
-54
cache_backend.c
bin/varnishd/cache/cache_backend.c
+7
-14
cache_backend.h
bin/varnishd/cache/cache_backend.h
+1
-1
cache_backend_probe.c
bin/varnishd/cache/cache_backend_probe.c
+2
-6
cache_director.h
bin/varnishd/cache/cache_director.h
+3
-4
cache_vcl_vrt.c
bin/varnishd/cache/cache_vcl_vrt.c
+19
-11
flint.lnt
bin/varnishd/flint.lnt
+1
-0
vdir.c
lib/libvmod_directors/vdir.c
+2
-8
vdir.h
lib/libvmod_directors/vdir.h
+1
-1
vmod_shard.c
lib/libvmod_directors/vmod_shard.c
+5
-9
No files found.
bin/varnishd/cache/cache_backend.c
View file @
2f869e04
...
...
@@ -453,11 +453,8 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
const
struct
vrt_backend
*
vrt
)
{
struct
backend
*
be
;
struct
director
*
d
;
VCL_BACKEND
bb
;
struct
vcl
*
vcl
;
const
struct
vrt_backend_probe
*
vbp
;
int
retval
;
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
vrt
,
VRT_BACKEND_MAGIC
);
...
...
@@ -483,19 +480,15 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
#undef DA
#undef DN
d
=
be
->
director
;
INIT_OBJ
(
d
,
DIRECTOR_MAGIC
);
d
->
priv
=
be
;
d
->
methods
=
vbe_methods
;
be
->
vsc
=
VSC_vbe_New
(
vc
,
&
be
->
vsc_seg
,
"%s.%s"
,
VCL_Name
(
ctx
->
vcl
),
vrt
->
vcl_name
);
AN
(
be
->
vsc
);
retval
=
VRT_AddDirector
(
ctx
,
d
,
"%s"
,
vrt
->
vcl_name
);
if
(
retval
)
{
bb
=
d
;
VRT_delete_backend
(
ctx
,
&
bb
);
be
->
director
=
VRT_AddDirector
(
ctx
,
vbe_methods
,
be
,
"%s"
,
vrt
->
vcl_name
);
if
(
be
->
director
==
NULL
)
{
// XXX
VRT_delete_backend
(
ctx
,
&
be
->
director
);
return
(
NULL
);
}
...
...
@@ -515,7 +508,7 @@ VRT_new_backend_clustered(VRT_CTX, struct vsmw_cluster *vc,
VBP_Insert
(
be
,
vbp
,
be
->
tcp_pool
);
}
return
(
d
);
return
(
be
->
director
);
}
VCL_BACKEND
v_matchproto_
()
...
...
@@ -579,7 +572,7 @@ VBE_Poll(void)
if
(
be
->
n_conn
>
0
)
continue
;
Lck_Unlock
(
&
backends_mtx
);
VRT_DelDirector
(
be
->
director
);
VRT_DelDirector
(
&
be
->
director
);
Lck_Lock
(
&
backends_mtx
);
}
Lck_Unlock
(
&
backends_mtx
);
...
...
bin/varnishd/cache/cache_backend.h
View file @
2f869e04
...
...
@@ -64,7 +64,7 @@ struct backend {
struct
tcp_pool
*
tcp_pool
;
struct
director
director
[
1
]
;
VCL_BACKEND
director
;
double
cooled
;
};
...
...
bin/varnishd/cache/cache_backend_probe.c
View file @
2f869e04
...
...
@@ -172,19 +172,15 @@ vbp_update_backend(struct vbp_target *vt)
logmsg
=
"Still healthy"
;
}
else
{
logmsg
=
"Back healthy"
;
vt
->
backend
->
director
->
health_changed
=
VTIM_real
();
VRT_SetHealth
(
vt
->
backend
->
director
,
1
);
}
VRT_SetHealth
(
vt
->
backend
->
director
,
1
);
}
else
{
if
(
vt
->
backend
->
director
->
health
)
{
logmsg
=
"Went sick"
;
vt
->
backend
->
director
->
health_changed
=
VTIM_real
();
VRT_SetHealth
(
vt
->
backend
->
director
,
0
);
}
else
{
logmsg
=
"Still sick"
;
}
VRT_SetHealth
(
vt
->
backend
->
director
,
0
);
}
VSL
(
SLT_Backend_health
,
0
,
"%s %s %s %u %u %u %.6f %.6f %s"
,
vt
->
backend
->
director
->
cli_name
,
logmsg
,
bits
,
...
...
bin/varnishd/cache/cache_director.h
View file @
2f869e04
...
...
@@ -83,7 +83,6 @@ struct director {
char
*
vcl_name
;
void
*
priv
;
const
void
*
priv2
;
/* Internal Housekeeping fields */
...
...
@@ -98,12 +97,12 @@ struct director {
/* cache_vcl.c */
int
VRT_AddDirector
(
VRT_CTX
,
struct
director
*
,
const
char
*
,
...)
v
_printflike_
(
3
,
4
);
VCL_BACKEND
VRT_AddDirector
(
VRT_CTX
,
const
struct
director_methods
*
,
v
oid
*
,
const
char
*
,
...)
v_printflike_
(
4
,
5
);
void
VRT_SetHealth
(
VCL_BACKEND
d
,
int
health
);
void
VRT_DisableDirector
(
VCL_BACKEND
);
void
VRT_DelDirector
(
struct
director
*
);
void
VRT_DelDirector
(
VCL_BACKEND
*
);
/* cache_director.c */
...
...
bin/varnishd/cache/cache_vcl_vrt.c
View file @
2f869e04
...
...
@@ -126,27 +126,32 @@ VCL_Rel(struct vcl **vcc)
/*--------------------------------------------------------------------*/
int
VRT_AddDirector
(
VRT_CTX
,
struct
director
*
d
,
const
char
*
fmt
,
...)
VCL_BACKEND
VRT_AddDirector
(
VRT_CTX
,
const
struct
director_methods
*
m
,
void
*
priv
,
const
char
*
fmt
,
...)
{
struct
vsb
*
vsb
;
struct
vcl
*
vcl
;
struct
vcldir
*
vdir
;
struct
director
*
d
;
va_list
ap
;
int
i
;
CHECK_OBJ_NOTNULL
(
d
,
DIRECTOR_MAGIC
);
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CHECK_OBJ_NOTNULL
(
m
,
DIRECTOR_METHODS_MAGIC
);
AN
(
fmt
);
vcl
=
ctx
->
vcl
;
CHECK_OBJ_NOTNULL
(
vcl
,
VCL_MAGIC
);
CHECK_OBJ_NOTNULL
(
d
->
methods
,
DIRECTOR_METHODS_MAGIC
);
// AN(d->methods->destroy);
AZ
(
errno
=
pthread_rwlock_rdlock
(
&
vcl
->
temp_rwl
));
if
(
vcl
->
temp
==
VCL_TEMP_COOLING
)
{
AZ
(
errno
=
pthread_rwlock_unlock
(
&
vcl
->
temp_rwl
));
return
(
1
);
return
(
NULL
);
}
ALLOC_OBJ
(
d
,
DIRECTOR_MAGIC
);
AN
(
d
);
d
->
methods
=
m
;
d
->
priv
=
priv
;
d
->
admin_health
=
VDI_AH_PROBE
;
vsb
=
VSB_new_auto
();
AN
(
vsb
);
...
...
@@ -180,16 +185,17 @@ VRT_AddDirector(VRT_CTX, struct director *d, const char *fmt, ...)
WRONG
(
"Dynamic Backends can only be added to warm VCLs"
);
AZ
(
errno
=
pthread_rwlock_unlock
(
&
vcl
->
temp_rwl
));
return
(
0
);
return
(
d
);
}
void
VRT_DelDirector
(
struct
director
*
d
)
VRT_DelDirector
(
VCL_BACKEND
*
bp
)
{
struct
vcl
*
vcl
;
struct
vcldir
*
vdir
;
VCL_BACKEND
d
;
CHECK_OBJ_NOTNULL
(
d
,
DIRECTOR_MAGIC
);
TAKE_OBJ_NOTNULL
(
d
,
bp
,
DIRECTOR_MAGIC
);
vdir
=
d
->
vdir
;
CHECK_OBJ_NOTNULL
(
vdir
,
VCLDIR_MAGIC
);
vcl
=
vdir
->
vcl
;
...
...
@@ -202,9 +208,10 @@ VRT_DelDirector(struct director *d)
if
(
VCL_WARM
(
vcl
))
VDI_Event
(
d
,
VCL_EVENT_COLD
);
AZ
(
errno
=
pthread_rwlock_unlock
(
&
vcl
->
temp_rwl
));
REPLACE
(
d
->
cli_name
,
NULL
);
if
(
d
->
methods
->
destroy
!=
NULL
)
d
->
methods
->
destroy
(
d
);
free
(
d
->
cli_name
);
FREE_OBJ
(
vdir
->
dir
);
FREE_OBJ
(
vdir
);
}
...
...
@@ -218,6 +225,7 @@ VRT_SetHealth(VCL_BACKEND d, int health)
CHECK_OBJ_NOTNULL
(
vdir
,
VCLDIR_MAGIC
);
vdir
->
dir
->
health
=
health
;
vdir
->
dir
->
health_changed
=
VTIM_real
();
}
void
...
...
bin/varnishd/flint.lnt
View file @
2f869e04
...
...
@@ -94,6 +94,7 @@
+libh mgt_event.h
-sem(VRT_AddDirector, custodial(3))
-sem(VCP_New, custodial(3))
-sem(vsmw_addseg, custodial(2))
-sem(BAN_Free, custodial(1))
...
...
lib/libvmod_directors/vdir.c
View file @
2f869e04
...
...
@@ -64,12 +64,7 @@ vdir_new(VRT_CTX, struct vdir **vdp, const char *vcl_name,
AN
(
vd
);
*
vdp
=
vd
;
AZ
(
pthread_rwlock_init
(
&
vd
->
mtx
,
NULL
));
ALLOC_OBJ
(
vd
->
dir
,
DIRECTOR_MAGIC
);
AN
(
vd
->
dir
);
vd
->
dir
->
methods
=
m
;
vd
->
dir
->
priv
=
priv
;
AZ
(
VRT_AddDirector
(
ctx
,
vd
->
dir
,
"%s"
,
vcl_name
));
vd
->
dir
=
VRT_AddDirector
(
ctx
,
m
,
priv
,
"%s"
,
vcl_name
);
vd
->
vbm
=
vbit_new
(
8
);
AN
(
vd
->
vbm
);
}
...
...
@@ -84,8 +79,7 @@ vdir_delete(struct vdir **vdp)
free
(
vd
->
backend
);
free
(
vd
->
weight
);
AZ
(
pthread_rwlock_destroy
(
&
vd
->
mtx
));
VRT_DelDirector
(
vd
->
dir
);
FREE_OBJ
(
vd
->
dir
);
VRT_DelDirector
(
&
vd
->
dir
);
vbit_destroy
(
vd
->
vbm
);
FREE_OBJ
(
vd
);
}
...
...
lib/libvmod_directors/vdir.h
View file @
2f869e04
...
...
@@ -37,7 +37,7 @@ struct vdir {
VCL_BACKEND
*
backend
;
double
*
weight
;
double
total_weight
;
struct
director
*
dir
;
VCL_BACKEND
dir
;
struct
vbitmap
*
vbm
;
};
...
...
lib/libvmod_directors/vmod_shard.c
View file @
2f869e04
...
...
@@ -91,7 +91,7 @@ struct vmod_directors_shard_param {
enum
healthy_e
healthy
;
uint32_t
mask
;
VCL_BOOL
rampup
;
VCL_INT
alt
;
VCL_INT
alt
;
VCL_REAL
warmup
;
};
...
...
@@ -137,7 +137,7 @@ struct vmod_directors_shard {
unsigned
magic
;
#define VMOD_SHARD_SHARD_MAGIC 0x6e63e1bf
struct
sharddir
*
shardd
;
struct
director
*
dir
;
VCL_BACKEND
dir
;
const
struct
vmod_directors_shard_param
*
param
;
};
...
...
@@ -216,11 +216,8 @@ vmod_shard__init(VRT_CTX, struct vmod_directors_shard **vshardp,
sharddir_new
(
&
vshard
->
shardd
,
vcl_name
);
vshard
->
param
=
&
shard_param_default
;
ALLOC_OBJ
(
vshard
->
dir
,
DIRECTOR_MAGIC
);
AN
(
vshard
->
dir
);
vshard
->
dir
->
priv
=
vshard
;
vshard
->
dir
->
methods
=
vmod_shard_methods
;
AZ
(
VRT_AddDirector
(
ctx
,
vshard
->
dir
,
"%s"
,
vcl_name
));
vshard
->
dir
=
VRT_AddDirector
(
ctx
,
vmod_shard_methods
,
vshard
,
"%s"
,
vcl_name
);
}
VCL_VOID
v_matchproto_
(
td_directors_shard__fini
)
...
...
@@ -231,8 +228,7 @@ vmod_shard__fini(struct vmod_directors_shard **vshardp)
*
vshardp
=
NULL
;
CHECK_OBJ_NOTNULL
(
vshard
,
VMOD_SHARD_SHARD_MAGIC
);
sharddir_delete
(
&
vshard
->
shardd
);
VRT_DelDirector
(
vshard
->
dir
);
FREE_OBJ
(
vshard
->
dir
);
VRT_DelDirector
(
&
vshard
->
dir
);
FREE_OBJ
(
vshard
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment