From 4e3efb73d37d6eae1b0cff405f720f29365a76ae Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Mon, 24 Sep 2018 22:26:44 -0700 Subject: [PATCH] ircd::db: Use cfmd rather than live-files way to get column family metadata. --- include/ircd/db/database/rocksdb.h | 1 + include/ircd/db/database/sst.h | 2 ++ ircd/db.cc | 33 ++++++++++++++++++++++++++++++ modules/console.cc | 11 ++-------- 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/include/ircd/db/database/rocksdb.h b/include/ircd/db/database/rocksdb.h index 2a72f1a13..e237d85bf 100644 --- a/include/ircd/db/database/rocksdb.h +++ b/include/ircd/db/database/rocksdb.h @@ -34,6 +34,7 @@ namespace rocksdb struct PerfContext; struct IOStatsContext; struct LiveFileMetaData; + struct SstFileMetaData; struct SstFileWriter; } diff --git a/include/ircd/db/database/sst.h b/include/ircd/db/database/sst.h index 289dd0cda..70460b195 100644 --- a/include/ircd/db/database/sst.h +++ b/include/ircd/db/database/sst.h @@ -40,6 +40,7 @@ struct ircd::db::database::sst::info uint64_t entries {0}; info() = default; + info(rocksdb::SstFileMetaData &&); info(rocksdb::LiveFileMetaData &&); info(const database &, const string_view &filename); }; @@ -49,6 +50,7 @@ struct ircd::db::database::sst::info::vector { vector() = default; explicit vector(const database &); + explicit vector(const db::column &); }; struct ircd::db::database::sst::dump diff --git a/ircd/db.cc b/ircd/db.cc index 62ba8fd8f..df4ecf19c 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -2608,6 +2608,26 @@ ircd::db::database::sst::info::vector::vector(const database &d) }); } +ircd::db::database::sst::info::vector::vector(const db::column &column) +{ + const ctx::uninterruptible::nothrow ui; + database::column &c(const_cast(column)); + database &d(*c.d); + + rocksdb::ColumnFamilyMetaData cfmd; + d.d->GetColumnFamilyMetaData(c, &cfmd); + this->reserve(cfmd.file_count); + for(rocksdb::LevelMetaData &level : cfmd.levels) + { + for(rocksdb::SstFileMetaData md : level.files) + { + this->emplace_back(std::move(md)); + this->back().column = db::name(column); + this->back().level = level.level; + } + } +} + // // sst::info::info // @@ -2649,6 +2669,19 @@ ircd::db::database::sst::info::info(rocksdb::LiveFileMetaData &&md) { } +ircd::db::database::sst::info::info(rocksdb::SstFileMetaData &&md) +:name{std::move(md.name)} +,path{std::move(md.db_path)} +,size{md.size} +,min_seq{md.smallest_seqno} +,max_seq{md.largest_seqno} +,min_key{std::move(md.smallestkey)} +,max_key{std::move(md.largestkey)} +,num_reads{md.num_reads_sampled} +,compacting{md.being_compacted} +{ +} + /////////////////////////////////////////////////////////////////////////////// // // database::env diff --git a/modules/console.cc b/modules/console.cc index 8d3f114b8..0f79e832a 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -2120,16 +2120,9 @@ try database, colname }; - const auto files - { - db::files(column) - }; - - for(const auto &file : files) - { - const db::database::sst::info info{database, file}; + const db::database::sst::info::vector vector{column}; + for(const auto &info : vector) _print_sst_info(out, info); - } return true; }