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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel