74b1de
From 78060c16f88594b3424e512a9ef0e4a8f56e88c3 Mon Sep 17 00:00:00 2001
cb8e9e
From: Kaushal M <kmadappa@redhat.com>
74b1de
Date: Thu, 6 Dec 2018 15:04:16 +0530
74b1de
Subject: [PATCH 02/52] glusterd: fix op-versions for RHS backwards
d1681e
 compatability
cb8e9e
12a457
Backport of https://code.engineering.redhat.com/gerrit/#/c/60485/
cb8e9e
12a457
This change fixes the op-version of different features and checks to maintain
12a457
backwards compatability with RHS-3.0 and before.
12a457
12a457
Label: DOWNSTREAM ONLY
12a457
12a457
Change-Id: Icb282444da179b12fbd6ed9f491514602f1a38c2
12a457
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
12a457
Reviewed-on: https://code.engineering.redhat.com/gerrit/70348
cb8e9e
---
74b1de
 libglusterfs/src/glusterfs/globals.h               |  45 +++--
74b1de
 rpc/rpc-transport/socket/src/socket.c              |   4 +-
74b1de
 xlators/cluster/dht/src/dht-shared.c               |   6 +-
74b1de
 xlators/debug/io-stats/src/io-stats.c              |  16 +-
74b1de
 xlators/features/barrier/src/barrier.c             |   4 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-brick-ops.c     |   8 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-handler.c       |  14 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-op-sm.c         |  16 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-peer-utils.c    |   8 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-rebalance.c     |   4 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-replace-brick.c |   4 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-rpc-ops.c       |   6 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-sm.c            |   2 +-
d1681e
 .../mgmt/glusterd/src/glusterd-snapshot-utils.c    |  12 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-snapshot.c      |   4 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-store.c         |  27 +--
d1681e
 xlators/mgmt/glusterd/src/glusterd-syncop.c        |   2 +-
74b1de
 xlators/mgmt/glusterd/src/glusterd-tier.c          |   3 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-utils.c         |   8 +-
d1681e
 xlators/mgmt/glusterd/src/glusterd-volume-ops.c    |  12 +-
74b1de
 xlators/mgmt/glusterd/src/glusterd-volume-set.c    | 192 +++++++++++----------
74b1de
 xlators/protocol/client/src/client.c               |   4 +-
74b1de
 xlators/protocol/server/src/server.c               |   6 +-
74b1de
 xlators/storage/posix/src/posix-common.c           |   4 +-
74b1de
 24 files changed, 214 insertions(+), 197 deletions(-)
cb8e9e
74b1de
diff --git a/libglusterfs/src/glusterfs/globals.h b/libglusterfs/src/glusterfs/globals.h
74b1de
index 8d898c3..b9da872 100644
74b1de
--- a/libglusterfs/src/glusterfs/globals.h
74b1de
+++ b/libglusterfs/src/glusterfs/globals.h
74b1de
@@ -23,23 +23,28 @@
74b1de
 #define GF_AVOID_OVERWRITE "glusterfs.avoid.overwrite"
74b1de
 #define GF_CLEAN_WRITE_PROTECTION "glusterfs.clean.writexattr"
cb8e9e
 
cb8e9e
-/* Gluster versions - OP-VERSION mapping
cb8e9e
+/* RHS versions - OP-VERSION mapping
cb8e9e
  *
cb8e9e
- * 3.3.x                - 1
cb8e9e
- * 3.4.x                - 2
cb8e9e
- * 3.5.0                - 3
cb8e9e
- * 3.5.1                - 30501
cb8e9e
- * 3.6.0                - 30600
cb8e9e
- * 3.7.0                - 30700
cb8e9e
- * 3.7.1                - 30701
cb8e9e
- * 3.7.2                - 30702
cb8e9e
+ * RHS-2.0 Z    - 1
cb8e9e
+ * RHS-2.1 Z    - 2
cb8e9e
+ * RHS-2.1 u5   - 20105
cb8e9e
+ * RHS-3.0      - 30000
cb8e9e
+ * RHS-3.0.4    - 30004
cb8e9e
+ * RHGS-3.1     - 30702
cb8e9e
  *
cb8e9e
- * Starting with Gluster v3.6, the op-version will be multi-digit integer values
cb8e9e
- * based on the Glusterfs version, instead of a simply incrementing integer
cb8e9e
- * value. The op-version for a given X.Y.Z release will be an integer XYZ, with
cb8e9e
- * Y and Z 2 digit always 2 digits wide and padded with 0 when needed. This
cb8e9e
- * should allow for some gaps between two Y releases for backports of features
cb8e9e
- * in Z releases.
cb8e9e
+ *
cb8e9e
+ * NOTE:
cb8e9e
+ * Starting with RHS-3.0, the op-version will be multi-digit integer values
cb8e9e
+ * based on the RHS version, instead of a simply incrementing integer value. The
cb8e9e
+ * op-version for a given RHS X(Major).Y(Minor).Z(Update) release will be an
cb8e9e
+ * integer with digits XYZ. The Y and Z values will be 2 digits wide always
cb8e9e
+ * padded with 0 as needed. This should allow for some gaps between two Y
cb8e9e
+ * releases for backports of features in Z releases.
cb8e9e
+ *
cb8e9e
+ * NOTE:
cb8e9e
+ * Starting with RHGS-3.1, the op-version will be the same as the upstream
cb8e9e
+ * GlusterFS op-versions. This is to allow proper access to upstream clients of
cb8e9e
+ * version 3.7.x or greater, proper access to the RHGS volumes.
cb8e9e
  */
74b1de
 #define GD_OP_VERSION_MIN                                                      \
74b1de
     1 /* MIN is the fresh start op-version, mostly                             \
74b1de
@@ -51,7 +56,13 @@
74b1de
                          introduction of newer                                 \
74b1de
                          versions */
cb8e9e
 
74b1de
-#define GD_OP_VERSION_3_6_0 30600 /* Op-Version for GlusterFS 3.6.0 */
cb8e9e
+#define GD_OP_VERSION_RHS_3_0    30000 /* Op-Version of RHS 3.0 */
cb8e9e
+
cb8e9e
+#define GD_OP_VER_PERSISTENT_AFR_XATTRS GD_OP_VERSION_RHS_3_0
cb8e9e
+
cb8e9e
+#define GD_OP_VERSION_RHS_2_1_5  20105 /* RHS 2.1 update 5 */
cb8e9e
+
cb8e9e
+#define GD_OP_VERSION_RHS_3_0_4  30004 /* Op-Version of RHS 3.0.4 */
cb8e9e
 
74b1de
 #define GD_OP_VERSION_3_7_0 30700 /* Op-version for GlusterFS 3.7.0 */
cb8e9e
 
74b1de
@@ -115,8 +126,6 @@
3604df
 
74b1de
 #define GD_OP_VERSION_6_0 60000 /* Op-version for GlusterFS 6.0 */
3604df
 
3604df
-#define GD_OP_VER_PERSISTENT_AFR_XATTRS GD_OP_VERSION_3_6_0
3604df
-
74b1de
 #include "glusterfs/xlator.h"
74b1de
 #include "glusterfs/options.h"
3604df
 
74b1de
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
74b1de
index fa0e0f2..121d46b 100644
74b1de
--- a/rpc/rpc-transport/socket/src/socket.c
74b1de
+++ b/rpc/rpc-transport/socket/src/socket.c
74b1de
@@ -4704,7 +4704,7 @@ struct volume_options options[] = {
74b1de
      .description = "SSL CA list. Ignored if SSL is not enabled."},
