diff options
Diffstat (limited to 'xlators/cluster/dht')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 104 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 3 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-messages.h | 11 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-selfheal.c | 8 |
4 files changed, 125 insertions, 1 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); +} diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index e45418a73f6..5dee622a2a1 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.h @@ -807,4 +807,7 @@ dht_inode_ctx_get1 (xlator_t *this, inode_t *inode, xlator_t **subvol); int dht_subvol_status (dht_conf_t *conf, xlator_t *subvol); +void +dht_log_new_layout_for_dir_selfheal (xlator_t *this, loc_t *loc, + dht_layout_t *layout); #endif/* _DHT_H */ diff --git a/xlators/cluster/dht/src/dht-messages.h b/xlators/cluster/dht/src/dht-messages.h index 7668e91ac99..80b20a61efd 100644 --- a/xlators/cluster/dht/src/dht-messages.h +++ b/xlators/cluster/dht/src/dht-messages.h @@ -45,7 +45,7 @@ */ #define GLFS_DHT_BASE GLFS_MSGID_COMP_DHT -#define GLFS_DHT_NUM_MESSAGES 35 +#define GLFS_DHT_NUM_MESSAGES 36 #define GLFS_MSGID_END (GLFS_DHT_BASE + GLFS_DHT_NUM_MESSAGES + 1) /* Messages with message IDs */ @@ -429,8 +429,17 @@ * @recommendedaction None * */ + #define DHT_MSG_LAYOUT_SET_FAILED (GLFS_DHT_BASE + 35) +/*! + * @messageid 109036 + * @diagnosis Informational message regarding layout range distribution + * for a directory across subvolumes + * @recommendedaction None + */ + +#define DHT_MSG_LOG_FIXED_LAYOUT (GLFS_DHT_BASE + 36) /*------------*/ #define glfs_msg_end_x GLFS_MSGID_END, "Invalid: End of messages" diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c index 1e2d7438350..4b64acc8793 100644 --- a/xlators/cluster/dht/src/dht-selfheal.c +++ b/xlators/cluster/dht/src/dht-selfheal.c @@ -236,6 +236,8 @@ dht_fix_dir_xattr (call_frame_t *frame, loc_t *loc, dht_layout_t *layout) local->call_cnt = count = conf->subvolume_cnt; + dht_log_new_layout_for_dir_selfheal (this, loc, layout); + for (i = 0; i < layout->cnt; i++) { dht_selfheal_dir_xattr_persubvol (frame, loc, layout, i, NULL); @@ -306,6 +308,9 @@ dht_selfheal_dir_xattr (call_frame_t *frame, loc_t *loc, dht_layout_t *layout) } local->call_cnt = missing_xattr; + + dht_log_new_layout_for_dir_selfheal (this, loc, layout); + for (i = 0; i < layout->cnt; i++) { if (layout->list[i].err != -1 || !layout->list[i].stop) continue; @@ -430,6 +435,9 @@ dht_selfheal_dir_xattr_for_nameless_lookup (call_frame_t *frame, loc_t *loc, } local->call_cnt = missing_xattr; + + dht_log_new_layout_for_dir_selfheal (this, loc, layout); + for (i = 0; i < layout->cnt; i++) { if (layout->list[i].err != -1 || !layout->list[i].stop) continue; |