]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: prevent upgrade from older than v7
authorSage Weil <sage@redhat.com>
Mon, 24 Nov 2014 04:27:08 +0000 (20:27 -0800)
committerSage Weil <sage@redhat.com>
Wed, 17 Dec 2014 01:07:57 +0000 (17:07 -0800)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSD.cc
src/osd/PG.h
src/tools/ceph_objectstore_tool.cc

index 016760c99a2d6a2b08cbf5418476499d441525d5..6182481cf6f5658ebdaf54d1731eb57476cdf3e6 100644 (file)
@@ -2793,6 +2793,11 @@ void OSD::load_pgs()
     pg->read_state(store, bl);
 
     if (pg->must_upgrade()) {
+      if (!pg->can_upgrade()) {
+       derr << "PG needs upgrade, but on-disk data is too old; upgrade to"
+            << " an older version first." << dendl;
+       assert(0 == "PG too old to upgrade");
+      }
       if (!has_upgraded) {
        derr << "PGs are upgrading" << dendl;
        has_upgraded = true;
index 4a804c80bcc3580783bad129ae9dbacba68562d1..1e435b087edf3aaf429e3ece3294ac763452557b 100644 (file)
@@ -281,8 +281,14 @@ public:
   pg_info_t        info;
   __u8 info_struct_v;
   static const __u8 cur_struct_v = 8;
+  // v7 was SnapMapper addition in 86658392516d5175b2756659ef7ffaaf95b0f8ad
+  // (first appeared in cuttlefish).
+  static const __u8 compat_struct_v = 7;
   bool must_upgrade() {
-    return info_struct_v < 8;
+    return info_struct_v < cur_struct_v;
+  }
+  bool can_upgrade() {
+    return info_struct_v >= compat_struct_v;
   }
   void upgrade(
     ObjectStore *store,
index 69abc6677c48eef4b473bb8f7fb8224b0b199ce8..fd560e63f91decfc230b77f2bedd6e88ad592ebd 100644 (file)
@@ -2795,6 +2795,11 @@ int main(int argc, char **argv)
       ret = 1;
       goto out;
     }
+    if (struct_ver < PG::compat_struct_v) {
+      cerr << "PG is too old to upgrade, use older Ceph version" << std::endl;
+      ret = 1;
+      goto out;
+    }
     if (debug)
       cerr << "struct_v " << (int)struct_ver << std::endl;