summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr-self-heald.c
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2016-03-17 09:32:17 +0530
committerJeff Darcy <jdarcy@redhat.com>2016-04-04 17:39:46 -0700
commitd65419677cf784599d4352d94f626823f895a18b (patch)
tree63d1ddcc864c11d151e267f490bdd13f94504a56 /xlators/cluster/afr/src/afr-self-heald.c
parentc76a1690bbd909b1c2dd2c495e2a8352d599b14b (diff)
cluster/afr: Use parallel dir scan functionality
BUG: 1221737 Change-Id: I0ed71a72f0e33bd733723e00a01cf28378c5534e Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> Reviewed-on: http://review.gluster.org/13755 NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> Smoke: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Diffstat (limited to 'xlators/cluster/afr/src/afr-self-heald.c')
-rw-r--r--xlators/cluster/afr/src/afr-self-heald.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c
index 9439bba63ff..1ae4f18e764 100644
--- a/xlators/cluster/afr/src/afr-self-heald.c
+++ b/xlators/cluster/afr/src/afr-self-heald.c
@@ -315,14 +315,18 @@ afr_shd_selfheal (struct subvol_healer *healer, int child, uuid_t gfid)
ret = afr_selfheal (this, gfid);
- if (ret == -EIO) {
- eh = shd->split_brain;
- crawl_event->split_brain_count++;
- } else if (ret < 0) {
- crawl_event->heal_failed_count++;
- } else if (ret == 0) {
- crawl_event->healed_count++;
- }
+ LOCK (&priv->lock);
+ {
+ if (ret == -EIO) {
+ eh = shd->split_brain;
+ crawl_event->split_brain_count++;
+ } else if (ret < 0) {
+ crawl_event->heal_failed_count++;
+ } else if (ret == 0) {
+ crawl_event->healed_count++;
+ }
+ }
+ UNLOCK (&priv->lock);
if (eh) {
shd_event = GF_CALLOC (1, sizeof(*shd_event),
@@ -425,6 +429,7 @@ afr_shd_index_sweep (struct subvol_healer *healer, char *vgfid)
afr_private_t *priv = NULL;
int ret = 0;
xlator_t *subvol = NULL;
+ dict_t *xdata = NULL;
priv = healer->this->private;
subvol = priv->children[healer->subvol];
@@ -434,17 +439,28 @@ afr_shd_index_sweep (struct subvol_healer *healer, char *vgfid)
gf_msg (healer->this->name, GF_LOG_WARNING,
0, AFR_MSG_INDEX_DIR_GET_FAILED,
"unable to get index-dir on %s", subvol->name);
- return -errno;
+ ret = -errno;
+ goto out;
}
- ret = syncop_dir_scan (subvol, &loc, GF_CLIENT_PID_SELF_HEALD,
- healer, afr_shd_index_heal);
+ xdata = dict_new ();
+ if (!xdata || dict_set_int32 (xdata, "get-gfid-type", 1)) {
+ ret = -ENOMEM;
+ goto out;
+ }
- loc_wipe (&loc);
+ ret = syncop_mt_dir_scan (subvol, &loc, GF_CLIENT_PID_SELF_HEALD,
+ healer, afr_shd_index_heal, xdata,
+ priv->shd.max_threads, priv->shd.wait_qlength);
if (ret == 0)
ret = healer->crawl_event.healed_count;
+out:
+ loc_wipe (&loc);
+
+ if (xdata)
+ dict_unref (xdata);
return ret;
}