osd: pass a stream to flush_cache commands for more verbosity

Signed-off-by: Mohamad Gebai <mgebai@suse.com>
This commit is contained in:
Mohamad Gebai 2018-10-01 10:46:15 -04:00
parent d6eed7bfee
commit 7e4ed82f01
6 changed files with 18 additions and 12 deletions

View File

@ -1479,7 +1479,7 @@ public:
virtual void get_db_statistics(Formatter *f) { }
virtual void generate_db_histogram(Formatter *f) { }
virtual int flush_cache() { return 0; }
virtual int flush_cache(ostream *os = NULL) { return 0; }
virtual void dump_perf_counters(Formatter *f) {}
virtual int get_cache_obj_count() {
return -1;

View File

@ -12554,7 +12554,7 @@ void BlueStore::_flush_cache()
// We use a best-effort policy instead, e.g.,
// we don't care if there are still some pinned onodes/data in the cache
// after this command is completed.
int BlueStore::flush_cache()
int BlueStore::flush_cache(ostream *os)
{
dout(10) << __func__ << dendl;
for (auto i : cache_shards) {

View File

@ -2356,7 +2356,7 @@ public:
void get_db_statistics(Formatter *f) override;
void generate_db_histogram(Formatter *f) override;
void _flush_cache();
int flush_cache() override;
int flush_cache(ostream *os = NULL) override;
void dump_perf_counters(Formatter *f) override {
f->open_object_section("perf_counters");
logger->dump_formatted(f, false);

View File

@ -1413,22 +1413,28 @@ int FileStore::version_stamp_is_valid(uint32_t *version)
return 0;
}
int FileStore::flush_cache()
int FileStore::flush_cache(ostream *os)
{
string drop_caches_file = "/proc/sys/vm/drop_caches";
int drop_caches_fd = ::open(drop_caches_file.c_str(), O_WRONLY), ret = 0;
int drop_caches_fd = ::open(drop_caches_file.c_str(), O_WRONLY|O_CLOEXEC), ret = 0;
char buf[2] = "3";
int len = strlen(buf);
size_t len = strlen(buf);
if (drop_caches_fd < 0) {
ret = -errno;
derr << __FUNC__ << ": failed to open " << drop_caches_file << ": " << cpp_strerror(ret) << dendl;
if (os) {
*os << "FileStore flush_cache: failed to open " << drop_caches_file << ": " << cpp_strerror(ret);
}
return ret;
}
if (::write(drop_caches_fd, buf, len) < 0) {
ret = -errno;
derr << __FUNC__ << ": failed to write to " << drop_caches_file << ": " << cpp_strerror(ret) << dendl;
if (os) {
*os << "FileStore flush_cache: failed to write to " << drop_caches_file << ": " << cpp_strerror(ret);
}
goto out;
}

View File

@ -504,7 +504,7 @@ public:
f->close_section();
}
int flush_cache() override;
int flush_cache(ostream *os = NULL) override;
int write_version_stamp();
int version_stamp_is_valid(uint32_t *version);
int update_version_stamp();

View File

@ -2397,7 +2397,7 @@ will start to track new ops received afterwards.";
} else if (admin_command == "calc_objectstore_db_histogram") {
store->generate_db_histogram(f);
} else if (admin_command == "flush_store_cache") {
store->flush_cache();
store->flush_cache(&ss);
} else if (admin_command == "dump_pgstate_history") {
f->open_object_section("pgstate_history");
vector<PGRef> pgs;
@ -6020,8 +6020,8 @@ COMMAND("compact",
COMMAND("smart name=devid,type=CephString,req=False",
"runs smartctl on this osd devices. ",
"osd", "rw", "cli,rest")
COMMAND("clear_cache",
"Clear OSD caches",
COMMAND("drop cache",
"Drop all OSD caches",
"osd", "rw", "cli,rest")
COMMAND("get_cache_object_count",
"Get OSD caches object count",
@ -6502,11 +6502,11 @@ int OSD::_do_command(
probe_smart(devid, ds);
}
else if (prefix == "clear_cache") {
else if (prefix == "drop cache") {
dout(20) << "clearing all caches" << dendl;
// Clear the objectstore's cache - onode and buffer for Bluestore,
// system's pagecache for Filestore
r = store->flush_cache();
r = store->flush_cache(&ss);
if (r < 0) {
ds << "Error flushing objectstore cache: " << cpp_strerror(r);
goto out;