When log resilient mode is enabled and timeout of saflogger is configured larger than logResilienceTimeout , the saflogger will be blocked forever until the underlying filesystem is responsive. The fix is adding a timer to avoid command loop too long. --- src/log/tools/saf_logger.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/log/tools/saf_logger.c b/src/log/tools/saf_logger.c index e9f7e9b36..550e3c58a 100644 --- a/src/log/tools/saf_logger.c +++ b/src/log/tools/saf_logger.c @@ -148,7 +148,8 @@ static SaAisErrorT write_log_record(SaLogHandleT logHandle, int i = 0; struct pollfd fds[1]; int ret; - unsigned int wait_time = 0; + int64_t start_time_us = get_current_SaTime() / 1000; + int64_t wait_time = 0; i++; @@ -166,7 +167,7 @@ retry: if (errorCode != SA_AIS_OK) { if (wait_time) - fprintf(stderr, "Waited for %u seconds.\n", + fprintf(stderr, "Waited for %ld seconds.\n", wait_time / 1000000); fprintf(stderr, "saLogWriteLogAsync FAILED: %s\n", saf_error(errorCode)); @@ -206,8 +207,9 @@ poll_retry: return SA_AIS_ERR_BAD_OPERATION; } + wait_time = (get_current_SaTime() / 1000) - start_time_us; if (cb_error == SA_AIS_ERR_TRY_AGAIN && - wait_time < g_timeout*ONE_SECOND_TO_NS) { + wait_time < g_timeout * ONE_SECOND_TO_NS) { usleep(HUNDRED_MS); wait_time += HUNDRED_MS; goto retry; @@ -221,7 +223,7 @@ poll_retry: if (cb_error != SA_AIS_OK) { if (wait_time) - fprintf(stderr, "Waited for %u seconds.\n", + fprintf(stderr, "Waited for %ld seconds.\n", wait_time / 1000000); fprintf(stderr, "logWriteLogCallbackT FAILED: %s\n", saf_error(cb_error)); -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel