bool McrouterLogger::start() { if (running_ || router_.opts().stats_logging_interval == 0) { return false; } if (!ensureDirExistsAndWritable(router_.opts().stats_root)) { LOG(ERROR) << "Can't create or chmod " << router_.opts().stats_root << ", disabling stats logging"; return false; } auto path = stats_file_path(router_.opts(), kStatsStartupOptionsSfx); if (std::find(touchStatsFilepaths_.begin(), touchStatsFilepaths_.end(), path) == touchStatsFilepaths_.end()) { touchStatsFilepaths_.push_back(std::move(path)); } running_ = true; const std::string threadName = "mcrtr-stats-logger"; try { loggerThread_ = std::thread( std::bind(&McrouterLogger::loggerThreadRun, this)); folly::setThreadName(loggerThread_.native_handle(), threadName); } catch (const std::system_error& e) { running_ = false; MC_LOG_FAILURE(router_.opts(), memcache::failure::Category::kSystemError, "Can not start McrouterLogger thread {}: {}", threadName, e.what()); } return running_; }
Fifo::Fifo(std::string path) : path_(std::move(path)) { CHECK(!path_.empty()) << "Fifo path cannot be empty"; auto dir = boost::filesystem::path(path_).parent_path().string(); ensureDirExistsAndWritable(dir); }