Blob Blame History Raw
From 7adb9671b97ac302cfc3f02effb8c71628958e14 Mon Sep 17 00:00:00 2001
From: N Balachandran <nbalacha@redhat.com>
Date: Mon, 19 Jun 2017 11:50:28 +0530
Subject: [PATCH 526/529] cluster/dht: Additional checks for rebalance
 estimates

The rebalance estimates calculation was not handling
calculations correctly when no files had been processed,
i.e., when rate_lookedup was 0.

Now, the estimated time is set to 0 in such scenarios as
there is no way for rebalance to figure out how long the
process will take to complete without knowing the rate at
which the files are being processed.

> BUG: 1457985
> Signed-off-by: N Balachandran <nbalacha@redhat.com>
> Reviewed-on: https://review.gluster.org/17564
> Smoke: Gluster Build System <jenkins@build.gluster.org>
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
> Reviewed-by: Amar Tumballi <amarts@redhat.com>
> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>

Change-Id: I7b6378e297e1ba139852bcb2239adf2477336b5b
BUG: 1454602
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/109749
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
---
 xlators/cluster/dht/src/dht-rebalance.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index a23a92a..87e3dc5 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -4560,9 +4560,10 @@ gf_defrag_get_estimates (dht_conf_t *conf)
         rate_lookedup = (total_processed)/elapsed;
 
 
-        /* We initially sum up dirs across all local subvols.
-         * The same directories will be counted for each subvol so
-         * we want to ensure that they are only counted once.
+        /* We initially sum up dirs across all local subvols because we get the
+         * file count from the inodes on each subvol.
+         * The same directories will be counted for each subvol but
+         * we want that they are only counted once.
          */
 
         tmp_count = g_totalfiles
@@ -4571,7 +4572,14 @@ gf_defrag_get_estimates (dht_conf_t *conf)
         if (total_processed > g_totalfiles)
                 g_totalfiles = total_processed + 10000;
 
-        time_to_complete = (tmp_count)/rate_lookedup;
+        if (rate_lookedup) {
+                time_to_complete = (tmp_count)/rate_lookedup;
+
+        } else {
+
+                gf_msg (THIS->name, GF_LOG_ERROR, 0, 0,
+                        "Unable to calculate estimated time for rebalance");
+        }
 
         gf_log (THIS->name, GF_LOG_INFO,
                 "TIME: total_processed=%"PRIu64" tmp_cnt = %"PRIu64","
@@ -4624,7 +4632,9 @@ gf_defrag_status_get (dht_conf_t *conf, dict_t *dict)
                 && (defrag->defrag_status == GF_DEFRAG_STATUS_STARTED)) {
 
                 time_to_complete = gf_defrag_get_estimates (conf);
-                time_left = time_to_complete - elapsed;
+
+                if (time_to_complete && (time_to_complete > elapsed))
+                        time_left = time_to_complete - elapsed;
 
                 gf_log (THIS->name, GF_LOG_INFO,
                         "TIME: Estimated total time to complete = %"PRIu64
-- 
1.8.3.1