void FSMap::encode(bufferlist& bl, uint64_t features) const
{
if (features & CEPH_FEATURE_SERVER_JEWEL) {
- ENCODE_START(6, 6, bl);
+ ENCODE_START(7, 6, bl);
::encode(epoch, bl);
::encode(next_filesystem_id, bl);
::encode(legacy_client_fscid, bl);
::encode(mds_roles, bl);
::encode(standby_daemons, bl, features);
::encode(standby_epochs, bl);
+ ::encode(ever_enabled_multiple, bl);
ENCODE_FINISH(bl);
} else {
if (filesystems.empty()) {
// MDSMonitor to store an FSMap instead of an MDSMap was
// 5, so anything older than 6 is decoded as an MDSMap,
// and anything newer is decoded as an FSMap.
- DECODE_START_LEGACY_COMPAT_LEN_16(6, 4, 4, p);
+ DECODE_START_LEGACY_COMPAT_LEN_16(7, 4, 4, p);
if (struct_v < 6) {
// Decoding an MDSMap (upgrade)
::decode(epoch, p);
::decode(mds_roles, p);
::decode(standby_daemons, p);
::decode(standby_epochs, p);
+ ::decode(ever_enabled_multiple, p);
}
DECODE_FINISH(p);
fs_cluster_id_t legacy_client_fscid;
CompatSet compat;
bool enable_multiple;
+ bool ever_enabled_multiple; // < the cluster had multiple MDSes enabled once
std::map<fs_cluster_id_t, std::shared_ptr<Filesystem> > filesystems;
next_filesystem_id(FS_CLUSTER_ID_ANONYMOUS + 1),
legacy_client_fscid(FS_CLUSTER_ID_NONE),
compat(get_mdsmap_compat_set_default()),
- enable_multiple(false)
+ enable_multiple(false), ever_enabled_multiple(false)
{ }
FSMap(const FSMap &rhs)
legacy_client_fscid(rhs.legacy_client_fscid),
compat(rhs.compat),
enable_multiple(rhs.enable_multiple),
+ ever_enabled_multiple(rhs.ever_enabled_multiple),
mds_roles(rhs.mds_roles),
standby_daemons(rhs.standby_daemons),
standby_epochs(rhs.standby_epochs)
void set_enable_multiple(const bool v)
{
enable_multiple = v;
+ if (true == v) {
+ ever_enabled_multiple = true;
+ }
}
bool get_enable_multiple() const
string flag_val;
cmd_getval(g_ceph_context, cmdmap, "val", flag_val);
+ string confirm;
+ cmd_getval(g_ceph_context, cmdmap, "confirm", confirm);
+
if (flag_name == "enable_multiple") {
bool flag_bool = false;
int r = parse_bool(flag_val, &flag_bool, ss);
ss << "Multiple-filesystems are forbidden until all mons are updated";
return -EINVAL;
}
-
+ if (confirm != "--yes-i-really-mean-it") {
+ ss << "Multiple filesystems is an EXPERIMENTAL and BARELY-TESTED configuration"
+ " that may break your entire cluster, probably prevent serious"
+ " support, and irrevocably marks your cluster."
+ " Add --yes-i-really-mean-it if you are sure you wish to continue.";
+ }
fsmap.set_enable_multiple(flag_bool);
return 0;
} else {
"name=confirm,type=CephString,req=false", \
"set mds parameter <var> to <val>", "mds", "rw", "cli,rest")
COMMAND("fs flag set name=flag_name,type=CephChoices,strings=enable_multiple "
- "name=val,type=CephString", \
+ "name=val,type=CephString " \
+ "name=confirm,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \
"Set a global CephFS flag", \
"fs", "rw", "cli,rest")
COMMAND("fs add_data_pool name=fs_name,type=CephString " \