]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: osdmon: extract blocklist manipulation functions into lambdas
authorGreg Farnum <gfarnum@redhat.com>
Thu, 28 Oct 2021 20:44:49 +0000 (20:44 +0000)
committerGreg Farnum <gfarnum@redhat.com>
Tue, 31 May 2022 23:18:15 +0000 (23:18 +0000)
I'm about to add new range blocklists that match the existing IP/entity
ones, and don't want to have separate update logic.

Signed-off-by: Greg Farnum <gfarnum@redhat.com>
(cherry picked from commit 37fbf121fa6ee76387f07b766bccab5e2b82bbc1)

src/mon/OSDMonitor.cc

index 75ab5912e62b724732027841be2c76639b06707a..9a2b31b191d179a0d15bb841f41daf5ee4cdeb8f 100644 (file)
@@ -12714,16 +12714,20 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           g_conf()->mon_osd_blocklist_default_expire);
        expires += d;
 
-       pending_inc.new_blocklist[addr] = expires;
-
-        {
-          // cancel any pending un-blocklisting request too
-          auto it = std::find(pending_inc.old_blocklist.begin(),
-            pending_inc.old_blocklist.end(), addr);
-          if (it != pending_inc.old_blocklist.end()) {
-            pending_inc.old_blocklist.erase(it);
-          }
-        }
+       auto add_to_pending_blocklists = [](auto& nb, auto& ob,
+                                           const auto& addr,
+                                           const auto& expires) {
+         nb[addr] = expires;
+         // cancel any pending un-blocklisting request too
+         auto it = std::find(ob.begin(),
+                             ob.end(), addr);
+         if (it != ob.end()) {
+           ob.erase(it);
+         }
+       };
+       add_to_pending_blocklists(pending_inc.new_blocklist,
+                                 pending_inc.old_blocklist,
+                                 addr, expires);
 
        ss << "blocklisting " << addr << " until " << expires << " (" << d << " sec)";
        getline(ss, rs);
@@ -12731,12 +12735,23 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                                                  get_last_committed() + 1));
        return true;
       } else if (blocklistop == "rm") {
-       if (osdmap.is_blocklisted(addr) ||
-           pending_inc.new_blocklist.count(addr)) {
-         if (osdmap.is_blocklisted(addr))
-           pending_inc.old_blocklist.push_back(addr);
-         else
-           pending_inc.new_blocklist.erase(addr);
+       auto maybe_rm_from_pending_blocklists = [](const auto& addr,
+                                                  auto& blocklist,
+                                                  auto& ob, auto& pb) {
+         if (blocklist.count(addr) ||
+             pb.count(addr)) {
+           if (blocklist.count(addr))
+             ob.push_back(addr);
+           else
+             pb.erase(addr);
+           return true;
+         } else {
+           return false;
+         }
+       };
+       if (maybe_rm_from_pending_blocklists(addr, osdmap.blocklist,
+                                            pending_inc.old_blocklist,
+                                            pending_inc.new_blocklist)) {
          ss << "un-blocklisting " << addr;
          getline(ss, rs);
          wait_for_finished_proposal(op, new Monitor::C_Command(mon, op, 0, rs,