diff options
author | Gaurav Yadav <gyadav@redhat.com> | 2017-10-05 23:44:46 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2017-10-17 15:44:49 +0000 |
commit | 614904fa7a31bf6f69074238b7e710a20e05e1bb (patch) | |
tree | a478eddc666d9c8edae16446b50ca1b3cd9c8ffa /xlators/mgmt/glusterd/src/glusterd-locks.h | |
parent | 05b9dce1b503ab10efdb79a870b07d982cb5a823 (diff) |
glusterd : introduce timer in mgmt_v3_lock
Problem:
In a multinode environment, if two of the op-sm transactions
are initiated on one of the receiver nodes at the same time,
there might be a possibility that glusterd may end up in
stale lock.
Solution:
During mgmt_v3_lock a registration is made to gf_timer_call_after
which release the lock after certain period of time
Change-Id: I16cc2e5186a2e8a5e35eca2468b031811e093843
BUG: 1499004
Signed-off-by: Gaurav Yadav <gyadav@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-locks.h')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-locks.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-locks.h b/xlators/mgmt/glusterd/src/glusterd-locks.h index 437053d9f38..226d5c6bd7f 100644 --- a/xlators/mgmt/glusterd/src/glusterd-locks.h +++ b/xlators/mgmt/glusterd/src/glusterd-locks.h @@ -14,6 +14,11 @@ typedef struct glusterd_mgmt_v3_lock_object_ { uuid_t lock_owner; } glusterd_mgmt_v3_lock_obj; +typedef struct glusterd_mgmt_v3_lock_timer_ { + gf_timer_t *timer; + xlator_t *xl; +} glusterd_mgmt_v3_lock_timer; + typedef struct glusterd_mgmt_v3_lock_valid_entities { char *type; /* Entity type like vol, snap */ gf_boolean_t default_value; /* The default value that * @@ -29,6 +34,12 @@ void glusterd_mgmt_v3_lock_fini (); int32_t +glusterd_mgmt_v3_lock_timer_init (); + +void +glusterd_mgmt_v3_lock_timer_fini (); + +int32_t glusterd_get_mgmt_v3_lock_owner (char *volname, uuid_t *uuid); int32_t @@ -44,4 +55,6 @@ glusterd_multiple_mgmt_v3_lock (dict_t *dict, uuid_t uuid, uint32_t *op_errno); int32_t glusterd_multiple_mgmt_v3_unlock (dict_t *dict, uuid_t uuid); +void +gd_mgmt_v3_unlock_timer_cbk(void *data); #endif |