Commit b2a83a0a authored by Geoff Simmons's avatar Geoff Simmons

Offline logs & error messages identify objects by <vcl name>.<obj name>.

parent 2457d882
...@@ -39,7 +39,7 @@ client c2 { ...@@ -39,7 +39,7 @@ client c2 {
rxresp rxresp
expect resp.status == 200 expect resp.status == 200
expect resp.http.Error == "true" expect resp.http.Error == "true"
expect resp.http.Errmsg ~ "^vmod file failure: rdr: cannot read info about" expect resp.http.Errmsg ~ {^vmod file failure: vcl1\.rdr: cannot read info about}
} -run } -run
shell {touch ${tmpdir}/error} shell {touch ${tmpdir}/error}
......
...@@ -87,9 +87,9 @@ client c1 { ...@@ -87,9 +87,9 @@ client c1 {
} -run } -run
logexpect l1 -v v1 -d 1 -g raw -q "Debug" { logexpect l1 -v v1 -d 1 -g raw -q "Debug" {
expect * * Debug {^vmod file: rdr: check for \S+ running at} expect * * Debug {^vmod file: vcl3\.rdr: check for \S+ running at}
expect * * Debug {^vmod file: rdr: updating \S+ at} expect * * Debug {^vmod file: vcl3\.rdr: updating \S+ at}
expect * * Debug {^vmod file: rdr: check for \S+ finished successfully at} expect * * Debug {^vmod file: vcl3\.rdr: check for \S+ finished successfully at}
} -run } -run
shell {rm -f ${tmpdir}/file} shell {rm -f ${tmpdir}/file}
...@@ -104,12 +104,12 @@ client c1 { ...@@ -104,12 +104,12 @@ client c1 {
logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" { logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" {
expect 0 * Begin req expect 0 * Begin req
expect * = VCL_Error {^rdr\.get\(\): vmod file failure: rdr: cannot read info about} expect * = VCL_Error {^rdr\.get\(\): vmod file failure: vcl3\.rdr: cannot read info about}
expect * = End expect * = End
} -run } -run
logexpect l1 -v v1 -d 1 -g raw -q "Error" { logexpect l1 -v v1 -d 1 -g raw -q "Error" {
expect * 0 Error {^vmod file failure: rdr: cannot read info about} expect * 0 Error {^vmod file failure: vcl3\.rdr: cannot read info about}
} -run } -run
shell {echo -n "The quick brown fox jumps over the lazy dog." > ${tmpdir}/fox} shell {echo -n "The quick brown fox jumps over the lazy dog." > ${tmpdir}/fox}
......
...@@ -69,7 +69,7 @@ client c1 { ...@@ -69,7 +69,7 @@ client c1 {
logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" { logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" {
expect 0 * Begin req expect 0 * Begin req
expect * = VCL_Error {^rdr\.size\(\): vmod file failure: rdr: cannot read info about} expect * = VCL_Error {^rdr\.size\(\): vmod file failure: vcl1\.rdr: cannot read info about}
expect * = End expect * = End
} -run } -run
...@@ -99,7 +99,7 @@ delay .1 ...@@ -99,7 +99,7 @@ delay .1
logexpect l1 -v v1 -d 0 -g vxid -q "VCL_Error" { logexpect l1 -v v1 -d 0 -g vxid -q "VCL_Error" {
expect 0 * Begin req expect 0 * Begin req
expect * = VCL_Error {^rdr\.mtime\(\): vmod file failure: rdr: cannot read info about} expect * = VCL_Error {^rdr\.mtime\(\): vmod file failure: vcl2\.rdr: cannot read info about}
expect * = End expect * = End
} -start } -start
......
...@@ -49,7 +49,7 @@ client c1 { ...@@ -49,7 +49,7 @@ client c1 {
logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" { logexpect l1 -v v1 -d 1 -g vxid -q "VCL_Error" {
expect 0 * Begin req expect 0 * Begin req
expect * = VCL_Error {^rdr\.synth\(\): vmod file failure: rdr: cannot read info about} expect * = VCL_Error {^rdr\.synth\(\): vmod file failure: vcl1\.rdr: cannot read info about}
expect * = End expect * = End
} -run } -run
......
...@@ -25,25 +25,25 @@ varnish v1 -arg "-p debug=+vclrel" -vcl { ...@@ -25,25 +25,25 @@ varnish v1 -arg "-p debug=+vclrel" -vcl {
} -start } -start
logexpect l1 -v v1 -d 1 -g raw -q "Debug" { logexpect l1 -v v1 -d 1 -g raw -q "Debug" {
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: updating \S+ at} expect * * Debug {^vmod file: vcl1\.rdr\d: updating \S+ at}
expect * * Debug {^vmod file: rdr\d: check for \S+ finished successfully at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ finished successfully at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: updating \S+ at} expect * * Debug {^vmod file: vcl1\.rdr\d: updating \S+ at}
expect * * Debug {^vmod file: rdr\d: check for \S+ finished successfully at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ finished successfully at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: updating \S+ at} expect * * Debug {^vmod file: vcl1\.rdr\d: updating \S+ at}
expect * * Debug {^vmod file: rdr\d: check for \S+ finished successfully at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ finished successfully at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: updating \S+ at} expect * * Debug {^vmod file: vcl1\.rdr\d: updating \S+ at}
expect * * Debug {^vmod file: rdr\d: check for \S+ finished successfully at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ finished successfully at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: updating \S+ at} expect * * Debug {^vmod file: vcl1\.rdr\d: updating \S+ at}
expect * * Debug {^vmod file: rdr\d: check for \S+ finished successfully at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ finished successfully at}
} -run } -run
varnish v1 -vcl { backend b { .host = "${bad_ip}"; } } varnish v1 -vcl { backend b { .host = "${bad_ip}"; } }
...@@ -55,15 +55,15 @@ delay .5 ...@@ -55,15 +55,15 @@ delay .5
# No checks run in the cold state, must be verified manually in the log. # No checks run in the cold state, must be verified manually in the log.
logexpect l1 -v v1 -d 0 -g raw -q "Debug" { logexpect l1 -v v1 -d 0 -g raw -q "Debug" {
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
expect * * Debug {^vmod file: rdr\d: check for \S+ running at} expect * * Debug {^vmod file: vcl1\.rdr\d: check for \S+ running at}
} -start } -start
varnish v1 -cliok "vcl.state vcl1 warm" varnish v1 -cliok "vcl.state vcl1 warm"
......
...@@ -82,6 +82,7 @@ struct VPFX(file_reader) { ...@@ -82,6 +82,7 @@ struct VPFX(file_reader) {
struct file_info *info; struct file_info *info;
char *addr; char *addr;
char *vcl_name; char *vcl_name;
char *obj_name;
char *errbuf; char *errbuf;
size_t errlen; size_t errlen;
timer_t timerid; timer_t timerid;
...@@ -112,29 +113,32 @@ check(union sigval val) ...@@ -112,29 +113,32 @@ check(union sigval val)
CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC); CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC);
info = rdr->info; info = rdr->info;
AN(rdr->vcl_name); AN(rdr->vcl_name);
AN(rdr->obj_name);
AN(rdr->errbuf); AN(rdr->errbuf);
AN(info->path); AN(info->path);
if (info->log_checks) { if (info->log_checks) {
VTIM_format(VTIM_real(), timbuf); VTIM_format(VTIM_real(), timbuf);
VSL(SLT_Debug, 0, "vmod file: %s: check for %s running at %s", VSL(SLT_Debug, 0,
rdr->vcl_name, info->path, timbuf); "vmod file: %s.%s: check for %s running at %s",
rdr->vcl_name, rdr->obj_name, info->path, timbuf);
} }
AZ(pthread_rwlock_wrlock(&rdr->lock)); AZ(pthread_rwlock_wrlock(&rdr->lock));
errno = 0; errno = 0;
if (stat(info->path, &st) != 0) { if (stat(info->path, &st) != 0) {
VERRMSG(rdr, "%s: cannot read info about %s: %s", rdr->vcl_name, VERRMSG(rdr, "%s.%s: cannot read info about %s: %s",
info->path, vstrerror(errno)); rdr->vcl_name, rdr->obj_name, info->path,
vstrerror(errno));
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
goto out; goto out;
} }
if (!S_ISREG(st.st_mode)) { if (!S_ISREG(st.st_mode)) {
VERRMSG(rdr, "%s: %s is not a regular file", rdr->vcl_name, VERRMSG(rdr, "%s.%s: %s is not a regular file", rdr->vcl_name,
info->path); rdr->obj_name, info->path);
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
goto out; goto out;
...@@ -150,15 +154,15 @@ check(union sigval val) ...@@ -150,15 +154,15 @@ check(union sigval val)
if (info->log_checks) { if (info->log_checks) {
VTIM_format(VTIM_real(), timbuf); VTIM_format(VTIM_real(), timbuf);
VSL(SLT_Debug, 0, "vmod file: %s: updating %s at %s", VSL(SLT_Debug, 0, "vmod file: %s.%s: updating %s at %s",
rdr->vcl_name, info->path, timbuf); rdr->vcl_name, rdr->obj_name, info->path, timbuf);
} }
if (rdr->flags & RDR_MAPPED) { if (rdr->flags & RDR_MAPPED) {
AN(rdr->addr); AN(rdr->addr);
if (munmap(rdr->addr, info->len) != 0) { if (munmap(rdr->addr, info->len) != 0) {
VERRMSG(rdr, "%s: unmap failed: %s", rdr->vcl_name, VERRMSG(rdr, "%s.%s: unmap failed: %s", rdr->vcl_name,
vstrerror(errno)); rdr->obj_name, vstrerror(errno));
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
goto out; goto out;
...@@ -168,8 +172,8 @@ check(union sigval val) ...@@ -168,8 +172,8 @@ check(union sigval val)
errno = 0; errno = 0;
if ((fd = open(info->path, O_RDONLY)) < 0) { if ((fd = open(info->path, O_RDONLY)) < 0) {
VERRMSG(rdr, "%s: cannot open %s: %s", rdr->vcl_name, VERRMSG(rdr, "%s.%s: cannot open %s: %s", rdr->vcl_name,
info->path, vstrerror(errno)); rdr->obj_name, info->path, vstrerror(errno));
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
goto out; goto out;
...@@ -186,8 +190,8 @@ check(union sigval val) ...@@ -186,8 +190,8 @@ check(union sigval val)
errno = 0; errno = 0;
if ((addr = mmap(NULL, st.st_size + 1, PROT_READ, MAP_PRIVATE, fd, 0)) if ((addr = mmap(NULL, st.st_size + 1, PROT_READ, MAP_PRIVATE, fd, 0))
== MAP_FAILED) { == MAP_FAILED) {
VERRMSG(rdr, "%s: could not map %s: %s", rdr->vcl_name, VERRMSG(rdr, "%s.%s: could not map %s: %s", rdr->vcl_name,
info->path, vstrerror(errno)); rdr->obj_name, info->path, vstrerror(errno));
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
closefd(&fd); closefd(&fd);
...@@ -199,16 +203,16 @@ check(union sigval val) ...@@ -199,16 +203,16 @@ check(union sigval val)
if ((err = posix_madvise(addr, st.st_size + 1, POSIX_MADV_SEQUENTIAL)) if ((err = posix_madvise(addr, st.st_size + 1, POSIX_MADV_SEQUENTIAL))
!= 0) { != 0) {
VERRMSG(rdr, "%s: madvise(SEQUENTIAL): %s", rdr->vcl_name, VERRMSG(rdr, "%s.%s: madvise(SEQUENTIAL): %s", rdr->vcl_name,
vstrerror(err)); rdr->obj_name, vstrerror(err));
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
goto out; goto out;
} }
if ((err = posix_madvise(addr, st.st_size + 1, POSIX_MADV_WILLNEED)) if ((err = posix_madvise(addr, st.st_size + 1, POSIX_MADV_WILLNEED))
!= 0) { != 0) {
VERRMSG(rdr, "%s: madvise(WILLNEED): %s", rdr->vcl_name, VERRMSG(rdr, "%s.%s: madvise(WILLNEED): %s", rdr->vcl_name,
vstrerror(err)); rdr->obj_name, vstrerror(err));
VSL(SLT_Error, 0, rdr->errbuf); VSL(SLT_Error, 0, rdr->errbuf);
rdr->flags |= RDR_ERROR; rdr->flags |= RDR_ERROR;
goto out; goto out;
...@@ -228,11 +232,11 @@ check(union sigval val) ...@@ -228,11 +232,11 @@ check(union sigval val)
out: out:
AZ(pthread_rwlock_unlock(&rdr->lock)); AZ(pthread_rwlock_unlock(&rdr->lock));
if (info->log_checks) { if ((rdr->flags & RDR_ERROR) == 0 && info->log_checks) {
VTIM_format(VTIM_real(), timbuf); VTIM_format(VTIM_real(), timbuf);
VSL(SLT_Debug, 0, VSL(SLT_Debug, 0, "vmod file: %s.%s: check for %s "
"vmod file: %s: check for %s finished successfully at %s", "finished successfully at %s", rdr->vcl_name,
rdr->vcl_name, info->path, timbuf); rdr->obj_name, info->path, timbuf);
} }
return; return;
} }
...@@ -300,7 +304,8 @@ vmod_reader__init(VRT_CTX, struct VPFX(file_reader) **rdrp, ...@@ -300,7 +304,8 @@ vmod_reader__init(VRT_CTX, struct VPFX(file_reader) **rdrp,
} }
rdr->info = info; rdr->info = info;
rdr->vcl_name = strdup(vcl_name); rdr->obj_name = strdup(vcl_name);
rdr->vcl_name = strdup(VCL_Name(ctx->vcl));
info->log_checks = log_checks; info->log_checks = log_checks;
if (*name == '/') if (*name == '/')
...@@ -355,7 +360,8 @@ vmod_reader__init(VRT_CTX, struct VPFX(file_reader) **rdrp, ...@@ -355,7 +360,8 @@ vmod_reader__init(VRT_CTX, struct VPFX(file_reader) **rdrp,
return; return;
} }
rdr->errlen = ERRMSG_LEN + strlen(name) + strlen(vcl_name); rdr->errlen = ERRMSG_LEN + strlen(name) + strlen(vcl_name)
+ strlen(VCL_Name(ctx->vcl));
errno = 0; errno = 0;
rdr->errbuf = malloc(rdr->errlen); rdr->errbuf = malloc(rdr->errlen);
if (rdr->errbuf == NULL) { if (rdr->errbuf == NULL) {
...@@ -436,24 +442,24 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp) ...@@ -436,24 +442,24 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp)
TAKE_OBJ_NOTNULL(rdr, rdrp, FILE_READER_MAGIC); TAKE_OBJ_NOTNULL(rdr, rdrp, FILE_READER_MAGIC);
if (rdr->flags & RDR_TIMER_INIT) { if (rdr->flags & RDR_TIMER_INIT) {
AN(rdr->vcl_name); AN(rdr->obj_name);
errno = 0; errno = 0;
if (timer_delete(rdr->timerid) != 0) if (timer_delete(rdr->timerid) != 0)
VSL(SLT_Error, 0, "vmod file %s finalization: " VSL(SLT_Error, 0, "vmod file %s.%s finalization: "
"cannot delete timer: %s", rdr->vcl_name, "cannot delete timer: %s", rdr->vcl_name,
vstrerror(errno)); rdr->obj_name, vstrerror(errno));
} }
if (rdr->flags & RDR_MAPPED) { if (rdr->flags & RDR_MAPPED) {
CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC); CHECK_OBJ_NOTNULL(rdr->info, FILE_INFO_MAGIC);
AN(rdr->addr); AN(rdr->addr);
AN(rdr->vcl_name); AN(rdr->obj_name);
errno = 0; errno = 0;
if (munmap(rdr->addr, rdr->info->len) != 0) if (munmap(rdr->addr, rdr->info->len) != 0)
VSL(SLT_Error, 0, "vmod file %s finalization: " VSL(SLT_Error, 0, "vmod file %s.%s finalization: "
"unmap failed: %s", rdr->vcl_name, "unmap failed: %s", rdr->vcl_name, rdr->obj_name,
vstrerror(errno)); vstrerror(errno));
} }
...@@ -465,6 +471,8 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp) ...@@ -465,6 +471,8 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp)
} }
if (rdr->vcl_name != NULL) if (rdr->vcl_name != NULL)
free(rdr->vcl_name); free(rdr->vcl_name);
if (rdr->obj_name != NULL)
free(rdr->obj_name);
if (rdr->errbuf != NULL) if (rdr->errbuf != NULL)
free(rdr->errbuf); free(rdr->errbuf);
FREE_OBJ(rdr); FREE_OBJ(rdr);
...@@ -474,7 +482,7 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp) ...@@ -474,7 +482,7 @@ vmod_reader__fini(struct VPFX(file_reader) **rdrp)
if ((rdr)->flags & RDR_ERROR) { \ if ((rdr)->flags & RDR_ERROR) { \
AN(strcmp((rdr)->errbuf, NO_ERR)); \ AN(strcmp((rdr)->errbuf, NO_ERR)); \
VRT_fail((ctx), "%s." method "(): %s", \ VRT_fail((ctx), "%s." method "(): %s", \
(rdr)->vcl_name, (rdr)->errbuf); \ (rdr)->obj_name, (rdr)->errbuf); \
AZ(pthread_rwlock_unlock(&(rdr)->lock)); \ AZ(pthread_rwlock_unlock(&(rdr)->lock)); \
return ret; \ return ret; \
} \ } \
...@@ -507,7 +515,7 @@ vmod_reader_synth(VRT_CTX, struct VPFX(file_reader) *rdr) ...@@ -507,7 +515,7 @@ vmod_reader_synth(VRT_CTX, struct VPFX(file_reader) *rdr)
if ((ctx->method & VCL_MET_SYNTH) == 0) { if ((ctx->method & VCL_MET_SYNTH) == 0) {
VRT_fail(ctx, "%s.synth() may only be called in vcl_synth", VRT_fail(ctx, "%s.synth() may only be called in vcl_synth",
rdr->vcl_name); rdr->obj_name);
return; return;
} }
...@@ -589,7 +597,7 @@ vmod_reader_next_check(VRT_CTX, struct VPFX(file_reader) *rdr) ...@@ -589,7 +597,7 @@ vmod_reader_next_check(VRT_CTX, struct VPFX(file_reader) *rdr)
errno = 0; errno = 0;
if (timer_gettime(rdr->timerid, &t) != 0) { if (timer_gettime(rdr->timerid, &t) != 0) {
VRT_fail(ctx, "%s.next_check(): timer read failed: %s", VRT_fail(ctx, "%s.next_check(): timer read failed: %s",
rdr->vcl_name, vstrerror(errno)); rdr->obj_name, vstrerror(errno));
return (0.); return (0.);
} }
return (t.it_value.tv_sec + 1e-9 * t.it_value.tv_nsec); return (t.it_value.tv_sec + 1e-9 * t.it_value.tv_nsec);
......
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