2012-08-15 00:20:36 +02:00
|
|
|
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
|
|
|
|
|
|
#include "db/db_impl.h"
|
|
|
|
#include <string>
|
|
|
|
#include <stdint.h>
|
2012-09-17 04:33:03 +02:00
|
|
|
#include <stdio.h>
|
2012-08-15 00:20:36 +02:00
|
|
|
#include "db/version_set.h"
|
2013-08-23 17:38:13 +02:00
|
|
|
#include "rocksdb/db.h"
|
|
|
|
#include "rocksdb/env.h"
|
2012-08-27 09:50:26 +02:00
|
|
|
#include "port/port.h"
|
|
|
|
#include "util/mutexlock.h"
|
2012-08-15 00:20:36 +02:00
|
|
|
|
|
|
|
namespace leveldb {
|
|
|
|
|
|
|
|
void DBImpl::MaybeScheduleLogDBDeployStats() {
|
|
|
|
|
|
|
|
// There is a lock in the actual logger.
|
|
|
|
if (!logger_ || options_.db_stats_log_interval < 0
|
|
|
|
|| host_name_.empty()) {
|
|
|
|
return;
|
|
|
|
}
|
2012-08-27 09:50:26 +02:00
|
|
|
|
|
|
|
if(bg_logstats_scheduled_ || shutting_down_.Acquire_Load()) {
|
2012-08-15 00:20:36 +02:00
|
|
|
// Already scheduled
|
|
|
|
} else {
|
|
|
|
int64_t current_ts = 0;
|
|
|
|
Status st = env_->GetCurrentTime(¤t_ts);
|
|
|
|
if (!st.ok()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ((current_ts - last_log_ts) < options_.db_stats_log_interval) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
last_log_ts = current_ts;
|
2012-08-27 09:50:26 +02:00
|
|
|
bg_logstats_scheduled_ = true;
|
|
|
|
env_->Schedule(&DBImpl::BGLogDBDeployStats, this);
|
2012-08-15 00:20:36 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-08-27 09:50:26 +02:00
|
|
|
void DBImpl::BGLogDBDeployStats(void* db) {
|
2012-08-15 00:20:36 +02:00
|
|
|
DBImpl* db_inst = reinterpret_cast<DBImpl*>(db);
|
2012-08-27 09:50:26 +02:00
|
|
|
db_inst->LogDBDeployStats();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DBImpl::LogDBDeployStats() {
|
|
|
|
mutex_.Lock();
|
2012-08-15 00:20:36 +02:00
|
|
|
|
2012-08-27 09:50:26 +02:00
|
|
|
if (shutting_down_.Acquire_Load()) {
|
|
|
|
bg_logstats_scheduled_ = false;
|
|
|
|
bg_cv_.SignalAll();
|
|
|
|
mutex_.Unlock();
|
2012-08-15 00:20:36 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2012-09-17 04:33:03 +02:00
|
|
|
char tmp_ver[100];
|
|
|
|
sprintf(tmp_ver, "%d.%d", kMajorVersion, kMinorVersion);
|
|
|
|
std::string version_info(tmp_ver);
|
2012-08-15 00:20:36 +02:00
|
|
|
|
|
|
|
uint64_t file_total_size = 0;
|
|
|
|
uint32_t file_total_num = 0;
|
2012-08-27 09:50:26 +02:00
|
|
|
for (int i = 0; i < versions_->NumberLevels(); i++) {
|
|
|
|
file_total_num += versions_->NumLevelFiles(i);
|
|
|
|
file_total_size += versions_->NumLevelBytes(i);
|
2012-08-15 00:20:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
VersionSet::LevelSummaryStorage scratch;
|
2012-08-27 09:50:26 +02:00
|
|
|
const char* file_num_summary = versions_->LevelSummary(&scratch);
|
2012-08-15 00:20:36 +02:00
|
|
|
std::string file_num_per_level(file_num_summary);
|
|
|
|
std::string data_size_per_level(file_num_summary);
|
2012-08-28 20:29:30 +02:00
|
|
|
|
|
|
|
mutex_.Unlock();
|
|
|
|
|
2012-08-15 00:20:36 +02:00
|
|
|
int64_t unix_ts;
|
2012-08-27 09:50:26 +02:00
|
|
|
env_->GetCurrentTime(&unix_ts);
|
2012-08-15 00:20:36 +02:00
|
|
|
|
2012-08-27 09:50:26 +02:00
|
|
|
logger_->Log_Deploy_Stats(version_info, host_name_,
|
2012-09-06 02:44:13 +02:00
|
|
|
db_absolute_path_, file_total_size, file_total_num, file_num_per_level,
|
2012-08-15 00:20:36 +02:00
|
|
|
data_size_per_level, unix_ts);
|
2012-08-27 09:50:26 +02:00
|
|
|
|
|
|
|
mutex_.Lock();
|
|
|
|
bg_logstats_scheduled_ = false;
|
|
|
|
bg_cv_.SignalAll();
|
|
|
|
mutex_.Unlock();
|
2012-08-15 00:20:36 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|