diff options
author | Sanju Rakonde <srakonde@redhat.com> | 2019-05-15 07:35:45 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2019-05-31 03:08:44 +0000 |
commit | 4f1b762fb482f2ebddaacfd31a7d43a967fea9e3 (patch) | |
tree | 414e4290f2ae90f7fda290b8741e58620d517f87 | |
parent | 2855c6247f7c5a2fafe1c403a112c38eca80d020 (diff) | |
download | glusterfs-4f1b762fb482f2ebddaacfd31a7d43a967fea9e3.tar.gz glusterfs-4f1b762fb482f2ebddaacfd31a7d43a967fea9e3.tar.xz glusterfs-4f1b762fb482f2ebddaacfd31a7d43a967fea9e3.zip |
glusterd: add an op-version check
Problem: "gluster v status" is hung in heterogenous cluster
when issued from a non-upgraded node.
Cause: commit 34e010d64 fixes the txn-opinfo mem leak
in op-sm framework by not setting the txn-opinfo if some
conditions are true. When vol status is issued from a
non-upgraded node, command is hanging in its upgraded peer
as the upgraded node setting the txn-opinfo based on new
conditions where as non-upgraded nodes are following diff
conditions.
Fix: Add an op-version check, so that all the nodes follow
same set of conditions to set txn-opinfo.
fixes: bz#1710159
Change-Id: Ie1f353212c5931ddd1b728d2e6949dfe6225c4ab
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index cf7b6570a7..e9eefdfd85 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -7793,9 +7793,12 @@ glusterd_op_sm() glusterd_op_sm_event_type_t event_type = GD_OP_EVENT_NONE; xlator_t *this = NULL; glusterd_op_info_t txn_op_info; + glusterd_conf_t *priv = NULL; this = THIS; GF_ASSERT(this); + priv = this->private; + GF_ASSERT(priv); ret = synclock_trylock(&gd_op_sm_lock); if (ret) { @@ -7873,7 +7876,8 @@ glusterd_op_sm() "Unable to clear " "transaction's opinfo"); } else { - if (!(event_type == GD_OP_EVENT_STAGE_OP && + if ((priv->op_version < GD_OP_VERSION_6_0) || + !(event_type == GD_OP_EVENT_STAGE_OP && opinfo.state.state == GD_OP_STATE_STAGED && opinfo.skip_locking)) { ret = glusterd_set_txn_opinfo(&event->txn_id, &opinfo); |