diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-rebalance.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rebalance.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index 208d0b3f3f3..82991596315 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -119,9 +119,29 @@ gf_glusterd_rebalance_move_data (glusterd_volinfo_t *volinfo, const char *dir) ret = sys_lsetxattr (full_path, "distribute.migrate-data", force_string, strlen (force_string), 0); - if (ret < 0) + + /* if errno is not ENOSPC or ENOTCONN, we can still continue + with rebalance process */ + if ((ret == -1) && ((errno != ENOSPC) || + (errno != ENOTCONN))) continue; + if ((ret == -1) && (errno == ENOTCONN)) { + /* Most probably mount point went missing (mostly due + to a brick down), say rebalance failure to user, + let him restart it if everything is fine */ + volinfo->defrag_status = GF_DEFRAG_STATUS_FAILED; + break; + } + + if ((ret == -1) && (errno == ENOSPC)) { + /* rebalance process itself failed, may be + remote brick went down, or write failed due to + disk full etc etc.. */ + volinfo->defrag_status = GF_DEFRAG_STATUS_FAILED; + break; + } + LOCK (&defrag->lock); { defrag->total_files += 1; |