summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-locks.c
diff options
context:
space:
mode:
authorKrishnan Parthasarathi <kparthas@redhat.com>2014-09-03 11:03:06 +0530
committerKrishnan Parthasarathi <kparthas@redhat.com>2014-09-22 04:08:58 -0700
commit1b53756e50cb9ad5422292d7f4e1e6fe23357222 (patch)
tree30eaf25c1fbc7e359796a86d21897ecd14f4af2a /xlators/mgmt/glusterd/src/glusterd-locks.c
parent0cbfe677f361cf49b182748f4b71ded13f6bc988 (diff)
glusterd: Add last successful glusterd lock backtrace
Also, moved the backtrace fetching logic to a separate function. Modified the backtrace fetching logic able to work under memory pressure conditions. Change-Id: Ie38bea425a085770f41831314aeda95595177ece BUG: 1138503 Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com> Reviewed-on: http://review.gluster.org/8584 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-locks.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-locks.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-locks.c b/xlators/mgmt/glusterd/src/glusterd-locks.c
index 2d1a664ebd2..b2629fd87b8 100644
--- a/xlators/mgmt/glusterd/src/glusterd-locks.c
+++ b/xlators/mgmt/glusterd/src/glusterd-locks.c
@@ -491,6 +491,7 @@ out:
return ret;
}
+
int32_t
glusterd_mgmt_v3_lock (const char *name, uuid_t uuid, char *type)
{
@@ -501,6 +502,7 @@ glusterd_mgmt_v3_lock (const char *name, uuid_t uuid, char *type)
gf_boolean_t is_valid = _gf_true;
uuid_t owner = {0};
xlator_t *this = NULL;
+ char *bt = NULL;
this = THIS;
GF_ASSERT (this);
@@ -569,6 +571,18 @@ glusterd_mgmt_v3_lock (const char *name, uuid_t uuid, char *type)
goto out;
}
+ /* Saving the backtrace into the pre-allocated buffer, ctx->btbuf*/
+ if ((bt = gf_backtrace_save (NULL))) {
+ snprintf (key, sizeof (key), "debug.last-success-bt-%s-%s",
+ name, type);
+ ret = dict_set_dynstr_with_alloc (priv->mgmt_v3_lock, key, bt);
+ if (ret)
+ gf_log (this->name, GF_LOG_WARNING, "Failed to save "
+ "the back trace for lock %s-%s granted to %s",
+ name, type, uuid_utoa (uuid));
+ ret = 0;
+ }
+
gf_log (this->name, GF_LOG_DEBUG,
"Lock for %s %s successfully held by %s",
type, name, uuid_utoa (uuid));