]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
clean up new pool crush rule values [backward compatible protocol change]
authorSage Weil <sage@newdream.net>
Tue, 20 Jul 2010 21:59:33 +0000 (14:59 -0700)
committerSage Weil <sage@newdream.net>
Tue, 20 Jul 2010 22:07:12 +0000 (15:07 -0700)
Default to -1 (not 0!), which means 'server default'.

src/messages/MPoolOp.h
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h
src/osdc/Objecter.cc
src/osdc/Objecter.h

index 18a4b48a24293181bb3b8e2b257eaa1fdb09715e..b9444427cf608989fa10ad92c2b1ede46ace47de 100644 (file)
@@ -26,7 +26,7 @@ public:
   __u32 op;
   uint64_t auid;
   snapid_t snapid;
-  __u8 crush_rule;
+  __s16 crush_rule;
 
   MPoolOp() : PaxosServiceMessage(CEPH_MSG_POOLOP, 0) {}
   MPoolOp(const ceph_fsid_t& f, tid_t t, int p, string& n, int o, version_t v) :
@@ -53,9 +53,7 @@ public:
   }
 
   void encode_payload() {
-    if (crush_rule)
-      header.version = 3;
-    else header.version = 2;
+    header.version = 4;
     paxos_encode();
     ::encode(fsid, payload);
     ::encode(pool, payload);
@@ -63,6 +61,8 @@ public:
     ::encode(auid, payload);
     ::encode(snapid, payload);
     ::encode(name, payload);
+    __u8 pad = 0;
+    ::encode(pad, payload);  /* for v3->v4 encoding change */
     ::encode(crush_rule, payload);
   }
   void decode_payload() {
@@ -77,9 +77,16 @@ public:
     ::decode(snapid, p);
     if (header.version >= 2)
       ::decode(name, p);
-    if (header.version >= 3)
-      ::decode(crush_rule, p);
-    else crush_rule = 0;
+
+    if (header.version >= 3) {
+      __u8 pad;
+      ::decode(pad, p);
+      if (header.version >= 4)
+       ::decode(crush_rule, p);
+      else
+       crush_rule = pad;
+    } else
+      crush_rule = -1;
   }
 };
 
index 019bd7b4f9931f8ba860a8494b0bc0bf1e455047..99b91ca14dec377001cd1fa25a6bd27b56e1c767 100644 (file)
@@ -1116,7 +1116,7 @@ int OSDMonitor::prepare_new_pool(MPoolOp *m)
     return prepare_new_pool(m->name, session->caps.auid, m->crush_rule);
 }
 
-int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, __u8 crush_rule)
+int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_rule)
 {
   if (osdmap.name_pool.count(name)) {
     return -EEXIST;
@@ -1125,8 +1125,11 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, __u8 crush_rule)
     pending_inc.new_pool_max = osdmap.pool_max;
   int pool = ++pending_inc.new_pool_max;
   pending_inc.new_pools[pool].v.type = CEPH_PG_TYPE_REP;
-  pending_inc.new_pools[pool].v.size = 2;
-  pending_inc.new_pools[pool].v.crush_ruleset = crush_rule;
+  pending_inc.new_pools[pool].v.size = 2; /* aie */
+  if (crush_rule >= 0)
+    pending_inc.new_pools[pool].v.crush_ruleset = crush_rule;
+  else
+    pending_inc.new_pools[pool].v.crush_ruleset = 0; /* aie */
   pending_inc.new_pools[pool].v.object_hash = CEPH_STR_HASH_RJENKINS;
   pending_inc.new_pools[pool].v.pg_num = 8;
   pending_inc.new_pools[pool].v.pgp_num = 8;
index 0ec69ae6196234c2253cf3c9420bc2ad0a25d64f..0ac005067226b7ed7c403510917687eff8b0cb11 100644 (file)
@@ -93,7 +93,7 @@ private:
   bool prepare_pool_op_delete(MPoolOp *m);
   bool prepare_pool_op_auid(MPoolOp *m);
   int prepare_new_pool(string& name, uint64_t auid = CEPH_AUTH_UID_DEFAULT,
-                      __u8 crush_rule = 0);
+                      int crush_rule = -1);
   int prepare_new_pool(MPoolOp *m);
 
   void _pool_op(MPoolOp *m, int replyCode, epoch_t epoch, bufferlist *blp=NULL);
index e1a6f6be93e3a23b84794a6de100c2545b4f11bf..c60ffef176adc7fce0ae6ddbe41b092b457ce01f 100644 (file)
@@ -739,7 +739,7 @@ int Objecter::delete_selfmanaged_snap(int pool, snapid_t snap,
 }
 
 int Objecter::create_pool(string& name, Context *onfinish, uint64_t auid,
-                         __u8 crush_rule)
+                         int crush_rule)
 {
   dout(10) << "create_pool name=" << name << dendl;
   PoolOp *op = new PoolOp;
index 4686c2f8c14c89e8865a01b76c7f0a0ef881787e..86688fbd1a02ebd5afecd3c5a4054594c1b45815 100644 (file)
@@ -704,7 +704,7 @@ public:
   int delete_selfmanaged_snap(int pool, snapid_t snap, Context *onfinish);
 
   int create_pool(string& name, Context *onfinish, uint64_t auid=0,
-                 __u8 crush_rule=0);
+                 int crush_rule=-1);
   int delete_pool(int pool, Context *onfinish);
   int change_pool_auid(int pool, Context *onfinish, uint64_t auid);