Commit 52e381f3 authored by Nils Goroll's avatar Nils Goroll

better approximation of change time

parent 77b6ce82
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <cache/cache.h> #include <cache/cache.h>
#include <vcl.h> #include <vcl.h>
#include <vtim.h>
#include "vcc_all_healthy_if.h" #include "vcc_all_healthy_if.h"
...@@ -184,23 +185,50 @@ static VCL_BACKEND vmod_director_resolve(VRT_CTX, VCL_BACKEND b) ...@@ -184,23 +185,50 @@ static VCL_BACKEND vmod_director_resolve(VRT_CTX, VCL_BACKEND b)
return (d->backend); return (d->backend);
} }
/*
* we can only approximate the change time for the unhealthy case because we do
* not have the full record: consider all backends healthy, a goes down, then b,
* a comes back up: we would need to record the time a went down initially. We
* approximate by returning the time b went down, so:
*
* - unhealthy: earliest change of unhealthy backend
* - healthy: latest change of healthy backend
*/
static VCL_BOOL static VCL_BOOL
vmod_director_healthy(VRT_CTX, VCL_BACKEND b, VCL_TIME *t) vmod_director_healthy(VRT_CTX, VCL_BACKEND b, 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 br, r = 1;
VCL_TIME bt; VCL_TIME bt, tt[2];
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); 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);
if (t) {
tt[0] = VTIM_real();
tt[1] = 0.0;
}
for (i = 0; i < d->nconsider; i++) { for (i = 0; i < d->nconsider; i++) {
CHECK_OBJ_NOTNULL(d->consider[i], DIRECTOR_MAGIC); CHECK_OBJ_NOTNULL(d->consider[i], DIRECTOR_MAGIC);
r &= VRT_Healthy(ctx, d->consider[i], &bt); br = !!VRT_Healthy(ctx, d->consider[i], &bt);
if (t && bt > *t) r &= br;
*t = bt; if (t) {
if (r && br) {
if (bt > tt[1])
tt[1] = bt;
} else if (! br) {
if (bt < tt[0])
tt[0] = bt;
}
}
} }
assert(r == 0 || r == 1);
if (t)
*t = tt[r];
return (r); return (r);
} }
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