]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Change CompatSet usage to be compatible with new struct
authorGreg Farnum <gregf@hq.newdream.net>
Tue, 19 Jan 2010 20:24:31 +0000 (12:24 -0800)
committerGreg Farnum <gregf@hq.newdream.net>
Tue, 19 Jan 2010 22:03:20 +0000 (14:03 -0800)
src/cmon.cc
src/include/CompatSet.h
src/mds/MDS.cc
src/mon/Monitor.cc
src/mon/Monitor.h
src/osd/OSD.cc
src/osd/OSD.h
src/osd/osd_types.h

index 5c35cf81ef8dadd296dc8018fe059e362cdbb1bb..9c49a423ac17391ec679ea2b766e77f9e235775c 100644 (file)
@@ -35,12 +35,9 @@ using namespace std;
 #include "common/Timer.h"
 #include "common/common_init.h"
 
-extern const int ceph_mon_feature_compat_size;
-extern const char *ceph_mon_feature_compat[];
-extern const int ceph_mon_feature_ro_compat_size;
-extern const char *ceph_mon_feature_ro_compat[];
-extern const int ceph_mon_feature_incompat_size;
-extern const char *ceph_mon_feature_incompat[];
+extern const CompatSet::Feature ceph_mon_feature_compat[];
+extern const CompatSet::Feature ceph_mon_feature_ro_compat[];
+extern const CompatSet::Feature ceph_mon_feature_incompat[];
 
 void usage()
 {
@@ -74,11 +71,9 @@ int main(int argc, const char **argv)
 
   if (g_conf.clock_tare) g_clock.tare();
 
-  CompatSet mon_features(ceph_mon_feature_compat, ceph_mon_feature_compat_size,
+  CompatSet mon_features(ceph_mon_feature_compat,
                         ceph_mon_feature_ro_compat,
-                        ceph_mon_feature_ro_compat_size,
-                        ceph_mon_feature_incompat,
-                        ceph_mon_feature_incompat_size);
+                        ceph_mon_feature_incompat);
   CompatSet ondisk_features;
 
   MonitorStore store(g_conf.mon_data);
@@ -114,10 +109,11 @@ int main(int argc, const char **argv)
     cerr << "WARNING: mon fs missing feature list.\n"
         << "Assuming it is old-style and introducing one." << std::endl;
     //we only want the baseline ~v.18 features assumed to be on disk.
-    //They'll be first in the incompat list.
-    ondisk_features = CompatSet(NULL, 0, NULL, 0,
-                               ceph_mon_feature_incompat,
-                               1);
+    //If new features are introduced this code needs to disappear or
+    //be made smarter.
+    ondisk_features = CompatSet(ceph_mon_feature_compat,
+                               ceph_mon_feature_ro_compat,
+                               ceph_mon_feature_incompat);
   } else {
     bufferlist::iterator it = features.begin();
     ondisk_features.decode(it);
@@ -127,9 +123,7 @@ int main(int argc, const char **argv)
     cerr << "monitor executable cannot read disk! Missing features: "
         << std::endl;
     CompatSet diff = mon_features.unsupported(ondisk_features);
-    for (CompatSet::iterator iter = diff.begin(); iter != diff.end(); ++iter) {
-      cerr << *iter << std::endl;
-    }
+    //NEEDS_COMPATSET_ITER
     exit(1);
   }
 
index 4555bbc0842c3ee94307b9bb48763595bdbff237..41e3b4ed93fdb316818a0086afa6f2849079a264 100644 (file)
@@ -17,6 +17,8 @@
 #include "include/buffer.h"
 #include <vector>
 
