From 86ea76d6f9521792905570be2801d1a6077acb7d Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Wed, 10 Jun 2026 15:04:30 +0200 Subject: [PATCH 1/6] DAOS-19133 common: Adjust engin logs severity names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adjust severity names in engine logs to follow ones defined for server - DBUG → DEBUG - ERR → ERROR (TBD) - EMRG → FATAL (TBD) Signed-off-by: Tomasz Gromadzki --- src/gurt/dlog.c | 4 ++-- src/tests/ftest/cart/util/cart_logparse.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gurt/dlog.c b/src/gurt/dlog.c index 83201313eff..196687e1eaa 100644 --- a/src/gurt/dlog.c +++ b/src/gurt/dlog.c @@ -115,8 +115,8 @@ static const char *clog_pristr(int); static int clog_setnfac(int); /* static arrays for converting between pri's and strings */ -static const char * const norm[] = { "DBUG", "INFO", "NOTE", "WARN", "ERR ", - "CRIT", "ALRT", "EMRG", "EMIT"}; +static const char *const norm[] = { "DEBUG", "INFO ", "NOTE ", "WARN ", "ERR ", + "CRIT ", "ALRT ", "EMRG ", "EMIT "}; /** * clog_pristr: convert priority to 4 byte symbolic name. * diff --git a/src/tests/ftest/cart/util/cart_logparse.py b/src/tests/ftest/cart/util/cart_logparse.py index 765c8079172..a4c5bb90a98 100644 --- a/src/tests/ftest/cart/util/cart_logparse.py +++ b/src/tests/ftest/cart/util/cart_logparse.py @@ -34,7 +34,7 @@ class InvalidLogFile(Exception): 'WARN': 6, 'NOTE': 7, 'INFO': 8, - 'DBUG': 9} + 'DEBUG': 9} # Make a reverse lookup from log level to name. LOG_NAMES = {} From 225805907e7fa13e991092d856d947b267a4df44 Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Thu, 18 Jun 2026 16:01:00 +0200 Subject: [PATCH 2/6] fix: do not add space after priority Signed-off-by: Tomasz Gromadzki Priority: 2 Cancel-prev-build: false Skip-python-bandit: true Skip-unit-test: true Skip-unit-test-memcheck: true Skip-test-el-9-rpms: true Skip-test-leap-15-rpms: true Skip-func-hw-test: true Skip-build-el8-gcc: true Skip-build-leap15-gcc: true Skip-unit-tests:true Skip-NLT: true Skip-fault-injection-test: true --- src/gurt/dlog.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gurt/dlog.c b/src/gurt/dlog.c index 196687e1eaa..00232870090 100644 --- a/src/gurt/dlog.c +++ b/src/gurt/dlog.c @@ -115,8 +115,8 @@ static const char *clog_pristr(int); static int clog_setnfac(int); /* static arrays for converting between pri's and strings */ -static const char *const norm[] = { "DEBUG", "INFO ", "NOTE ", "WARN ", "ERR ", - "CRIT ", "ALRT ", "EMRG ", "EMIT "}; +static const char *const norm[] = { "DEBUG", "INFO", "NOTE", "WARN", "ERR", + "CRIT", "ALRT", "EMRG", "EMIT"}; /** * clog_pristr: convert priority to 4 byte symbolic name. * From e436d97ff277eb066050d72dfd0379bc2f018ac3 Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Tue, 23 Jun 2026 22:07:52 +0200 Subject: [PATCH 3/6] Ignore log lines without PID info as DAOS define. Signed-off-by: Tomasz Gromadzki Priority: 2 Cancel-prev-build: false Skip-python-bandit: true Skip-unit-test: true Skip-unit-test-memcheck: true Skip-test-el-9-rpms: true Skip-test-leap-15-rpms: true Skip-func-hw-test: true Skip-build-el8-gcc: true Skip-build-leap15-gcc: true Skip-unit-tests:true Skip-NLT: true Skip-fault-injection-test: true --- src/tests/ftest/cart/util/cart_logparse.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/tests/ftest/cart/util/cart_logparse.py b/src/tests/ftest/cart/util/cart_logparse.py index a4c5bb90a98..9225e8e3adb 100644 --- a/src/tests/ftest/cart/util/cart_logparse.py +++ b/src/tests/ftest/cart/util/cart_logparse.py @@ -73,8 +73,12 @@ class LogLine(): # pylint: disable=too-many-public-methods @staticmethod - def is_valid(line): - """Return True if a valid CaRT log line is recognized.""" + def is_valid(line, _pid_tag_re=re.compile(r'.+\[\d+/\d+/\d+\]')): + """Return True if a valid CaRT log line is recognized. + + Assumes DLOG_FLV_TAG and DLOG_FLV_LOGPID are set, so fields[4] has the form TAG[pid/tid/uid] + where TAG is one or more characters and pid/tid/uid are decimal integers. + """ fields = line.split(None, 6) return ( # pylint: disable=too-many-boolean-expressions @@ -87,6 +91,8 @@ def is_valid(line): and len(fields[1]) == 10 and fields[1][4] == '/' and fields[1][7] == '/' # Valid time: hh:mm:ss.micros and len(fields[2]) == 15 and fields[2][2] == ':' and fields[2][8] == '.' + # Assuming DLOG_FLV_TAG and DLOG_FLV_LOGPID are set: TAG[pid/tid/uid] + and _pid_tag_re.fullmatch(fields[4]) # pylint: enable=too-many-boolean-expressions ) From cef1dfa0abd6dc2cb499efacc34223d96cf291cf Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Tue, 23 Jun 2026 22:25:38 +0200 Subject: [PATCH 4/6] Make all changes Signed-off-by: Tomasz Gromadzki Priority: 2 Cancel-prev-build: false Skip-python-bandit: true Skip-unit-test: true Skip-unit-test-memcheck: true Skip-test-el-9-rpms: true Skip-test-leap-15-rpms: true Skip-func-hw-test: true Skip-build-el8-gcc: true Skip-build-leap15-gcc: true Skip-unit-tests:true Skip-NLT: true Skip-fault-injection-test: true --- src/gurt/dlog.c | 4 ++-- src/tests/ftest/cart/util/cart_logparse.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gurt/dlog.c b/src/gurt/dlog.c index 00232870090..463fb34d063 100644 --- a/src/gurt/dlog.c +++ b/src/gurt/dlog.c @@ -115,8 +115,8 @@ static const char *clog_pristr(int); static int clog_setnfac(int); /* static arrays for converting between pri's and strings */ -static const char *const norm[] = { "DEBUG", "INFO", "NOTE", "WARN", "ERR", - "CRIT", "ALRT", "EMRG", "EMIT"}; +static const char *const norm[] = { "DEBUG", "INFO ", "NOTE ", "WARN ", "ERROR", + "CRIT ", "ALRT ", "FATAL", "EMIT "}; /** * clog_pristr: convert priority to 4 byte symbolic name. * diff --git a/src/tests/ftest/cart/util/cart_logparse.py b/src/tests/ftest/cart/util/cart_logparse.py index 9225e8e3adb..b7d10d40fee 100644 --- a/src/tests/ftest/cart/util/cart_logparse.py +++ b/src/tests/ftest/cart/util/cart_logparse.py @@ -30,7 +30,7 @@ class InvalidLogFile(Exception): 'FATAL': 2, 'EMRG': 3, 'CRIT': 4, - 'ERR': 5, + 'ERROR': 5, 'WARN': 6, 'NOTE': 7, 'INFO': 8, From 0d6b0caeae93a1bf7e72280823fdb47556396b52 Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Wed, 24 Jun 2026 09:49:43 +0200 Subject: [PATCH 5/6] Remove obsolete log level: EMRG EMRG is no longer used and always can be subsituted by FATAL Signed-off-by: Tomasz Gromadzki Priority: 2 Cancel-prev-build: false Skip-python-bandit: true Skip-unit-test: true Skip-unit-test-memcheck: true Skip-test-el-9-rpms: true Skip-test-leap-15-rpms: true Skip-func-hw-test: true Skip-build-el8-gcc: true Skip-build-leap15-gcc: true Skip-unit-tests:true Skip-NLT: true Skip-fault-injection-test: true --- docs/admin/troubleshooting.md | 4 ++-- src/cart/README.env | 2 +- src/control/cmd/ddb/main.go | 4 ++-- src/control/cmd/ddb/manpage.go | 2 +- src/control/server/engine/utils.go | 13 +++++++------ src/tests/ftest/cart/util/cart_logparse.py | 13 ++++++------- utils/config/daos_server.yml | 4 ++-- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/admin/troubleshooting.md b/docs/admin/troubleshooting.md index d9f6763de73..7ad2833d037 100644 --- a/docs/admin/troubleshooting.md +++ b/docs/admin/troubleshooting.md @@ -145,9 +145,9 @@ level of logging on a per-subsystem basis as well ("D_LOG_MASK=DEBUG,MEM=ERR"). - Log Levels: - debug, dbug, info, note, warn, error, err, crit, alrt, fatal, emrg, emit + debug, dbug, info, note, warn, error, err, crit, alrt, fatal, emit -Note: debug == dbug, error == err and fatal == emrg. +Note: debug == dbug and error == err. ### Debug Masks/Streams: diff --git a/src/cart/README.env b/src/cart/README.env index 455384ff679..352e3cc5b2a 100644 --- a/src/cart/README.env +++ b/src/cart/README.env @@ -69,7 +69,7 @@ This file lists the environment variables used in CaRT. . D_LOG_FLUSH Specifies priority level for flushing of messages into the log file. - Can be set to one of the following "DBUG,INFO,NOTE,WARN,ERR,CRIT,ALRT,EMRG,EMIT" + Can be set to one of the following "DBUG,INFO,NOTE,WARN,ERR,CRIT,ALRT,EMIT" If not set will default to "WARN". . DD_STDERR diff --git a/src/control/cmd/ddb/main.go b/src/control/cmd/ddb/main.go index 67cc415069b..35fb985333b 100644 --- a/src/control/cmd/ddb/main.go +++ b/src/control/cmd/ddb/main.go @@ -219,8 +219,8 @@ func strToLogLevels(level string) (logging.LogLevel, engine.LogLevel, error) { return logging.LogLevelError, engine.LogLevelCrit, nil case "ALRT": return logging.LogLevelError, engine.LogLevelAlrt, nil - case "FATAL", "EMRG": - return logging.LogLevelError, engine.LogLevelEmrg, nil + case "FATAL": + return logging.LogLevelError, engine.LogLevelFatal, nil case "EMIT": return logging.LogLevelError, engine.LogLevelEmit, nil default: diff --git a/src/control/cmd/ddb/manpage.go b/src/control/cmd/ddb/manpage.go index ec30b52f9a3..4fd511f827e 100644 --- a/src/control/cmd/ddb/manpage.go +++ b/src/control/cmd/ddb/manpage.go @@ -98,7 +98,7 @@ The Go CLI and the C engine use separate logging systems with different log leve The \fI--debug=\fR option sets the log level for both systems to the closest matching levels. The available log levels are: \fBTRACE\fR, \fBDEBUG\fR (or \fBDBUG\fR), \fBINFO\fR, \fBNOTICE\fR (or \fBNOTE\fR), \fBWARN\fR, \fBERROR\fR (or \fBERR\fR), \fBCRIT\fR, \fBALRT\fR, -\fBFATAL\fR (or \fBEMRG\fR), and \fBEMIT\fR. The default log level is \fBERROR\fR. +\fBFATAL\fR, and \fBEMIT\fR. The default log level is \fBERROR\fR. Logs can be redirected to a file using the \fI--log_dir=\fR option. Note that \fBERROR\fR and above are always printed to the console, even when \fI--log_dir\fR is set.` diff --git a/src/control/server/engine/utils.go b/src/control/server/engine/utils.go index 9f3098389a9..4dd80282aad 100644 --- a/src/control/server/engine/utils.go +++ b/src/control/server/engine/utils.go @@ -1,5 +1,6 @@ // // (C) Copyright 2021-2023 Intel Corporation. +// (C) Copyright 2026 Hewlett Packard Enterprise Development LP // // SPDX-License-Identifier: BSD-2-Clause-Patent // @@ -65,7 +66,7 @@ const ( LogLevelErr LogLevelCrit LogLevelAlrt - LogLevelEmrg + LogLevelFatal LogLevelEmit ) @@ -85,8 +86,8 @@ func (ll LogLevel) String() string { return "CRIT" case LogLevelAlrt: return "ALRT" - case LogLevelEmrg: - return "EMRG" + case LogLevelFatal: + return "FATAL" case LogLevelEmit: return "EMIT" default: @@ -111,8 +112,8 @@ func StrToLogLevel(s string) LogLevel { return LogLevelCrit case "ALRT": return LogLevelAlrt - case "FATAL", "EMRG": - return LogLevelEmrg + case "FATAL": + return LogLevelFatal case "EMIT": return LogLevelEmit default: @@ -123,7 +124,7 @@ func StrToLogLevel(s string) LogLevel { var ( validLogLevels = []string{ "DEBUG", "DBUG", "INFO", "NOTE", "WARN", "ERROR", "ERR", "CRIT", "ALRT", "FATAL", - "EMRG", "EMIT", + "EMIT", } validLogStreams = []string{ "ALL", // Select all streams diff --git a/src/tests/ftest/cart/util/cart_logparse.py b/src/tests/ftest/cart/util/cart_logparse.py index b7d10d40fee..d363d1ba343 100644 --- a/src/tests/ftest/cart/util/cart_logparse.py +++ b/src/tests/ftest/cart/util/cart_logparse.py @@ -28,13 +28,12 @@ class InvalidLogFile(Exception): LOG_LEVELS = { 'EMIT': 1, 'FATAL': 2, - 'EMRG': 3, - 'CRIT': 4, - 'ERROR': 5, - 'WARN': 6, - 'NOTE': 7, - 'INFO': 8, - 'DEBUG': 9} + 'CRIT': 3, + 'ERROR': 4, + 'WARN': 5, + 'NOTE': 6, + 'INFO': 7, + 'DEBUG': 8} # Make a reverse lookup from log level to name. LOG_NAMES = {} diff --git a/utils/config/daos_server.yml b/utils/config/daos_server.yml index a16693c3564..ba50e89fa3b 100644 --- a/utils/config/daos_server.yml +++ b/utils/config/daos_server.yml @@ -424,7 +424,7 @@ # # Mask specifies minimum level of message significance to pass to logger. # # Currently supported values: # # DEBUG, DBUG (alias for DEBUG), INFO, NOTE, WARN, ERROR, ERR (alias for ERROR), CRIT, ALRT, -# # FATAL, EMRG, EMIT +# # FATAL, EMIT # # # # default: ERR # log_mask: INFO @@ -595,7 +595,7 @@ # # Mask specifies minimum level of message significance to pass to logger. # # Currently supported values: # # DEBUG, DBUG (alias for DEBUG), INFO, NOTE, WARN, ERROR, ERR (alias for ERROR), CRIT, ALRT, -# # FATAL, EMRG, EMIT +# # FATAL, EMIT # # # # default: ERR # log_mask: INFO From ec59f1441fc3e4e3afe9fc43405220941cadc216 Mon Sep 17 00:00:00 2001 From: Tomasz Gromadzki Date: Wed, 24 Jun 2026 12:48:00 +0200 Subject: [PATCH 6/6] Fix: addjust search command Signed-off-by: Tomasz Gromadzki Priority: 2 Cancel-prev-build: false Skip-python-bandit: true Skip-unit-test: true Skip-unit-test-memcheck: true Skip-test-el-9-rpms: true Skip-test-leap-15-rpms: true Skip-func-hw-test: true Skip-build-el8-gcc: true Skip-build-leap15-gcc: true Skip-unit-tests:true Skip-NLT: true Skip-fault-injection-test: true --- src/tests/ftest/cart/util/cart_logparse.py | 43 +++++++++++----------- src/tests/ftest/util/general_utils.py | 2 +- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/tests/ftest/cart/util/cart_logparse.py b/src/tests/ftest/cart/util/cart_logparse.py index d363d1ba343..8a0ab9e770b 100644 --- a/src/tests/ftest/cart/util/cart_logparse.py +++ b/src/tests/ftest/cart/util/cart_logparse.py @@ -71,12 +71,13 @@ class LogLine(): # pylint: disable=too-many-public-methods + # Match a log tag with pid/tid/uid ('TAG[pid/tid/uid]'). + # Assumes DLOG_FLV_TAG and DLOG_FLV_LOGPID are set. + _pid_tag_re = re.compile(r'.+\[\d+/\d+/\d+\]') + @staticmethod - def is_valid(line, _pid_tag_re=re.compile(r'.+\[\d+/\d+/\d+\]')): + def is_valid(line): """Return True if a valid CaRT log line is recognized. - - Assumes DLOG_FLV_TAG and DLOG_FLV_LOGPID are set, so fields[4] has the form TAG[pid/tid/uid] - where TAG is one or more characters and pid/tid/uid are decimal integers. """ fields = line.split(None, 6) return ( @@ -91,27 +92,27 @@ def is_valid(line, _pid_tag_re=re.compile(r'.+\[\d+/\d+/\d+\]')): # Valid time: hh:mm:ss.micros and len(fields[2]) == 15 and fields[2][2] == ':' and fields[2][8] == '.' # Assuming DLOG_FLV_TAG and DLOG_FLV_LOGPID are set: TAG[pid/tid/uid] - and _pid_tag_re.fullmatch(fields[4]) + and LogLine._pid_tag_re.fullmatch(fields[4]) # pylint: enable=too-many-boolean-expressions ) # Match an address range, a region in memory. - re_region = re.compile(r"(0|0x[0-9a-f]{1,16})-(0x[0-9a-f]{1,16})") + _re_region = re.compile(r"(0|0x[0-9a-f]{1,16})-(0x[0-9a-f]{1,16})") # Match a pointer, with optional ')', '.' or ',' suffix. - re_pointer = re.compile(r"0x[0-9a-f]{1,16}((\)|\.|\,)?)") + _re_pointer = re.compile(r"0x[0-9a-f]{1,16}((\)|\.|\,)?)") # Match a pid marker - re_pid = re.compile(r"pid=(\d+)") + _re_pid = re.compile(r"pid=(\d+)") # Match a truncated uuid from DF_UUID - re_uuid = re.compile(r"[0-9a-f]{8}(:|\,?)") + _re_uuid = re.compile(r"[0-9a-f]{8}(:|\,?)") # Match a truncated uuid[rank] from DF_DB - re_uuid_rank = re.compile(r"[0-9,a-f]{8}\[\d+\](:?)") + _re_uuid_rank = re.compile(r"[0-9,a-f]{8}\[\d+\](:?)") # Match from DF_UIOD - re_uiod = re.compile(r"\d{1,20}\.\d{1,20}.(\d{1,10})") + _re_uiod = re.compile(r"\d{1,20}\.\d{1,20}.(\d{1,10})") # Match a RPCID from RPC_TRACE macro. - re_rpcid = re.compile(r"rpcid=0x[0-9a-f]{1,16}") + _re_rpcid = re.compile(r"rpcid=0x[0-9a-f]{1,16}") # Match DF_CONT - re_cont = re.compile(r"[0-9a-f]{8}/[0-9a-f]{8}(:?)") + _re_cont = re.compile(r"[0-9a-f]{8}/[0-9a-f]{8}(:?)") def __init__(self, line): # The format of log lines depends on the flags (DLOG_FLV_*) passed during initialization. @@ -215,36 +216,36 @@ def get_anon_msg(self): for entry in self._fields[2:]: field = None - r = self.re_region.fullmatch(entry) + r = self._re_region.fullmatch(entry) if r: field = '0x...-0x...' if not field: - r = self.re_pointer.fullmatch(entry) + r = self._re_pointer.fullmatch(entry) if r: field = '0x...{}'.format(r.group(1)) if not field: - r = self.re_pid.fullmatch(entry) + r = self._re_pid.fullmatch(entry) if r: field = 'pid=' if not field: - r = self.re_uuid.fullmatch(entry) + r = self._re_uuid.fullmatch(entry) if r: field = 'uuid{}'.format(r.group(1)) if not field: - r = self.re_uuid_rank.fullmatch(entry) + r = self._re_uuid_rank.fullmatch(entry) if r: field = 'uuid/rank{}'.format(r.group(1)) if not field: - r = self.re_uiod.fullmatch(entry) + r = self._re_uiod.fullmatch(entry) if r: field = 'uoid.{}'.format(r.group(1)) if not field: - r = self.re_rpcid.fullmatch(entry) + r = self._re_rpcid.fullmatch(entry) if r: field = 'rpcid=' if not field: - r = self.re_cont.fullmatch(entry) + r = self._re_cont.fullmatch(entry) if r: field = 'pool/cont{}'.format(r.group(1)) if field: diff --git a/src/tests/ftest/util/general_utils.py b/src/tests/ftest/util/general_utils.py index 02261e82d95..0b38efe9380 100644 --- a/src/tests/ftest/util/general_utils.py +++ b/src/tests/ftest/util/general_utils.py @@ -545,7 +545,7 @@ def get_errors_count(log, hostlist, file_glob): """ # Get the Client side Error from client_log file. cmd = "cat {} | sed -n -E -e ".format(get_log_file(file_glob)) - cmd += r"'/^ERR[[:space:]].+[[:space:]]DER_[^(]+\([^)]+\).+$/" + cmd += r"'/^ERROR[[:space:]].+[[:space:]]DER_[^(]+\([^)]+\).+$/" cmd += r"s/^.+[[:space:]]DER_[^(]+\((-[[:digit:]]+)\).+$/\1/p'" result = run_remote(log, hostlist, cmd, verbose=False) errors_count = {}