]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Revert "reef: rgw/amqp: lock erase and create connection before emplace" revert-58715-wip-67072-reef 59015/head
authorRongqi Sun <sunrongqi@huawei.com>
Mon, 5 Aug 2024 08:03:40 +0000 (16:03 +0800)
committerGitHub <noreply@github.com>
Mon, 5 Aug 2024 08:03:40 +0000 (16:03 +0800)
src/rgw/rgw_amqp.cc

index f8b826213d29d1383097685dcad68486acc0a037..3014edd1db09dbfeb34621f9da0f1661896ce4e6 100644 (file)
@@ -535,12 +535,9 @@ typedef boost::lockfree::queue<message_wrapper_t*, boost::lockfree::fixed_sized<
           continue;
 
 #define ERASE_AND_CONTINUE(IT,CONTAINER) \
-          { \
-            std::lock_guard lock(connections_lock); \
-            IT=CONTAINER.erase(IT); \
-            --connection_count; \
-            continue; \
-          }
+          IT=CONTAINER.erase(IT); \
+          --connection_count; \
+          continue;
 
 class Manager {
 public:
@@ -886,14 +883,12 @@ public:
     }
     // if error occurred during creation the creation will be retried in the main thread
     ++connection_count;
-    auto conn = std::make_unique<connection_t>(cct, info, verify_ssl, ca_location);
-    if (new_state(conn.get(), tmp_id)) {
-        ldout(cct, 10) << "AMQP connect: new connection is created. Total connections: " << connection_count << dendl;
-    } else {
-        ldout(cct, 1) << "AMQP connect: new connection '" << to_string(tmp_id) << "' is created. but state creation failed (will retry). error: " <<
-            status_to_string(conn->status) << " (" << conn->reply_code << ")"  << dendl;
+    auto conn = connections.emplace(tmp_id, std::make_unique<connection_t>(cct, info, verify_ssl, ca_location)).first->second.get();
+    ldout(cct, 10) << "AMQP connect: new connection is created. Total connections: " << connection_count << dendl;
+    if (!new_state(conn, tmp_id)) {
+      ldout(cct, 1) << "AMQP connect: new connection '" << to_string(tmp_id) << "' is created. but state creation failed (will retry). error: " <<
+        status_to_string(conn->status) << " (" << conn->reply_code << ")"  << dendl;
     }
-    connections.emplace(tmp_id, std::move(conn));
     id = std::move(tmp_id);
     return true;
   }