]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds/MDSMap: fix incompat version for encoding 2254/head
authorSage Weil <sage@redhat.com>
Wed, 13 Aug 2014 22:05:05 +0000 (15:05 -0700)
committerSage Weil <sage@redhat.com>
Wed, 13 Aug 2014 22:05:05 +0000 (15:05 -0700)
Back in 8f7900a09c8e490c9cd3a6f92ed1f0eb1f47f2a9 we added the new fields
before the 'extended' section, which made the encoding incompatible.
Instead, add them at the end--old clients don't care whether the enabled
flag is set or what the 'fs name' is.

Fixes: #8725
Signed-off-by: Sage Weil <sage@redhat.com>
src/mds/MDSMap.cc

index 8a25d55cde1d8a8a13c7bfda09b5db386b43c23c..54ebf16fb9e64a38e0d13160bfcd745712f3f396 100644 (file)
@@ -480,7 +480,7 @@ void MDSMap::encode(bufferlist& bl, uint64_t features) const
     return;
   }
 
-  ENCODE_START(5, 5, bl);
+  ENCODE_START(5, 4, bl);
   ::encode(epoch, bl);
   ::encode(flags, bl);
   ::encode(last_failure, bl);
@@ -492,11 +492,9 @@ void MDSMap::encode(bufferlist& bl, uint64_t features) const
   ::encode(mds_info, bl, features);
   ::encode(data_pools, bl);
   ::encode(cas_pool, bl);
-  ::encode(enabled, bl);
-  ::encode(fs_name, bl);
 
   // kclient ignores everything from here
-  __u16 ev = 7;
+  __u16 ev = 8;
   ::encode(ev, bl);
   ::encode(compat, bl);
   ::encode(metadata_pool, bl);
@@ -512,6 +510,8 @@ void MDSMap::encode(bufferlist& bl, uint64_t features) const
   ::encode(ever_allowed_snaps, bl);
   ::encode(explicitly_allowed_snaps, bl);
   ::encode(inline_data_enabled, bl);
+  ::encode(enabled, bl);
+  ::encode(fs_name, bl);
   ENCODE_FINISH(bl);
 }
 
@@ -542,20 +542,6 @@ void MDSMap::decode(bufferlist::iterator& p)
     ::decode(data_pools, p);
     ::decode(cas_pool, p);
   }
-  if (struct_v >= 5) {
-    ::decode(enabled, p);
-    ::decode(fs_name, p);
-  } else {
-    if (epoch > 1) {
-      // If an MDS has ever been started, epoch will be greater than 1,
-      // assume filesystem is enabled.
-      enabled = true;
-    } else {
-      // Upgrading from a cluster that never used an MDS, switch off
-      // filesystem until it's explicitly enabled.
-      enabled = false;
-    }
-  }
 
   // kclient ignores everything from here
   __u16 ev = 1;
@@ -591,5 +577,21 @@ void MDSMap::decode(bufferlist::iterator& p)
   }
   if (ev >= 7)
     ::decode(inline_data_enabled, p);
+
+  if (ev >= 8) {
+    assert(struct_v >= 5);
+    ::decode(enabled, p);
+    ::decode(fs_name, p);
+  } else {
+    if (epoch > 1) {
+      // If an MDS has ever been started, epoch will be greater than 1,
+      // assume filesystem is enabled.
+      enabled = true;
+    } else {
+      // Upgrading from a cluster that never used an MDS, switch off
+      // filesystem until it's explicitly enabled.
+      enabled = false;
+    }
+  }
   DECODE_FINISH(p);
 }