diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-replace-brick.c')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 219 | 
1 files changed, 74 insertions, 145 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index a6c5a9aaf7b..bca306bd897 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -168,7 +168,7 @@ glusterd_get_rb_dst_brickinfo (glusterd_volinfo_t *volinfo,          if (!volinfo || !brickinfo)                  goto out; -        *brickinfo = volinfo->rep_brick.dst_brick; +        *brickinfo = volinfo->dst_brick;          ret = 0; @@ -199,43 +199,38 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          char                                    *savetok       = NULL;          char                                     voldir[PATH_MAX] = {0};          char                                     pidfile[PATH_MAX] = {0}; -        char                                    *task_id_str = NULL; -        xlator_t                                *this = NULL; -        this = THIS; -        GF_ASSERT (this); - -        priv = this->private; +        priv = THIS->private;          GF_ASSERT (priv);          ret = dict_get_str (dict, "src-brick", &src_brick);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get src brick"); +                gf_log ("", GF_LOG_ERROR, "Unable to get src brick");                  goto out;          } -        gf_log (this->name, GF_LOG_DEBUG, "src brick=%s", src_brick); +        gf_log ("", GF_LOG_DEBUG, "src brick=%s", src_brick);          ret = dict_get_str (dict, "dst-brick", &dst_brick);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get dest brick"); +                gf_log ("", GF_LOG_ERROR, "Unable to get dest brick");                  goto out;          } -        gf_log (this->name, GF_LOG_DEBUG, "dst brick=%s", dst_brick); +        gf_log ("", GF_LOG_DEBUG, "dst brick=%s", dst_brick);          ret = dict_get_str (dict, "volname", &volname);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get volume name"); +                gf_log ("", GF_LOG_ERROR, "Unable to get volume name");                  goto out;          }          ret = dict_get_int32 (dict, "operation", (int32_t *)&replace_op);          if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, +                gf_log ("", GF_LOG_DEBUG,                          "dict get on replace-brick operation failed");                  goto out;          } @@ -267,7 +262,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  !glusterd_is_valid_volfpath (volname, dst_brick)) {                  snprintf (msg, sizeof (msg), "brick path %s is too "                            "long.", dst_brick); -                gf_log (this->name, GF_LOG_ERROR, "%s", msg); +                gf_log ("", GF_LOG_ERROR, "%s", msg);                  *op_errstr = gf_strdup (msg);                  ret = -1; @@ -276,10 +271,10 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          ret = glusterd_check_gsync_running (volinfo, &is_run);          if (ret && (is_run == _gf_false)) -                gf_log (this->name, GF_LOG_WARNING, "Unable to get the status" +                gf_log ("", GF_LOG_WARNING, "Unable to get the status"                                  " of active "GEOREP" session");          if (is_run) { -                gf_log (this->name, GF_LOG_WARNING, GEOREP" sessions active" +                gf_log ("", GF_LOG_WARNING, GEOREP" sessions active"                          "for the volume %s ", volname);                  snprintf (msg, sizeof(msg), GEOREP" sessions are active "                                  "for the volume %s.\nStop "GEOREP " sessions " @@ -294,58 +289,29 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          if (glusterd_is_defrag_on(volinfo)) {                  snprintf (msg, sizeof(msg), "Volume name %s rebalance is in "                            "progress. Please retry after completion", volname); -                gf_log (this->name, GF_LOG_ERROR, "%s", msg); +                gf_log ("glusterd", GF_LOG_ERROR, "%s", msg);                  *op_errstr = gf_strdup (msg);                  ret = -1;                  goto out;          } -        ctx = glusterd_op_get_ctx(); -          switch (replace_op) {          case GF_REPLACE_OP_START:                  if (glusterd_is_rb_started (volinfo)) { -                        snprintf (msg, sizeof (msg), "Replace brick is already " -                                  "started for volume"); -                        gf_log (this->name, GF_LOG_ERROR, msg); -                        *op_errstr = gf_strdup (msg); +                        gf_log ("", GF_LOG_ERROR, "Replace brick is already " +                                "started for volume ");                          ret = -1;                          goto out;                  } -                if (is_origin_glusterd ()) { -                        if (!ctx) { -                                ret = -1; -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Failed to get op_ctx"); -                                goto out; -                        } - -                        ret = glusterd_generate_and_set_task_id -                                (ctx, GF_REPLACE_BRICK_TID_KEY); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Failed to generate task-id"); -                                goto out; -                        } - -                } else { -                        ret = dict_get_str (dict, GF_REPLACE_BRICK_TID_KEY, -                                            &task_id_str); -                        if (ret) { -                                gf_log (this->name, GF_LOG_WARNING, -                                        "Missing replace-brick-id"); -                                ret = 0; -                        } -                }                  break;          case GF_REPLACE_OP_PAUSE:                  if (glusterd_is_rb_paused (volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is " -                                "already paused for volume "); +                        gf_log ("", GF_LOG_ERROR, "Replace brick is already " +                                "paused for volume ");                          ret = -1;                          goto out;                  } else if (!glusterd_is_rb_started(volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is not" +                        gf_log ("", GF_LOG_ERROR, "Replace brick is not"                                  " started for volume ");                          ret = -1;                          goto out; @@ -354,7 +320,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          case GF_REPLACE_OP_ABORT:                  if (!glusterd_is_rb_ongoing (volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is not" +                        gf_log ("", GF_LOG_ERROR, "Replace brick is not"                                  " started or paused for volume ");                          ret = -1;                          goto out; @@ -363,7 +329,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          case GF_REPLACE_OP_COMMIT:                  if (!glusterd_is_rb_ongoing (volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is not " +                        gf_log ("", GF_LOG_ERROR, "Replace brick is not "                                  "started for volume ");                          ret = -1;                          goto out; @@ -383,7 +349,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                                  goto out;                          } -                        gf_log (this->name, GF_LOG_ERROR, "%s", *op_errstr); +                        gf_log (THIS->name, GF_LOG_ERROR, "%s", *op_errstr);                          ret = -1;                          goto out;                  } @@ -403,9 +369,10 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  goto out;          } +        ctx = glusterd_op_get_ctx();          if (ctx) {                  if (!glusterd_is_fuse_available ()) { -                        gf_log (this->name, GF_LOG_ERROR, "Unable to open /dev/" +                        gf_log ("glusterd", GF_LOG_ERROR, "Unable to open /dev/"                                  "fuse (%s), replace-brick command failed",                                  strerror (errno));                          snprintf (msg, sizeof(msg), "Fuse unavailable\n " @@ -417,7 +384,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          }          if (!glusterd_is_local_addr (src_brickinfo->hostname)) { -                gf_log (this->name, GF_LOG_DEBUG, +                gf_log ("", GF_LOG_DEBUG,                          "I AM THE SOURCE HOST");                  if (src_brickinfo->port && rsp_dict) {                          ret = dict_set_int32 (rsp_dict, "src-brick-port", @@ -449,14 +416,14 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          dup_dstbrick = gf_strdup (dst_brick);          if (!dup_dstbrick) {                  ret = -1; -                gf_log (this->name, GF_LOG_ERROR, "Memory allocation failed"); +                gf_log ("", GF_LOG_ERROR, "Memory allocation failed");                  goto out;          }          host = strtok_r (dup_dstbrick, ":", &savetok);          path = strtok_r (NULL, ":", &savetok);          if (!host || !path) { -                gf_log (this->name, GF_LOG_ERROR, +                gf_log ("", GF_LOG_ERROR,                          "dst brick %s is not of form <HOSTNAME>:<export-dir>",                          dst_brick);                  ret = -1; @@ -472,7 +439,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          if (ret) {                  *op_errstr = gf_strdup (msg);                  ret = -1; -                gf_log (this->name, GF_LOG_ERROR, *op_errstr); +                gf_log (THIS->name, GF_LOG_ERROR, *op_errstr);                  goto out;          } @@ -480,8 +447,8 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,              (replace_op == GF_REPLACE_OP_START ||               replace_op == GF_REPLACE_OP_COMMIT_FORCE)) { -                volinfo->rep_brick.src_brick = src_brickinfo; -                volinfo->rep_brick.dst_brick = dst_brickinfo; +                volinfo->src_brick = src_brickinfo; +                volinfo->dst_brick = dst_brickinfo;          }          if (glusterd_rb_check_bricks (volinfo, src_brickinfo, dst_brickinfo)) { @@ -490,7 +457,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  *op_errstr = gf_strdup ("Incorrect source or "                                          "destination brick");                  if (*op_errstr) -                        gf_log (this->name, GF_LOG_ERROR, "%s", *op_errstr); +                        gf_log (THIS->name, GF_LOG_ERROR, "%s", *op_errstr);                  goto out;         } @@ -532,7 +499,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,  out:          GF_FREE (dup_dstbrick); -        gf_log (this->name, GF_LOG_DEBUG, "Returning %d", ret); +        gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);          return ret;  } @@ -1520,7 +1487,6 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)          char                                    *dst_brick = NULL;          glusterd_brickinfo_t                    *src_brickinfo = NULL;          glusterd_brickinfo_t                    *dst_brickinfo = NULL; -        char                                    *task_id_str = NULL;          this = THIS;          GF_ASSERT (this); @@ -1530,23 +1496,26 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)          ret = dict_get_str (dict, "src-brick", &src_brick);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get src brick"); +                gf_log ("", GF_LOG_ERROR, "Unable to get src brick");                  goto out;          } -        gf_log (this->name, GF_LOG_DEBUG, "src brick=%s", src_brick); +        gf_log (this->name, GF_LOG_DEBUG, +                "src brick=%s", src_brick);          ret = dict_get_str (dict, "dst-brick", &dst_brick);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get dst brick"); +                gf_log ("", GF_LOG_ERROR, "Unable to get dst brick");                  goto out;          } -        gf_log (this->name, GF_LOG_DEBUG, "dst brick=%s", dst_brick); +        gf_log (this->name, GF_LOG_DEBUG, +                "dst brick=%s", dst_brick);          ret = dict_get_str (dict, "volname", &volname); +          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get volume name"); +                gf_log ("", GF_LOG_ERROR, "Unable to get volume name");                  goto out;          } @@ -1559,30 +1528,28 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)          ret = glusterd_volinfo_find (volname, &volinfo);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to allocate memory"); +                gf_log ("", GF_LOG_ERROR, "Unable to allocate memory");                  goto out;          }          ret = glusterd_volume_brickinfo_get_by_brick (src_brick, volinfo,                                                        &src_brickinfo);          if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Unable to get src-brickinfo"); +                gf_log ("", GF_LOG_DEBUG, "Unable to get src-brickinfo");                  goto out;          }          ret = glusterd_get_rb_dst_brickinfo (volinfo, &dst_brickinfo);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to get " +                gf_log ("", GF_LOG_ERROR, "Unable to get "                           "replace brick destination brickinfo");                  goto out;          }          ret = glusterd_resolve_brick (dst_brickinfo);          if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Unable to resolve dst-brickinfo"); +                gf_log ("", GF_LOG_DEBUG, "Unable to resolve dst-brickinfo");                  goto out;          } @@ -1591,62 +1558,29 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)          if (ret)                  goto out; -        ctx = glusterd_op_get_ctx(); -        if (!ctx) { -                gf_log (this->name, GF_LOG_ERROR, "Failed to get op_ctx"); -                ret = -1; -                goto out; -        } -  	if ((GF_REPLACE_OP_START != replace_op)) {                  ret = rb_update_dstbrick_port (dst_brickinfo, rsp_dict,                                                 dict, replace_op);                  if (ret)                          goto out; - -                /* Set task-id, if available, in op_ctx dict for operations -                 * other than start -                 */ -                if (!uuid_is_null (volinfo->rep_brick.rb_id)) { -                        ret = glusterd_copy_uuid_to_dict -                                (volinfo->rep_brick.rb_id, ctx, -                                 GF_REPLACE_BRICK_TID_KEY); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Failed to set replace-brick-id"); -                                goto out; -                        } -                }  	}          switch (replace_op) {          case GF_REPLACE_OP_START:          { -                ret = dict_get_str (dict, GF_REPLACE_BRICK_TID_KEY, &task_id_str); -                if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "Missing replace-brick-id"); -                        ret = 0; -                } else { -                        uuid_parse (task_id_str, volinfo->rep_brick.rb_id); -                } -                  if (!glusterd_is_local_addr (dst_brickinfo->hostname)) { -                        gf_log (this->name, GF_LOG_INFO, +                        gf_log ("", GF_LOG_INFO,                                  "I AM THE DESTINATION HOST");                          if (!glusterd_is_rb_paused (volinfo)) { -                                ret = rb_spawn_destination_brick -                                        (volinfo, dst_brickinfo); +                                ret = rb_spawn_destination_brick (volinfo, dst_brickinfo);                                  if (ret) { -                                        gf_log (this->name, GF_LOG_DEBUG, -                                                "Failed to spawn destination " -                                                "brick"); +                                        gf_log ("", GF_LOG_DEBUG, +                                                "Failed to spawn destination brick");                                          goto out;                                  }                          } else { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Replace brick is already started=> no " -                                        "need to restart dst brick "); +                                gf_log ("", GF_LOG_ERROR, "Replace brick is already " +                                        "started=> no need to restart dst brick ");                          }  		} @@ -1655,14 +1589,14 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)  		        ret = rb_src_brick_restart (volinfo, src_brickinfo,  				                    1);  		        if (ret) { -				gf_log (this->name, GF_LOG_DEBUG, -	                                "Could not restart src-brick"); +				gf_log ("", GF_LOG_DEBUG, +	                        "Could not restart src-brick");  			        goto out;  			}  		}  		if (!glusterd_is_local_addr (dst_brickinfo->hostname)) { -			gf_log (this->name, GF_LOG_INFO, +			gf_log ("", GF_LOG_INFO,  				"adding dst-brick port no");                          ret = rb_update_dstbrick_port (dst_brickinfo, rsp_dict, @@ -1683,7 +1617,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                                                 dst_brickinfo,                                                 GF_REPLACE_OP_COMMIT);                          if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, +                                gf_log ("", GF_LOG_ERROR,                                          "Commit operation failed");                                  goto out;                          } @@ -1693,17 +1627,16 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)          case GF_REPLACE_OP_COMMIT_FORCE:          {                  ret = dict_set_int32 (volinfo->dict, "enable-pump", 0); -                gf_log (this->name, GF_LOG_DEBUG, +                gf_log (THIS->name, GF_LOG_DEBUG,                          "Received commit - will be adding dst brick and "                          "removing src brick");                  if (!glusterd_is_local_addr (dst_brickinfo->hostname)) { -                        gf_log (this->name, GF_LOG_DEBUG, +                        gf_log (THIS->name, GF_LOG_DEBUG,                                  "I AM THE DESTINATION HOST"); -                        ret = rb_kill_destination_brick (volinfo, -                                                         dst_brickinfo); +                        ret = rb_kill_destination_brick (volinfo, dst_brickinfo);                          if (ret) { -                                gf_log (this->name, GF_LOG_CRITICAL, +                                gf_log (THIS->name, GF_LOG_CRITICAL,                                          "Unable to cleanup dst brick");                                  goto out;                          } @@ -1711,41 +1644,39 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                  ret = glusterd_nodesvcs_stop (volinfo);                  if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, +                        gf_log (THIS->name, GF_LOG_ERROR,                                  "Unable to stop nfs server, ret: %d", ret);                  }  		ret = glusterd_op_perform_replace_brick (volinfo, src_brick,  							 dst_brick);  		if (ret) { -			gf_log (this->name, GF_LOG_CRITICAL, "Unable to add " -				"dst-brick: %s to volume: %s", dst_brick, -                                volinfo->volname); +			gf_log (THIS->name, GF_LOG_CRITICAL, "Unable to add " +				"dst-brick: %s to volume: %s", +				dst_brick, volinfo->volname);  		        (void) glusterd_nodesvcs_handle_graph_change (volinfo);  			goto out;  		} -		volinfo->rebal.defrag_status = 0; +		volinfo->defrag_status = 0;  		ret = glusterd_nodesvcs_handle_graph_change (volinfo);  		if (ret) { -                        gf_log (this->name, GF_LOG_CRITICAL, +                        gf_log (THIS->name, GF_LOG_CRITICAL,                                  "Failed to generate nfs volume file");  		}  		ret = glusterd_fetchspec_notify (THIS);                  glusterd_set_rb_status (volinfo, GF_RB_STATUS_NONE); -                glusterd_brickinfo_delete (volinfo->rep_brick.dst_brick); -                volinfo->rep_brick.src_brick = NULL; -                volinfo->rep_brick.dst_brick = NULL; -                uuid_clear (volinfo->rep_brick.rb_id); +                glusterd_brickinfo_delete (volinfo->dst_brick); +                volinfo->src_brick = volinfo->dst_brick = NULL;          }          break;          case GF_REPLACE_OP_PAUSE:          { -                gf_log (this->name, GF_LOG_DEBUG, +                gf_log ("", GF_LOG_DEBUG,                          "Received pause - doing nothing");                  ctx = glusterd_op_get_ctx ();                  if (ctx) { @@ -1753,7 +1684,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                                                 dst_brickinfo,                                                 GF_REPLACE_OP_PAUSE);                          if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, +                                gf_log ("", GF_LOG_ERROR,                                          "Pause operation failed");                                  goto out;                          } @@ -1772,7 +1703,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                                                 dst_brickinfo,                                                 GF_REPLACE_OP_ABORT);                          if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, +                                gf_log (THIS->name, GF_LOG_ERROR,                                          "Abort operation failed");                                  goto out;                          } @@ -1780,8 +1711,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                  ret = dict_set_int32 (volinfo->dict, "enable-pump", 0);  		if (ret) { -			gf_log (this->name, GF_LOG_CRITICAL, -                                "Unable to disable pump"); +			gf_log (THIS->name, GF_LOG_CRITICAL, "Unable to disable pump");  		}                  if (!glusterd_is_local_addr (src_brickinfo->hostname)) { @@ -1796,7 +1726,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                  }                  if (!glusterd_is_local_addr (dst_brickinfo->hostname)) { -                        gf_log (this->name, GF_LOG_INFO, +                        gf_log (THIS->name, GF_LOG_INFO,                                  "I AM THE DESTINATION HOST");                          ret = rb_kill_destination_brick (volinfo, dst_brickinfo);                          if (ret) { @@ -1806,15 +1736,14 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                          }                  }                  glusterd_set_rb_status (volinfo, GF_RB_STATUS_NONE); -                glusterd_brickinfo_delete (volinfo->rep_brick.dst_brick); -                volinfo->rep_brick.src_brick = NULL; -                volinfo->rep_brick.dst_brick = NULL; +                glusterd_brickinfo_delete (volinfo->dst_brick); +                volinfo->src_brick = volinfo->dst_brick = NULL;          }          break;          case GF_REPLACE_OP_STATUS:          { -                gf_log (this->name, GF_LOG_DEBUG, +                gf_log ("", GF_LOG_DEBUG,                          "received status - doing nothing");                  ctx = glusterd_op_get_ctx ();                  if (ctx) { @@ -1822,7 +1751,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                                  ret = dict_set_str (ctx, "status-reply",                                                   "replace brick has been paused");                                  if (ret) -                                        gf_log (this->name, GF_LOG_ERROR, +                                        gf_log (THIS->name, GF_LOG_ERROR,                                                  "failed to set pump status"                                                  " in ctx");                                  goto out; @@ -1846,7 +1775,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)  		ret = glusterd_store_volinfo (volinfo,                                                GLUSTERD_VOLINFO_VER_AC_INCREMENT);          if (ret) -                gf_log (this->name, GF_LOG_ERROR, "Couldn't store" +                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't store"                          " replace brick operation's state");  out:  | 
