]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: rename quorum_features to quorum_con_features
authorJoao Eduardo Luis <joao@suse.de>
Mon, 1 Feb 2016 17:27:43 +0000 (17:27 +0000)
committerJoao Eduardo Luis <joao@suse.de>
Sat, 29 Oct 2016 03:10:23 +0000 (04:10 +0100)
Because now we have quorum_mon_features too.

Signed-off-by: Joao Eduardo Luis <joao@suse.de>
src/mon/AuthMonitor.cc
src/mon/LogMonitor.cc
src/mon/MDSMonitor.cc
src/mon/MonMap.cc
src/mon/MonMap.h
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/MonmapMonitor.cc
src/mon/OSDMonitor.cc
src/mon/PGMonitor.cc

index d148d050095ea8674b84fb9aac952dbd70302f67..b64a41271f90956fb5b4393e20a09d16c4c2ac8a 100644 (file)
@@ -236,7 +236,7 @@ void AuthMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   ::encode(v, bl);
   vector<Incremental>::iterator p;
   for (p = pending_auth.begin(); p != pending_auth.end(); ++p)
-    p->encode(bl, mon->get_quorum_features());
+    p->encode(bl, mon->get_quorum_con_features());
 
   version_t version = get_last_committed() + 1;
   put_version(t, version, bl);
index 6619e6bb11d8f2cfc914ce8a267ea33850e52927..50e36a35a1503ac60096ced5682fadf05cc2ce08 100644 (file)
@@ -216,7 +216,7 @@ void LogMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   ::encode(v, bl);
   multimap<utime_t,LogEntry>::iterator p;
   for (p = pending_log.begin(); p != pending_log.end(); ++p)
-    p->second.encode(bl, mon->quorum_features);
+    p->second.encode(bl, mon->get_quorum_con_features());
 
   put_version(t, version, bl);
   put_last_committed(t, version);
@@ -228,7 +228,7 @@ void LogMonitor::encode_full(MonitorDBStore::TransactionRef t)
   assert(get_last_committed() == summary.version);
 
   bufferlist summary_bl;
-  ::encode(summary, summary_bl, mon->quorum_features);
+  ::encode(summary, summary_bl, mon->get_quorum_con_features());
 
   put_version_full(t, summary.version, summary_bl);
   put_version_latest_full(t, summary.version);
