]> git.apps.os.sepia.ceph.com Git - ceph-ci.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>
Wed, 13 Apr 2022 00:14:15 +0000 (00:14 +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>
src/mon/OSDMonitor.cc

index eec1ff017c1f6d4b2ff0ce1a408014acb6d547fb..bcfdb4ebcf9ea40a10d54f2df92a24de8542eacb 100644 (file)
@@ -12713,16 +12713,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);
@@ -12730,12 +12734,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,