class MonClient;
class SnapServer : public MDSTableServer {
-protected:
- MonClient *mon_client = nullptr;
- snapid_t last_snap = 0;
- snapid_t last_created, last_destroyed;
- snapid_t snaprealm_v2_since;
- map<snapid_t, SnapInfo> snaps;
- map<int, set<snapid_t> > need_to_purge;
-
- map<version_t, SnapInfo> pending_update;
- map<version_t, pair<snapid_t,snapid_t> > pending_destroy; // (removed_snap, seq)
- set<version_t> pending_noop;
+public:
+ SnapServer(MDSRank *m, MonClient *monc)
+ : MDSTableServer(m, TABLE_SNAP), mon_client(monc) {}
+ SnapServer() : MDSTableServer(NULL, TABLE_SNAP) {}
+
+ void handle_remove_snaps(const cref_t<MRemoveSnaps> &m);
- version_t last_checked_osdmap;
+ void reset_state() override;
- bool root_scrubbed = false; // all snaprealms under root are converted?
- bool mdsdir_scrubbed = false; // all snaprealms under ~mds0 are converted?
+ bool upgrade_format() {
+ // upgraded from old filesystem
+ ceph_assert(is_active());
+ ceph_assert(last_snap > 0);
+ bool upgraded = false;
+ if (get_version() == 0) {
+ // version 0 confuses snapclient code
+ reset();
+ upgraded = true;
+ }
+ if (snaprealm_v2_since == CEPH_NOSNAP) {
+ // new snapshots will have new format snaprealms
+ snaprealm_v2_since = last_snap + 1;
+ upgraded = true;
+ }
+ return upgraded;
+ }
+
+ void check_osd_map(bool force);
+
+ void mark_base_recursively_scrubbed(inodeno_t ino) {
+ if (ino == MDS_INO_ROOT)
+ root_scrubbed = true;
+ else if (ino == MDS_INO_MDSDIR(rank))
+ mdsdir_scrubbed = true;
+ else
+ ceph_abort();
+ }
+ bool can_allow_multimds_snaps() const {
+ return (root_scrubbed && mdsdir_scrubbed) ||
+ snaps.empty() || snaps.begin()->first >= snaprealm_v2_since;
+ }
+
+ void encode(bufferlist& bl) const {
+ encode_server_state(bl);
+ }
+ void decode(bufferlist::const_iterator& bl) {
+ decode_server_state(bl);
+ }
+
+ void dump(Formatter *f) const;
+ static void generate_test_instances(std::list<SnapServer*>& ls);
+
+ bool force_update(snapid_t last, snapid_t v2_since,
+ map<snapid_t, SnapInfo>& _snaps);
+protected:
void encode_server_state(bufferlist& bl) const override {
ENCODE_START(5, 3, bl);
encode(last_snap, bl);
bool _notify_prep(version_t tid) override;
void handle_query(const cref_t<MMDSTableRequest> &m) override;
-public:
- void handle_remove_snaps(const cref_t<MRemoveSnaps> &m);
-
-public:
- SnapServer(MDSRank *m, MonClient *monc)
- : MDSTableServer(m, TABLE_SNAP), mon_client(monc), last_checked_osdmap(0) {}
- SnapServer() : MDSTableServer(NULL, TABLE_SNAP), last_checked_osdmap(0) {}
-
- void reset_state() override;
-
- bool upgrade_format() {
- // upgraded from old filesystem
- ceph_assert(is_active());
- ceph_assert(last_snap > 0);
- bool upgraded = false;
- if (get_version() == 0) {
- // version 0 confuses snapclient code
- reset();
- upgraded = true;
- }
- if (snaprealm_v2_since == CEPH_NOSNAP) {
- // new snapshots will have new format snaprealms
- snaprealm_v2_since = last_snap + 1;
- upgraded = true;
- }
- return upgraded;
- }
-
- void check_osd_map(bool force);
-
- void mark_base_recursively_scrubbed(inodeno_t ino) {
- if (ino == MDS_INO_ROOT)
- root_scrubbed = true;
- else if (ino == MDS_INO_MDSDIR(rank))
- mdsdir_scrubbed = true;
- else
- ceph_abort();
- }
- bool can_allow_multimds_snaps() const {
- return (root_scrubbed && mdsdir_scrubbed) ||
- snaps.empty() || snaps.begin()->first >= snaprealm_v2_since;
- }
+ MonClient *mon_client = nullptr;
+ snapid_t last_snap = 0;
+ snapid_t last_created, last_destroyed;
+ snapid_t snaprealm_v2_since;
+ map<snapid_t, SnapInfo> snaps;
+ map<int, set<snapid_t> > need_to_purge;
- void encode(bufferlist& bl) const {
- encode_server_state(bl);
- }
- void decode(bufferlist::const_iterator& bl) {
- decode_server_state(bl);
- }
+ map<version_t, SnapInfo> pending_update;
+ map<version_t, pair<snapid_t,snapid_t> > pending_destroy; // (removed_snap, seq)
+ set<version_t> pending_noop;
- void dump(Formatter *f) const;
- static void generate_test_instances(std::list<SnapServer*>& ls);
+ version_t last_checked_osdmap = 0;
- bool force_update(snapid_t last, snapid_t v2_since,
- map<snapid_t, SnapInfo>& _snaps);
+ bool root_scrubbed = false; // all snaprealms under root are converted?
+ bool mdsdir_scrubbed = false; // all snaprealms under ~mds0 are converted?
};
WRITE_CLASS_ENCODER(SnapServer)