From 36f2d8b8ab220e7e2076d92acf9df21144186ca1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 24 Aug 2017 13:52:44 -0400 Subject: [PATCH] osd/PG[Log]: drop compat for pre-luminous PG info encoding Signed-off-by: Sage Weil --- src/osd/PG.cc | 107 +++++------------------------ src/osd/PG.h | 2 +- src/osd/PGLog.h | 6 +- src/test/osd/TestPGLog.cc | 2 +- src/tools/ceph_objectstore_tool.cc | 3 +- 5 files changed, 23 insertions(+), 97 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 14d14dc0f8450..bdbd4982d9d72 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -2841,31 +2841,10 @@ void PG::upgrade(ObjectStore *store) assert(info_struct_v <= 10); ObjectStore::Transaction t; - assert(info_struct_v >= 7); + // - // 7 -> 8 - if (info_struct_v <= 7) { - pg_log.mark_log_for_rewrite(); - ghobject_t log_oid(OSD::make_pg_log_oid(pg_id)); - ghobject_t biginfo_oid(OSD::make_pg_biginfo_oid(pg_id)); - t.remove(coll_t::meta(), log_oid); - t.remove(coll_t::meta(), biginfo_oid); - t.touch(coll, pgmeta_oid); - } - - // 8 -> 9 - if (info_struct_v <= 8) { - // no special action needed. - } - - // 9 -> 10 - if (info_struct_v <= 9) { - // previous versions weren't (as) aggressively clearing past_intervals - if (info.history.last_epoch_clean >= info.history.same_interval_since) { - dout(20) << __func__ << " clearing past_intervals" << dendl; - past_intervals.clear(); - } - } + // finished upgrade! + assert(info_struct_v == 10); // update infover_key if (info_struct_v < cur_struct_v) { @@ -3237,7 +3216,6 @@ int PG::read_info( pg_info_t &info, PastIntervals &past_intervals, __u8 &struct_v) { - // try for v8 or later set keys; keys.insert(infover_key); keys.insert(info_key); @@ -3246,58 +3224,27 @@ int PG::read_info( ghobject_t pgmeta_oid(pgid.make_pgmeta_oid()); map values; int r = store->omap_get_values(coll, pgmeta_oid, keys, &values); - if (r == 0) { - assert(values.size() == 3 || - values.size() == 4); - - bufferlist::iterator p = values[infover_key].begin(); - ::decode(struct_v, p); - assert(struct_v >= 8); - - p = values[info_key].begin(); - ::decode(info, p); - - p = values[biginfo_key].begin(); - if (struct_v >= 10) { - ::decode(past_intervals, p); - } else { - past_intervals.decode_classic(p); - } - ::decode(info.purged_snaps, p); - - p = values[fastinfo_key].begin(); - if (!p.end()) { - pg_fast_info_t fast; - ::decode(fast, p); - fast.try_apply_to(&info); - } - return 0; - } + assert(r == 0); + assert(values.size() == 3 || + values.size() == 4); - // legacy (ver < 8) - ghobject_t infos_oid(OSD::make_infos_oid()); - bufferlist::iterator p = bl.begin(); + bufferlist::iterator p = values[infover_key].begin(); ::decode(struct_v, p); - assert(struct_v == 7); - - // get info out of leveldb - string k = get_info_key(info.pgid); - string bk = get_biginfo_key(info.pgid); - keys.clear(); - keys.insert(k); - keys.insert(bk); - values.clear(); - store->omap_get_values(coll_t::meta(), ghobject_t(infos_oid), keys, &values); - assert(values.size() == 2); - - p = values[k].begin(); + assert(struct_v >= 10); + + p = values[info_key].begin(); ::decode(info, p); - p = values[bk].begin(); + p = values[biginfo_key].begin(); ::decode(past_intervals, p); - interval_set snap_collections; // obsolete - ::decode(snap_collections, p); ::decode(info.purged_snaps, p); + + p = values[fastinfo_key].begin(); + if (!p.end()) { + pg_fast_info_t fast; + ::decode(fast, p); + fast.try_apply_to(&info); + } return 0; } @@ -3309,17 +3256,6 @@ void PG::read_state(ObjectStore *store, bufferlist &bl) last_written_info = info; - // if we are upgrading from jewel, we need to force rebuild of - // missing set. v9 was fastinfo, added v11.0.2-331-g1d5dc29a13 - // (before kraken). persisted missing set was circa - // v11.0.0-866-gb0e239da95 (a bit earlier, also before kraken). - // v8 was pre-jewel (per-pg meta object). - bool force_rebuild_missing = info_struct_v < 9; - if (force_rebuild_missing) { - dout(10) << __func__ << " detected upgrade from jewel, force_rebuild_missing" - << dendl; - } - ostringstream oss; pg_log.read_log_and_missing( store, @@ -3327,19 +3263,12 @@ void PG::read_state(ObjectStore *store, bufferlist &bl) info_struct_v < 8 ? coll_t::meta() : coll, ghobject_t(info_struct_v < 8 ? OSD::make_pg_log_oid(pg_id) : pgmeta_oid), info, - force_rebuild_missing, oss, cct->_conf->osd_ignore_stale_divergent_priors, cct->_conf->osd_debug_verify_missing_on_start); if (oss.tellp()) osd->clog->error() << oss.rdbuf(); - if (force_rebuild_missing) { - dout(10) << __func__ << " forced rebuild of missing got " - << pg_log.get_missing() - << dendl; - } - // log any weirdness log_weirdness(); } diff --git a/src/osd/PG.h b/src/osd/PG.h index b1fdde846aaa2..37a24f8cc711a 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -351,7 +351,7 @@ public: // v8 was the move to a per-pg pgmeta object // v7 was SnapMapper addition in 86658392516d5175b2756659ef7ffaaf95b0f8ad // (first appeared in cuttlefish). - static const __u8 compat_struct_v = 7; + static const __u8 compat_struct_v = 10; bool must_upgrade() { return info_struct_v < cur_struct_v; } diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 5e7d10b2e4099..db3aa10541066 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -1260,14 +1260,13 @@ public: coll_t log_coll, ghobject_t log_oid, const pg_info_t &info, - bool force_rebuild_missing, ostringstream &oss, bool tolerate_divergent_missing_log, bool debug_verify_stored_missing = false ) { return read_log_and_missing( store, pg_coll, log_coll, log_oid, info, - log, missing, force_rebuild_missing, oss, + log, missing, oss, tolerate_divergent_missing_log, &clear_divergent_priors, this, @@ -1284,7 +1283,6 @@ public: const pg_info_t &info, IndexedLog &log, missing_type &missing, - bool force_rebuild_missing, ostringstream &oss, bool tolerate_divergent_missing_log, bool *clear_divergent_priors = nullptr, @@ -1306,7 +1304,7 @@ public: eversion_t on_disk_rollback_info_trimmed_to = eversion_t(); ObjectMap::ObjectMapIterator p = store->get_omap_iterator(log_coll, log_oid); map divergent_priors; - bool must_rebuild = force_rebuild_missing; + bool must_rebuild = false; missing.may_include_deletes = false; list entries; list dups; diff --git a/src/test/osd/TestPGLog.cc b/src/test/osd/TestPGLog.cc index 91d78f0aa83a6..94757c619993a 100644 --- a/src/test/osd/TestPGLog.cc +++ b/src/test/osd/TestPGLog.cc @@ -2496,7 +2496,7 @@ public: clear(); ostringstream err; read_log_and_missing(store.get(), test_coll, test_coll, log_oid, - pg_info_t(), false, err, false); + pg_info_t(), err, false); ASSERT_EQ(orig_dups.size(), log.dups.size()); ASSERT_EQ(orig_dups, log.dups); auto dups_it = log.dups.begin(); diff --git a/src/tools/ceph_objectstore_tool.cc b/src/tools/ceph_objectstore_tool.cc index cbf9bf95acc63..19bac15042d7f 100644 --- a/src/tools/ceph_objectstore_tool.cc +++ b/src/tools/ceph_objectstore_tool.cc @@ -329,8 +329,7 @@ int get_log(ObjectStore *fs, __u8 struct_ver, struct_ver >= 8 ? coll : coll_t::meta(), struct_ver >= 8 ? pgid.make_pgmeta_oid() : log_oid, info, log, missing, - struct_ver < 9, - oss, + oss, g_ceph_context->_conf->osd_ignore_stale_divergent_priors); if (debug && oss.str().size()) cerr << oss.str() << std::endl; -- 2.39.5