summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-utils.c
diff options
context:
space:
mode:
authorRaghavendra Bhat <raghavendra@redhat.com>2013-11-29 12:13:28 +0530
committerRaghavendra Bhat <raghavendra@redhat.com>2013-12-02 18:20:52 +0530
commit30228525ee04694eb4e2fd367cab6779ffb769dc (patch)
tree51519c8f429dce671185fe9db861e2757fe31dc3 /xlators/mgmt/glusterd/src/glusterd-utils.c
parent16edf27198de7efca8a0eff3955d36dee9edde67 (diff)
mgmt/glusterd: handle issues present in snapshot create and snap management
Change-Id: I94b5f6e00be7d1ff0c454e291c779dae7b423748 Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c62
1 files changed, 55 insertions, 7 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index dd64867db..f7b117ba4 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -484,6 +484,10 @@ glusterd_volinfo_dup (glusterd_volinfo_t *volinfo,
int32_t ret = -1;
glusterd_volinfo_t *new_volinfo = NULL;
xlator_t *this = NULL;
+ uuid_t username_id = {0, };
+ uuid_t password_id = {0, };
+ char *username = NULL;
+ char *password = NULL;
this = THIS;
GF_ASSERT (this);
@@ -512,12 +516,31 @@ glusterd_volinfo_dup (glusterd_volinfo_t *volinfo,
for authentication of trusted clients. If its not working,
generate new username and passowd (uuid-generate) and use.
*/
- glusterd_auth_set_username (new_volinfo, volinfo->auth.username);
- glusterd_auth_set_password (new_volinfo, volinfo->auth.password);
+ uuid_generate (username_id);
+ username = uuid_utoa (username_id);
+ if (!username) {
+ ret = -1;
+ gf_log (this->name, GF_LOG_WARNING, "could not get the "
+ "username");
+ goto out;
+ }
+ uuid_generate (password_id);
+ password = uuid_utoa (password_id);
+ if (!password) {
+ ret = -1;
+ gf_log (this->name, GF_LOG_WARNING, "could not get the "
+ "password");
+ goto out;
+ }
+ glusterd_auth_set_username (new_volinfo, username);
+ glusterd_auth_set_password (new_volinfo, password);
*dup_volinfo = new_volinfo;
out:
+ if (ret)
+ GF_FREE (new_volinfo);
+
return ret;
}
@@ -1504,12 +1527,12 @@ glusterd_snap_volume_start_glusterfs (glusterd_volinfo_t *volinfo,
priv = this->private;
GF_ASSERT (priv);
- ret = _mk_snap_rundir_p (volinfo, snap_volinfo);
+ ret = _mk_rundir_p (volinfo);
if (ret)
goto out;
GLUSTERD_GET_SNAP_BRICK_PIDFILE (pidfile, volinfo,
- snap_volinfo->volname, brickinfo,
- priv);
+ snap_volinfo->volname,
+ brickinfo, priv);
if (glusterd_is_service_running (pidfile, NULL))
goto connect;
@@ -1596,12 +1619,12 @@ glusterd_snap_volume_start_glusterfs (glusterd_volinfo_t *volinfo,
runner_argprintf (&runner, "%d,%d", port, rdma_port);
runner_add_arg (&runner, "--xlator-option");
runner_argprintf (&runner, "%s-server.transport.rdma.listen-port=%d",
- volinfo->volname, rdma_port);
+ snap_volinfo->volname, rdma_port);
}
runner_add_arg (&runner, "--xlator-option");
runner_argprintf (&runner, "%s-server.listen-port=%d",
- volinfo->volname, port);
+ snap_volinfo->volname, port);
if (volinfo->memory_accounting)
runner_add_arg (&runner, "--mem-accounting");
@@ -4403,16 +4426,38 @@ glusterd_restart_bricks (glusterd_conf_t *conf)
glusterd_brickinfo_t *brickinfo = NULL;
gf_boolean_t start_nodesvcs = _gf_false;
int ret = 0;
+ glusterd_snap_t *snap = NULL;
+ glusterd_volinfo_t *snap_volume = NULL;
list_for_each_entry (volinfo, &conf->volumes, vol_list) {
if (volinfo->status != GLUSTERD_STATUS_STARTED)
continue;
+ if (volinfo->is_snap_volume)
+ continue;
start_nodesvcs = _gf_true;
+ gf_log (THIS->name, GF_LOG_DEBUG, "starting the volume %s",
+ volinfo->volname);
list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
glusterd_brick_start (volinfo, brickinfo, _gf_false);
}
}
+ list_for_each_entry (volinfo, &conf->volumes, vol_list) {
+ if (volinfo->is_snap_volume)
+ continue;
+ list_for_each_entry (snap, &volinfo->snaps, snap_list) {
+ snap_volume = snap->snap_volume;
+ GF_ASSERT (snap_volume);
+ list_for_each_entry (brickinfo, &snap_volume->bricks,
+ brick_list) {
+ glusterd_snap_brick_start (volinfo, snap_volume,
+ brickinfo, _gf_false);
+ }
+ }
+ }
+
+ //TODO: start consistency groups also
+
if (start_nodesvcs)
glusterd_nodesvcs_handle_graph_change (NULL);
@@ -7650,6 +7695,9 @@ glusterd_snap_use_rsp_dict (dict_t *dst, dict_t *src)
}
break;
default:
+ // copy the response dictinary's contents to the dict to be
+ // sent back to the cli
+ dict_copy (src, dst);
break;
}