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_;
}
Exemple #2
0
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);
}