From: Joao Eduardo Luis Date: Wed, 20 Mar 2013 20:49:20 +0000 (+0000) Subject: mon: DataHealthService: shutdown mon if failed to obtain disk stats X-Git-Tag: v0.60~28^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=51d62d325c93a8aa7c93045d2e28b505f1491f2f;p=ceph.git mon: DataHealthService: shutdown mon if failed to obtain disk stats Being unable to run a ::statfs() may be a symptom of something bigger. We want to cleanly shutdown the monitor ASAP if such thing happens. Fixes: #4509 Signed-off-by: Joao Eduardo Luis --- diff --git a/src/mon/DataHealthService.cc b/src/mon/DataHealthService.cc index d97b458ec03..b8462ca72cd 100644 --- a/src/mon/DataHealthService.cc +++ b/src/mon/DataHealthService.cc @@ -102,14 +102,13 @@ void DataHealthService::get_health(Formatter *f, f->close_section(); // data_health } -void DataHealthService::update_stats() +int DataHealthService::update_stats() { struct statfs stbuf; int err = ::statfs(g_conf->mon_data.c_str(), &stbuf); if (err < 0) { - assert(errno != EIO); - mon->clog.error() << __func__ << " statfs error: " << cpp_strerror(errno) << "\n"; - return; + derr << __func__ << " statfs error: " << cpp_strerror(errno) << dendl; + return -errno; } entity_inst_t our_inst = mon->monmap->get_inst(mon->name); @@ -123,6 +122,7 @@ void DataHealthService::update_stats() << " total " << ours.kb_total << " used " << ours.kb_used << " avail " << ours.kb_avail << dendl; ours.last_update = ceph_clock_now(g_ceph_context); + return 0; } void DataHealthService::share_stats() @@ -153,7 +153,13 @@ void DataHealthService::service_tick() { dout(10) << __func__ << dendl; - update_stats(); + int err = update_stats(); + if (err < 0) { + derr << "something went wrong obtaining our disk stats: " + << cpp_strerror(err) << dendl; + force_shutdown(); + return; + } if (in_quorum()) share_stats(); diff --git a/src/mon/DataHealthService.h b/src/mon/DataHealthService.h index d54af792d9c..9d4e1e2210d 100644 --- a/src/mon/DataHealthService.h +++ b/src/mon/DataHealthService.h @@ -35,7 +35,7 @@ class DataHealthService : { map stats; void handle_tell(MMonHealth *m); - void update_stats(); + int update_stats(); void share_stats(); void force_shutdown() {