OpenSAF's stream will not be generated immediately after receiving a signal enable trace. If delete stream in this case, the error "stream not found" will be raised. The error should be skipped, avoid confusing with wrong stream name. --- src/dtm/transport/log_server.cc | 19 +++++++++++++++++++ src/dtm/transport/log_server.h | 1 + 2 files changed, 20 insertions(+)
diff --git a/src/dtm/transport/log_server.cc b/src/dtm/transport/log_server.cc index 1beb0c514..439c5c27c 100644 --- a/src/dtm/transport/log_server.cc +++ b/src/dtm/transport/log_server.cc @@ -23,6 +23,7 @@ #include <cstdlib> #include <cstring> #include <map> +#include <list> #include "base/osaf_poll.h" #include "base/string_parse.h" #include "base/time.h" @@ -296,6 +297,12 @@ std::string LogServer::DeleteCmd(const std::string& cmd, } auto iter = log_streams_.find(arg); if (iter == log_streams_.end()) { + if (IsOsafStream(arg)) { + syslog(LOG_NOTICE, + "Stream %s hasn't been created yet, deleting stream will be skipped", + arg.c_str()); + return std::string{"!delete " + arg}; + } return std::string{"Stream not found"}; } LogStream* stream = iter->second; @@ -308,6 +315,18 @@ std::string LogServer::DeleteCmd(const std::string& cmd, return std::string{"!delete " + arg}; } +bool LogServer::IsOsafStream(const std::string& stream) { + const std::list<std::string> osaf_stream{ + "amfd", "amfnd", "osafamfwd", "ckptd", "ckptnd", "clmd", + "clmna", "dtmd", "immpbed", "immd", "immnd", "logd", + "rded", "smfd", "smfnd", "evtd", "fmd", "lckd", + "lcknd", "ntfd", "ntfimcnd", "msgd", "msgnd", "dtd"}; + for (const auto& it : osaf_stream) { + if (stream == std::string{"osaf" + it}) return true; + } + return false; +} + std::string LogServer::FlushCmd(const std::string& cmd, const std::string& arg) { for (const auto& s : log_streams_) { diff --git a/src/dtm/transport/log_server.h b/src/dtm/transport/log_server.h index 0cd801568..8d6642a6b 100644 --- a/src/dtm/transport/log_server.h +++ b/src/dtm/transport/log_server.h @@ -96,6 +96,7 @@ class LogServer { const struct sockaddr_un& addr, socklen_t addrlen); static bool ValidateAddress(const struct sockaddr_un& addr, socklen_t addrlen); + static bool IsOsafStream(const std::string& stream); std::string ExecuteCommand(const std::string& command, const std::string& argument); void CloseIdleStreams(); -- 2.25.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel