If we are blacklisted by the OSD cluster, it's because we were too slow
and were replaced by another ceph-mds. Respawn and re-register as a
standby.
If we get some other write error, shut down.
Fixes: #1796
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
logger, l_mdl_jlat,
&mds->timer);
assert(journaler->is_readonly());
+ journaler->set_write_error_handler(new C_MDL_WriteError(this));
+}
+
+void MDLog::handle_journaler_write_error(int r)
+{
+ if (r == -EBLACKLISTED) {
+ derr << "we have been blacklisted (fenced), respawning..." << dendl;
+ mds->respawn();
+ } else {
+ derr << "unhandled error " << cpp_strerror(r) << ", shutting down..." << dendl;
+ mds->suicide();
+ }
}
void MDLog::write_head(Context *c)
private:
void init_journaler();
-
+
+ struct C_MDL_WriteError : public Context {
+ MDLog *mdlog;
+ C_MDL_WriteError(MDLog *m) : mdlog(m) {}
+ void finish(int r) {
+ mdlog->handle_journaler_write_error(r);
+ }
+ };
+ void handle_journaler_write_error(int r);
+
public:
void create_logger();