]> git.apps.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>
Mon, 21 Nov 2022 10:44:53 +0000 (16:14 +0530)
Signed-off-by: Milind Changire <mchangir@redhat.com>
src/mon/FSCommands.cc
src/mon/OSDMonitor.cc

index 5fd1f4a21de9c9ccf7d4adc162999da66462afc1..3111dc099b79dda542b91258fbf69ef04312da6e 100644 (file)
@@ -1545,6 +1545,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);
   auto app_map = pool->application_metadata;
 
index e9e7ce72a8b1d76689844f8ab2f110c9aa17031b..b95ee73cdb34e3a0b82ec8b871f82ad9f8042af3 100644 (file)
@@ -14052,6 +14052,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()) {