Whamcloud - gitweb
LU-17087 lmv: update stale tgt statfs every 1 hour 70/52270/5
authorLai Siyao <lai.siyao@whamcloud.com>
Mon, 4 Sep 2023 12:45:34 +0000 (08:45 -0400)
committerOleg Drokin <green@whamcloud.com>
Thu, 28 Sep 2023 08:00:36 +0000 (08:00 +0000)
Some tgt statfs may not be initialized upon mount due to network
issues, if the filesystem is imbalanced, these tgts won't be chosen to
create directory because their bavail and ffree are 0.

If MDT is chosen by QoS, update tgt statfs that is one hour overdue,
otherwise check update the statfs of the tgt that is chosen.

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: I06af8b8bd342f66cb794471df3ee0f3b127ffe05
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/52270
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Hongchao Zhang <hongchao@whamcloud.com>
lustre/lmv/lmv_obd.c

index 2bebb98..15ad904 100644 (file)
@@ -1559,7 +1559,10 @@ static struct lu_tgt_desc *lmv_locate_tgt_qos(struct lmv_obd *lmv,
                        tgt->ltd_qos.ltq_usable = 0;
                        continue;
                }
-
+               /* update one hour overdue statfs */
+               if (ktime_get_seconds() - tgt->ltd_statfs_age >
+                   60 * lmv->lmv_mdt_descs.ltd_lmv_desc.ld_qos_maxage)
+                       lmv_statfs_check_update(lmv2obd_dev(lmv), tgt);
                tgt->ltd_qos.ltq_usable = 1;
                lu_tgt_qos_weight_calc(tgt, true);
                if (tgt->ltd_index == op_data->op_mds)
@@ -1969,18 +1972,12 @@ static struct lu_tgt_desc *lmv_locate_tgt_by_space(struct lmv_obd *lmv,
                        tgt = tmp;
                else
                        tgt = lmv_locate_tgt_rr(lmv);
+               if (!IS_ERR(tgt))
+                       lmv_statfs_check_update(lmv2obd_dev(lmv), tgt);
        }
 
-       /*
-        * only update statfs after QoS mkdir, this means the cached statfs may
-        * be stale, and current mkdir may not follow QoS accurately, but it's
-        * not serious, and avoids periodic statfs when client doesn't mkdir by
-        * QoS.
-        */
-       if (!IS_ERR(tgt)) {
+       if (!IS_ERR(tgt))
                op_data->op_mds = tgt->ltd_index;
-               lmv_statfs_check_update(lmv2obd_dev(lmv), tgt);
-       }
 
        return tgt;
 }