for another fs */
#define CEPH_MDSMAP_BALANCE_AUTOMATE (1<<8) /* automate metadata balancing */
#define CEPH_MDSMAP_REFERENT_INODES (1<<9) /* create referent inode for hardlinks to store backtrace */
+#define CEPH_MDSMAP_GLOBAL_SNAPREALM (1<<10) /* use global snaprealm for hardlink snapshots */
#define CEPH_MDSMAP_DEFAULTS (CEPH_MDSMAP_ALLOW_SNAPS | \
- CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS)
+ CEPH_MDSMAP_ALLOW_MULTIMDS_SNAPS | \
+ CEPH_MDSMAP_GLOBAL_SNAPREALM)
/*
* mds states
f->dump_bool(flag_display.at(CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS), test_flag(CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS));
f->dump_bool(flag_display.at(CEPH_MDSMAP_BALANCE_AUTOMATE), test_flag(CEPH_MDSMAP_BALANCE_AUTOMATE));
f->dump_bool(flag_display.at(CEPH_MDSMAP_REFERENT_INODES), allow_referent_inodes());
+ f->dump_bool(flag_display.at(CEPH_MDSMAP_GLOBAL_SNAPREALM), use_global_snaprealm());
f->close_section();
}
out << " " << flag_display.at(CEPH_MDSMAP_BALANCE_AUTOMATE);
if (allow_referent_inodes())
out << " " << flag_display.at(CEPH_MDSMAP_REFERENT_INODES);
+ if (use_global_snaprealm())
+ out << " " << flag_display.at(CEPH_MDSMAP_GLOBAL_SNAPREALM);
}
void MDSMap::get_health(list<pair<health_status_t,string> >& summary,
bool allow_referent_inodes() const { return test_flag(CEPH_MDSMAP_REFERENT_INODES); }
bool was_referent_inodes_ever_used() const { return ever_allowed_features & CEPH_MDSMAP_REFERENT_INODES; }
+ void set_global_snaprealm() {
+ set_flag(CEPH_MDSMAP_GLOBAL_SNAPREALM);
+ ever_allowed_features |= CEPH_MDSMAP_GLOBAL_SNAPREALM;
+ explicitly_allowed_features |= CEPH_MDSMAP_GLOBAL_SNAPREALM;
+ }
+ void clear_global_snaprealm() { clear_flag(CEPH_MDSMAP_GLOBAL_SNAPREALM); }
+ bool use_global_snaprealm() const { return test_flag(CEPH_MDSMAP_GLOBAL_SNAPREALM); }
+ bool was_global_snaprealm_ever_used() const { return ever_allowed_features & CEPH_MDSMAP_GLOBAL_SNAPREALM; }
+
void set_standby_replay_allowed() {
set_flag(CEPH_MDSMAP_ALLOW_STANDBY_REPLAY);
ever_allowed_features |= CEPH_MDSMAP_ALLOW_STANDBY_REPLAY;
{CEPH_MDSMAP_REFUSE_CLIENT_SESSION, "refuse_client_session"},
{CEPH_MDSMAP_REFUSE_STANDBY_FOR_ANOTHER_FS, "refuse_standby_for_another_fs"},
{CEPH_MDSMAP_BALANCE_AUTOMATE, "balance_automate"},
- {CEPH_MDSMAP_REFERENT_INODES, "allow_referent_inodes"}
+ {CEPH_MDSMAP_REFERENT_INODES, "allow_referent_inodes"},
+ {CEPH_MDSMAP_GLOBAL_SNAPREALM, "use_global_snaprealm"}
};
};
WRITE_CLASS_ENCODER_FEATURES(MDSMap::mds_info_t)
});
ss << "Enabled creation of referent inodes for hardlinks to store backtrace";
}
+ } else if (var == "use_global_snaprealm") {
+ bool use_global_snaprealm = false;
+ int r = parse_bool(val, &use_global_snaprealm, ss);
+ if (r != 0) {
+ return r;
+ }
+
+ if (!use_global_snaprealm) {
+ modify_filesystem(fsmap, fsv,
+ [](auto&& fs)
+ {
+ fs.get_mds_map().clear_global_snaprealm();
+ });
+ ss << "Disable global snaprealm for hardlink snapshot";
+ } else {
+ modify_filesystem(fsmap, fsv,
+ [](auto&& fs)
+ {
+ fs.get_mds_map().set_global_snaprealm();
+ });
+ ss << "Use global snaprealm for hardlink snapshot";
+ }
} else if (var == "allow_dirfrags") {
ss << "Directory fragmentation is now permanently enabled."
<< " This command is DEPRECATED and will be REMOVED from future releases.";
"|session_timeout"
"|standby_count_wanted"
"|allow_referent_inodes"
+ "|use_global_snaprealm"
" "
"name=val,type=CephString "
"name=yes_i_really_mean_it,type=CephBool,req=false "