]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
src/msg/async: Improve logging and prefixes for global_seq
authorKamoltat Sirivadhna <ksirivad@redhat.com>
Wed, 9 Jul 2025 03:47:59 +0000 (03:47 +0000)
committerKamoltat Sirivadhna <ksirivad@redhat.com>
Tue, 7 Oct 2025 19:53:00 +0000 (19:53 +0000)
global_seq needs more visibility on how it gets updated,
decided to add more loggings in AsyncMessenger::get_global_seq
and also added the prefixes for global_seq in both
ProtocolV1 and ProtocolV2.

Fixes: https://tracker.ceph.com/issues/71344
Signed-off-by: Kamoltat Sirivadhna <ksirivad@redhat.com>
src/msg/async/AsyncMessenger.cc
src/msg/async/AsyncMessenger.h
src/msg/async/ProtocolV1.cc

index 3a8f9e0c1894cfc67c7a6baffbd5f94da3081d44..639b59937065f0148ab8410416c86fd2ec0fb5ea 100644 (file)
@@ -1059,6 +1059,37 @@ void AsyncMessenger::mark_down_addrs(const entity_addrvec_t& addrs)
   }
 }
 
+__u32 AsyncMessenger::get_global_seq(__u32 old_global_seq)
+{
+  __u32 ret;
+  // These are only used for logging.
+  __u32 prev_global = 0;
+  __u32 updated_to = 0;
+  bool did_update_to_old = false;
+
+  { // acquire lock
+    std::lock_guard<ceph::spinlock> lg(global_seq_lock);
+
+    if (old_global_seq > global_seq) {
+      // These are all for logging purposes
+      prev_global = global_seq;
+      updated_to = old_global_seq;
+      did_update_to_old = true;
+      // global_seq and ret are the only that matters.
+      global_seq = old_global_seq;
+    }
+    ret = ++global_seq;
+  } // release lock
+
+  if (did_update_to_old) {
+    ldout(cct, 10) << __func__ << " old_global_seq=" << old_global_seq
+      << " > global_seq=" << global_seq
+      << "; new global_seq=" << updated_to << dendl;
+  }
+  ldout(cct, 10) << __func__ << " increment to global_seq=" << global_seq << dendl;
+  return ret;
+}
+
 int AsyncMessenger::get_proto_version(int peer_type, bool connect) const
 {
   int my_type = my_name.type();
index 933dc3b620c8fc132b23b1a9307ece9e8f734f3d..91b6c4747e177e443756212681a9cfa573bddd1d 100644 (file)
@@ -400,15 +400,8 @@ public:
    *
    * @return a global sequence ID that nobody else has seen.
    */
-  __u32 get_global_seq(__u32 old=0) {
-    std::lock_guard<ceph::spinlock> lg(global_seq_lock);
+  __u32 get_global_seq(__u32 old=0);
 
-    if (old > global_seq)
-      global_seq = old;
-    __u32 ret = ++global_seq;
-
-    return ret;
-  }
   /**
    * Get the protocol version we support for the given peer type: either
    * a peer protocol (if it matches our own), the protocol version for the
index 029a8c0d6244f13284edad2a4677d16e56bd3a1e..680b80a8579f63d2045b89104976b3e89fd94617 100644 (file)
@@ -22,8 +22,8 @@ std::ostream &ProtocolV1::_conn_prefix(std::ostream *_dout) {
                << " conn("
                 << connection << " " << this
                 << " :" << connection->port << " s=" << get_state_name(state)
-                << " pgs=" << peer_global_seq << " cs=" << connect_seq
-                << " l=" << connection->policy.lossy << ").";
+                << " pgs=" << peer_global_seq << " gs=" << global_seq
+                << " cs=" << connect_seq << " l=" << connection->policy.lossy << ").";
 }
 
 #define WRITE(B, C) write(CONTINUATION(C), B)