diff options
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 33 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 15 | ||||
| -rw-r--r-- | cli/src/cli-xml-output.c | 66 | ||||
| -rw-r--r-- | cli/src/cli.h | 3 | ||||
| -rwxr-xr-x | tests/bugs/error-gen/bug-767095.t | 2 | ||||
| -rw-r--r-- | tests/bugs/glusterd/bug-1111041.t | 2 | ||||
| -rwxr-xr-x | tests/bugs/glusterfs-server/bug-861542.t | 2 | ||||
| -rw-r--r-- | tests/volume.rc | 6 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 57 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 16 | 
10 files changed, 167 insertions, 35 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 68755630d87..848dffe71d6 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1778,10 +1778,15 @@ void  cli_print_detailed_status (cli_volume_status_t *status)  {          cli_out ("%-20s : %-20s", "Brick", status->brick); -        if (status->online) -                cli_out ("%-20s : %-20d", "Port", status->port); -        else -                cli_out ("%-20s : %-20s", "Port", "N/A"); + +        if (status->online) { +                cli_out ("%-20s : %-20d", "TCP Port", status->port); +                cli_out ("%-20s : %-20d", "RDMA Port", status->rdma_port); +        } else { +                cli_out ("%-20s : %-20s", "TCP Port", "N/A"); +                cli_out ("%-20s : %-20s", "RDMA Port", "N/A"); +        } +          cli_out ("%-20s : %-20c", "Online", (status->online) ? 'Y' : 'N');          cli_out ("%-20s : %-20s", "Pid", status->pid_str); @@ -1842,7 +1847,7 @@ cli_print_brick_status (cli_volume_status_t *status)          int  fieldlen = CLI_VOL_STATUS_BRICK_LEN;          int  bricklen = 0;          char *p = NULL; -        int  num_tabs = 0; +        int  num_spaces = 0;          p = status->brick;          bricklen = strlen (p); @@ -1852,25 +1857,27 @@ cli_print_brick_status (cli_volume_status_t *status)                          p += fieldlen;                          bricklen -= fieldlen;                  } else { -                        num_tabs = (fieldlen - bricklen) / CLI_TAB_LENGTH + 1; +                        num_spaces = (fieldlen - bricklen) + 1;                          printf ("%s", p); -                        while (num_tabs-- != 0) -                                printf ("\t"); -                        if (status->port) { +                        while (num_spaces-- != 0) +                                printf (" "); +                        if (status->port || status->rdma_port) {                                  if (status->online) -                                        cli_out ("%d\t%c\t%s", +                                        cli_out ("%-10d%-11d%-8c%-5s",                                                   status->port, +                                                 status->rdma_port,                                                   status->online?'Y':'N',                                                   status->pid_str);                                  else -                                        cli_out ("%s\t%c\t%s", +                                        cli_out ("%-10s%-11s%-8c%-5s", +                                                 "N/A",                                                   "N/A",                                                   status->online?'Y':'N',                                                   status->pid_str);                          }                          else -                                cli_out ("%s\t%c\t%s", -                                         "N/A", status->online?'Y':'N', +                                cli_out ("%-10s%-11s%-8c%-5s", +                                         "N/A", "N/A", status->online?'Y':'N',                                           status->pid_str);                          bricklen = 0;                  } diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index bd133d0ba82..0238a8ff0e7 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -6722,12 +6722,15 @@ gf_cli_status_cbk (struct rpc_req *req, struct iovec *iov,          cli_out ("Status of volume: %s", volname);          if ((cmd & GF_CLI_STATUS_DETAIL) == 0) { -                cli_out ("Gluster process\t\t\t\t\t\tPort\tOnline\tPid"); +                cli_out ("%-*s %s  %s  %s  %s", CLI_VOL_STATUS_BRICK_LEN, +                         "Gluster process", "TCP Port", "RDMA Port", +                         "Online", "Pid");                  cli_print_line (CLI_BRICK_STATUS_LINE_LEN);          }          for (i = 0; i <= index_max; i++) { +                status.rdma_port = 0;                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.hostname", i); @@ -6751,9 +6754,15 @@ gf_cli_status_cbk (struct rpc_req *req, struct iovec *iov,                      !strcmp (hostname, "Snapshot Daemon"))                          snprintf (status.brick, PATH_MAX + 255, "%s on %s",                                    hostname, path); -                else +                else { +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "brick%d.rdma_port", i); +                        ret = dict_get_int32 (dict, key, &(status.rdma_port)); +                        if (ret) +                                continue;                          snprintf (status.brick, PATH_MAX + 255, "Brick %s:%s",                                    hostname, path); +                }                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.port", i); @@ -6786,10 +6795,10 @@ gf_cli_status_cbk (struct rpc_req *req, struct iovec *iov,                                  goto out;                          cli_print_line (CLI_BRICK_STATUS_LINE_LEN);                          cli_print_detailed_status (&status); -                  } else {                          cli_print_brick_status (&status);                  } +          }          cli_out (" "); diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c index b4c72eaa84e..b5cbbf68aa4 100644 --- a/cli/src/cli-xml-output.c +++ b/cli/src/cli-xml-output.c @@ -234,14 +234,15 @@ cli_xml_output_vol_status_common (xmlTextWriterPtr writer, dict_t *dict,                                    int   brick_index, int *online,                                    gf_boolean_t *node_present)  { -        int             ret = -1; -        char            *hostname = NULL; -        char            *path = NULL; -        char            *uuid = NULL; -        int             port = 0; -        int             status = 0; -        int             pid = 0; -        char            key[1024] = {0,}; +        int             ret             = -1; +        char            *hostname       = NULL; +        char            *path           = NULL; +        char            *uuid           = NULL; +        int             port            = 0; +        int             rdma_port       = 0; +        int             status          = 0; +        int             pid             = 0; +        char            key[1024]       = {0,};          snprintf (key, sizeof (key), "brick%d.hostname", brick_index);          ret = dict_get_str (dict, key, &hostname); @@ -294,19 +295,62 @@ cli_xml_output_vol_status_common (xmlTextWriterPtr writer, dict_t *dict,          if (ret)                  goto out; +        memset (key, 0, sizeof (key)); +        snprintf (key, sizeof (key), "brick%d.rdma_port", brick_index); +        ret = dict_get_int32 (dict, key, &rdma_port); +          /* If the process is either offline or doesn't provide a port (shd)           * port = "N/A"           * else print the port number of the process.           */ +        /* +         * Tag 'port' can be removed once console management is started +         * to support new tag ports. +         */ +          if (*online == 1 && port != 0) +                 ret = xmlTextWriterWriteFormatElement (writer, +                                                    (xmlChar *)"port", +                                                        "%d", port); +         else +                 ret = xmlTextWriterWriteFormatElement (writer, +                                                        (xmlChar *)"port", +                                                        "%s", "N/A"); + +        ret = xmlTextWriterStartElement (writer, (xmlChar *)"ports"); +        if (*online == 1 && (port != 0 || rdma_port != 0)) { + +                if (port) {                  ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"port", +                                                       (xmlChar *)"tcp",                                                         "%d", port); -        else +                } else {                  ret = xmlTextWriterWriteFormatElement (writer, -                                                       (xmlChar *)"port", +                                                       (xmlChar *)"tcp",                                                         "%s", "N/A"); +                } + +                if (rdma_port) { +                ret = xmlTextWriterWriteFormatElement (writer, +                                                       (xmlChar *)"rdma", +                                                       "%d", rdma_port); +                } else { +                ret = xmlTextWriterWriteFormatElement (writer, +                                                       (xmlChar *)"rdma", +                                                       "%s", "N/A"); +                } + +        } else { +                ret = xmlTextWriterWriteFormatElement (writer, +                                                       (xmlChar *)"tcp", +                                                       "%s", "N/A"); +                ret = xmlTextWriterWriteFormatElement (writer, +                                                       (xmlChar *)"rdma", +                                                       "%s", "N/A"); +        } + +        ret = xmlTextWriterEndElement (writer);          XML_RET_CHECK_AND_GOTO (ret, out);          memset (key, 0, sizeof (key)); diff --git a/cli/src/cli.h b/cli/src/cli.h index 89aedc5697d..bdf366b22ed 100644 --- a/cli/src/cli.h +++ b/cli/src/cli.h @@ -33,7 +33,7 @@  #define CLI_DEFAULT_CMD_TIMEOUT              120  #define CLI_TEN_MINUTES_TIMEOUT              600 //Longer timeout for volume top  #define DEFAULT_CLI_LOG_FILE_DIRECTORY     DATADIR "/log/glusterfs" -#define CLI_VOL_STATUS_BRICK_LEN              55 +#define CLI_VOL_STATUS_BRICK_LEN              43  #define CLI_TAB_LENGTH                         8  #define CLI_BRICK_STATUS_LINE_LEN             78 @@ -150,6 +150,7 @@ struct cli_local {  struct cli_volume_status {          int            port; +        int            rdma_port;          int            online;          uint64_t       block_size;          uint64_t       total_inodes; diff --git a/tests/bugs/error-gen/bug-767095.t b/tests/bugs/error-gen/bug-767095.t index 34c3b182169..4649a783b23 100755 --- a/tests/bugs/error-gen/bug-767095.t +++ b/tests/bugs/error-gen/bug-767095.t @@ -31,7 +31,7 @@ TEST $CLI volume set $V0 server.statedump-path $dump_dir;  TEST $CLI volume start $V0;  EXPECT 'Started' volinfo_field $V0 'Status'; -TEST PID=`gluster --xml volume status patchy | grep -A 5 patchy1 | grep '<pid>' | cut -d '>' -f 2 | cut -d '<' -f 1` +TEST PID=`gluster --xml volume status patchy | grep -A 8 patchy1 | grep '<pid>' | cut -d '>' -f 2 | cut -d '<' -f 1`  TEST kill -USR1 $PID;  sleep 2;  for file_name in $(ls $dump_dir) diff --git a/tests/bugs/glusterd/bug-1111041.t b/tests/bugs/glusterd/bug-1111041.t index 9e72c50990d..caaece0fcbb 100644 --- a/tests/bugs/glusterd/bug-1111041.t +++ b/tests/bugs/glusterd/bug-1111041.t @@ -29,7 +29,7 @@ SNAPD_PID=$(ps auxww | grep snapd | grep -v grep | awk '{print $2}');  TEST [ $SNAPD_PID -gt 0 ]; -SNAPD_PID2=$($CLI volume status $V0 | grep "Snapshot Daemon" | awk {'print $7'}); +SNAPD_PID2=$($CLI volume status $V0 | grep "Snapshot Daemon" | awk {'print $8'});  TEST [ $SNAPD_PID -eq $SNAPD_PID2 ] diff --git a/tests/bugs/glusterfs-server/bug-861542.t b/tests/bugs/glusterfs-server/bug-861542.t index ab572963bb0..d33593257b9 100755 --- a/tests/bugs/glusterfs-server/bug-861542.t +++ b/tests/bugs/glusterfs-server/bug-861542.t @@ -20,7 +20,7 @@ function port_field()      if [ $opt -eq '0' ]; then          $CLI volume status $vol | grep "brick0" | awk '{print $3}';      else -        $CLI volume status $vol detail | grep "^Port " | awk '{print $3}'; +        $CLI volume status $vol detail | grep "^TCP Port " | awk '{print $4}';      fi  } diff --git a/tests/volume.rc b/tests/volume.rc index 7e8810852f5..887a9cae861 100644 --- a/tests/volume.rc +++ b/tests/volume.rc @@ -175,15 +175,15 @@ function afr_child_up_status_in_nfs {  }  function nfs_up_status { -        gluster volume status | grep "NFS Server" | awk '{print $6}' +        gluster volume status | grep "NFS Server" | awk '{print $7}'  }  function glustershd_up_status { -        gluster volume status | grep "Self-heal Daemon" | awk '{print $6}' +        gluster volume status | grep "Self-heal Daemon" | awk '{print $7}'  }  function quotad_up_status { -        gluster volume status | grep "Quota Daemon" | awk '{print $6}' +        gluster volume status | grep "Quota Daemon" | awk '{print $7}'  }  function get_brick_pid { diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 9352b9accab..93585e3db0c 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -3752,6 +3752,42 @@ glusterd_is_volume_status_modify_op_ctx (uint32_t cmd)          return _gf_false;  } +int +glusterd_op_modify_port_key (dict_t *op_ctx, int brick_index_max) +{ +        char      *port         = NULL; +        int       i             = 0; +        int       ret = -1; +        char      key[1024]     = {0}; +        char      old_key[1024] = {0}; + +        for (i = 0; i <= brick_index_max; i++) { + +               memset (key, 0, sizeof (key)); +               snprintf (key, sizeof (key), "brick%d.rdma_port", i); +               ret = dict_get_str (op_ctx, key, &port); + +               if (ret) { + +                       memset (old_key, 0, sizeof (old_key)); +                       snprintf (old_key, sizeof (old_key), +                                           "brick%d.port", i); +                       ret = dict_get_str (op_ctx, old_key, &port); +                       if (ret) +                               goto out; + +                       ret = dict_set_str (op_ctx, key, port); +                       if (ret) +                               goto out; +                       ret = dict_set_str (op_ctx, old_key, "\0"); +                       if (ret) +                               goto out; +               } +        } +out: +        return ret; +} +  /* This function is used to modify the op_ctx dict before sending it back   * to cli. This is useful in situations like changing the peer uuids to   * hostnames etc. @@ -3766,9 +3802,13 @@ glusterd_op_modify_op_ctx (glusterd_op_t op, void *ctx)          int             count = 0;          uint32_t        cmd = GF_CLI_STATUS_NONE;          xlator_t        *this = NULL; +        glusterd_conf_t    *conf    = NULL; +        char               *volname = NULL; +        glusterd_volinfo_t *volinfo = NULL;          this = THIS;          GF_ASSERT (this); +        conf = this->private;          if (ctx)                  op_ctx = ctx; @@ -3814,6 +3854,23 @@ glusterd_op_modify_op_ctx (glusterd_op_t op, void *ctx)                  count = brick_index_max + other_count + 1; +                /* +                 * a glusterd lesser than version 3.7 will be sending the +                 * rdma port in older key. Changing that value from here +                 * to support backward compatibility +                 */ +                 ret = dict_get_str (op_ctx, "volname", &volname); +                 if (ret) +                        goto out; + +                 glusterd_volinfo_find (volname, &volinfo); +                 if (conf->op_version < GD_OP_VERSION_3_7_0 && +                     volinfo->transport_type == GF_TRANSPORT_RDMA) { +                         ret = glusterd_op_modify_port_key (op_ctx, +                                                            brick_index_max); +                         if (ret) +                                 goto out; +                 }                  /* add 'brick%d.peerid' into op_ctx with value of 'brick%d.path'.                     nfs/sshd like services have this additional uuid */                  { diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 9ff7bf2347b..5d28dc24e45 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -6112,10 +6112,24 @@ glusterd_add_brick_to_dict (glusterd_volinfo_t *volinfo,          memset (key, 0, sizeof (key));          snprintf (key, sizeof (key), "%s.port", base_key); -        ret = dict_set_int32 (dict, key, brickinfo->port); +        ret = dict_set_int32 (dict, key, (volinfo->transport_type == +                              GF_TRANSPORT_RDMA) ? 0 : brickinfo->port);          if (ret)                  goto out; +        memset (key, 0, sizeof (key)); +        snprintf (key, sizeof (key), "%s.rdma_port", base_key); +        if (volinfo->transport_type == GF_TRANSPORT_RDMA) { +                ret = dict_set_int32 (dict, key, brickinfo->port); +        } else if (volinfo->transport_type == GF_TRANSPORT_BOTH_TCP_RDMA) { +                ret = dict_set_int32 (dict, key, brickinfo->rdma_port); +        } else +                ret = dict_set_int32 (dict, key, 0); + +        if (ret) +                goto out; + +          GLUSTERD_GET_BRICK_PIDFILE (pidfile, volinfo, brickinfo, priv);          brick_online = gf_is_service_running (pidfile, &pid);  | 
