OPTION(osd_pool_default_min_size, OPT_INT, 0) // 0 means no specific default; ceph will use size-size/2
OPTION(osd_pool_default_pg_num, OPT_INT, 8) // number of PGs for new pools. Configure in global or mon section of ceph.conf
OPTION(osd_pool_default_pgp_num, OPT_INT, 8) // number of PGs for placement purposes. Should be equal to pg_num
+OPTION(osd_pool_default_erasure_code_directory, OPT_STR, CEPH_PKGLIBDIR"/erasure-code") // default for the erasure-code-directory=XXX property of osd pool create
+OPTION(osd_pool_default_erasure_code_properties,
+ OPT_STR,
+ "erasure-code-plugin=jerasure "
+ "erasure-code-technique=cauchy_good "
+ "erasure-code-packetsize=3072 "
+ "erasure-code-k=4 "
+ "erasure-code-m=2 "
+ ) // default properties of osd pool create
OPTION(osd_pool_default_flags, OPT_INT, 0) // default flags for new pools
OPTION(osd_pool_default_flag_hashpspool, OPT_BOOL, true) // use new pg hashing to prevent pool/pg overlap
OPTION(osd_hit_set_min_size, OPT_INT, 1000) // min target size for a HitSet
#include "include/util.h"
#include "common/cmdparse.h"
#include "include/str_list.h"
+#include "include/str_map.h"
#define dout_subsys ceph_subsys_mon
#undef dout_prefix
* @param pg_num The pg_num to use. If set to 0, will use the system default
* @param pgp_num The pgp_num to use. If set to 0, will use the system default
* @param properties An opaque list of key[=value] pairs for pool configuration
+ * @param pool_type TYPE_ERASURE, TYPE_REP or TYPE_RAID4
+ * @param ss human readable error message, if any.
*
- * @return 0 in all cases. That's silly.
+ * @return 0 on success, negative errno on failure.
*/
int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_rule,
unsigned pg_num, unsigned pgp_num,
const unsigned pool_type,
stringstream &ss)
{
+ map<string,string> default_properties;
+ if (pool_type == pg_pool_t::TYPE_ERASURE) {
+ int r = get_str_map(g_conf->osd_pool_default_erasure_code_properties,
+ ss,
+ &default_properties);
+ if (r)
+ return r;
+ default_properties["erasure-code-directory"] =
+ g_conf->osd_pool_default_erasure_code_directory;
+ }
+
for (map<int64_t,string>::iterator p = pending_inc.new_pool_names.begin();
p != pending_inc.new_pool_names.end();
++p) {
pi->set_pgp_num(pgp_num ? pgp_num : g_conf->osd_pool_default_pgp_num);
pi->last_change = pending_inc.epoch;
pi->auid = auid;
+ pi->properties = default_properties;
for (vector<string>::const_iterator i = properties.begin();
i != properties.end();
++i) {