Default to -1 (not 0!), which means 'server default'.
__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) :
}
void encode_payload() {
- if (crush_rule)
- header.version = 3;
- else header.version = 2;
+ header.version = 4;
paxos_encode();
::encode(fsid, payload);
::encode(pool, payload);
::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() {
::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;
}
};
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;
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;
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);
}
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;
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);