[master] 728b92442 vsm: Drastically refine status checks
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Mon Jun 10 13:42:07 UTC 2024
commit 728b924420bf8eb454d66ed7dd4c238ec470f940
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Tue Jul 4 16:39:55 2023 +0200
vsm: Drastically refine status checks
Summarily:
- index hash change means restarted
- index new plus or minus means changed
- reopening the directory means restarted
diff --git a/bin/varnishtest/tests/a00025.vtc b/bin/varnishtest/tests/a00025.vtc
index 5f45be349..21c513f5c 100644
--- a/bin/varnishtest/tests/a00025.vtc
+++ b/bin/varnishtest/tests/a00025.vtc
@@ -2,29 +2,25 @@ varnishtest "Basic VSM status check"
# just launch varnishd
varnish v1 -cliok ping
-# POLA? vsm m1 -expect-status mgt-running
-vsm m1 -expect-status mgt-running,wrk-restarted
+vsm m1 -expect-status mgt-running
varnish v1 -vcl "backend be none;"
-# POLA? vsm m1 -expect-status mgt-running
-vsm m1 -expect-status mgt-running,wrk-restarted
+vsm m1 -expect-status mgt-running
varnish v1 -start
-# POLA? vsm m1 -expect-status mgt-running,mgt-changed,wrk-running
-vsm m1 -expect-status mgt-running,mgt-changed,mgt-restarted,wrk-running
+vsm m1 -expect-status \
+ mgt-running,mgt-changed,wrk-running,wrk-changed,wrk-restarted
varnish v1 -vcl "backend be none;"
-# POLA? vsm m1 -expect-status mgt-running,wrk-running,wrk-changed
-vsm m1 -expect-status mgt-running,wrk-running
+vsm m1 -expect-status mgt-running,wrk-running,wrk-changed
# The order of status flags does not matter, the next one is equivalent.
varnish v1 -vcl "backend be none;"
-vsm m1 -expect-status wrk-running,mgt-running
+vsm m1 -expect-status wrk-changed,wrk-running,mgt-running
varnish v1 -stop
-# POLA? vsm m1 -expect-status mgt-running,mgt-changed
-vsm m1 -expect-status mgt-running
+vsm m1 -expect-status mgt-running,mgt-changed
varnish v1 -start
-# POLA? vsm m1 -expect-status mgt-running,mgt-changed,wrk-running,wrk-restarted
-vsm m1 -expect-status mgt-running,mgt-changed,mgt-restarted,wrk-running
+vsm m1 -expect-status \
+ mgt-running,mgt-changed,wrk-running,wrk-changed,wrk-restarted
diff --git a/lib/libvarnishapi/vsm.c b/lib/libvarnishapi/vsm.c
index 88426e538..06632d591 100644
--- a/lib/libvarnishapi/vsm.c
+++ b/lib/libvarnishapi/vsm.c
@@ -494,18 +494,18 @@ vsm_vlu_hash(struct vsm *vd, struct vsm_set *vs, const char *line)
i = sscanf(line, "# %ju %ju", &id1, &id2);
if (i != 2) {
- vs->retval |= VSM_MGT_RESTARTED | VSM_MGT_CHANGED;
+ vs->retval |= vs->flag_restarted;
return (0);
}
if (vd->couldkill >= 0 && !kill(id1, 0)) {
vd->couldkill = 1;
} else if (vd->couldkill > 0 && errno == ESRCH) {
- vs->retval |= VSM_MGT_RESTARTED | VSM_MGT_CHANGED;
+ vs->retval |= vs->flag_restarted | VSM_MGT_CHANGED;
return (0);
}
vs->retval |= VSM_MGT_RUNNING;
if (id1 != vs->id1 || id2 != vs->id2) {
- vs->retval |= VSM_MGT_RESTARTED | VSM_MGT_CHANGED;
+ vs->retval |= vs->flag_restarted;
vs->id1 = id1;
vs->id2 = id2;
}
@@ -556,12 +556,13 @@ vsm_vlu_plus(struct vsm *vd, struct vsm_set *vs, const char *line)
vg->cluster = vsm_findcluster(vs, vg->av[1]);
CHECK_OBJ_NOTNULL(vg->cluster, VSM_SEG_MAGIC);
}
+ vs->retval |= vs->flag_changed;
}
return (0);
}
static int
-vsm_vlu_minus(struct vsm *vd, const struct vsm_set *vs, const char *line)
+vsm_vlu_minus(struct vsm *vd, struct vsm_set *vs, const char *line)
{
char **av;
int ac;
@@ -584,6 +585,7 @@ vsm_vlu_minus(struct vsm *vd, const struct vsm_set *vs, const char *line)
for (;vg != NULL; vg = VTAILQ_NEXT(vg, list)) {
if (!vsm_cmp_av(&vg->av[1], &av[1])) {
+ vs->retval |= vs->flag_changed;
vsm_delseg(vg, 1);
break;
}
@@ -645,6 +647,7 @@ vsm_readlines(struct vsm_set *vs)
static unsigned
vsm_refresh_set(struct vsm *vd, struct vsm_set *vs)
{
+ unsigned restarted = 0;
struct stat st;
CHECK_OBJ_NOTNULL(vd, VSM_MAGIC);
@@ -657,6 +660,7 @@ vsm_refresh_set(struct vsm *vd, struct vsm_set *vs)
st.st_mode != vs->dst.st_mode ||
st.st_nlink == 0)) {
closefd(&vs->dfd);
+ restarted = vs->flag_restarted;
}
if (vs->dfd < 0) {
@@ -668,7 +672,7 @@ vsm_refresh_set(struct vsm *vd, struct vsm_set *vs)
if (vs->dfd < 0) {
vs->id1 = vs->id2 = 0;
vsm_wash_set(vs, 1);
- return (vs->retval | vs->flag_restarted);
+ return (vs->retval | restarted);
}
AZ(fstat(vs->dfd, &vs->dst));
@@ -681,6 +685,7 @@ vsm_refresh_set(struct vsm *vd, struct vsm_set *vs)
st.st_size < vs->fst.st_size ||
st.st_nlink < 1)) {
closefd(&vs->fd);
+ vs->retval |= vs->flag_changed;
}
if (vs->fd >= 0) {
@@ -692,7 +697,7 @@ vsm_refresh_set(struct vsm *vd, struct vsm_set *vs)
vs->vg = VTAILQ_FIRST(&vs->segs);
vs->fd = openat(vs->dfd, "_.index", O_RDONLY);
if (vs->fd < 0)
- return (vs->retval | vs->flag_restarted);
+ return (vs->retval | restarted);
VLU_Reset(vs->vlu);
AZ(fstat(vs->fd, &vs->fst));
vsm_readlines(vs);
More information about the varnish-commit
mailing list