diff options
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 27 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-geo-rep.c | 47 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.h | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 12 | 
4 files changed, 66 insertions, 21 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 2e0c58402..19451e059 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -3209,18 +3209,20 @@ gf_cli_gsync_config_command (dict_t *dict)  int  gf_cli_gsync_out_status (dict_t *dict)  { -        int              gsync_count = 0; -        int              i = 0; -        int              ret = 0; +        int   gsync_count              = 0; +        int   i                        = 0; +        int   ret                      = 0;          char             mst[PATH_MAX] = {0, }; -        char             slv[PATH_MAX]= {0, }; +        char             slv[PATH_MAX] = {0, };          char             sts[PATH_MAX] = {0, }; -        char             hyphens[81] = {0, }; -        char             *mst_val = NULL; -        char             *slv_val = NULL; -        char             *sts_val = NULL; +        char             nds[PATH_MAX] = {0, }; +        char             hyphens[100]  = {0, }; +        char *mst_val                  = NULL; +        char *slv_val                  = NULL; +        char *sts_val                  = NULL; +        char *nds_val                  = NULL; -        cli_out ("%-20s %-50s %-10s", "MASTER", "SLAVE", "STATUS"); +        cli_out ("%-20s %-20s %-50s %-10s", "NODE", "MASTER", "SLAVE", "STATUS");          for (i=0; i<sizeof(hyphens)-1; i++)                  hyphens[i] = '-'; @@ -3237,10 +3239,15 @@ gf_cli_gsync_out_status (dict_t *dict)          }          for (i = 1; i <= gsync_count; i++) { +                snprintf (nds, sizeof(nds), "node%d", i);                  snprintf (mst, sizeof(mst), "master%d", i);                  snprintf (slv, sizeof(slv), "slave%d", i);                  snprintf (sts, sizeof(sts), "status%d", i); +                ret = dict_get_str (dict, nds, &nds_val); +                if (ret) +                        goto out; +                  ret = dict_get_str (dict, mst, &mst_val);                  if (ret)                          goto out; @@ -3253,7 +3260,7 @@ gf_cli_gsync_out_status (dict_t *dict)                  if (ret)                          goto out; -                cli_out ("%-20s %-50s %-10s", mst_val, +                cli_out ("%-20s %-20s %-50s %-10s", nds_val, mst_val,                           slv_val, sts_val);          } diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index 3dcb12f39..3661d9d01 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -730,7 +730,7 @@ gsync_verify_config_options (dict_t *dict, char **op_errstr)  static int  glusterd_get_gsync_status_mst_slv (glusterd_volinfo_t *volinfo, -                                   char *slave, dict_t *rsp_dict); +                                   char *slave, dict_t *rsp_dict, char *node);  static int  _get_status_mst_slv (dict_t *this, char *key, data_t *value, void *data) @@ -751,7 +751,8 @@ _get_status_mst_slv (dict_t *this, char *key, data_t *value, void *data)                  return 0;          ret = glusterd_get_gsync_status_mst_slv(param->volinfo, -                                                slave, param->rsp_dict); +                                                slave, param->rsp_dict, +                                                param->node);          return 0;  } @@ -1463,12 +1464,13 @@ dict_get_param (dict_t *dict, char *key, char **param)  static int  glusterd_read_status_file (char *master, char *slave, -                           dict_t *dict) +                           dict_t *dict, char *node)  {          glusterd_conf_t *priv = NULL;          int              ret = 0;          char            *statefile = NULL;          char             buf[1024] = {0, }; +        char             nds[1024] = {0, };          char             mst[1024] = {0, };          char             slv[1024] = {0, };          char             sts[1024] = {0, }; @@ -1476,6 +1478,7 @@ glusterd_read_status_file (char *master, char *slave,          dict_t          *confd = NULL;          int              gsync_count = 0;          int              status = 0; +        char *dyn_node = NULL;          GF_ASSERT (THIS);          GF_ASSERT (THIS->private); @@ -1544,6 +1547,16 @@ glusterd_read_status_file (char *master, char *slave,          else                  gsync_count++; +        (void) snprintf (nds, sizeof (nds), "node%d", gsync_count); +        dyn_node = gf_strdup (node); +        if (!dyn_node) +                goto out; +        ret = dict_set_dynstr (dict, nds, dyn_node); +        if (ret) { +                GF_FREE (dyn_node); +                goto out; +        } +          snprintf (mst, sizeof (mst), "master%d", gsync_count);          master = gf_strdup (master);          if (!master) @@ -1691,7 +1704,8 @@ out:  static int  glusterd_get_gsync_status_mst_slv (glusterd_volinfo_t *volinfo, -                                   char *slave, dict_t *rsp_dict) +                                   char *slave, dict_t *rsp_dict, +                                   char *node)  {          uuid_t             uuid = {0, };          glusterd_conf_t    *priv = NULL; @@ -1715,14 +1729,16 @@ glusterd_get_gsync_status_mst_slv (glusterd_volinfo_t *volinfo,                  goto out;          } -        ret = glusterd_read_status_file (volinfo->volname, slave, rsp_dict); +        ret = glusterd_read_status_file (volinfo->volname, +                                         slave, rsp_dict, node);   out:          gf_log ("", GF_LOG_DEBUG, "Returning with %d", ret);          return ret;  }  static int -glusterd_get_gsync_status_mst (glusterd_volinfo_t *volinfo, dict_t *rsp_dict) +glusterd_get_gsync_status_mst (glusterd_volinfo_t *volinfo, dict_t *rsp_dict, +                               char *node)  {          glusterd_gsync_status_temp_t  param = {0, }; @@ -1730,13 +1746,14 @@ glusterd_get_gsync_status_mst (glusterd_volinfo_t *volinfo, dict_t *rsp_dict)          param.rsp_dict = rsp_dict;          param.volinfo = volinfo; +        param.node = node;          dict_foreach (volinfo->gsync_slaves, _get_status_mst_slv, ¶m);          return 0;  }  static int -glusterd_get_gsync_status_all ( dict_t *rsp_dict) +glusterd_get_gsync_status_all (dict_t *rsp_dict, char *node)  {          int32_t                 ret = 0; @@ -1749,7 +1766,7 @@ glusterd_get_gsync_status_all ( dict_t *rsp_dict)          GF_ASSERT (priv);          list_for_each_entry (volinfo, &priv->volumes, vol_list) { -                ret = glusterd_get_gsync_status_mst (volinfo, rsp_dict); +                ret = glusterd_get_gsync_status_mst (volinfo, rsp_dict, node);                  if (ret)                          goto out;          } @@ -1769,11 +1786,17 @@ glusterd_get_gsync_status (dict_t *dict, char **op_errstr, dict_t *rsp_dict)          gf_boolean_t       exists = _gf_false;          glusterd_volinfo_t *volinfo = NULL;          int                ret = 0; +        char my_hostname[256] = {0,}; +        ret = gethostname(my_hostname, 256); +        if (ret) { +                /* stick to N/A */ +                (void) strcpy (my_hostname, "N/A"); +        }          ret = dict_get_str (dict, "master", &volname);          if (ret < 0){ -                ret = glusterd_get_gsync_status_all (rsp_dict); +                ret = glusterd_get_gsync_status_all (rsp_dict, my_hostname);                  goto out;          } @@ -1791,11 +1814,13 @@ glusterd_get_gsync_status (dict_t *dict, char **op_errstr, dict_t *rsp_dict)          ret = dict_get_str (dict, "slave", &slave);          if (ret < 0) { -                ret = glusterd_get_gsync_status_mst (volinfo, rsp_dict); +                ret = glusterd_get_gsync_status_mst (volinfo, +                                                     rsp_dict, my_hostname);                  goto out;          } -        ret = glusterd_get_gsync_status_mst_slv (volinfo, slave, rsp_dict); +        ret = glusterd_get_gsync_status_mst_slv (volinfo, slave, +                                                 rsp_dict, my_hostname);   out:          gf_log ("", GF_LOG_DEBUG, "Returning %d", ret); diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.h b/xlators/mgmt/glusterd/src/glusterd-op-sm.h index 558c2d1f7..610b6471a 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.h +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.h @@ -160,6 +160,7 @@ typedef struct glusterd_status_rsp_conv_ {  typedef struct glusterd_gsync_status_temp {          dict_t *rsp_dict;          glusterd_volinfo_t *volinfo; +        char *node;  }glusterd_gsync_status_temp_t;  int  glusterd_op_sm_new_event (glusterd_op_sm_event_type_t event_type, diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index fab405c7f..8dc83d5ef 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -5799,9 +5799,11 @@ glusterd_append_status_dicts (dict_t *dst, dict_t *src)          char             mst[PATH_MAX] = {0,};          char             slv[PATH_MAX] = {0, };          char             sts[PATH_MAX] = {0, }; +        char             nds[PATH_MAX] = {0, };          char             *mst_val = NULL;          char             *slv_val = NULL;          char             *sts_val = NULL; +        char             *nds_val = NULL;          GF_ASSERT (dst); @@ -5820,10 +5822,15 @@ glusterd_append_status_dicts (dict_t *dst, dict_t *src)          }          for (i = 1; i <= src_count; i++) { +                snprintf (nds, sizeof(nds), "node%d", i);                  snprintf (mst, sizeof(mst), "master%d", i);                  snprintf (slv, sizeof(slv), "slave%d", i);                  snprintf (sts, sizeof(sts), "status%d", i); +                ret = dict_get_str (src, nds, &nds_val); +                if (ret) +                        goto out; +                  ret = dict_get_str (src, mst, &mst_val);                  if (ret)                          goto out; @@ -5836,10 +5843,15 @@ glusterd_append_status_dicts (dict_t *dst, dict_t *src)                  if (ret)                          goto out; +                snprintf (nds, sizeof(nds), "node%d", i+dst_count);                  snprintf (mst, sizeof(mst), "master%d", i+dst_count);                  snprintf (slv, sizeof(slv), "slave%d", i+dst_count);                  snprintf (sts, sizeof(sts), "status%d", i+dst_count); +                ret = dict_set_dynstr (dst, nds, gf_strdup (nds_val)); +                if (ret) +                        goto out; +                  ret = dict_set_dynstr (dst, mst, gf_strdup (mst_val));                  if (ret)                          goto out;  | 