74b1de
     {.key = {"ssl-cert-depth"},
74b1de
      .type = GF_OPTION_TYPE_INT,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE,
74b1de
      .description = "Maximum certificate-chain depth.  If zero, the "
74b1de
                     "peer's certificate itself must be in the local "
74b1de
@@ -4713,7 +4713,7 @@ struct volume_options options[] = {
74b1de
                     "local list.  Ignored if SSL is not enabled."},
74b1de
     {.key = {"ssl-cipher-list"},
74b1de
      .type = GF_OPTION_TYPE_STR,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE,
74b1de
      .description = "Allowed SSL ciphers. Ignored if SSL is not enabled."},
74b1de
     {.key = {"ssl-dh-param"},
74b1de
diff --git a/xlators/cluster/dht/src/dht-shared.c b/xlators/cluster/dht/src/dht-shared.c
74b1de
index c7ef2f1..ea4b7c6 100644
74b1de
--- a/xlators/cluster/dht/src/dht-shared.c
74b1de
+++ b/xlators/cluster/dht/src/dht-shared.c
74b1de
@@ -1064,7 +1064,7 @@ struct volume_options dht_options[] = {
74b1de
          "When enabled, files will be allocated to bricks "
74b1de
          "with a probability proportional to their size.  Otherwise, all "
74b1de
          "bricks will have the same probability (legacy behavior).",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .level = OPT_STATUS_BASIC,
74b1de
      .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
 
74b1de
@@ -1161,7 +1161,7 @@ struct volume_options dht_options[] = {
74b1de
             "from which hash ranges are allocated starting with 0. "
74b1de
             "Note that we still use a directory/file's name to determine the "
74b1de
             "subvolume to which it hashes",
74b1de
-        .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+        .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
     },
74b1de
 
74b1de
     {.key = {"rebal-throttle"},
74b1de
@@ -1174,7 +1174,7 @@ struct volume_options dht_options[] = {
74b1de
                     "migrated at a time. Lazy will allow only one file to "
74b1de
                     "be migrated at a time and aggressive will allow "
74b1de
                     "max of [($(processing units) - 4) / 2), 4]",
74b1de
-     .op_version = {GD_OP_VERSION_3_7_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .level = OPT_STATUS_BASIC,
74b1de
      .flags = OPT_FLAG_CLIENT_OPT | OPT_FLAG_SETTABLE | OPT_FLAG_DOC
74b1de
 
74b1de
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c
74b1de
index f12191f..41b57c5 100644
74b1de
--- a/xlators/debug/io-stats/src/io-stats.c
74b1de
+++ b/xlators/debug/io-stats/src/io-stats.c
74b1de
@@ -4333,7 +4333,7 @@ struct volume_options options[] = {
74b1de
      .value = {GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}},
74b1de
     {.key = {"client-logger"},
74b1de
      .type = GF_OPTION_TYPE_STR,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .default_value = GF_LOGGER_GLUSTER_LOG,
74b1de
@@ -4342,7 +4342,7 @@ struct volume_options options[] = {
74b1de
      .value = {GF_LOGGER_GLUSTER_LOG, GF_LOGGER_SYSLOG}},
74b1de
     {.key = {"brick-logger"},
74b1de
      .type = GF_OPTION_TYPE_STR,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .default_value = GF_LOGGER_GLUSTER_LOG,
74b1de
@@ -4354,7 +4354,7 @@ struct volume_options options[] = {
74b1de
      .value = {GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}},
74b1de
     {.key = {"client-log-format"},
74b1de
      .type = GF_OPTION_TYPE_STR,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .default_value = GF_LOG_FORMAT_WITH_MSG_ID,
74b1de
@@ -4362,7 +4362,7 @@ struct volume_options options[] = {
74b1de
      .value = {GF_LOG_FORMAT_NO_MSG_ID, GF_LOG_FORMAT_WITH_MSG_ID}},
74b1de
     {.key = {"brick-log-format"},
74b1de
      .type = GF_OPTION_TYPE_STR,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .default_value = GF_LOG_FORMAT_WITH_MSG_ID,
74b1de
@@ -4377,7 +4377,7 @@ struct volume_options options[] = {
74b1de
     },
74b1de
     {.key = {"client-log-buf-size"},
74b1de
      .type = GF_OPTION_TYPE_INT,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .min = GF_LOG_LRU_BUFSIZE_MIN,
74b1de
@@ -4388,7 +4388,7 @@ struct volume_options options[] = {
74b1de
                     " the value of the option client-log-flush-timeout."},
74b1de
     {.key = {"brick-log-buf-size"},
74b1de
      .type = GF_OPTION_TYPE_INT,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .min = GF_LOG_LRU_BUFSIZE_MIN,
74b1de
@@ -4406,7 +4406,7 @@ struct volume_options options[] = {
74b1de
     },
74b1de
     {.key = {"client-log-flush-timeout"},
74b1de
      .type = GF_OPTION_TYPE_TIME,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_CLIENT_OPT | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .min = GF_LOG_FLUSH_TIMEOUT_MIN,
74b1de
@@ -4417,7 +4417,7 @@ struct volume_options options[] = {
74b1de
                     " the value of the option client-log-flush-timeout."},
74b1de
     {.key = {"brick-log-flush-timeout"},
74b1de
      .type = GF_OPTION_TYPE_TIME,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC,
74b1de
      .tags = {"io-stats"},
74b1de
      .min = GF_LOG_FLUSH_TIMEOUT_MIN,
74b1de
diff --git a/xlators/features/barrier/src/barrier.c b/xlators/features/barrier/src/barrier.c
74b1de
index a601c7f..0923992 100644
74b1de
--- a/xlators/features/barrier/src/barrier.c
74b1de
+++ b/xlators/features/barrier/src/barrier.c
74b1de
@@ -774,7 +774,7 @@ struct volume_options options[] = {
74b1de
     {.key = {"barrier"},
74b1de
      .type = GF_OPTION_TYPE_BOOL,
74b1de
      .default_value = "disable",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE,
74b1de
      .description = "When \"enabled\", blocks acknowledgements to application "
74b1de
                     "for file operations such as rmdir, rename, unlink, "
74b1de
@@ -784,7 +784,7 @@ struct volume_options options[] = {
74b1de
     {.key = {"barrier-timeout"},
74b1de
      .type = GF_OPTION_TYPE_TIME,
74b1de
      .default_value = BARRIER_TIMEOUT,
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE,
74b1de
      .description = "After 'timeout' seconds since the time 'barrier' "
74b1de
                     "option was set to \"on\", acknowledgements to file "
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
74b1de
index 38483a1..ad9a572 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
74b1de
@@ -1195,7 +1195,7 @@ glusterd_op_perform_add_bricks(glusterd_volinfo_t *volinfo, int32_t count,
74b1de
         /* A bricks mount dir is required only by snapshots which were
74b1de
          * introduced in gluster-3.6.0
74b1de
          */
74b1de
-        if (conf->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+        if (conf->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
             brick_mount_dir = NULL;
cb8e9e
 
74b1de
             snprintf(key, sizeof(key), "brick%d.mount_dir", i);
74b1de
@@ -1729,7 +1729,7 @@ glusterd_op_stage_add_brick(dict_t *dict, char **op_errstr, dict_t *rsp_dict)
74b1de
             /* A bricks mount dir is required only by snapshots which were
74b1de
              * introduced in gluster-3.6.0
74b1de
              */
74b1de
-            if (conf->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+            if (conf->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
                 ret = glusterd_get_brick_mount_dir(
74b1de
                     brickinfo->path, brickinfo->hostname, brickinfo->mount_dir);
cb8e9e
                 if (ret) {
74b1de
@@ -2085,12 +2085,12 @@ glusterd_op_stage_remove_brick(dict_t *dict, char **op_errstr)
74b1de
             }
74b1de
 
74b1de
             /* Check if the connected clients are all of version
74b1de
-             * glusterfs-3.6 and higher. This is needed to prevent some data
74b1de
+             * RHS-2.1u5 and higher. This is needed to prevent some data
74b1de
              * loss issues that could occur when older clients are connected
74b1de
              * when rebalance is run.
74b1de
              */
74b1de
             ret = glusterd_check_client_op_version_support(
74b1de
-                volname, GD_OP_VERSION_3_6_0, NULL);
74b1de
+                volname, GD_OP_VERSION_RHS_2_1_5, NULL);
74b1de
             if (ret) {
74b1de
                 ret = gf_asprintf(op_errstr,
74b1de
                                   "Volume %s has one or "
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
74b1de
index f754b52..387643d 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
74b1de
@@ -763,7 +763,7 @@ glusterd_op_txn_begin(rpcsvc_request_t *req, glusterd_op_t op, void *ctx,
74b1de
     }
cb8e9e
 
74b1de
     /* Based on the op_version, acquire a cluster or mgmt_v3 lock */
74b1de
-    if (priv->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (priv->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = glusterd_lock(MY_UUID);
74b1de
         if (ret) {
74b1de
             gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_GLUSTERD_LOCK_FAIL,
74b1de
@@ -818,7 +818,7 @@ glusterd_op_txn_begin(rpcsvc_request_t *req, glusterd_op_t op, void *ctx,
cb8e9e
 local_locking_done:
74b1de
     /* If no volname is given as a part of the command, locks will
74b1de
      * not be held, hence sending stage event. */
74b1de
-    if (volname || (priv->op_version < GD_OP_VERSION_3_6_0))
74b1de
+    if (volname || (priv->op_version < GD_OP_VERSION_RHS_3_0))
74b1de
         event_type = GD_OP_EVENT_START_LOCK;
74b1de
     else {
74b1de
         txn_op_info.state.state = GD_OP_STATE_LOCK_SENT;
74b1de
@@ -849,7 +849,7 @@ out:
74b1de
     if (locked && ret) {
74b1de
         /* Based on the op-version, we release the
74b1de
          * cluster or mgmt_v3 lock */
74b1de
-        if (priv->op_version < GD_OP_VERSION_3_6_0)
74b1de
+        if (priv->op_version < GD_OP_VERSION_RHS_3_0)
74b1de
             glusterd_unlock(MY_UUID);
cb8e9e
         else {
74b1de
             ret = glusterd_mgmt_v3_unlock(volname, MY_UUID, "vol");
74b1de
@@ -4432,12 +4432,12 @@ __glusterd_handle_status_volume(rpcsvc_request_t *req)
74b1de
     }
cb8e9e
 
74b1de
     if ((cmd & GF_CLI_STATUS_SNAPD) &&
74b1de
-        (conf->op_version < GD_OP_VERSION_3_6_0)) {
74b1de
+        (conf->op_version < GD_OP_VERSION_RHS_3_0)) {
74b1de
         snprintf(err_str, sizeof(err_str),
74b1de
                  "The cluster is operating "
74b1de
                  "at a lesser version than %d. Getting the status of "
74b1de
                  "snapd is not allowed in this state",
74b1de
-                 GD_OP_VERSION_3_6_0);
74b1de
+                 GD_OP_VERSION_RHS_3_0);
74b1de
         ret = -1;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -4459,7 +4459,7 @@ __glusterd_handle_status_volume(rpcsvc_request_t *req)
74b1de
                  "The cluster is operating "
74b1de
                  "at a lesser version than %d. Getting the status of "
74b1de
                  "tierd is not allowed in this state",
74b1de
-                 GD_OP_VERSION_3_6_0);
74b1de
+                 GD_OP_VERSION_RHS_3_0);
74b1de
         ret = -1;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -6430,7 +6430,7 @@ __glusterd_peer_rpc_notify(struct rpc_clnt *rpc, void *mydata,
74b1de
                      glusterd_friend_sm_state_name_get(peerinfo->state.state));
cb8e9e
 
74b1de
             if (peerinfo->connected) {
74b1de
-                if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+                if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
                     glusterd_get_lock_owner(&uuid);
74b1de
                     if (!gf_uuid_is_null(uuid) &&
74b1de
                         !gf_uuid_compare(peerinfo->uuid, uuid))
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
74b1de
index 6495a9d..dd3f9eb 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
74b1de
@@ -194,7 +194,7 @@ glusterd_generate_txn_id(dict_t *dict, uuid_t **txn_id)
74b1de
     if (!*txn_id)
74b1de
         goto out;
cb8e9e
 
74b1de
-    if (priv->op_version < GD_OP_VERSION_3_6_0)
74b1de
+    if (priv->op_version < GD_OP_VERSION_RHS_3_0)
74b1de
         gf_uuid_copy(**txn_id, priv->global_txn_id);
74b1de
     else
74b1de
         gf_uuid_generate(**txn_id);
74b1de
@@ -1864,12 +1864,12 @@ glusterd_op_stage_status_volume(dict_t *dict, char **op_errstr)
74b1de
     }
cb8e9e
 
74b1de
     if ((cmd & GF_CLI_STATUS_SNAPD) &&
74b1de
-        (priv->op_version < GD_OP_VERSION_3_6_0)) {
74b1de
+        (priv->op_version < GD_OP_VERSION_RHS_3_0)) {
74b1de
         snprintf(msg, sizeof(msg),
74b1de
                  "The cluster is operating at "
74b1de
                  "version less than %d. Getting the "
74b1de
                  "status of snapd is not allowed in this state.",
74b1de
-                 GD_OP_VERSION_3_6_0);
74b1de
+                 GD_OP_VERSION_RHS_3_0);
74b1de
         ret = -1;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -3877,7 +3877,7 @@ glusterd_op_ac_send_lock(glusterd_op_sm_event_t *event, void *ctx)
74b1de
             continue;
cb8e9e
 
74b1de
         /* Based on the op_version, acquire a cluster or mgmt_v3 lock */
74b1de
-        if (priv->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+        if (priv->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
             proc = &peerinfo->mgmt->proctable[GLUSTERD_MGMT_CLUSTER_LOCK];
74b1de
             if (proc->fn) {
74b1de
                 ret = proc->fn(NULL, this, peerinfo);
74b1de
@@ -3980,7 +3980,7 @@ glusterd_op_ac_send_unlock(glusterd_op_sm_event_t *event, void *ctx)
74b1de
             continue;
74b1de
         /* Based on the op_version,
74b1de
          * release the cluster or mgmt_v3 lock */
cb8e9e
-        if (priv->op_version < GD_OP_VERSION_3_6_0) {
cb8e9e
+        if (priv->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
             proc = &peerinfo->mgmt->proctable[GLUSTERD_MGMT_CLUSTER_UNLOCK];
74b1de
             if (proc->fn) {
74b1de
                 ret = proc->fn(NULL, this, peerinfo);
74b1de
@@ -4957,7 +4957,7 @@ glusterd_op_modify_op_ctx(glusterd_op_t op, void *ctx)
74b1de
             count = brick_index_max + other_count + 1;
74b1de
 
74b1de
             /*
74b1de
-             * a glusterd lesser than version 3.7 will be sending the
74b1de
+             * a glusterd lesser than version RHS-3.0.4 will be sending the
74b1de
              * rdma port in older key. Changing that value from here
74b1de
              * to support backward compatibility
74b1de
              */
74b1de
@@ -4977,7 +4977,7 @@ glusterd_op_modify_op_ctx(glusterd_op_t op, void *ctx)
74b1de
             ret = glusterd_volinfo_find(volname, &volinfo);
74b1de
             if (ret)
74b1de
                 goto out;
74b1de
-            if (conf->op_version < GD_OP_VERSION_3_7_0 &&
74b1de
+            if (conf->op_version < GD_OP_VERSION_RHS_3_0_4 &&
74b1de
                 volinfo->transport_type == GF_TRANSPORT_RDMA) {
74b1de
                 ret = glusterd_op_modify_port_key(op_ctx, brick_index_max);
cb8e9e
                 if (ret)
74b1de
@@ -5576,7 +5576,7 @@ glusterd_op_txn_complete(uuid_t *txn_id)
74b1de
     glusterd_op_clear_errstr();
74b1de
 
74b1de
     /* Based on the op-version, we release the cluster or mgmt_v3 lock */
74b1de
-    if (priv->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (priv->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = glusterd_unlock(MY_UUID);
74b1de
         /* unlock can't/shouldn't fail here!! */
74b1de
         if (ret)
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-peer-utils.c b/xlators/mgmt/glusterd/src/glusterd-peer-utils.c
74b1de
index 5b5959e..f24c86e 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-peer-utils.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-peer-utils.c
74b1de
@@ -547,7 +547,7 @@ out:
cb8e9e
  * @prefix. All the parameters are compulsory.
cb8e9e
  *
cb8e9e
  * The complete address list is added to the dict only if the cluster op-version
cb8e9e
- * is >= GD_OP_VERSION_3_6_0
cb8e9e
+ * is >= GD_OP_VERSION_3_7_0
cb8e9e
  */
cb8e9e
 int
74b1de
 gd_add_friend_to_dict(glusterd_peerinfo_t *friend, dict_t *dict,
74b1de
@@ -593,7 +593,7 @@ gd_add_friend_to_dict(glusterd_peerinfo_t *friend, dict_t *dict,
74b1de
         goto out;
74b1de
     }
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_3_7_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -778,7 +778,7 @@ gd_update_peerinfo_from_dict(glusterd_peerinfo_t *peerinfo, dict_t *dict,
74b1de
         GF_FREE(peerinfo->hostname);
74b1de
     peerinfo->hostname = gf_strdup(hostname);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_3_7_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -894,7 +894,7 @@ gd_add_peer_hostnames_to_dict(glusterd_peerinfo_t *peerinfo, dict_t *dict,
74b1de
     conf = this->private;
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (conf != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_3_7_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
74b1de
index 34b0294..6365b6e 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
74b1de
@@ -792,13 +792,13 @@ glusterd_mgmt_v3_op_stage_rebalance(dict_t *dict, char **op_errstr)
12a457
         case GF_DEFRAG_CMD_START:
cb8e9e
         case GF_DEFRAG_CMD_START_LAYOUT_FIX:
74b1de
             /* Check if the connected clients are all of version
74b1de
-             * glusterfs-3.6 and higher. This is needed to prevent some data
74b1de
+             * RHS-2.1u5 and higher. This is needed to prevent some data
74b1de
              * loss issues that could occur when older clients are connected
74b1de
              * when rebalance is run. This check can be bypassed by using
74b1de
              * 'force'
74b1de
              */
74b1de
             ret = glusterd_check_client_op_version_support(
74b1de
-                volname, GD_OP_VERSION_3_6_0, NULL);
74b1de
+                volname, GD_OP_VERSION_RHS_2_1_5, NULL);
74b1de
             if (ret) {
74b1de
                 ret = gf_asprintf(op_errstr,
74b1de
                                   "Volume %s has one or "
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c
74b1de
index ca1de1a..0615081 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c
74b1de
@@ -297,7 +297,7 @@ glusterd_op_stage_replace_brick(dict_t *dict, char **op_errstr,
74b1de
         if (ret)
74b1de
             goto out;
cb8e9e
 
74b1de
-    } else if (priv->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+    } else if (priv->op_version >= GD_OP_VERSION_RHS_3_0) {
cb8e9e
         /* A bricks mount dir is required only by snapshots which were
cb8e9e
          * introduced in gluster-3.6.0
cb8e9e
          */
74b1de
@@ -396,7 +396,7 @@ glusterd_op_perform_replace_brick(glusterd_volinfo_t *volinfo, char *old_brick,
74b1de
     /* A bricks mount dir is required only by snapshots which were
74b1de
      * introduced in gluster-3.6.0
74b1de
      */
74b1de
-    if (conf->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = dict_get_strn(dict, "brick1.mount_dir", SLEN("brick1.mount_dir"),
74b1de
                             &brick_mount_dir);
74b1de
         if (ret) {
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c
74b1de
index 728781d..4ec9700 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c
74b1de
@@ -288,11 +288,11 @@ __glusterd_probe_cbk(struct rpc_req *req, struct iovec *iov, int count,
74b1de
      * we need to add the new hostname to the peer.
74b1de
      *
74b1de
      * This addition should only be done for cluster op-version >=
74b1de
-     * GD_OP_VERSION_3_6_0 as address lists are only supported from then on.
74b1de
+     * GD_OP_VERSION_3_7_0 as address lists are only supported from then on.
74b1de
      * Also, this update should only be done when an explicit CLI probe
74b1de
      * command was used to begin the probe process.
74b1de
      */
74b1de
-    if ((conf->op_version >= GD_OP_VERSION_3_6_0) &&
74b1de
+    if ((conf->op_version >= GD_OP_VERSION_3_7_0) &&
74b1de
         (gf_uuid_compare(rsp.uuid, peerinfo->uuid) == 0)) {
74b1de
         ctx = ((call_frame_t *)myframe)->local;
74b1de
         /* Presence of ctx->req implies this probe was started by a cli
74b1de
@@ -1544,7 +1544,7 @@ glusterd_rpc_friend_add(call_frame_t *frame, xlator_t *this, void *data)
74b1de
         goto out;
74b1de
     }
cb8e9e
 
74b1de
-    if (priv->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+    if (priv->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = glusterd_add_missed_snaps_to_export_dict(peer_data);
74b1de
         if (ret) {
74b1de
             gf_msg(this->name, GF_LOG_ERROR, 0,
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c
74b1de
index 73a11a3..54a7bd1 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-sm.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-sm.c
74b1de
@@ -955,7 +955,7 @@ glusterd_ac_handle_friend_add_req(glusterd_friend_sm_event_t *event, void *ctx)
74b1de
 
cb8e9e
         /* Compare missed_snapshot list with the peer *
cb8e9e
          * if volume comparison is successful */
74b1de
-        if ((op_ret == 0) && (conf->op_version >= GD_OP_VERSION_3_6_0)) {
74b1de
+        if ((op_ret == 0) && (conf->op_version >= GD_OP_VERSION_RHS_3_0)) {
74b1de
             ret = glusterd_import_friend_missed_snap_list(ev_ctx->vols);
74b1de
             if (ret) {
74b1de
                 gf_msg(this->name, GF_LOG_ERROR, 0,
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c
74b1de
index 1ece374..2958443 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c
74b1de
@@ -470,7 +470,7 @@ gd_add_brick_snap_details_to_dict(dict_t *dict, char *prefix,
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (prefix != NULL), out);
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (brickinfo != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -547,7 +547,7 @@ gd_add_vol_snap_details_to_dict(dict_t *dict, char *prefix,
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (volinfo != NULL), out);
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (prefix != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -846,7 +846,7 @@ gd_import_new_brick_snap_details(dict_t *dict, char *prefix,
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (prefix != NULL), out);
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (brickinfo != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -903,8 +903,8 @@ out:
cb8e9e
  * Imports the snapshot details of a volume if required and available
cb8e9e
  *
cb8e9e
  * Snapshot details will be imported only if cluster.op_version is greater than
cb8e9e
- * or equal to GD_OP_VERSION_3_6_0, the op-version from which volume snapshot is
cb8e9e
- * supported.
cb8e9e
+ * or equal to GD_OP_VERSION_RHS_3_0, the op-version from which volume snapshot
cb8e9e
+ * is supported.
cb8e9e
  */
cb8e9e
 int
74b1de
 gd_import_volume_snap_details(dict_t *dict, glusterd_volinfo_t *volinfo,
74b1de
@@ -928,7 +928,7 @@ gd_import_volume_snap_details(dict_t *dict, glusterd_volinfo_t *volinfo,
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (prefix != NULL), out);
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (volname != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c
74b1de
index 8f5cd6d..c56be91 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c
74b1de
@@ -9345,14 +9345,14 @@ glusterd_handle_snapshot_fn(rpcsvc_request_t *req)
74b1de
         goto out;
74b1de
     }
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         snprintf(err_str, sizeof(err_str),
74b1de
                  "Cluster operating version"
74b1de
                  " is lesser than the supported version "
74b1de
                  "for a snapshot");
74b1de
         op_errno = EG_OPNOTSUP;
74b1de
         gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_UNSUPPORTED_VERSION,
74b1de
-               "%s (%d < %d)", err_str, conf->op_version, GD_OP_VERSION_3_6_0);
74b1de
+               "%s (%d < %d)", err_str, conf->op_version, GD_OP_VERSION_RHS_3_0);
74b1de
         ret = -1;
74b1de
         goto out;
74b1de
     }
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c
74b1de
index 7acea05..64447e7 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-store.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-store.c
74b1de
@@ -313,7 +313,7 @@ gd_store_brick_snap_details_write(int fd, glusterd_brickinfo_t *brickinfo)
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (fd > 0), out);
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (brickinfo != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -813,7 +813,7 @@ glusterd_volume_write_snap_details(int fd, glusterd_volinfo_t *volinfo)
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (fd > 0), out);
74b1de
     GF_VALIDATE_OR_GOTO(this->name, (volinfo != NULL), out);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -967,7 +967,7 @@ glusterd_volume_exclude_options_write(int fd, glusterd_volinfo_t *volinfo)
74b1de
             goto out;
74b1de
     }
d1681e
 
74b1de
-    if (conf->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
         snprintf(buf, sizeof(buf), "%d", volinfo->disperse_count);
74b1de
         ret = gf_store_save_value(fd, GLUSTERD_STORE_KEY_VOL_DISPERSE_CNT, buf);
74b1de
         if (ret)
74b1de
@@ -2502,7 +2502,7 @@ glusterd_store_retrieve_snapd(glusterd_volinfo_t *volinfo)
74b1de
     conf = THIS->private;
74b1de
     GF_ASSERT(volinfo);
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
74b1de
         ret = 0;
74b1de
         goto out;
74b1de
     }
74b1de
@@ -2510,15 +2510,16 @@ glusterd_store_retrieve_snapd(glusterd_volinfo_t *volinfo)
74b1de
     /*
74b1de
      * This is needed for upgrade situations. Say a volume is created with
74b1de
      * older version of glusterfs and upgraded to a glusterfs version equal
74b1de
-     * to or greater than GD_OP_VERSION_3_6_0. The older glusterd would not
74b1de
-     * have created the snapd.info file related to snapshot daemon for user
74b1de
-     * serviceable snapshots. So as part of upgrade when the new glusterd
74b1de
-     * starts, as part of restore (restoring the volume to be precise), it
74b1de
-     * tries to snapd related info from snapd.info file. But since there was
74b1de
-     * no such file till now, the restore operation fails. Thus, to prevent
74b1de
-     * it from happening check whether user serviceable snapshots features
74b1de
-     * is enabled before restoring snapd. If its disabled, then simply
74b1de
-     * exit by returning success (without even checking for the snapd.info).
74b1de
+     * to or greater than GD_OP_VERSION_RHS_3_0. The older glusterd would
74b1de
+     * not have created the snapd.info file related to snapshot daemon for
74b1de
+     * user serviceable snapshots. So as part of upgrade when the new
74b1de
+     * glusterd starts, as part of restore (restoring the volume to be
74b1de
+     * precise), it tries to snapd related info from snapd.info file. But
74b1de
+     * since there was no such file till now, the restore operation fails.
74b1de
+     * Thus, to prevent it from happening check whether user serviceable
74b1de
+     * snapshots features is enabled before restoring snapd. If its
74b1de
+     * disbaled, then simply exit by returning success (without even
74b1de
+     * checking for the snapd.info).
74b1de
      */
cb8e9e
 
74b1de
     if (!dict_get_str_boolean(volinfo->dict, "features.uss", _gf_false)) {
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-syncop.c b/xlators/mgmt/glusterd/src/glusterd-syncop.c
74b1de
index 45b221c..1741cf8 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-syncop.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-syncop.c
74b1de
@@ -1827,7 +1827,7 @@ gd_sync_task_begin(dict_t *op_ctx, rpcsvc_request_t *req)
74b1de
         goto out;
74b1de
     }
cb8e9e
 
74b1de
-    if (conf->op_version < GD_OP_VERSION_3_6_0)
74b1de
+    if (conf->op_version < GD_OP_VERSION_RHS_3_0)
74b1de
         cluster_lock = _gf_true;
cb8e9e
 
74b1de
     /* Based on the op_version, acquire a cluster or mgmt_v3 lock */
d1681e
diff --git a/xlators/mgmt/glusterd/src/glusterd-tier.c b/xlators/mgmt/glusterd/src/glusterd-tier.c
74b1de
index dd86cf5..4dc0d44 100644
d1681e
--- a/xlators/mgmt/glusterd/src/glusterd-tier.c
d1681e
+++ b/xlators/mgmt/glusterd/src/glusterd-tier.c
74b1de
@@ -867,7 +867,8 @@ glusterd_op_stage_tier(dict_t *dict, char **op_errstr, dict_t *rsp_dict)
74b1de
      * when rebalance is run. This check can be bypassed by using
74b1de
      * 'force'
74b1de
      */
74b1de
-    ret = glusterd_check_client_op_version_support(volname, GD_OP_VERSION_3_6_0,
74b1de
+    ret = glusterd_check_client_op_version_support(volname,
74b1de
+                                                   GD_OP_VERSION_RHS_3_0,
74b1de
                                                    NULL);
74b1de
     if (ret) {
74b1de
         ret = gf_asprintf(op_errstr,
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
74b1de
index 8bbd795..52b83ec 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
74b1de
@@ -12226,10 +12226,10 @@ gd_update_volume_op_versions(glusterd_volinfo_t *volinfo)
74b1de
     }
cb8e9e
 
74b1de
     if (volinfo->type == GF_CLUSTER_TYPE_DISPERSE) {
74b1de
-        if (volinfo->op_version < GD_OP_VERSION_3_6_0)
74b1de
-            volinfo->op_version = GD_OP_VERSION_3_6_0;
74b1de
-        if (volinfo->client_op_version < GD_OP_VERSION_3_6_0)
74b1de
-            volinfo->client_op_version = GD_OP_VERSION_3_6_0;
74b1de
+        if (volinfo->op_version < GD_OP_VERSION_3_7_0)
74b1de
+            volinfo->op_version = GD_OP_VERSION_3_7_0;
74b1de
+        if (volinfo->client_op_version < GD_OP_VERSION_3_7_0)
74b1de
+            volinfo->client_op_version = GD_OP_VERSION_3_7_0;
74b1de
     }
cb8e9e
 
74b1de
     return;
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
74b1de
index 7cfba3d..86ef470 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
74b1de
@@ -1389,7 +1389,7 @@ glusterd_op_stage_create_volume(dict_t *dict, char **op_errstr,
74b1de
             /* A bricks mount dir is required only by snapshots which were
74b1de
              * introduced in gluster-3.6.0
74b1de
              */
74b1de
-            if (priv->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+            if (priv->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
                 ret = glusterd_get_brick_mount_dir(brick_info->path,
74b1de
                                                    brick_info->hostname,
74b1de
                                                    brick_info->mount_dir);
74b1de
@@ -1698,7 +1698,7 @@ glusterd_op_stage_start_volume(dict_t *dict, char **op_errstr, dict_t *rsp_dict)
cb8e9e
         /* A bricks mount dir is required only by snapshots which were
cb8e9e
          * introduced in gluster-3.6.0
cb8e9e
          */
74b1de
-        if (priv->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+        if (priv->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
             if (strlen(brickinfo->mount_dir) < 1) {
74b1de
                 ret = glusterd_get_brick_mount_dir(
74b1de
                     brickinfo->path, brickinfo->hostname, brickinfo->mount_dir);
74b1de
@@ -2395,10 +2395,10 @@ glusterd_op_create_volume(dict_t *dict, char **op_errstr)
74b1de
                    volname);
74b1de
             goto out;
74b1de
         }
74b1de
-        if (priv->op_version < GD_OP_VERSION_3_6_0) {
74b1de
+        if (priv->op_version < GD_OP_VERSION_3_7_0) {
74b1de
             gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_UNSUPPORTED_VERSION,
74b1de
                    "Disperse volume "
74b1de
-                   "needs op-version 3.6.0 or higher");
74b1de
+                   "needs op-version 30700 or higher");
74b1de
             ret = -1;
74b1de
             goto out;
74b1de
         }
74b1de
@@ -2494,7 +2494,7 @@ glusterd_op_create_volume(dict_t *dict, char **op_errstr)
74b1de
         /* A bricks mount dir is required only by snapshots which were
74b1de
          * introduced in gluster-3.6.0
74b1de
          */
74b1de
-        if (priv->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+        if (priv->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
             brick_mount_dir = NULL;
74b1de
             ret = snprintf(key, sizeof(key), "brick%d.mount_dir", i);
74b1de
             ret = dict_get_strn(dict, key, ret, &brick_mount_dir);
74b1de
@@ -2703,7 +2703,7 @@ glusterd_op_start_volume(dict_t *dict, char **op_errstr)
74b1de
     /* A bricks mount dir is required only by snapshots which were
74b1de
      * introduced in gluster-3.6.0
74b1de
      */
74b1de
-    if (conf->op_version >= GD_OP_VERSION_3_6_0) {
74b1de
+    if (conf->op_version >= GD_OP_VERSION_RHS_3_0) {
74b1de
         cds_list_for_each_entry(brickinfo, &volinfo->bricks, brick_list)
74b1de
         {
74b1de
             brick_count++;
cb8e9e
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
74b1de
index dc58e11..d07fc10 100644
cb8e9e
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
cb8e9e
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
74b1de
@@ -807,7 +807,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "cluster.subvols-per-directory",
74b1de
      .voltype = "cluster/distribute",
74b1de
      .option = "directory-layout-spread",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = 1,
74b1de
      .validate_fn = validate_subvols_per_directory,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.readdir-optimize",
74b1de
@@ -817,25 +817,25 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "cluster.rsync-hash-regex",
74b1de
      .voltype = "cluster/distribute",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3,
74b1de
+     .op_version = 2,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.extra-hash-regex",
74b1de
      .voltype = "cluster/distribute",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3,
74b1de
+     .op_version = 2,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.dht-xattr-name",
74b1de
      .voltype = "cluster/distribute",
74b1de
      .option = "xattr-name",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3,
74b1de
+     .op_version = 2,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "cluster.randomize-hash-range-by-gfid",
74b1de
         .voltype = "cluster/distribute",
74b1de
         .option = "randomize-hash-range-by-gfid",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_3_7_0,
74b1de
         .flags = VOLOPT_FLAG_CLIENT_OPT,
74b1de
     },
74b1de
     {
74b1de
@@ -877,12 +877,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "cluster/nufa",
74b1de
      .option = "local-volume-name",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "cluster.weighted-rebalance",
74b1de
         .voltype = "cluster/distribute",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_3_7_0,
74b1de
     },
cb8e9e
 
74b1de
     /* Switch xlator options (Distribute special case) */
74b1de
@@ -890,13 +890,13 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "cluster/distribute",
74b1de
      .option = "!switch",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.switch-pattern",
74b1de
      .voltype = "cluster/switch",
74b1de
      .option = "pattern.switch.case",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
d1681e
 
74b1de
     /* AFR xlator options */
74b1de
@@ -1014,16 +1014,16 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.readdir-failover",
74b1de
      .voltype = "cluster/replicate",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = 1,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.ensure-durability",
74b1de
      .voltype = "cluster/replicate",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = 2,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.consistent-metadata",
74b1de
      .voltype = "cluster/replicate",
74b1de
      .type = DOC,
74b1de
-     .op_version = GD_OP_VERSION_3_7_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0_4,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "cluster.heal-wait-queue-length",
74b1de
      .voltype = "cluster/replicate",
74b1de
@@ -1080,45 +1080,45 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .key = "diagnostics.brick-logger",
74b1de
         .voltype = "debug/io-stats",
74b1de
         .option = "!logger",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "diagnostics.client-logger",
74b1de
      .voltype = "debug/io-stats",
74b1de
      .option = "!logger",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "diagnostics.brick-log-format",
74b1de
         .voltype = "debug/io-stats",
74b1de
         .option = "!log-format",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "diagnostics.client-log-format",
74b1de
      .voltype = "debug/io-stats",
74b1de
      .option = "!log-format",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "diagnostics.brick-log-buf-size",
74b1de
         .voltype = "debug/io-stats",
74b1de
         .option = "!log-buf-size",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "diagnostics.client-log-buf-size",
74b1de
      .voltype = "debug/io-stats",
74b1de
      .option = "!log-buf-size",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "diagnostics.brick-log-flush-timeout",
74b1de
         .voltype = "debug/io-stats",
74b1de
         .option = "!log-flush-timeout",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "diagnostics.client-log-flush-timeout",
74b1de
      .voltype = "debug/io-stats",
74b1de
      .option = "!log-flush-timeout",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "diagnostics.stats-dump-interval",
74b1de
      .voltype = "debug/io-stats",
74b1de
@@ -1203,6 +1203,10 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "performance/io-threads",
74b1de
      .option = "pass-through",
74b1de
      .op_version = GD_OP_VERSION_4_1_0},
74b1de
+    {.key         = "performance.least-rate-limit",
74b1de
+     .voltype     = "performance/io-threads",
74b1de
+     .op_version  = 1
74b1de
+    },
d1681e
 
74b1de
     /* Other perf xlators' options */
74b1de
     {.key = "performance.io-cache-pass-through",
74b1de
@@ -1237,12 +1241,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "performance.nfs.flush-behind",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "flush-behind",
74b1de
-     .op_version = 1,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.write-behind-window-size",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "cache-size",
74b1de
-     .op_version = 1,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "performance.resync-failed-syncs-after-fsync",
74b1de
@@ -1262,27 +1266,27 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "performance.nfs.write-behind-window-size",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "cache-size",
74b1de
-     .op_version = 1,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.strict-o-direct",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "strict-O_DIRECT",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = 1,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.nfs.strict-o-direct",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "strict-O_DIRECT",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.strict-write-ordering",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "strict-write-ordering",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = 1,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.nfs.strict-write-ordering",
74b1de
      .voltype = "performance/write-behind",
74b1de
      .option = "strict-write-ordering",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.write-behind-trickling-writes",
74b1de
      .voltype = "performance/write-behind",
74b1de
@@ -1302,12 +1306,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "performance.lazy-open",
74b1de
      .voltype = "performance/open-behind",
74b1de
      .option = "lazy-open",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = 2,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "performance.read-after-open",
74b1de
      .voltype = "performance/open-behind",
74b1de
      .option = "read-after-open",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "performance.open-behind-pass-through",
74b1de
@@ -1389,22 +1393,22 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "encryption/crypt",
74b1de
      .option = "!feat",
74b1de
      .value = "off",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .description = "enable/disable client-side encryption for "
74b1de
                     "the volume.",
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT | VOLOPT_FLAG_XLATOR_OPT},
cb8e9e
 
74b1de
     {.key = "encryption.master-key",
74b1de
      .voltype = "encryption/crypt",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "encryption.data-key-size",
74b1de
      .voltype = "encryption/crypt",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {.key = "encryption.block-size",
74b1de
      .voltype = "encryption/crypt",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
cb8e9e
 
74b1de
     /* Client xlator options */
74b1de
@@ -1431,7 +1435,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "network.remote-dio",
74b1de
      .voltype = "protocol/client",
74b1de
      .option = "filter-O_DIRECT",
74b1de
-     .op_version = 2,
74b1de
+     .op_version = 1,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT},
74b1de
     {
74b1de
         .key = "client.own-thread",
74b1de
@@ -1443,7 +1447,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {
74b1de
         .key = "client.event-threads",
74b1de
         .voltype = "protocol/client",
74b1de
-        .op_version = GD_OP_VERSION_3_7_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0_4,
74b1de
     },
74b1de
     {.key = "client.tcp-user-timeout",
74b1de
      .voltype = "protocol/client",
74b1de
@@ -1501,7 +1505,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "server.root-squash",
74b1de
      .voltype = "protocol/server",
74b1de
      .option = "root-squash",
74b1de
-     .op_version = 2},
74b1de
+     .op_version = 1},
74b1de
     {.key = "server.all-squash",
74b1de
      .voltype = "protocol/server",
74b1de
      .option = "all-squash",
74b1de
@@ -1509,11 +1513,11 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "server.anonuid",
74b1de
      .voltype = "protocol/server",
74b1de
      .option = "anonuid",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "server.anongid",
74b1de
      .voltype = "protocol/server",
74b1de
      .option = "anongid",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "server.statedump-path",
74b1de
      .voltype = "protocol/server",
74b1de
      .option = "statedump-path",
74b1de
@@ -1522,7 +1526,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "protocol/server",
74b1de
      .option = "rpc.outstanding-rpc-limit",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "server.ssl",
74b1de
      .voltype = "protocol/server",
74b1de
      .value = "off",
74b1de
@@ -1540,12 +1544,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
                        "the clients that are allowed to access the server."
74b1de
                        "By default, all TLS authenticated clients are "
74b1de
                        "allowed to access the server.",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_3_7_0,
74b1de
     },
74b1de
     {
74b1de
         .key = "server.manage-gids",
74b1de
         .voltype = "protocol/server",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = "server.dynamic-auth",
74b1de
@@ -1556,12 +1560,12 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .key = "client.send-gids",
74b1de
         .voltype = "protocol/client",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = "server.gid-timeout",
74b1de
         .voltype = "protocol/server",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = "server.own-thread",
74b1de
@@ -1573,7 +1577,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {
74b1de
         .key = "server.event-threads",
74b1de
         .voltype = "protocol/server",
74b1de
-        .op_version = GD_OP_VERSION_3_7_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0_4,
74b1de
     },
74b1de
     {
74b1de
         .key = "server.tcp-user-timeout",
74b1de
@@ -1643,13 +1647,13 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .key = SSL_CERT_DEPTH_OPT,
74b1de
         .voltype = "rpc-transport/socket",
74b1de
         .option = "!ssl-cert-depth",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_3_7_0,
74b1de
     },
74b1de
     {
74b1de
         .key = SSL_CIPHER_LIST_OPT,
74b1de
         .voltype = "rpc-transport/socket",
74b1de
         .option = "!ssl-cipher-list",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_3_7_0,
74b1de
     },
74b1de
     {
74b1de
         .key = SSL_DH_PARAM_OPT,
74b1de
@@ -1690,8 +1694,8 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "performance.readdir-ahead",
74b1de
      .voltype = "performance/readdir-ahead",
74b1de
      .option = "!perf",
74b1de
-     .value = "on",
74b1de
-     .op_version = 3,
74b1de
+     .value = "off",
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .description = "enable/disable readdir-ahead translator in the volume.",
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT | VOLOPT_FLAG_XLATOR_OPT},
74b1de
     {.key = "performance.io-cache",
74b1de
@@ -1804,7 +1808,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     /* Feature translators */
74b1de
     {.key = "features.uss",
74b1de
      .voltype = "features/snapview-server",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .value = "off",
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT | VOLOPT_FLAG_XLATOR_OPT,
74b1de
      .validate_fn = validate_uss,
74b1de
@@ -1813,7 +1817,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
cb8e9e
 
74b1de
     {.key = "features.snapshot-directory",
74b1de
      .voltype = "features/snapview-client",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .value = ".snaps",
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT | VOLOPT_FLAG_XLATOR_OPT,
74b1de
      .validate_fn = validate_uss_dir,
74b1de
@@ -1823,7 +1827,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
cb8e9e
 
74b1de
     {.key = "features.show-snapshot-directory",
74b1de
      .voltype = "features/snapview-client",
74b1de
-     .op_version = GD_OP_VERSION_3_6_0,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .value = "off",
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT | VOLOPT_FLAG_XLATOR_OPT,
74b1de
      .description = "show entry point in readdir output of "
74b1de
@@ -1847,30 +1851,30 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "features/cdc",
74b1de
      .option = "!feat",
74b1de
      .value = "off",
74b1de
-     .op_version = 3,
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
      .description = "enable/disable network compression translator",
74b1de
      .flags = VOLOPT_FLAG_XLATOR_OPT},
74b1de
     {.key = "network.compression.window-size",
74b1de
      .voltype = "features/cdc",
74b1de
      .option = "window-size",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "network.compression.mem-level",
74b1de
      .voltype = "features/cdc",
74b1de
      .option = "mem-level",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "network.compression.min-size",
74b1de
      .voltype = "features/cdc",
74b1de
      .option = "min-size",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "network.compression.compression-level",
74b1de
      .voltype = "features/cdc",
74b1de
      .option = "compression-level",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "network.compression.debug",
74b1de
      .voltype = "features/cdc",
74b1de
      .option = "debug",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
cb8e9e
 #endif
cb8e9e
 
74b1de
     /* Quota xlator options */
74b1de
@@ -1886,28 +1890,28 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .voltype = "features/quota",
74b1de
         .option = "default-soft-limit",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = 3,
74b1de
+        .op_version = 2,
74b1de
     },
74b1de
     {
74b1de
         .key = "features.soft-timeout",
74b1de
         .voltype = "features/quota",
74b1de
         .option = "soft-timeout",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = 3,
74b1de
+        .op_version = 2,
74b1de
     },
74b1de
     {
74b1de
         .key = "features.hard-timeout",
74b1de
         .voltype = "features/quota",
74b1de
         .option = "hard-timeout",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = 3,
74b1de
+        .op_version = 2,
74b1de
     },
74b1de
     {
74b1de
         .key = "features.alert-time",
74b1de
         .voltype = "features/quota",
74b1de
         .option = "alert-time",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = 3,
74b1de
+        .op_version = 2,
74b1de
     },
74b1de
     {
74b1de
         .key = "features.quota-deem-statfs",
74b1de
@@ -2009,22 +2013,22 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "debug/error-gen",
74b1de
      .option = "failure",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "debug.error-number",
74b1de
      .voltype = "debug/error-gen",
74b1de
      .option = "error-no",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "debug.random-failure",
74b1de
      .voltype = "debug/error-gen",
74b1de
      .option = "random-failure",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "debug.error-fops",
74b1de
      .voltype = "debug/error-gen",
74b1de
      .option = "enable",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
cb8e9e
 
74b1de
     /* NFS xlator options */
74b1de
     {.key = "nfs.enable-ino32",
74b1de
@@ -2066,7 +2070,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "rpc.outstanding-rpc-limit",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "nfs.port",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs.port",
74b1de
@@ -2128,7 +2132,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs.acl",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "nfs.mount-udp",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs.mount-udp",
74b1de
@@ -2144,14 +2148,14 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .voltype = "nfs/server",
74b1de
         .option = "nfs.rpc-statd",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = "nfs.log-level",
74b1de
         .voltype = "nfs/server",
74b1de
         .option = "nfs.log-level",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "nfs.server-aux-gids",
74b1de
      .voltype = "nfs/server",
74b1de
@@ -2162,27 +2166,27 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs.drc",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 1},
74b1de
     {.key = "nfs.drc-size",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs.drc-size",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 1},
74b1de
     {.key = "nfs.read-size",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs3.read-size",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "nfs.write-size",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs3.write-size",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "nfs.readdir-size",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs3.readdir-size",
74b1de
      .type = GLOBAL_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "nfs.rdirplus",
74b1de
      .voltype = "nfs/server",
74b1de
      .option = "nfs.rdirplus",
74b1de
@@ -2219,7 +2223,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "features.read-only",
74b1de
      .voltype = "features/read-only",
74b1de
      .option = "read-only",
74b1de
-     .op_version = 1,
74b1de
+     .op_version = 2,
74b1de
      .flags = VOLOPT_FLAG_CLIENT_OPT | VOLOPT_FLAG_XLATOR_OPT},
74b1de
     {.key = "features.worm",
74b1de
      .voltype = "features/worm",
74b1de
@@ -2266,14 +2270,14 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = "storage.linux-aio", .voltype = "storage/posix", .op_version = 1},
74b1de
     {.key = "storage.batch-fsync-mode",
74b1de
      .voltype = "storage/posix",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "storage.batch-fsync-delay-usec",
74b1de
      .voltype = "storage/posix",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {
74b1de
         .key = "storage.xattr-user-namespace-mode",
74b1de
         .voltype = "storage/posix",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "storage.owner-uid",
74b1de
      .voltype = "storage/posix",
74b1de
@@ -2285,15 +2289,15 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
      .op_version = 1},
74b1de
     {.key = "storage.node-uuid-pathinfo",
74b1de
      .voltype = "storage/posix",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "storage.health-check-interval",
74b1de
      .voltype = "storage/posix",
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {
74b1de
         .option = "update-link-count-parent",
74b1de
         .key = "storage.build-pgfid",
74b1de
         .voltype = "storage/posix",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .option = "gfid2path",
74b1de
@@ -2363,7 +2367,9 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .voltype = "storage/posix",
74b1de
         .op_version = GD_OP_VERSION_4_1_0,
74b1de
     },
74b1de
-    {.key = "storage.bd-aio", .voltype = "storage/bd", .op_version = 3},
74b1de
+    {.key = "storage.bd-aio",
74b1de
+     .voltype = "storage/bd",
74b1de
+     .op_version = GD_OP_VERSION_RHS_3_0},
74b1de
     {.key = "config.memory-accounting",
74b1de
      .voltype = "mgmt/glusterd",
74b1de
      .option = "!config",
74b1de
@@ -2385,37 +2391,37 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
     {.key = GLUSTERD_QUORUM_TYPE_KEY,
74b1de
      .voltype = "mgmt/glusterd",
74b1de
      .value = "off",
74b1de
-     .op_version = 2},
74b1de
+     .op_version = 1},
74b1de
     {.key = GLUSTERD_QUORUM_RATIO_KEY,
74b1de
      .voltype = "mgmt/glusterd",
74b1de
      .value = "0",
74b1de
-     .op_version = 2},
74b1de
+     .op_version = 1},
74b1de
     /* changelog translator - global tunables */
74b1de
     {.key = "changelog.changelog",
74b1de
      .voltype = "features/changelog",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "changelog.changelog-dir",
74b1de
      .voltype = "features/changelog",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "changelog.encoding",
74b1de
      .voltype = "features/changelog",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "changelog.rollover-time",
74b1de
      .voltype = "features/changelog",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {.key = "changelog.fsync-interval",
74b1de
      .voltype = "features/changelog",
74b1de
      .type = NO_DOC,
74b1de
-     .op_version = 3},
74b1de
+     .op_version = 2},
74b1de
     {
74b1de
         .key = "changelog.changelog-barrier-timeout",
74b1de
         .voltype = "features/changelog",
74b1de
         .value = BARRIER_TIMEOUT,
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {.key = "changelog.capture-del-path",
74b1de
      .voltype = "features/changelog",
74b1de
@@ -2426,18 +2432,18 @@ struct volopt_map_entry glusterd_volopt_map[] = {
74b1de
         .voltype = "features/barrier",
74b1de
         .value = "disable",
74b1de
         .type = NO_DOC,
74b1de
-        .op_version = GD_OP_VERSION_3_7_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = "features.barrier-timeout",
74b1de
         .voltype = "features/barrier",
74b1de
         .value = BARRIER_TIMEOUT,
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = GLUSTERD_GLOBAL_OP_VERSION_KEY,
74b1de
         .voltype = "mgmt/glusterd",
74b1de
-        .op_version = GD_OP_VERSION_3_6_0,
74b1de
+        .op_version = GD_OP_VERSION_RHS_3_0,
74b1de
     },
74b1de
     {
74b1de
         .key = GLUSTERD_MAX_OP_VERSION_KEY,
74b1de
diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c
74b1de
index c8e84f6..dea6c28 100644
74b1de
--- a/xlators/protocol/client/src/client.c
74b1de
+++ b/xlators/protocol/client/src/client.c
74b1de
@@ -3002,7 +3002,7 @@ struct volume_options options[] = {
74b1de
     {.key = {"send-gids"},
74b1de
      .type = GF_OPTION_TYPE_BOOL,
74b1de
      .default_value = "on",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE},
74b1de
     {.key = {"event-threads"},
74b1de
      .type = GF_OPTION_TYPE_INT,
74b1de
@@ -3013,7 +3013,7 @@ struct volume_options options[] = {
74b1de
                     "in parallel. Larger values would help process"
74b1de
                     " responses faster, depending on available processing"
74b1de
                     " power. Range 1-32 threads.",
74b1de
-     .op_version = {GD_OP_VERSION_3_7_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
     {.key = {NULL}},
74b1de
 };
74b1de
diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c
74b1de
index b4b447b..6ae63ba 100644
74b1de
--- a/xlators/protocol/server/src/server.c
74b1de
+++ b/xlators/protocol/server/src/server.c
74b1de
@@ -1854,13 +1854,13 @@ struct volume_options server_options[] = {
74b1de
      .type = GF_OPTION_TYPE_BOOL,
74b1de
      .default_value = "off",
74b1de
      .description = "Resolve groups on the server-side.",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
     {.key = {"gid-timeout"},
74b1de
      .type = GF_OPTION_TYPE_INT,
74b1de
      .default_value = "300",
74b1de
      .description = "Timeout in seconds for the cached groups to expire.",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
     {.key = {"event-threads"},
74b1de
      .type = GF_OPTION_TYPE_INT,
74b1de
@@ -1871,7 +1871,7 @@ struct volume_options server_options[] = {
74b1de
                     "in parallel. Larger values would help process"
74b1de
                     " responses faster, depending on available processing"
74b1de
                     " power.",
74b1de
-     .op_version = {GD_OP_VERSION_3_7_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
     {.key = {"dynamic-auth"},
74b1de
      .type = GF_OPTION_TYPE_BOOL,
74b1de
diff --git a/xlators/storage/posix/src/posix-common.c b/xlators/storage/posix/src/posix-common.c
74b1de
index f0d8e3f..ed82e35 100644
74b1de
--- a/xlators/storage/posix/src/posix-common.c
74b1de
+++ b/xlators/storage/posix/src/posix-common.c
74b1de
@@ -1243,7 +1243,7 @@ struct volume_options posix_options[] = {
74b1de
      .type = GF_OPTION_TYPE_BOOL,
74b1de
      .default_value = "off",
74b1de
      .description = "Enable placeholders for gfid to path conversion",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
     {.key = {"gfid2path"},
74b1de
      .type = GF_OPTION_TYPE_BOOL,
74b1de
@@ -1279,7 +1279,7 @@ struct volume_options posix_options[] = {
74b1de
          " The raw filesystem will not be compatible with OS X Finder.\n"
74b1de
          "\t- Strip: Will strip the user namespace before setting. The raw "
74b1de
          "filesystem will work in OS X.\n",
74b1de
-     .op_version = {GD_OP_VERSION_3_6_0},
74b1de
+     .op_version = {GD_OP_VERSION_RHS_3_0},
74b1de
      .flags = OPT_FLAG_SETTABLE | OPT_FLAG_DOC},
74b1de
 #endif
74b1de
     {
cb8e9e
-- 
d1681e
1.8.3.1
cb8e9e