From: Yan, Zheng Date: Mon, 15 Dec 2014 07:43:57 +0000 (+0800) Subject: mds: set last snapid according to removed snaps in data pools X-Git-Tag: v0.93~87^2~30 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=040d5c5b70f094bdd3998cce3f93c7e5ca461541;p=ceph.git mds: set last snapid according to removed snaps in data pools handle the case that we create cephfs using existing pools and the existing pools' removed snaps are not empty. Fixes: #10315 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/SnapServer.cc b/src/mds/SnapServer.cc index ac0407393ede..04ab36a7fd11 100644 --- a/src/mds/SnapServer.cc +++ b/src/mds/SnapServer.cc @@ -37,6 +37,21 @@ void SnapServer::reset_state() last_snap = 1; /* snapid 1 reserved for initial root snaprealm */ snaps.clear(); need_to_purge.clear(); + + // find any removed snapshot in data pools + snapid_t first_free = 0; + const OSDMap *osdmap = mds->objecter->get_osdmap_read(); + for (set::const_iterator p = mds->mdsmap->get_data_pools().begin(); + p != mds->mdsmap->get_data_pools().end(); + ++p) { + const pg_pool_t *pi = osdmap->get_pg_pool(*p); + if (!pi->removed_snaps.empty() && + pi->removed_snaps.range_end() > first_free) + first_free = pi->removed_snaps.range_end(); + } + mds->objecter->put_osdmap_read(); + if (first_free > last_snap) + last_snap = first_free; }