diff options
Diffstat (limited to 'heal/src')
| -rw-r--r-- | heal/src/glfs-heal.c | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/heal/src/glfs-heal.c b/heal/src/glfs-heal.c index ce9ffbbc70b..960fd20bb96 100644 --- a/heal/src/glfs-heal.c +++ b/heal/src/glfs-heal.c @@ -55,6 +55,10 @@ glfsh_print_heal_op_status (int ret, uint64_t num_entries,                              gf_xl_afr_op_t heal_op)  { +        if (ret == -ENOTCONN && num_entries == 0) { +                printf ("Status: %s\n", strerror (-ret)); +                return; +        }          if (ret < 0) {                  printf ("Failed to process entries completely. "                           "Number of entries so far: %"PRIu64"\n", num_entries); @@ -442,12 +446,10 @@ glfsh_print_pending_heals_type (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc          ret = glfsh_get_index_dir_loc (rootloc, xl, &dirloc, &op_errno,                                         vgfid);          if (ret < 0) { -                if (op_errno == ESTALE || op_errno == ENOENT) { +                if (op_errno == ESTALE || op_errno == ENOENT)                          ret = 0; -                } else { -                        printf ("Status: %s\n", strerror (op_errno)); +                else                          ret = -op_errno; -                }                  goto out;          } @@ -466,7 +468,8 @@ out:  void  glfsh_print_pending_heals (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc, -                           xlator_t *xl, gf_xl_afr_op_t heal_op) +                           xlator_t *xl, gf_xl_afr_op_t heal_op, gf_boolean_t +                           is_parent_replicate)  {          int ret = 0;          uint64_t count = 0, total = 0; @@ -493,7 +496,7 @@ glfsh_print_pending_heals (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,          if (ret == -ENOTCONN)                  goto out; -        if (!strcmp (xl->type, "cluster/replicate")) { +        if (is_parent_replicate) {                  ret = glfsh_print_pending_heals_type (fs, top_subvol,                                                        rootloc, xl,                                                        heal_op, xattr_req, @@ -587,7 +590,10 @@ glfsh_gather_heal_info (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,                                  THIS = heal_xl;                                  glfsh_print_pending_heals (fs, top_subvol,                                                             rootloc, xl, -                                                           heal_op); +                                                           heal_op, +                                                           !strcmp +                                                           (heal_xl->type, +                                                           "cluster/replicate"));                                  THIS = old_THIS;                                  printf ("\n");                          } @@ -705,8 +711,13 @@ glfsh_heal_from_brick_type (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,          ret = glfsh_get_index_dir_loc (rootloc, client, &dirloc,                                         &op_errno, vgfid); -        if (ret < 0) +        if (ret < 0) { +                if (op_errno == ESTALE || op_errno == ENOENT) +                        ret = 0; +                else +                        ret = -op_errno;                  goto out; +        }          ret = syncop_dirfd (client, &dirloc, &fd,                              GF_CLIENT_PID_GLFS_HEAL); @@ -759,6 +770,9 @@ glfsh_heal_from_brick (glfs_t *fs, xlator_t *top_subvol, loc_t *rootloc,                                                    &count);                  total += count;                  count = 0; +                if (ret == -ENOTCONN) +                        goto out; +                  ret = glfsh_heal_from_brick_type (fs, top_subvol, rootloc,                                                    hostname, brickpath,                                                    client, xattr_req,  | 