index 122253ab278b48653955ab543fabd1baa2d2f371..78c00fec76bd7fe21402d85c612574a57a933a18 100644 (file)
@@ -101,7 +101,7 @@ void MDSMonitor::create_new_fs(FSMap &fsm, const std::string &name,
   fs->mds_map.session_timeout = g_conf->mds_session_timeout;
   fs->mds_map.session_autoclose = g_conf->mds_session_autoclose;
   fs->mds_map.enabled = true;
-  if (mon->get_quorum_features() & CEPH_FEATURE_SERVER_JEWEL) {
+  if (mon->get_quorum_con_features() & CEPH_FEATURE_SERVER_JEWEL) {
     fs->fscid = fsm.next_filesystem_id++;
     // ANONYMOUS is only for upgrades from legacy mdsmaps, we should
     // have initialized next_filesystem_id such that it's never used here.
@@ -196,7 +196,7 @@ void MDSMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   // apply to paxos
   assert(get_last_committed() + 1 == pending_fsmap.epoch);
   bufferlist fsmap_bl;
-  pending_fsmap.encode(fsmap_bl, mon->get_quorum_features());
+  pending_fsmap.encode(fsmap_bl, mon->get_quorum_con_features());
 
   /* put everything in the transaction */
   put_version(t, pending_fsmap.epoch, fsmap_bl);
@@ -1545,7 +1545,7 @@ class FlagSetHandler : public FileSystemCommandHandler
         return r;
       }
 
-      bool jewel = mon->get_quorum_features() & CEPH_FEATURE_SERVER_JEWEL;
+      bool jewel = mon->get_quorum_con_features() && CEPH_FEATURE_SERVER_JEWEL;
       if (flag_bool && !jewel) {
         ss << "Multiple-filesystems are forbidden until all mons are updated";
         return -EINVAL;
index b253c20799f1a0ec636f6a28b1b6d801e70807d1..dc2503c93934a738fdae0dfc30c7adc7d0d6aff0 100644 (file)
@@ -18,9 +18,9 @@
 
 using ceph::Formatter;
 
-void MonMap::encode(bufferlist& blist, uint64_t features) const
+void MonMap::encode(bufferlist& blist, uint64_t con_features) const
 {
-  if ((features & CEPH_FEATURE_MONNAMES) == 0) {
+  if ((con_features & CEPH_FEATURE_MONNAMES) == 0) {
     __u16 v = 1;
     ::encode(v, blist);
     ::encode_raw(fsid, blist);
@@ -28,34 +28,36 @@ void MonMap::encode(bufferlist& blist, uint64_t features) const
     vector<entity_inst_t> mon_inst(mon_addr.size());
     for (unsigned n = 0; n < mon_addr.size(); n++)
       mon_inst[n] = get_inst(n);
-    ::encode(mon_inst, blist, features);
+    ::encode(mon_inst, blist, con_features);
     ::encode(last_changed, blist);
     ::encode(created, blist);
     return;
   }
 
-  if ((features & CEPH_FEATURE_MONENC) == 0) {
+  if ((con_features & CEPH_FEATURE_MONENC) == 0) {
     __u16 v = 2;
     ::encode(v, blist);
     ::encode_raw(fsid, blist);
     ::encode(epoch, blist);
-    ::encode(mon_addr, blist, features);
+    ::encode(mon_addr, blist, con_features);
     ::encode(last_changed, blist);
     ::encode(created, blist);
   }
 
-  ENCODE_START(3, 3, blist);
+  ENCODE_START(4, 3, blist);
   ::encode_raw(fsid, blist);
   ::encode(epoch, blist);
-  ::encode(mon_addr, blist, features);
+  ::encode(mon_addr, blist, con_features);
   ::encode(last_changed, blist);
   ::encode(created, blist);
+  ::encode(persistent_features, blist);
+  ::encode(optional_features, blist);
   ENCODE_FINISH(blist);
 }
 
 void MonMap::decode(bufferlist::iterator &p)
 {
-  DECODE_START_LEGACY_COMPAT_LEN_16(3, 3, 3, p);
+  DECODE_START_LEGACY_COMPAT_LEN_16(4, 3, 3, p);
   ::decode_raw(fsid, p);
   ::decode(epoch, p);
   if (struct_v == 1) {
@@ -73,6 +75,11 @@ void MonMap::decode(bufferlist::iterator &p)
   }
   ::decode(last_changed, p);
   ::decode(created, p);
+  if (struct_v >= 4) {
+    ::decode(persistent_features, p);
+    ::decode(optional_features, p);
+  }
+
   DECODE_FINISH(p);
   calc_ranks();
 }
@@ -135,6 +142,10 @@ void MonMap::dump(Formatter *f) const
   f->dump_stream("fsid") <<  fsid;
   f->dump_stream("modified") << last_changed;
   f->dump_stream("created") << created;
+  f->open_object_section("features");
+  persistent_features.dump(f, "persistent");
+  optional_features.dump(f, "optional");
+  f->close_section();
   f->open_array_section("mons");
   int i = 0;
   for (map<entity_addr_t,string>::const_iterator p = addr_name.begin();
index f9dbcce3c756d4544b017d21ec9a4a1300d860f3..3f1150450adf774fb42ab57e9bb4ed93bca0b3f4 100644 (file)
 
 #include "msg/Message.h"
 #include "include/types.h"
+#include "mon/mon_types.h"
 
 namespace ceph {
   class Formatter;
 }
 
+
 class MonMap {
  public:
   epoch_t epoch;       // what epoch/version of the monmap
@@ -36,6 +38,41 @@ class MonMap {
   vector<string> rank_name;
   vector<entity_addr_t> rank_addr;
 
+  /**
+   * Persistent Features are all those features that once set on a
+   * monmap cannot, and should not, be removed. These will define the
+   * non-negotiable features that a given monitor must support to
+   * properly operate in a given quorum.
+   *
+   * Should be reserved for features that we really want to make sure
+   * are sticky, and are important enough to tolerate not being able
+   * to downgrade a monitor.
+   */
+  mon_feature_t persistent_features;
+  /**
+   * Optional Features are all those features that can be enabled or
+   * disabled following a given criteria -- e.g., user-mandated via the
+   * cli --, and act much like indicators of what the cluster currently
+   * supports.
+   *
+   * They are by no means "optional" in the sense that monitors can
+   * ignore them. Just that they are not persistent.
+   */
+  mon_feature_t optional_features;
+
+  /**
+   * Returns the set of features required by this monmap.
+   *
+   * The features required by this monmap is the union of all the
+   * currently set persistent features and the currently set optional
+   * features.
+   *
+   * @returns the set of features required by this monmap
+   */
+  mon_feature_t get_required_features() const {
+    return (persistent_features | optional_features);
+  }
+
   void calc_ranks() {
     rank_name.resize(mon_addr.size());
     rank_addr.resize(mon_addr.size());
@@ -55,7 +92,7 @@ class MonMap {
     }
   }
 
-  MonMap() 
+  MonMap()
     : epoch(0) {
     memset(&fsid, 0, sizeof(fsid));
   }
@@ -82,7 +119,7 @@ class MonMap {
     mon_addr[name] = addr;
     calc_ranks();
   }
-  
+
   void remove(const string &name) {
     assert(mon_addr.count(name));
     mon_addr.erase(name);
@@ -172,7 +209,7 @@ class MonMap {
     return i;
   }
 
-  void encode(bufferlist& blist, uint64_t features) const;
+  void encode(bufferlist& blist, uint64_t con_features) const;
   void decode(bufferlist& blist) {
     bufferlist::iterator p = blist.begin();
     decode(p);
index 2f340f81dc4fb7b4fa96cdd817dde2513fb067ef..2585914754d0303f988a5a75d387c99625d024b3 100644 (file)
@@ -166,7 +166,7 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
   elector(this),
   required_features(0),
   leader(0),
-  quorum_features(0),
+  quorum_con_features(0),
   // scrub
   scrub_version(0),
   scrub_event(NULL),
@@ -1891,7 +1891,7 @@ void Monitor::win_election(epoch_t epoch, set<int>& active, uint64_t features,
   leader_since = ceph_clock_now(g_ceph_context);
   leader = rank;
   quorum = active;
-  quorum_features = features;
+  quorum_con_features = features;
   quorum_mon_features = mon_features;
   outside_quorum.clear();
 
@@ -1938,10 +1938,10 @@ void Monitor::lose_election(epoch_t epoch, set<int> &q, int l,
   leader = l;
   quorum = q;
   outside_quorum.clear();
-  quorum_features = features;
+  quorum_con_features = features;
   quorum_mon_features = mon_features;
   dout(10) << "lose_election, epoch " << epoch << " leader is mon" << leader
-          << " quorum is " << quorum << " features are " << quorum_features
+          << " quorum is " << quorum << " features are " << quorum_con_features
            << " mon_features are " << quorum_mon_features
            << dendl;
 
@@ -1953,7 +1953,7 @@ void Monitor::lose_election(epoch_t epoch, set<int> &q, int l,
 
   finish_election();
 
-  if (quorum_features & CEPH_FEATURE_MON_METADATA) {
+  if (quorum_con_features & CEPH_FEATURE_MON_METADATA) {
     Metadata sys_info;
     collect_sys_info(&sys_info, g_ceph_context);
     messenger->send_message(new MMonMetadata(sys_info),
@@ -1984,16 +1984,16 @@ void Monitor::finish_election()
 void Monitor::apply_quorum_to_compatset_features()
 {
   CompatSet new_features(features);
-  if (quorum_features & CEPH_FEATURE_OSD_ERASURE_CODES) {
+  if (quorum_con_features & CEPH_FEATURE_OSD_ERASURE_CODES) {
     new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_OSD_ERASURE_CODES);
   }
-  if (quorum_features & CEPH_FEATURE_OSDMAP_ENC) {
+  if (quorum_con_features & CEPH_FEATURE_OSDMAP_ENC) {
     new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_OSDMAP_ENC);
   }
-  if (quorum_features & CEPH_FEATURE_ERASURE_CODE_PLUGINS_V2) {
+  if (quorum_con_features & CEPH_FEATURE_ERASURE_CODE_PLUGINS_V2) {
     new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_ERASURE_CODE_PLUGINS_V2);
   }
-  if (quorum_features & CEPH_FEATURE_ERASURE_CODE_PLUGINS_V3) {
+  if (quorum_con_features & CEPH_FEATURE_ERASURE_CODE_PLUGINS_V3) {
     new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_ERASURE_CODE_PLUGINS_V3);
   }
   if (new_features.compare(features) != 0) {
@@ -3284,7 +3284,7 @@ void Monitor::try_send_message(Message *m, const entity_inst_t& to)
   dout(10) << "try_send_message " << *m << " to " << to << dendl;
 
   bufferlist bl;
-  encode_message(m, quorum_features, bl);
+  encode_message(m, quorum_con_features, bl);
 
   messenger->send_message(m, to);
 
index bfdc5e59e3026cd7c04caf106124fab07931675d..5bbfd06c74c63c35d56e006b5b5611a08bb76321 100644 (file)
@@ -215,7 +215,10 @@ private:
   set<int> quorum;       // current active set of monitors (if !starting)
   utime_t leader_since;  // when this monitor became the leader, if it is the leader
   utime_t exited_quorum; // time detected as not in quorum; 0 if in
-  uint64_t quorum_features;  ///< intersection of quorum member feature bits
+  /**
+   * Intersection of quorum member's connection feature bits.
+   */
+  uint64_t quorum_con_features;
   /**
    * Intersection of quorum members mon-specific feature bits
    */
@@ -584,8 +587,8 @@ public:
       q.push_back(monmap->get_name(*p));
     return q;
   }
-  uint64_t get_quorum_features() const {
-    return quorum_features;
+  uint64_t get_quorum_con_features() const {
+    return quorum_con_features;
   }
   uint64_t get_required_features() const {
     return required_features;
index a36679e4062e0c3220ff7aa111ea0e44cdb76738..1b84c327abb8313f40179a650da621e197a1b455 100644 (file)
@@ -89,7 +89,7 @@ void MonmapMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   assert(mon->monmap->epoch + 1 == pending_map.epoch ||
         pending_map.epoch == 1);  // special case mkfs!
   bufferlist bl;
-  pending_map.encode(bl, mon->get_quorum_features());
+  pending_map.encode(bl, mon->get_quorum_con_features());
 
   put_version(t, pending_map.epoch, bl);
   put_last_committed(t, pending_map.epoch);
index ef0d87a9be4e3b9a2e1acfe7fc48ecdc293f330d..4c2b5f2f122f5ad4f4b556cac4530a1bd599a34b 100644 (file)
@@ -132,7 +132,8 @@ void OSDMonitor::create_initial()
   newmap.set_flag(CEPH_OSDMAP_REQUIRE_KRAKEN);
 
   // encode into pending incremental
-  newmap.encode(pending_inc.fullmap, mon->quorum_features | CEPH_FEATURE_RESERVED);
+  newmap.encode(pending_inc.fullmap,
+                mon->get_quorum_con_features() | CEPH_FEATURE_RESERVED);
   pending_inc.full_crc = newmap.get_crc();
   dout(20) << " full crc " << pending_inc.full_crc << dendl;
 }
@@ -238,7 +239,7 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
     // encode with all features.
     uint64_t f = inc.encode_features;
     if (!f)
-      f = mon->quorum_features;
+      f = mon->get_quorum_con_features();
     if (!f)
       f = -1;
     bufferlist full_bl;
@@ -1223,7 +1224,7 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   }
 
   // features for osdmap and its incremental
-  uint64_t features = mon->quorum_features;
+  uint64_t features = mon->get_quorum_con_features();
 
   // encode full map and determine its crc
   OSDMap tmp;
@@ -4624,7 +4625,7 @@ int OSDMonitor::check_cluster_features(uint64_t features,
 {
   stringstream unsupported_ss;
   int unsupported_count = 0;
-  if ((mon->get_quorum_features() & features) != features) {
+  if ((mon->get_quorum_con_features() & features) != features) {
     unsupported_ss << "the monitor cluster";
     ++unsupported_count;
   }
index 938c3bcc2a0d3d7fd07abd95f5845adb8806f865..1ed5f16bac0219721d5cd8f1ee7aa985e997ef13 100644 (file)
@@ -479,7 +479,7 @@ void PGMonitor::encode_pending(MonitorDBStore::TransactionRef t)
   assert(get_last_committed() + 1 == version);
   pending_inc.stamp = ceph_clock_now(g_ceph_context);
 
-  uint64_t features = mon->get_quorum_features();
+  uint64_t features = mon->get_quorum_con_features();
 
   string prefix = pgmap_meta_prefix;