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

Reply via email to