diff options
author | Sage Weil <sage@inktank.com> | 2013-08-19 22:53:28 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-19 22:53:28 -0700 |
commit | 928a0d42707ca2aaa69cd47f686a2ad846bc7eeb (patch) | |
tree | 9fe7ce70cb4c1cb88b2de704797d40473fd1e1e6 | |
parent | d948f07ae9faa9d316bc8f732ab06d33df374563 (diff) | |
parent | 1f851cb2489a95526de932ec6734ebf413e43490 (diff) | |
download | ceph-928a0d42707ca2aaa69cd47f686a2ad846bc7eeb.tar.gz |
Merge remote-tracking branch 'gh/next'
-rw-r--r-- | src/common/config_opts.h | 3 | ||||
-rw-r--r-- | src/osd/PG.cc | 4 | ||||
-rw-r--r-- | src/osd/PGLog.h | 17 |
3 files changed, 21 insertions, 3 deletions
diff --git a/src/common/config_opts.h b/src/common/config_opts.h index d3e21105e79..b021651bd4d 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -491,6 +491,9 @@ OPTION(osd_leveldb_compression, OPT_BOOL, true) // OSD's leveldb uses compressio OPTION(osd_leveldb_paranoid, OPT_BOOL, false) // OSD's leveldb paranoid flag OPTION(osd_leveldb_log, OPT_STR, "") // enable OSD leveldb log file +// determines whether PGLog::check() compares written out log to stored log +OPTION(osd_debug_pg_log_writeout, OPT_BOOL, false) + /** * osd_client_op_priority and osd_recovery_op_priority adjust the relative * priority of client io vs recovery io. diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 63be6a34b03..49ea61a603a 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -158,7 +158,7 @@ PG::PG(OSDService *o, OSDMapRef curmap, deleting(false), dirty_info(false), dirty_big_info(false), info(p), info_struct_v(0), - coll(p), log_oid(loid), biginfo_oid(ioid), + coll(p), pg_log(g_ceph_context), log_oid(loid), biginfo_oid(ioid), recovery_item(this), scrub_item(this), scrub_finalize_item(this), snap_trim_item(this), stat_queue_item(this), recovery_ops_active(0), waiting_on_backfill(0), @@ -2438,7 +2438,9 @@ void PG::read_state(ObjectStore *store, bufferlist &bl) /* We don't want to leave the old format around in case the next log * write happens to be an append_log() */ + pg_log.mark_log_for_rewrite(); ObjectStore::Transaction t; + t.remove(coll_t(), log_oid); // remove old version pg_log.write_log(t, log_oid); int r = osd->store->apply_transaction(t); assert(!r); diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 68317750332..552f9b0cee9 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -21,6 +21,7 @@ #include "include/assert.h" #include "osd_types.h" #include "os/ObjectStore.h" +#include "common/ceph_context.h" #include <list> using namespace std; @@ -159,6 +160,7 @@ protected: eversion_t dirty_to; eversion_t dirty_from; bool dirty_divergent_priors; + CephContext *cct; bool is_dirty() const { return !touched_log || @@ -178,6 +180,13 @@ protected: divergent_priors.insert(make_pair(version, obj)); dirty_divergent_priors = true; } +public: + void mark_log_for_rewrite() { + mark_dirty_to(eversion_t::max()); + mark_dirty_from(eversion_t()); + touched_log = false; + } +protected: /// DEBUG set<string> log_keys_debug; @@ -197,6 +206,10 @@ protected: } void check() { assert(log.log.size() == log_keys_debug.size()); + if (cct && + !(cct->_conf->osd_debug_pg_log_writeout)) { + return; + } for (list<pg_log_entry_t>::iterator i = log.log.begin(); i != log.log.end(); ++i) { @@ -212,9 +225,9 @@ protected: check(); } public: - PGLog() : + PGLog(CephContext *cct = 0) : touched_log(false), dirty_from(eversion_t::max()), - dirty_divergent_priors(false) {} + dirty_divergent_priors(false), cct(cct) {} void reset_backfill(); |