]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: block monitor managed snaps for fs pools
authorMilind Changire <mchangir@redhat.com>
Tue, 23 Aug 2022 11:13:08 +0000 (16:43 +0530)
committerMilind Changire <mchangir@redhat.com>
Thu, 9 Feb 2023 11:00:16 +0000 (16:30 +0530)
Signed-off-by: Milind Changire <mchangir@redhat.com>
(cherry picked from commit 23db15d5c2b428afec27c682052347ad07170413)

src/mon/FSCommands.cc
src/mon/OSDMonitor.cc

index 0b1bb2a03b79ad190ad59a2012c68c9730f310b9..ca336de089f85dd75860d9a9bad9e0ae7d09ec91 100644 (file)
@@ -1429,6 +1429,12 @@ int FileSystemCommandHandler::_check_pool(
     return -ENOENT;
   }
 
+  if (pool->has_snaps()) {
+    *ss << "pool(" << pool_id <<") already has mon-managed snaps; "
+          "can't attach pool to fs";
+    return -EOPNOTSUPP;
+  }
+
   const string& pool_name = osd_map.get_pool_name(pool_id);
 
   if (pool->is_erasure()) {
index 3191ed5bf18bf3f27950c381a12688e78a06de71..11dbaf7d7d0338f707bd4d91c9d6d65ac0cf1279 100644 (file)
@@ -14049,6 +14049,16 @@ bool OSDMonitor::prepare_pool_op(MonOpRequestRef op)
 
   const pg_pool_t *pool = osdmap.get_pg_pool(m->pool);
 
+  if (m->op == POOL_OP_CREATE_SNAP ||
+      m->op == POOL_OP_CREATE_UNMANAGED_SNAP) {
+    if (const auto& fsmap = mon.mdsmon()->get_fsmap(); fsmap.pool_in_use(m->pool)) {
+      dout(20) << "monitor-managed snapshots have been disabled for pools "
+                 " attached to an fs - pool:" << m->pool << dendl;
+      _pool_op_reply(op, -EOPNOTSUPP, osdmap.get_epoch());
+      return false;
+    }
+  }
+
   switch (m->op) {
     case POOL_OP_CREATE_SNAP:
       if (pool->is_tier()) {