Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libvmod-all_healthy
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
libvmod-all_healthy
Commits
b2d026a9
Commit
b2d026a9
authored
Aug 13, 2018
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
backport to 4.1
parent
c4e698e9
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
21 deletions
+59
-21
configure.ac
configure.ac
+1
-1
vmod_all_healthy.c
src/vmod_all_healthy.c
+58
-20
No files found.
configure.ac
View file @
b2d026a9
...
@@ -18,7 +18,7 @@ AC_ARG_WITH([rst2man],
...
@@ -18,7 +18,7 @@ AC_ARG_WITH([rst2man],
[RST2MAN="$withval"],
[RST2MAN="$withval"],
AC_CHECK_PROGS(RST2MAN, [rst2man rst2man.py], []))
AC_CHECK_PROGS(RST2MAN, [rst2man rst2man.py], []))
VARNISH_PREREQ([
5
.2.0])
VARNISH_PREREQ([
4.1.0], [4
.2.0])
VARNISH_VMODS([all_healthy])
VARNISH_VMODS([all_healthy])
AC_CONFIG_FILES([
AC_CONFIG_FILES([
...
...
src/vmod_all_healthy.c
View file @
b2d026a9
...
@@ -33,10 +33,39 @@
...
@@ -33,10 +33,39 @@
#include <stdlib.h> // free/calloc
#include <stdlib.h> // free/calloc
#include <cache/cache.h>
#include <cache/cache.h>
#include <cache/cache_director.h>
#include <vcl.h>
#include <vcl.h>
#include <vrt.h>
#include "vcc_all_healthy_if.h"
#include "vcc_all_healthy_if.h"
/* ------------------------------------------------------------
* compat
*/
VCL_VOID
VRT_fail
(
VRT_CTX
,
const
char
*
fmt
,
...)
{
va_list
ap
;
assert
(
ctx
->
vsl
!=
NULL
||
ctx
->
msg
!=
NULL
);
AZ
(
strchr
(
fmt
,
'\n'
));
va_start
(
ap
,
fmt
);
if
(
ctx
->
vsl
!=
NULL
)
VSLbv
(
ctx
->
vsl
,
SLT_VCL_Error
,
fmt
,
ap
);
else
{
VSB_vprintf
(
ctx
->
msg
,
fmt
,
ap
);
VSB_putc
(
ctx
->
msg
,
'\n'
);
}
va_end
(
ap
);
VRT_handling
(
ctx
,
VCL_RET_FAIL
);
}
/* ------------------------------------------------------------
* director
*/
struct
vmod_all_healthy_director
{
struct
vmod_all_healthy_director
{
unsigned
magic
;
unsigned
magic
;
#define VMOD_ALL_HEALTHY_DIRECTOR_MAGIC 0x0d8790a3
#define VMOD_ALL_HEALTHY_DIRECTOR_MAGIC 0x0d8790a3
...
@@ -47,22 +76,16 @@ struct vmod_all_healthy_director {
...
@@ -47,22 +76,16 @@ struct vmod_all_healthy_director {
VCL_BACKEND
*
consider
;
VCL_BACKEND
*
consider
;
};
};
static
VCL_BACKEND
vmod_director_resolve
(
VRT_CTX
,
VCL_BACKEND
);
static
VCL_BACKEND
vmod_director_resolve
(
VCL_BACKEND
,
struct
worker
*
,
static
VCL_BOOL
vmod_director_healthy
(
VRT_CTX
,
VCL_BACKEND
,
VCL_TIME
*
);
struct
busyobj
*
);
static
VCL_BOOL
vmod_director_healthy
(
VCL_BACKEND
,
const
struct
busyobj
*
,
static
const
struct
vdi_methods
vmod_director_methods
[
1
]
=
{
VCL_TIME
*
);
{
.
magic
=
VDI_METHODS_MAGIC
,
.
type
=
"all_healthy"
,
.
resolve
=
vmod_director_resolve
,
.
healthy
=
vmod_director_healthy
,
}
};
VCL_VOID
VCL_VOID
vmod_director__init
(
VRT_CTX
,
vmod_director__init
(
VRT_CTX
,
struct
vmod_all_healthy_director
**
dp
,
const
char
*
vcl_name
)
struct
vmod_all_healthy_director
**
dp
,
const
char
*
vcl_name
)
{
{
struct
director
*
dir
;
struct
vmod_all_healthy_director
*
d
;
struct
vmod_all_healthy_director
*
d
;
const
int
spc
=
4
;
const
int
spc
=
4
;
...
@@ -79,11 +102,19 @@ vmod_director__init(VRT_CTX,
...
@@ -79,11 +102,19 @@ vmod_director__init(VRT_CTX,
goto
fail_consider
;
goto
fail_consider
;
}
}
d
->
spcconsider
=
spc
;
d
->
spcconsider
=
spc
;
d
->
dir
=
VRT_AddDirector
(
ctx
,
vmod_director_methods
,
d
,
"%s"
,
vcl_name
);
if
(
d
->
dir
==
NULL
)
{
ALLOC_OBJ
(
dir
,
DIRECTOR_MAGIC
);
VRT_fail
(
ctx
,
"AddDirector failed"
);
if
(
dir
==
NULL
)
{
VRT_fail
(
ctx
,
"director alloc failed"
);
goto
fail_dir
;
goto
fail_dir
;
}
}
dir
->
name
=
"all_healthy"
;
REPLACE
(
dir
->
vcl_name
,
vcl_name
);
dir
->
priv
=
d
;
dir
->
healthy
=
vmod_director_healthy
;
dir
->
resolve
=
vmod_director_resolve
;
d
->
dir
=
dir
;
*
dp
=
d
;
*
dp
=
d
;
return
;
return
;
...
@@ -102,7 +133,9 @@ vmod_director__fini(struct vmod_all_healthy_director **dp) {
...
@@ -102,7 +133,9 @@ vmod_director__fini(struct vmod_all_healthy_director **dp) {
if
(
d
==
NULL
)
if
(
d
==
NULL
)
return
;
return
;
CHECK_OBJ
(
d
,
VMOD_ALL_HEALTHY_DIRECTOR_MAGIC
);
CHECK_OBJ
(
d
,
VMOD_ALL_HEALTHY_DIRECTOR_MAGIC
);
VRT_DelDirector
(
&
d
->
dir
);
free
(
TRUST_ME
(
d
->
dir
->
vcl_name
));
free
(
TRUST_ME
(
d
->
dir
));
free
(
TRUST_ME
(
d
->
consider
));
free
(
TRUST_ME
(
d
->
consider
));
FREE_OBJ
(
d
);
FREE_OBJ
(
d
);
}
}
...
@@ -175,29 +208,34 @@ vmod_director_backend(VRT_CTX, struct vmod_all_healthy_director *d)
...
@@ -175,29 +208,34 @@ vmod_director_backend(VRT_CTX, struct vmod_all_healthy_director *d)
return
(
d
->
dir
);
return
(
d
->
dir
);
}
}
static
VCL_BACKEND
vmod_director_resolve
(
VRT_CTX
,
VCL_BACKEND
b
)
static
VCL_BACKEND
vmod_director_resolve
(
VCL_BACKEND
b
,
struct
worker
*
w
,
struct
busyobj
*
bo
)
{
{
struct
vmod_all_healthy_director
*
d
;
struct
vmod_all_healthy_director
*
d
;
CAST_OBJ_NOTNULL
(
d
,
b
->
priv
,
VMOD_ALL_HEALTHY_DIRECTOR_MAGIC
);
CAST_OBJ_NOTNULL
(
d
,
b
->
priv
,
VMOD_ALL_HEALTHY_DIRECTOR_MAGIC
);
(
void
)
w
;
(
void
)
b
;
return
(
d
->
backend
);
return
(
d
->
backend
);
}
}
static
VCL_BOOL
static
VCL_BOOL
vmod_director_healthy
(
VRT_CTX
,
VCL_BACKEND
b
,
VCL_TIME
*
t
)
vmod_director_healthy
(
VCL_BACKEND
b
,
const
struct
busyobj
*
bo
,
VCL_TIME
*
t
)
{
{
struct
vmod_all_healthy_director
*
d
;
struct
vmod_all_healthy_director
*
d
;
int
i
;
int
i
;
VCL_BOOL
r
=
1
;
VCL_BOOL
r
=
1
;
VCL_TIME
bt
;
VCL_TIME
bt
;
VCL_BACKEND
be
;
CHECK_OBJ_NOTNULL
(
ctx
,
VRT_CTX_MAGIC
);
CAST_OBJ_NOTNULL
(
d
,
b
->
priv
,
VMOD_ALL_HEALTHY_DIRECTOR_MAGIC
);
CAST_OBJ_NOTNULL
(
d
,
b
->
priv
,
VMOD_ALL_HEALTHY_DIRECTOR_MAGIC
);
for
(
i
=
0
;
i
<
d
->
nconsider
;
i
++
)
{
for
(
i
=
0
;
i
<
d
->
nconsider
;
i
++
)
{
CHECK_OBJ_NOTNULL
(
d
->
consider
[
i
],
DIRECTOR_MAGIC
);
be
=
d
->
consider
[
i
];
r
&=
VRT_Healthy
(
ctx
,
d
->
consider
[
i
],
&
bt
);
CHECK_OBJ_NOTNULL
(
be
,
DIRECTOR_MAGIC
);
r
&=
be
->
healthy
(
be
,
bo
,
&
bt
);
if
(
t
&&
bt
>
*
t
)
if
(
t
&&
bt
>
*
t
)
*
t
=
bt
;
*
t
=
bt
;
}
}
...
...
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