From c5964250b58a76660c600156bcec711230a1faec Mon Sep 17 00:00:00 2001 From: sageweil Date: Mon, 10 Sep 2007 22:03:43 +0000 Subject: [PATCH] mds appends to log on restart git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1813 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/common/Logger.cc | 28 ++++++++++++++++++++++------ trunk/ceph/common/Logger.h | 2 +- trunk/ceph/mds/MDLog.cc | 36 ++++++++++++++++++++++-------------- trunk/ceph/mds/MDLog.h | 2 +- trunk/ceph/mds/MDS.cc | 28 ++++++++++++++-------------- trunk/ceph/mds/Server.cc | 4 ++-- trunk/ceph/mds/Server.h | 2 +- 7 files changed, 63 insertions(+), 39 deletions(-) diff --git a/trunk/ceph/common/Logger.cc b/trunk/ceph/common/Logger.cc index c21d57a1d015e..c21cf31a46a40 100644 --- a/trunk/ceph/common/Logger.cc +++ b/trunk/ceph/common/Logger.cc @@ -49,6 +49,23 @@ public: } }; +void Logger::set_start(utime_t s) +{ + logger_lock.Lock(); + + start = s; + + utime_t fromstart = g_clock.now(); + if (fromstart < start) { + cerr << "set_start: logger time jumped backwards from " << start << " to " << fromstart << std::endl; + fromstart = start; + } + fromstart -= start; + last_flush = fromstart.sec(); + + logger_lock.Unlock(); +} + static void flush_all_loggers() { generic_dout(20) << "flush_all_loggers" << dendl; @@ -89,7 +106,7 @@ static void flush_all_loggers() // --------- -Logger::Logger(string fn, LogType *type) +Logger::Logger(string fn, LogType *type, bool append) { logger_lock.Lock(); { @@ -109,7 +126,10 @@ Logger::Logger(string fn, LogType *type) } filename += fn; - out.open(filename.c_str(), ofstream::out); + if (append) + out.open(filename.c_str(), ofstream::out|ofstream::app); + else + out.open(filename.c_str(), ofstream::out); this->type = type; wrote_header = -1; @@ -145,10 +165,6 @@ Logger::~Logger() logger_lock.Unlock(); } -void Logger::set_start(utime_t s) -{ - start = s; -} /* void Logger::flush() diff --git a/trunk/ceph/common/Logger.h b/trunk/ceph/common/Logger.h index 39bedab82c6c8..9c63671633bc0 100644 --- a/trunk/ceph/common/Logger.h +++ b/trunk/ceph/common/Logger.h @@ -57,7 +57,7 @@ class Logger { int wrote_header_last; public: - Logger(string fn, LogType *type); + Logger(string fn, LogType *type, bool append=false); ~Logger(); long inc(const char *s, long v = 1); diff --git a/trunk/ceph/mds/MDLog.cc b/trunk/ceph/mds/MDLog.cc index 712f904e7421e..a803433682506 100644 --- a/trunk/ceph/mds/MDLog.cc +++ b/trunk/ceph/mds/MDLog.cc @@ -39,12 +39,12 @@ MDLog::~MDLog() } -void MDLog::reopen_logger(utime_t start) +void MDLog::reopen_logger(utime_t start, bool append) { // logger char name[80]; sprintf(name, "mds%d.log", mds->get_nodeid()); - logger = new Logger(name, &mdlog_logtype); + logger = new Logger(name, &mdlog_logtype, append); logger->set_start(start); static bool didit = false; @@ -132,9 +132,11 @@ void MDLog::submit_entry( LogEvent *le, Context *c ) delete le; num_events++; - logger->inc("add"); - logger->set("size", num_events); - logger->set("wrpos", journaler->get_write_pos()); + if (logger) { + logger->inc("add"); + logger->set("size", num_events); + logger->set("wrpos", journaler->get_write_pos()); + } if (c) { unflushed = 0; @@ -289,10 +291,12 @@ void MDLog::_trimmed(LogEvent *le) if (kick) kick_subtree_map(); - logger->inc("trimf"); - logger->set("trimng", trimming.size()); - logger->set("rdpos", journaler->get_read_pos()); - + if (logger) { + logger->inc("trimf"); + logger->set("trimng", trimming.size()); + logger->set("rdpos", journaler->get_read_pos()); + } + trim(0); } @@ -342,7 +346,7 @@ void MDLog::trim(Context *c) // obsolete dout(7) << "trim obsolete : " << le->get_start_off() << " : " << *le << dendl; delete le; - logger->inc("obs"); + if (logger) logger->inc("obs"); } else { assert ((int)trimming.size() < g_conf.mds_log_max_trimming); @@ -350,11 +354,15 @@ void MDLog::trim(Context *c) dout(7) << "trim expiring : " << le->get_start_off() << " : " << *le << dendl; trimming[le->_start_off] = le; le->expire(mds, new C_MDL_Trimmed(this, le)); - logger->inc("trims"); - logger->set("trimng", trimming.size()); + if (logger) { + logger->inc("trims"); + logger->set("trimng", trimming.size()); + } + } + if (logger) { + logger->set("rdpos", journaler->get_read_pos()); + logger->set("size", num_events); } - logger->set("rdpos", journaler->get_read_pos()); - logger->set("size", num_events); } else { // need to read! if (!waiting_for_read) { diff --git a/trunk/ceph/mds/MDLog.h b/trunk/ceph/mds/MDLog.h index 8fc45b35529c7..24a965fd89b60 100644 --- a/trunk/ceph/mds/MDLog.h +++ b/trunk/ceph/mds/MDLog.h @@ -128,7 +128,7 @@ private: void init_journaler(); public: - void reopen_logger(utime_t start); + void reopen_logger(utime_t start, bool append=false); // replay state map > pending_exports; diff --git a/trunk/ceph/mds/MDS.cc b/trunk/ceph/mds/MDS.cc index c34415d51f232..c9ece0b419bd0 100644 --- a/trunk/ceph/mds/MDS.cc +++ b/trunk/ceph/mds/MDS.cc @@ -201,24 +201,21 @@ void MDS::reopen_logger(utime_t start) if (logger2) delete logger2; // log - string name; - name = "mds"; - int w = whoami; - if (w >= 1000) name += ('0' + ((w/1000)%10)); - if (w >= 100) name += ('0' + ((w/100)%10)); - if (w >= 10) name += ('0' + ((w/10)%10)); - name += ('0' + ((w/1)%10)); - - logger = new Logger(name, (LogType*)&mds_logtype); + char name[80]; + sprintf(name, "mds%d", whoami); + + bool append = mdsmap->get_inc(whoami) > 1; + + logger = new Logger(name, (LogType*)&mds_logtype, append); logger->set_start(start); char n[80]; sprintf(n, "mds%d.cache", whoami); - logger2 = new Logger(n, (LogType*)&mds_cache_logtype); + logger2 = new Logger(n, (LogType*)&mds_cache_logtype, append); logger2->set_start(start); - mdlog->reopen_logger(start); - server->reopen_logger(start); + mdlog->reopen_logger(start, append); + server->reopen_logger(start, append); } void MDS::send_message_mds(Message *m, int mds, int port, int fromport) @@ -319,7 +316,7 @@ int MDS::init(bool standby) reset_tick(); // init logger - reopen_logger(g_clock.now()); + //reopen_logger(g_clock.now()); mds_lock.Unlock(); return 0; @@ -523,9 +520,12 @@ void MDS::handle_mds_map(MMDSMap *m) suicide(); return; } + + if (oldwhoami != whoami || !logger) + reopen_logger(mdsmap->get_create()); + if (oldwhoami != whoami) { // update messenger. - reopen_logger(mdsmap->get_create()); dout(1) << "handle_mds_map i am now mds" << whoami << " incarnation " << mdsmap->get_inc(whoami) << dendl; diff --git a/trunk/ceph/mds/Server.cc b/trunk/ceph/mds/Server.cc index 85a8fd82a1f8b..e48c8a52e94a6 100644 --- a/trunk/ceph/mds/Server.cc +++ b/trunk/ceph/mds/Server.cc @@ -60,7 +60,7 @@ using namespace std; #define derr(l) if (l<=g_conf.debug || l <= g_conf.debug_mds) *_derr << dbeginl << g_clock.now() << " mds" << mds->get_nodeid() << ".server " -void Server::reopen_logger(utime_t start) +void Server::reopen_logger(utime_t start, bool append) { static LogType mdserver_logtype; static bool didit = false; @@ -79,7 +79,7 @@ void Server::reopen_logger(utime_t start) // logger char name[80]; sprintf(name, "mds%d.server", mds->get_nodeid()); - logger = new Logger(name, &mdserver_logtype); + logger = new Logger(name, &mdserver_logtype, append); logger->set_start(start); } diff --git a/trunk/ceph/mds/Server.h b/trunk/ceph/mds/Server.h index 1904b827d6a27..7cc910d6e266d 100644 --- a/trunk/ceph/mds/Server.h +++ b/trunk/ceph/mds/Server.h @@ -43,7 +43,7 @@ public: delete logger; } - void reopen_logger(utime_t start); + void reopen_logger(utime_t start, bool append); // message handler void dispatch(Message *m); -- 2.39.5