diff options
| author | Gaurav Yadav <gyadav@redhat.com> | 2017-10-05 23:44:46 +0530 |
|---|---|---|
| committer | jiffin tony Thottan <jthottan@redhat.com> | 2017-11-06 12:16:15 +0000 |
| commit | 1a1bdfbffc81981a80af40ebf000194d9bcd1bf0 (patch) | |
| tree | 89801e2b992ed3697a2f4f1bf1117c754cb7e58d /xlators/mgmt/glusterd/src/glusterd.c | |
| parent | 4b480579320d6c594123e44fbedcba71f8815947 (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
>mainline patch : https://review.gluster.org/#/c/18437/
Change-Id: I16cc2e5186a2e8a5e35eca2468b031811e093843
BUG: 1503239
Signed-off-by: Gaurav Yadav <gyadav@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 81a3206d3f8..25089aef63b 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -1824,12 +1824,19 @@ init (xlator_t *this) if (ret) goto out; - conf->base_port = GF_IANA_PRIV_PORTS_START; - if (dict_get_uint32(this->options, "base-port", &conf->base_port) == 0) { + conf->base_port = GF_IANA_PRIV_PORTS_START; + if (dict_get_uint32(this->options, "base-port", &conf->base_port) == 0) { gf_msg (this->name, GF_LOG_INFO, 0, GD_MSG_DICT_SET_FAILED, "base-port override: %d", conf->base_port); - } + } + conf->mgmt_v3_lock_timeout = GF_LOCK_TIMER; + if (dict_get_uint32 (this->options, "lock-timer", + &conf->mgmt_v3_lock_timeout) == 0) { + gf_msg (this->name, GF_LOG_INFO, 0, + GD_MSG_DICT_SET_FAILED, + "lock-timer override: %d", conf->mgmt_v3_lock_timeout); + } /* Set option to run bricks on valgrind if enabled in glusterd.vol */ this->ctx->cmd_args.valgrind = valgrind; @@ -1855,6 +1862,7 @@ init (xlator_t *this) this->private = conf; glusterd_mgmt_v3_lock_init (); + glusterd_mgmt_v3_lock_timer_init(); glusterd_txn_opinfo_dict_init (); glusterd_shdsvc_build (&conf->shd_svc); @@ -2017,6 +2025,7 @@ fini (xlator_t *this) gf_store_handle_destroy (conf->handle); glusterd_sm_tr_log_delete (&conf->op_sm_log); glusterd_mgmt_v3_lock_fini (); + glusterd_mgmt_v3_lock_timer_fini (); glusterd_txn_opinfo_dict_fini (); GF_FREE (conf); @@ -2135,6 +2144,14 @@ struct volume_options options[] = { .type = GF_OPTION_TYPE_INT, .description = "Sets the base port for portmap query" }, + { .key = {"mgmt-v3-lock-timeout"}, + .type = GF_OPTION_TYPE_INT, + .max = 600, + .description = "Sets the mgmt-v3-lock-timeout for transactions." + "Specifes the default timeout value after which " + "lock acquired while performing transaction will " + "be released." + }, { .key = {"snap-brick-path"}, .type = GF_OPTION_TYPE_STR, .description = "directory where the bricks for the snapshots will be created" |
