From 040d5c5b70f094bdd3998cce3f93c7e5ca461541 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Mon, 15 Dec 2014 15:43:57 +0800 Subject: [PATCH] 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 --- src/mds/SnapServer.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mds/SnapServer.cc b/src/mds/SnapServer.cc index ac0407393ed..04ab36a7fd1 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; } -- 2.47.3