From 24c751670026ebe12dd37591df865bc892f4da69 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 20 Jul 2010 14:59:33 -0700 Subject: [PATCH] clean up new pool crush rule values [backward compatible protocol change] Default to -1 (not 0!), which means 'server default'. --- src/messages/MPoolOp.h | 21 ++++++++++++++------- src/mon/OSDMonitor.cc | 9 ++++++--- src/mon/OSDMonitor.h | 2 +- src/osdc/Objecter.cc | 2 +- src/osdc/Objecter.h | 2 +- 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/messages/MPoolOp.h b/src/messages/MPoolOp.h index 18a4b48a24293..b9444427cf608 100644 --- a/src/messages/MPoolOp.h +++ b/src/messages/MPoolOp.h @@ -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; } }; diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 019bd7b4f9931..99b91ca14dec3 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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; diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 0ec69ae619623..0ac005067226b 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -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); diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index e1a6f6be93e3a..c60ffef176adc 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -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; diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index 4686c2f8c14c8..86688fbd1a02e 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -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); -- 2.39.5