Skip to content

Commit

Permalink
Daemons coring continuously when permission to /var/crashes is set to…
Browse files Browse the repository at this point in the history
… 750.

NodeInformation is sent from each of the daemons periodically to nodemgr.
control-node, dns and collector uses boost::filesystem::directory_iterator for
traversal of directory /var/crashes. Each daemon runs with contrail user
permission and due to permission mis-match boost::filesystem directory_iterator
throws an exception thus aborting the daemon.

There is no need to send list of core files anymore as the nodemgr collects
these core files automatically. Remove the call and add try/catch for
future usage of MiscUtils::GetCoreFileList api.

Also changing execption log-level to ERROR instead of DEBUG.

Change-Id: I152c548d3e303a314d0bfa5ec2c3516bf1cdf747
Closes-Bug:1647865
  • Loading branch information
nipak committed Dec 13, 2016
1 parent 362fd07 commit c4f2a66
Show file tree
Hide file tree
Showing 6 changed files with 4 additions and 53 deletions.
5 changes: 0 additions & 5 deletions src/analytics/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,6 @@ bool CollectorSummaryLogger(Collector *collector, const string & hostname,
vector<string> ip_list;
ip_list.push_back(Collector::GetSelfIp());
state.set_self_ip_list(ip_list);
vector<string> list;
MiscUtils::GetCoreFileList(Collector::GetProgramName(), list);
if (list.size()) {
state.set_core_files_list(list);
}
first = false;
}
if (!build_info_set) {
Expand Down
39 changes: 2 additions & 37 deletions src/base/misc_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,21 @@

#include <fstream>
#include <sstream>
#include <stdlib.h>
#include <stdlib.h>
#include <base/misc_utils.h>
#include <base/logging.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "boost/filesystem/operations.hpp"
#include "boost/filesystem/path.hpp"
#include "base/sandesh/version_types.h"
#include "base/logging.h"
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

using namespace std;
namespace fs = boost::filesystem;
const std::string MiscUtils::ContrailVersionCmd = "/usr/bin/contrail-version";
const std::string MiscUtils::CoreFileDir = "/var/crashes/";
const int MiscUtils::MaxCoreFiles = 5;
const map<MiscUtils::BuildModule, string> MiscUtils::BuildModuleNames =
const map<MiscUtils::BuildModule, string> MiscUtils::BuildModuleNames =
MiscUtils::MapInit();

SandeshTraceBufferPtr VersionTraceBuf(SandeshTraceBufferCreate(
Expand All @@ -44,36 +39,6 @@ void MiscUtils::LogVersionInfo(const string build_info, Category::type categ) {
}
}

void MiscUtils::GetCoreFileList(string prog, vector<string> &list) {
if (!fs::exists(CoreFileDir) || !fs::is_directory(CoreFileDir)) {
return;
}
FileMMap files_map;

string filename = "core." + BaseName(prog) + ".";

fs::path dir_path(CoreFileDir.c_str());
fs::directory_iterator end_itr;
for (fs::directory_iterator itr(dir_path); itr != end_itr; itr++) {
if (fs::is_regular_file(itr->status())) {
const string file = itr->path().filename().generic_string();
size_t pos = file.find(filename);
if (pos != 0) {
continue;
}
files_map.insert(FileMMap::value_type(fs::last_write_time
(itr->path()), file));
}
}
FileMMap::reverse_iterator rit;
int count = 0;
for (rit = files_map.rbegin(); rit != files_map.rend() &&
count < MaxCoreFiles; ++rit) {
count++;
list.push_back(rit->second);
}
}

bool MiscUtils::GetVersionInfoInternal(const string &cmd, string &rpm_version,
string &build_num) {
FILE *fp;
Expand Down
1 change: 0 additions & 1 deletion src/base/misc_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ class MiscUtils {
static const std::string CoreFileDir;
static const int MaxCoreFiles;

static void GetCoreFileList(std::string prog, std::vector<std::string> &list);
static bool GetBuildInfo(BuildModule id, const std::string &build_info, std::string &result);
static void GetHostIp(const std::string name, std::vector<std::string> &ip_list);
static void LogVersionInfo(const std::string str, Category::type categ);
Expand Down
4 changes: 2 additions & 2 deletions src/base/task.cc
Original file line number Diff line number Diff line change
Expand Up @@ -286,11 +286,11 @@ tbb::task *TaskImpl::execute() {
// information from the core.
static std::string what = e.what();

LOG(DEBUG, "!!!! ERROR !!!! Task caught fatal exception: " << what
LOG(ERROR, "!!!! ERROR !!!! Task caught fatal exception: " << what
<< " TaskImpl: " << this);
assert(0);
} catch (...) {
LOG(DEBUG, "!!!! ERROR !!!! Task caught fatal unknown exception"
LOG(ERROR, "!!!! ERROR !!!! Task caught fatal unknown exception"
<< " TaskImpl: " << this);
assert(0);
}
Expand Down
5 changes: 0 additions & 5 deletions src/control-node/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -325,11 +325,6 @@ bool ControlNodeInfoLogger(BgpServer *server,
vector<string> ip_list;
ip_list.push_back(ControlNode::GetSelfIp());
state.set_bgp_router_ip_list(ip_list);
vector<string> list;
MiscUtils::GetCoreFileList(ControlNode::GetProgramName(), list);
if (list.size()) {
state.set_core_files_list(list);
}
}
if (!build_info_set) {
string build_info;
Expand Down
3 changes: 0 additions & 3 deletions src/dns/uve/uve.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ void DnsUveClient::SendDnsUve(uint64_t start_time) {
state.set_start_time(start_time);
state.set_collector(Dns::GetCollector());

vector<string> list;
MiscUtils::GetCoreFileList(Dns::GetProgramName(), list);
state.set_core_files_list(list);
vector<string> ip_list;
ip_list.push_back(Dns::GetSelfIp());
state.set_self_ip_list(ip_list);
Expand Down

0 comments on commit c4f2a66

Please sign in to comment.