mirror of
https://github.com/matrix-construct/construct
synced 2024-11-18 07:50:57 +01:00
ircd::db: Elaborate interface to the rocksdb perf_context.
This commit is contained in:
parent
60bd4f2346
commit
1c20df652b
4 changed files with 84 additions and 7 deletions
|
@ -31,6 +31,7 @@ namespace rocksdb
|
||||||
struct Slice;
|
struct Slice;
|
||||||
struct Checkpoint;
|
struct Checkpoint;
|
||||||
struct SstFileManager;
|
struct SstFileManager;
|
||||||
|
struct PerfContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -87,7 +87,10 @@ namespace ircd::db
|
||||||
std::string path(const std::string &name);
|
std::string path(const std::string &name);
|
||||||
std::vector<std::string> available();
|
std::vector<std::string> available();
|
||||||
|
|
||||||
void log_rdb_perf_context(const bool &all = true);
|
uint perf_level();
|
||||||
|
void perf_level(const uint &);
|
||||||
|
const rocksdb::PerfContext &perf_current();
|
||||||
|
std::string string(const rocksdb::PerfContext &, const bool &all = false);
|
||||||
|
|
||||||
string_view reflect(const pos &);
|
string_view reflect(const pos &);
|
||||||
}
|
}
|
||||||
|
|
44
ircd/db.cc
44
ircd/db.cc
|
@ -1304,17 +1304,49 @@ catch(const std::exception &e)
|
||||||
// database::stats
|
// database::stats
|
||||||
//
|
//
|
||||||
|
|
||||||
void
|
std::string
|
||||||
ircd::db::log_rdb_perf_context(const bool &all)
|
ircd::db::string(const rocksdb::PerfContext &pc,
|
||||||
|
const bool &all)
|
||||||
{
|
{
|
||||||
const auto pc
|
const bool exclude_zeros(!all);
|
||||||
|
return pc.ToString(exclude_zeros);
|
||||||
|
}
|
||||||
|
|
||||||
|
const rocksdb::PerfContext &
|
||||||
|
ircd::db::perf_current()
|
||||||
|
{
|
||||||
|
const auto *const &ret
|
||||||
{
|
{
|
||||||
rocksdb::get_perf_context()
|
rocksdb::get_perf_context()
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(pc);
|
if(unlikely(!ret))
|
||||||
const bool exclude_zeros(!all);
|
throw error
|
||||||
log.debug("%s", pc->ToString(exclude_zeros));
|
{
|
||||||
|
"Performance counters are not available on this thread."
|
||||||
|
};
|
||||||
|
|
||||||
|
return *ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ircd::db::perf_level(const uint &level)
|
||||||
|
{
|
||||||
|
if(level >= rocksdb::PerfLevel::kOutOfBounds)
|
||||||
|
throw error
|
||||||
|
{
|
||||||
|
"Perf level of '%u' is invalid; maximum is '%u'",
|
||||||
|
level,
|
||||||
|
uint(rocksdb::PerfLevel::kOutOfBounds)
|
||||||
|
};
|
||||||
|
|
||||||
|
rocksdb::SetPerfLevel(rocksdb::PerfLevel(level));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint
|
||||||
|
ircd::db::perf_level()
|
||||||
|
{
|
||||||
|
return rocksdb::GetPerfLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
|
|
@ -1130,6 +1130,47 @@ catch(const std::out_of_range &e)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
console_cmd__db__perf(opt &out, const string_view &line)
|
||||||
|
{
|
||||||
|
const auto &pc
|
||||||
|
{
|
||||||
|
db::perf_current()
|
||||||
|
};
|
||||||
|
|
||||||
|
out << db::string(pc) << std::endl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
console_cmd__db__perf__level(opt &out, const string_view &line)
|
||||||
|
{
|
||||||
|
const params param{line, " ",
|
||||||
|
{
|
||||||
|
"[level]"
|
||||||
|
}};
|
||||||
|
|
||||||
|
if(!param.count())
|
||||||
|
{
|
||||||
|
const auto &level
|
||||||
|
{
|
||||||
|
db::perf_level()
|
||||||
|
};
|
||||||
|
|
||||||
|
out << "Current level is: " << level << std::endl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto &level
|
||||||
|
{
|
||||||
|
param.at<uint>(0)
|
||||||
|
};
|
||||||
|
|
||||||
|
db::perf_level(level);
|
||||||
|
out << "Set level to: " << level << std::endl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
console_cmd__db__prop(opt &out, const string_view &line)
|
console_cmd__db__prop(opt &out, const string_view &line)
|
||||||
try
|
try
|
||||||
|
|
Loading…
Reference in a new issue