ceph: only send metrics when the MDS rank is ready
authorXiubo Li <xiubli@redhat.com>
Wed, 31 May 2023 08:06:55 +0000 (16:06 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 30 Jun 2023 10:08:54 +0000 (12:08 +0200)
When the MDS rank is in clientreplay state, the metrics requests
will be discarded directly. Also, when there are a lot of known
client requests to recover from, the metrics requests will slow
down the MDS rank from getting to the active state sooner.

With this patch, we will send the metrics requests only when the
MDS rank is in active state.

Link: https://tracker.ceph.com/issues/61524
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Milind Changire <mchangir@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/metric.c

index c47347d2e84e3227d1f2f5383c14a2e0126bc648..cce78d769f5516fbc5ce7b880d64f197a5cafa17 100644 (file)
@@ -36,6 +36,14 @@ static bool ceph_mdsc_send_metrics(struct ceph_mds_client *mdsc,
        s32 items = 0;
        s32 len;
 
+       /* Do not send the metrics until the MDS rank is ready */
+       mutex_lock(&mdsc->mutex);
+       if (ceph_mdsmap_get_state(mdsc->mdsmap, s->s_mds) != CEPH_MDS_STATE_ACTIVE) {
+               mutex_unlock(&mdsc->mutex);
+               return false;
+       }
+       mutex_unlock(&mdsc->mutex);
+
        len = sizeof(*head) + sizeof(*cap) + sizeof(*read) + sizeof(*write)
              + sizeof(*meta) + sizeof(*dlease) + sizeof(*files)
              + sizeof(*icaps) + sizeof(*inodes) + sizeof(*rsize)