htrdr

Solving radiative transfer in heterogeneous media
git clone git://git.meso-star.fr/htrdr.git
Log | Files | Refs | README | LICENSE

commit 3ebedc84a5e49765f08437533696fd07d997bc75
parent ac8d6b2c9ee8f43fa81c5a943d3c945f4b339ff3
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Tue, 26 Nov 2024 16:15:17 +0100

core: fix logging policy in multi-process executions

Only the master process should log information and warnings. While this
was the case for messages logged by htrdr commands, the libraries they
rely on continued to log all their messages for all processes. Hence
this commit that fixes this issue.

Diffstat:
Msrc/core/htrdr_log.c | 59+++++++++++++++++++++++++++++++----------------------------
1 file changed, 31 insertions(+), 28 deletions(-)

diff --git a/src/core/htrdr_log.c b/src/core/htrdr_log.c @@ -33,25 +33,37 @@ static void print_out(const char* msg, void* ctx) { + struct htrdr* htrdr = ctx; ASSERT(msg); - (void)ctx; - fprintf(stderr, HTRDR_LOG_INFO_PREFIX"%s", msg); + + /* Log standard message only on master process */ + if(htrdr->verbose && htrdr->mpi_rank == 0) { + fprintf(stderr, HTRDR_LOG_INFO_PREFIX"%s", msg); + } } static void print_err(const char* msg, void* ctx) { + struct htrdr* htrdr = ctx; ASSERT(msg); - (void)ctx; - fprintf(stderr, HTRDR_LOG_ERROR_PREFIX"%s", msg); + + /* Log errors on all processes */ + if(htrdr->verbose) { + fprintf(stderr, HTRDR_LOG_ERROR_PREFIX"%s", msg); + } } static void print_warn(const char* msg, void* ctx) { - ASSERT(msg); - (void)ctx; - fprintf(stderr, HTRDR_LOG_WARNING_PREFIX"%s", msg); + struct htrdr* htrdr = ctx; + ASSERT(msg && ctx); + + /* Log warnings only on master process */ + if(htrdr->verbose && htrdr->mpi_rank == 0) { + fprintf(stderr, HTRDR_LOG_WARNING_PREFIX"%s", msg); + } } static void @@ -62,9 +74,7 @@ log_msg va_list vargs) { ASSERT(htrdr && msg); - if(htrdr->verbose) { - CHK(logger_vprint(&htrdr->logger, stream, msg, vargs) == RES_OK); - } + CHK(logger_vprint(&htrdr->logger, stream, msg, vargs) == RES_OK); } /******************************************************************************* @@ -73,14 +83,11 @@ log_msg void htrdr_log(struct htrdr* htrdr, const char* msg, ...) { + va_list vargs_list; ASSERT(htrdr && msg); - /* Log standard message only on master process */ - if(htrdr->mpi_rank == 0) { - va_list vargs_list; - va_start(vargs_list, msg); - log_msg(htrdr, LOG_OUTPUT, msg, vargs_list); - va_end(vargs_list); - } + va_start(vargs_list, msg); + log_msg(htrdr, LOG_OUTPUT, msg, vargs_list); + va_end(vargs_list); } void @@ -88,7 +95,6 @@ htrdr_log_err(struct htrdr* htrdr, const char* msg, ...) { va_list vargs_list; ASSERT(htrdr && msg); - /* Log errors on all processes */ va_start(vargs_list, msg); log_msg(htrdr, LOG_ERROR, msg, vargs_list); va_end(vargs_list); @@ -97,14 +103,11 @@ htrdr_log_err(struct htrdr* htrdr, const char* msg, ...) void htrdr_log_warn(struct htrdr* htrdr, const char* msg, ...) { + va_list vargs_list; ASSERT(htrdr && msg); - /* Log warnings only on master process */ - if(htrdr->mpi_rank == 0) { - va_list vargs_list; - va_start(vargs_list, msg); - log_msg(htrdr, LOG_WARNING, msg, vargs_list); - va_end(vargs_list); - } + va_start(vargs_list, msg); + log_msg(htrdr, LOG_WARNING, msg, vargs_list); + va_end(vargs_list); } /******************************************************************************* @@ -114,7 +117,7 @@ void setup_logger(struct htrdr* htrdr) { logger_init(htrdr->allocator, &htrdr->logger); - logger_set_stream(&htrdr->logger, LOG_OUTPUT, print_out, NULL); - logger_set_stream(&htrdr->logger, LOG_ERROR, print_err, NULL); - logger_set_stream(&htrdr->logger, LOG_WARNING, print_warn, NULL); + logger_set_stream(&htrdr->logger, LOG_OUTPUT, print_out, htrdr); + logger_set_stream(&htrdr->logger, LOG_ERROR, print_err, htrdr); + logger_set_stream(&htrdr->logger, LOG_WARNING, print_warn, htrdr); }