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
ecb58d71
Commit
ecb58d71
authored
Jan 07, 2018
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Almost) separate VSMW_cluster from VSMW_segment.
parent
355bf7e7
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
104 additions
and
44 deletions
+104
-44
cache_backend.c
bin/varnishd/cache/cache_backend.c
+1
-1
cache_vrt.c
bin/varnishd/cache/cache_vrt.c
+2
-2
common_vsc.c
bin/varnishd/common/common_vsc.c
+1
-1
common_vsmw.c
bin/varnishd/common/common_vsmw.c
+91
-33
mgt.h
bin/varnishd/mgt/mgt.h
+1
-1
mgt_child.c
bin/varnishd/mgt/mgt_child.c
+2
-0
vrt.h
include/vrt.h
+5
-5
vcc_backend.c
lib/libvcc/vcc_backend.c
+1
-1
No files found.
bin/varnishd/cache/cache_backend.c
View file @
ecb58d71
...
...
@@ -431,7 +431,7 @@ VRT_backend_vsm_need(VRT_CTX)
}
struct
director
*
v_matchproto_
()
VRT_new_backend_clustered
(
VRT_CTX
,
struct
vsm_cluster
*
vc
,
VRT_new_backend_clustered
(
VRT_CTX
,
struct
vsm
w
_cluster
*
vc
,
const
struct
vrt_backend
*
vrt
)
{
struct
backend
*
be
;
...
...
bin/varnishd/cache/cache_vrt.c
View file @
ecb58d71
...
...
@@ -625,7 +625,7 @@ VRT_purge(VRT_CTX, double ttl, double grace, double keep)
/*--------------------------------------------------------------------
*/
struct
vsm_cluster
*
v_matchproto_
()
struct
vsm
w
_cluster
*
v_matchproto_
()
VRT_VSM_Cluster_New
(
VRT_CTX
,
size_t
sz
)
{
...
...
@@ -635,7 +635,7 @@ VRT_VSM_Cluster_New(VRT_CTX, size_t sz)
}
void
v_matchproto_
()
VRT_VSM_Cluster_Destroy
(
VRT_CTX
,
struct
vsm_cluster
**
vcp
)
VRT_VSM_Cluster_Destroy
(
VRT_CTX
,
struct
vsm
w
_cluster
**
vcp
)
{
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
...
...
bin/varnishd/common/common_vsc.c
View file @
ecb58d71
...
...
@@ -106,7 +106,7 @@ vrt_vsc_mksegf(const char *class, size_t payload, const char *fmt, ...)
}
void
*
VRT_VSC_Alloc
(
struct
vsm_cluster
*
vc
,
struct
vsc_seg
**
sg
,
VRT_VSC_Alloc
(
struct
vsm
w
_cluster
*
vc
,
struct
vsc_seg
**
sg
,
const
char
*
nm
,
size_t
sd
,
const
unsigned
char
*
jp
,
size_t
sj
,
const
char
*
fmt
,
va_list
va
)
{
...
...
bin/varnishd/common/common_vsmw.c
View file @
ecb58d71
...
...
@@ -67,13 +67,25 @@
/*--------------------------------------------------------------------*/
struct
vsmw_cluster
{
unsigned
magic
;
#define VSMW_CLUSTER_MAGIC 0x28b74c00
VTAILQ_ENTRY
(
vsmw_cluster
)
list
;
char
*
fn
;
size_t
len
;
void
*
ptr
;
int
refs
;
};
struct
vsmwseg
{
unsigned
magic
;
#define VSMWSEG_MAGIC 0x7e4ccaea
VTAILQ_ENTRY
(
vsmwseg
)
list
;
char
*
fn
;
struct
vsmw_cluster
*
cluster
;
char
*
class
;
size_t
off
;
size_t
len
;
char
*
id
;
void
*
ptr
;
...
...
@@ -85,6 +97,7 @@ struct vsmw {
int
vdirfd
;
int
mode
;
char
*
idx
;
VTAILQ_HEAD
(,
vsmw_cluster
)
clusters
;
VTAILQ_HEAD
(,
vsmwseg
)
segs
;
struct
vsb
*
vsb
;
pid_t
pid
;
...
...
@@ -110,8 +123,9 @@ vsmw_write_index(const struct vsmw *vsmw, int fd, const struct vsmwseg *seg)
CHECK_OBJ_NOTNULL
(
vsmw
,
VSMW_MAGIC
);
CHECK_OBJ_NOTNULL
(
seg
,
VSMWSEG_MAGIC
);
VSB_clear
(
vsmw
->
vsb
);
VSB_printf
(
vsmw
->
vsb
,
"%s 0 %zu %s %s
\n
"
,
seg
->
fn
,
VSB_printf
(
vsmw
->
vsb
,
"%s %zu %zu %s %s
\n
"
,
seg
->
cluster
->
fn
,
seg
->
off
,
seg
->
len
,
seg
->
class
,
seg
->
id
);
...
...
@@ -127,6 +141,7 @@ vsmw_mkent(const struct vsmw *vsmw, const char *pfx)
{
int
fd
;
AN
(
pfx
);
while
(
1
)
{
VSB_clear
(
vsmw
->
vsb
);
VSB_printf
(
vsmw
->
vsb
,
"_.%s"
,
pfx
);
...
...
@@ -143,46 +158,92 @@ vsmw_mkent(const struct vsmw *vsmw, const char *pfx)
/*--------------------------------------------------------------------*/
void
*
VSMW_Allocv
(
struct
vsmw
*
vsmw
,
const
char
*
class
,
size_t
len
,
const
char
*
fmt
,
va_list
va
)
static
struct
vsmw_cluster
*
vsmw_NewCluster
(
struct
vsmw
*
vsmw
,
size_t
len
,
const
char
*
pfx
)
{
struct
vsmw
seg
*
seg
;
struct
vsmw
_cluster
*
vc
;
int
fd
;
size_t
ps
;
CHECK_OBJ_NOTNULL
(
vsmw
,
VSMW_MAGIC
);
ALLOC_OBJ
(
vc
,
VSMW_CLUSTER_MAGIC
);
AN
(
vc
);
ALLOC_OBJ
(
seg
,
VSMWSEG_MAGIC
);
AN
(
seg
);
REPLACE
(
seg
->
class
,
class
);
seg
->
len
=
len
;
VSB_clear
(
vsmw
->
vsb
);
VSB_vprintf
(
vsmw
->
vsb
,
fmt
,
va
);
AZ
(
VSB_finish
(
vsmw
->
vsb
));
REPLACE
(
seg
->
id
,
VSB_data
(
vsmw
->
vsb
));
vsmw_mkent
(
vsmw
,
pfx
);
REPLACE
(
vc
->
fn
,
VSB_data
(
vsmw
->
vsb
));
vsmw_mkent
(
vsmw
,
class
);
REPLACE
(
seg
->
fn
,
VSB_data
(
vsmw
->
vsb
));
VTAILQ_INSERT_TAIL
(
&
vsmw
->
clusters
,
vc
,
list
);
ps
=
getpagesize
();
len
=
RUP2
(
len
,
ps
);
vc
->
len
=
len
;
fd
=
openat
(
vsmw
->
vdirfd
,
seg
->
fn
,
fd
=
openat
(
vsmw
->
vdirfd
,
vc
->
fn
,
O_RDWR
|
O_CREAT
|
O_EXCL
,
vsmw
->
mode
);
assert
(
fd
>=
0
);
AZ
(
VFIL_allocate
(
fd
,
(
off_t
)
len
,
1
));
seg
->
ptr
=
(
void
*
)
mmap
(
NULL
,
len
,
vc
->
ptr
=
(
void
*
)
mmap
(
NULL
,
len
,
PROT_READ
|
PROT_WRITE
,
MAP_HASSEMAPHORE
|
MAP_NOSYNC
|
MAP_SHARED
,
fd
,
0
);
AZ
(
close
(
fd
));
assert
(
seg
->
ptr
!=
MAP_FAILED
);
(
void
)
mlock
(
seg
->
ptr
,
len
);
assert
(
vc
->
ptr
!=
MAP_FAILED
);
(
void
)
mlock
(
vc
->
ptr
,
len
);
return
(
vc
);
}
static
void
vsmw_DestroyCluster
(
struct
vsmw
*
vsmw
,
struct
vsmw_cluster
**
vcp
)
{
struct
vsmw_cluster
*
vc
;
CHECK_OBJ_NOTNULL
(
vsmw
,
VSMW_MAGIC
);
AN
(
vcp
);
vc
=
*
vcp
;
*
vcp
=
NULL
;
CHECK_OBJ_NOTNULL
(
vc
,
VSMW_CLUSTER_MAGIC
);
AZ
(
vc
->
refs
);
AZ
(
munmap
(
vc
->
ptr
,
vc
->
len
));
VTAILQ_REMOVE
(
&
vsmw
->
clusters
,
vc
,
list
);
if
(
unlinkat
(
vsmw
->
vdirfd
,
vc
->
fn
,
0
))
assert
(
errno
==
ENOENT
);
REPLACE
(
vc
->
fn
,
NULL
);
FREE_OBJ
(
vc
);
}
/*--------------------------------------------------------------------*/
void
*
VSMW_Allocv
(
struct
vsmw
*
vsmw
,
const
char
*
class
,
size_t
len
,
const
char
*
fmt
,
va_list
va
)
{
struct
vsmwseg
*
seg
;
struct
vsmw_cluster
*
vc
;
int
fd
;
CHECK_OBJ_NOTNULL
(
vsmw
,
VSMW_MAGIC
);
ALLOC_OBJ
(
seg
,
VSMWSEG_MAGIC
);
AN
(
seg
);
REPLACE
(
seg
->
class
,
class
);
seg
->
len
=
len
;
VSB_clear
(
vsmw
->
vsb
);
VSB_vprintf
(
vsmw
->
vsb
,
fmt
,
va
);
AZ
(
VSB_finish
(
vsmw
->
vsb
));
REPLACE
(
seg
->
id
,
VSB_data
(
vsmw
->
vsb
));
vc
=
vsmw_NewCluster
(
vsmw
,
len
,
class
);
AN
(
vc
);
vc
->
refs
++
;
seg
->
cluster
=
vc
;
seg
->
ptr
=
vc
->
ptr
;
VTAILQ_INSERT_TAIL
(
&
vsmw
->
segs
,
seg
,
list
);
fd
=
openat
(
vsmw
->
vdirfd
,
vsmw
->
idx
,
O_APPEND
|
O_WRONLY
);
...
...
@@ -212,19 +273,14 @@ vsmw_delseg(struct vsmw *vsmw, struct vsmwseg *seg, int fixidx)
{
char
*
t
=
NULL
;
int
fd
;
size_t
len
;
CHECK_OBJ_NOTNULL
(
vsmw
,
VSMW_MAGIC
);
CHECK_OBJ_NOTNULL
(
seg
,
VSMWSEG_MAGIC
);
len
=
getpagesize
();
len
=
RUP2
(
seg
->
len
,
len
);
AZ
(
munmap
(
seg
->
ptr
,
len
));
if
(
!--
seg
->
cluster
->
refs
)
vsmw_DestroyCluster
(
vsmw
,
&
seg
->
cluster
);
VTAILQ_REMOVE
(
&
vsmw
->
segs
,
seg
,
list
);
if
(
unlinkat
(
vsmw
->
vdirfd
,
seg
->
fn
,
0
))
assert
(
errno
==
ENOENT
);
REPLACE
(
seg
->
fn
,
NULL
);
REPLACE
(
seg
->
class
,
NULL
);
REPLACE
(
seg
->
id
,
NULL
);
FREE_OBJ
(
seg
);
...
...
@@ -233,7 +289,8 @@ vsmw_delseg(struct vsmw *vsmw, struct vsmwseg *seg, int fixidx)
vsmw_mkent
(
vsmw
,
vsmw
->
idx
);
REPLACE
(
t
,
VSB_data
(
vsmw
->
vsb
));
AN
(
t
);
fd
=
openat
(
vsmw
->
vdirfd
,
t
,
O_WRONLY
|
O_CREAT
|
O_EXCL
,
vsmw
->
mode
);
fd
=
openat
(
vsmw
->
vdirfd
,
t
,
O_WRONLY
|
O_CREAT
|
O_EXCL
,
vsmw
->
mode
);
assert
(
fd
>=
0
);
vsmw_idx_head
(
vsmw
,
fd
);
VTAILQ_FOREACH
(
seg
,
&
vsmw
->
segs
,
list
)
...
...
@@ -280,6 +337,7 @@ VSMW_New(int vdirfd, int mode, const char *idxname)
AN
(
vsmw
);
VTAILQ_INIT
(
&
vsmw
->
segs
);
VTAILQ_INIT
(
&
vsmw
->
clusters
);
vsmw
->
vsb
=
VSB_new_auto
();
AN
(
vsmw
->
vsb
);
REPLACE
(
vsmw
->
idx
,
idxname
);
...
...
@@ -306,11 +364,11 @@ VSMW_Destroy(struct vsmw **pp)
struct
vsmwseg
*
seg
,
*
s2
;
TAKE_OBJ_NOTNULL
(
vsmw
,
pp
,
VSMW_MAGIC
);
VTAILQ_FOREACH_SAFE
(
seg
,
&
vsmw
->
segs
,
list
,
s2
)
vsmw_delseg
(
vsmw
,
seg
,
0
);
if
(
unlinkat
(
vsmw
->
vdirfd
,
vsmw
->
idx
,
0
))
assert
(
errno
==
ENOENT
);
REPLACE
(
vsmw
->
idx
,
NULL
);
VTAILQ_FOREACH_SAFE
(
seg
,
&
vsmw
->
segs
,
list
,
s2
)
vsmw_delseg
(
vsmw
,
seg
,
0
);
VSB_destroy
(
&
vsmw
->
vsb
);
AZ
(
close
(
vsmw
->
vdirfd
));
FREE_OBJ
(
vsmw
);
...
...
bin/varnishd/mgt/mgt.h
View file @
ecb58d71
...
...
@@ -49,7 +49,7 @@
#include "common/common_param.h"
struct
vsc_seg
;
struct
vsm_cluster
;
struct
vsm
w
_cluster
;
#include "VSC_mgt.h"
struct
cli
;
...
...
bin/varnishd/mgt/mgt_child.c
View file @
ecb58d71
...
...
@@ -347,6 +347,8 @@ mgt_launch_child(struct cli *cli)
child_main
(
mgt_param
.
sigsegv_handler
,
mgt_param
.
wthread_stacksize
);
// VSMW_Destroy(&heritage.proc_vsmw);
exit
(
0
);
}
assert
(
pid
>
1
);
...
...
include/vrt.h
View file @
ecb58d71
...
...
@@ -113,7 +113,7 @@ struct vmod_priv;
struct
vrt_acl
;
struct
vsb
;
struct
vsc_seg
;
struct
vsm_cluster
;
struct
vsm
w
_cluster
;
struct
vsl_log
;
struct
ws
;
...
...
@@ -388,14 +388,14 @@ void VRT_synth_page(VRT_CTX, const char *, ...);
/* Backend related */
struct
director
*
VRT_new_backend
(
VRT_CTX
,
const
struct
vrt_backend
*
);
struct
director
*
VRT_new_backend_clustered
(
VRT_CTX
,
struct
vsm_cluster
*
,
const
struct
vrt_backend
*
);
struct
vsm
w
_cluster
*
,
const
struct
vrt_backend
*
);
size_t
VRT_backend_vsm_need
(
VRT_CTX
);
void
VRT_delete_backend
(
VRT_CTX
,
struct
director
**
);
int
VRT_backend_healthy
(
VRT_CTX
,
struct
director
*
);
/* VSM related */
struct
vsm_cluster
*
VRT_VSM_Cluster_New
(
VRT_CTX
,
size_t
);
void
VRT_VSM_Cluster_Destroy
(
VRT_CTX
,
struct
vsm_cluster
**
);
struct
vsm
w
_cluster
*
VRT_VSM_Cluster_New
(
VRT_CTX
,
size_t
);
void
VRT_VSM_Cluster_Destroy
(
VRT_CTX
,
struct
vsm
w
_cluster
**
);
/* cache_director.c */
int
VRT_Healthy
(
VRT_CTX
,
VCL_BACKEND
);
...
...
@@ -451,7 +451,7 @@ VCL_STRING VRT_STRANDS_string(VCL_STRANDS);
VCL_STRING
VRT_TIME_string
(
VRT_CTX
,
VCL_TIME
);
#ifdef va_start // XXX: hackish
void
*
VRT_VSC_Alloc
(
struct
vsm_cluster
*
,
struct
vsc_seg
**
,
void
*
VRT_VSC_Alloc
(
struct
vsm
w
_cluster
*
,
struct
vsc_seg
**
,
const
char
*
,
size_t
,
const
unsigned
char
*
,
size_t
,
const
char
*
,
va_list
);
void
VRT_VSC_Destroy
(
const
char
*
,
struct
vsc_seg
*
);
#endif
lib/libvcc/vcc_backend.c
View file @
ecb58d71
...
...
@@ -500,7 +500,7 @@ vcc_Backend_Init(struct vcc *tl)
{
struct
inifin
*
ifp
;
Fh
(
tl
,
0
,
"
\n
static struct vsm_cluster *vsc_cluster;
\n
"
);
Fh
(
tl
,
0
,
"
\n
static struct vsm
w
_cluster *vsc_cluster;
\n
"
);
ifp
=
New_IniFin
(
tl
);
VSB_printf
(
ifp
->
ini
,
"
\t
vsc_cluster = VRT_VSM_Cluster_New(ctx,
\n
"
"
\t
ndirector * VRT_backend_vsm_need(ctx));
\n
"
);
...
...
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