summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/dht/src/dht-common.c
diff options
context:
space:
mode:
authorVenkatesh Somyajulu <vsomyaju@redhat.com>2014-07-03 19:46:59 +0530
committerVijay Bellur <vbellur@redhat.com>2014-07-03 09:22:37 -0700
commitdc46d5e84f88c5cc869b78ba9db32ed4035b9121 (patch)
tree17a7ebaaaa4a8255dcc9f1cc88de3a117e6c1b0e /xlators/cluster/dht/src/dht-common.c
parentdedef037d64fef59d74b9861562aa7f93857a53e (diff)
cluster/dht: Added logging of new layout for dir-selfheal
Added a log which logs the new layout which will be used for the directory self healing It prints: a) Subvolume name b) Error --> Is needed because layout healing depends on the error and having it in log will help in debugging c) Start Starting of the layout range d) Stop Ending of the layout range Change-Id: I48c9c697716a899165ed29b737362a75c62e09b3 BUG: 1113066 Signed-off-by: Venkatesh Somyajulu <vsomyaju@redhat.com> Reviewed-on: http://review.gluster.org/8173 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
-rw-r--r--xlators/cluster/dht/src/dht-common.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
index 45450d5f383..d50b818cb16 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -5592,3 +5592,107 @@ dht_inode_ctx_layout_get (inode_t *inode, xlator_t *this, dht_layout_t **layout)
return ret;
}
+
+void
+dht_log_new_layout_for_dir_selfheal (xlator_t *this, loc_t *loc,
+ dht_layout_t *layout)
+{
+
+ char string[2048] = {0};
+ char *output_string = NULL;
+ int len = 0;
+ int off = 0;
+ int i = 0;
+ gf_loglevel_t log_level = gf_log_get_loglevel();
+ int ret = 0;
+ int max_string_len = 0;
+
+ if (log_level < GF_LOG_INFO)
+ return;
+
+ if (!layout)
+ return;
+
+ if (!layout->cnt)
+ return;
+
+ if (!loc)
+ return;
+
+ if (!loc->path)
+ return;
+
+ max_string_len = sizeof (string);
+
+ ret = snprintf (string, max_string_len, "Setting layout of %s with ",
+ loc->path);
+
+ if (ret < 0)
+ return;
+
+ len += ret;
+
+ /* Calculation of total length of the string required to calloc
+ * output_string. Log includes subvolume-name, start-range, end-range and
+ * err value.
+ *
+ * This log will help to debug cases where:
+ * a) Different processes set different layout of a directory.
+ * b) Error captured in lookup, which will be filled in layout->err
+ * (like ENOENT, ESTALE etc)
+ */
+
+ for (i = 0; i < layout->cnt; i++) {
+
+ ret = snprintf (string, max_string_len,
+ "[Subvol_name: %s, Err: %d , Start: "
+ "%"PRIu32 " , Stop: %"PRIu32 " ], ",
+ layout->list[i].xlator->name,
+ layout->list[i].err, layout->list[i].start,
+ layout->list[i].stop);
+
+ if (ret < 0)
+ return;
+
+ len += ret;
+
+ }
+
+ len++;
+
+ output_string = GF_CALLOC (len, sizeof (char), gf_common_mt_char);
+
+ if (!output_string)
+ return;
+
+ ret = snprintf (output_string, len, "Setting layout of %s with ",
+ loc->path);
+
+ if (ret < 0)
+ goto err;
+
+ off += ret;
+
+
+ for (i = 0; i < layout->cnt; i++) {
+
+ ret = snprintf (output_string + off, len - off,
+ "[Subvol_name: %s, Err: %d , Start: "
+ "%"PRIu32 " , Stop: %"PRIu32 " ], ",
+ layout->list[i].xlator->name,
+ layout->list[i].err, layout->list[i].start,
+ layout->list[i].stop);
+
+ if (ret < 0)
+ goto err;
+
+ off += ret;
+
+ }
+
+ gf_msg (this->name, GF_LOG_INFO, 0, DHT_MSG_LOG_FIXED_LAYOUT,
+ "%s", output_string);
+
+err:
+ GF_FREE (output_string);
+}