+#define END_FEATURE CompatSet::Feature(0, "")
+
 struct CompatSet {
 
   struct Feature {
@@ -30,6 +32,8 @@ struct CompatSet {
   struct FeatureSet {
     __u64 mask;
     map <__u64,string> names;
+
+    FeatureSet() : mask(0), names() {}
     void insert(Feature f) {
       mask |= f.id;
       names[f.id] = f.name;
@@ -51,7 +55,7 @@ struct CompatSet {
   CompatSet(FeatureSet& _compat, FeatureSet& _ro_compat, FeatureSet& _incompat) :
     compat(_compat), ro_compat(_ro_compat), incompat(_incompat) {}
 
-  CompatSet(Feature _compat[], Feature _ro_compat[], Feature _incompat[]) :
+  CompatSet(const Feature _compat[], const Feature _ro_compat[], const Feature _incompat[]) :
     compat(), ro_compat(), incompat()
   {
     for (int i = 0; _compat[i].id != 0; ++i) compat.insert(_compat[i]);
index 9ffe89ee43217bd774db5f800515b8e460f8a449..a8725353f15594649389b4b52cd76aa513e1c87d 100644 (file)
@@ -83,9 +83,6 @@ MDS::MDS(const char *n, Messenger *m, MonClient *mc) :
   timer(mds_lock),
   name(n),
   whoami(-1), incarnation(0),
-  mds_features(ceph_mds_feature_compat, ceph_mds_feature_compat_size,
-              ceph_mds_feature_ro_compat, ceph_mds_feature_ro_compat_size,
-              ceph_mds_feature_incompat, ceph_mds_feature_incompat_size),
   standby_for_rank(-1),
   standby_replay_for(-1),
   messenger(m),
index d02131b6664e1bda910a276c4208e9beb41be7c2..39e6bb9e3ba3c5448c0b49e752c667a1af0212b3 100644 (file)
@@ -72,10 +72,12 @@ static ostream& _prefix(Monitor *mon) {
                << " ";
 }
 
-const char *ceph_mon_feature_compat[ceph_mon_feature_compat_size] = {};
-const char *ceph_mon_feature_ro_compat[ceph_mon_feature_ro_compat_size] = {};
-const char *ceph_mon_feature_incompat[ceph_mon_feature_incompat_size] =
-  { CEPH_MON_FEATURE_INCOMPAT_BASE };
+const CompatSet::Feature ceph_mon_feature_compat[] = 
+  {END_FEATURE};
+const CompatSet::Feature ceph_mon_feature_ro_compat[] = 
+  {END_FEATURE};
+const CompatSet::Feature ceph_mon_feature_incompat[] =
+  { CEPH_MON_FEATURE_INCOMPAT_BASE , CompatSet::Feature(0, "")};
 
 Monitor::Monitor(int w, MonitorStore *s, Messenger *m, MonMap *map) :
   whoami(w), 
@@ -897,11 +899,9 @@ int Monitor::mkfs(bufferlist& osdmapbl)
   store->put_bl_ss(magicbl, "magic", 0);
 
   bufferlist features;
-  CompatSet mon_features(ceph_mon_feature_compat, ceph_mon_feature_compat_size,
+  CompatSet mon_features(ceph_mon_feature_compat,
                         ceph_mon_feature_ro_compat,
-                        ceph_mon_feature_ro_compat_size,
-                        ceph_mon_feature_incompat,
-                        ceph_mon_feature_incompat_size);
+                        ceph_mon_feature_incompat);
   mon_features.encode(features);
   store->put_bl_ss(features, COMPAT_SET_LOC, 0);
 
index a1a32f31677fe1c50487cd843013ece35042fbe7..d1201f769ff535b889d61c2b1ef69970ff467f7b 100644 (file)
@@ -228,13 +228,10 @@ public:
   LogClient *get_logclient() { return &logclient; }
 };
 
-#define CEPH_MON_FEATURE_INCOMPAT_BASE "initial feature set (~v.18)"
-static const int ceph_mon_feature_compat_size = 0;
-static const int ceph_mon_feature_ro_compat_size = 0;
-static const int ceph_mon_feature_incompat_size = 1;
-extern const char *ceph_mon_feature_compat[];
-extern const char *ceph_mon_feature_ro_compat[];
-extern const char *ceph_mon_feature_incompat[];
+#define CEPH_MON_FEATURE_INCOMPAT_BASE CompatSet::Feature (1, "initial feature set (~v.18)")
+extern const CompatSet::Feature ceph_mon_feature_compat[];
+extern const CompatSet::Feature ceph_mon_feature_ro_compat[];
+extern const CompatSet::Feature ceph_mon_feature_incompat[];
 
 
 #endif
index 426ff479fdb0a5cf02e7417bfe130101d289e841..2e6ef3a6106f66e629f749729028ce620ae16230 100644 (file)
@@ -106,10 +106,17 @@ static ostream& _prefix(ostream& out, int whoami, OSDMap *osdmap) {
 
 const coll_t meta_coll;
 
-const char *ceph_osd_feature_compat[ceph_osd_feature_compat_size] = {};
-const char *ceph_osd_feature_ro_compat[ceph_osd_feature_ro_compat_size] = {};
-const char *ceph_osd_feature_incompat[ceph_osd_feature_incompat_size] =
-  { CEPH_OSD_FEATURE_INCOMPAT_BASE };
+
+const struct CompatSet::Feature ceph_osd_feature_compat[] = {
+  END_FEATURE
+};
+const struct CompatSet::Feature ceph_osd_feature_incompat[] = {
+  CEPH_OSD_FEATURE_INCOMPAT_BASE,
+  END_FEATURE
+};
+const struct CompatSet::Feature ceph_osd_feature_ro_compat[] = {
+  END_FEATURE
+};
 
 
 
@@ -241,9 +248,9 @@ OSD::OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev, c
   logclient(messenger, &mc->monmap),
   whoami(id),
   dev_path(dev), journal_path(jdev),
-  osd_compat(ceph_osd_feature_compat, ceph_osd_feature_compat_size,
-            ceph_osd_feature_ro_compat, ceph_osd_feature_ro_compat_size,
-            ceph_osd_feature_incompat, ceph_osd_feature_incompat_size),
+  osd_compat(ceph_osd_feature_compat,
+            ceph_osd_feature_ro_compat,
+            ceph_osd_feature_incompat),
   state(STATE_BOOTING), boot_epoch(0), up_epoch(0),
   op_tp("OSD::op_tp", g_conf.osd_op_threads),
   recovery_tp("OSD::recovery_tp", g_conf.osd_recovery_threads),
@@ -584,7 +591,8 @@ void OSD::write_superblock(ObjectStore::Transaction& t)
   dout(10) << "write_superblock " << superblock << dendl;
 
   //hack: at minimum it's using the baseline feature set
-  if (!superblock.compat_features.incompat.count(CEPH_OSD_FEATURE_INCOMPAT_BASE))
+  if (!superblock.compat_features.incompat.mask |
+      CEPH_OSD_FEATURE_INCOMPAT_BASE.id)
     superblock.compat_features.incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_BASE);
 
   bufferlist bl;
@@ -609,15 +617,12 @@ int OSD::read_superblock()
     if (osd_compat.writeable(superblock.compat_features)) {
       dout(5) << "it is still writeable, though. Missing features:" << dendl;
       CompatSet diff = osd_compat.unsupported(superblock.compat_features);
-      for (CompatSet::iterator i = diff.begin(); i != diff.end(); ++i) {
-       dout(5) << *i << dendl;
-      }
+      //NEEDS_ITER
     }
     else {
       dout(0) << "Cannot write to disk! Missing features:" << dendl;
       CompatSet diff = osd_compat.unsupported(superblock.compat_features);
-      for (CompatSet::iterator i = diff.begin(); i != diff.end(); ++i)
-       dout(0) << *i << dendl;;
+      //NEEDS_ITER
       return -EOPNOTSUPP;
     }
   }
index c7edd8f6dd7d789c5a6abddd759ae660a34c406f..da0820220dceb1ad59a2696bf367588490869f0b 100644 (file)
@@ -876,13 +876,9 @@ protected:
 };
 
 //compatibility of the executable
-#define CEPH_OSD_FEATURE_INCOMPAT_BASE "initial feature set(~v.18)"
-extern const char *ceph_osd_feature_compat[];
-extern const char *ceph_osd_feature_ro_compat[];
-extern const char *ceph_osd_feature_incompat[];
-static const int ceph_osd_feature_compat_size = 0;
-static const int ceph_osd_feature_ro_compat_size = 0;
-static const int ceph_osd_feature_incompat_size = 1;
+extern const CompatSet::Feature ceph_osd_feature_compat[];
+extern const CompatSet::Feature ceph_osd_feature_ro_compat[];
+extern const CompatSet::Feature ceph_osd_feature_incompat[];
 
 
 #endif
index 365874f73b73f01cfaacb7e1cae0e758ed5f7016..d333f97b0c477d0cb519ab0eb96fabed3ce121f8 100644 (file)
@@ -29,8 +29,8 @@
 
 #define CEPH_OSD_NEARFULL_RATIO .8
 #define CEPH_OSD_FULL_RATIO .95
-//this #define copied from OSD.h
-#define CEPH_OSD_FEATURE_INCOMPAT_BASE "initial feature set(~v.18)"
+
+#define CEPH_OSD_FEATURE_INCOMPAT_BASE CompatSet::Feature(1, "initial feature set(~v.18)")
 
 
 /* osdreqid_t - caller name + incarnation# + tid to unique identify this request