diff options
Diffstat (limited to 'xlators/mgmt/glusterd')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-hooks.c | 40 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 196 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.h | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 9 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-sm.c | 12 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 6 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 31 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.h | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 6 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 107 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 3 |
11 files changed, 367 insertions, 51 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-hooks.c b/xlators/mgmt/glusterd/src/glusterd-hooks.c index fa9cff711ad..e3c2ee0ad78 100644 --- a/xlators/mgmt/glusterd/src/glusterd-hooks.c +++ b/xlators/mgmt/glusterd/src/glusterd-hooks.c @@ -157,6 +157,34 @@ glusterd_hooks_add_hooks_version (runner_t* runner) runner_argprintf (runner, "--version=%d", GLUSTERD_HOOK_VER); } +static void +glusterd_hooks_add_custom_args (dict_t *dict, runner_t *runner) +{ + char *hooks_args = NULL; + int32_t ret = -1; + xlator_t *this = NULL; + + this = THIS; + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + GF_VALIDATE_OR_GOTO (this->name, dict, out); + GF_VALIDATE_OR_GOTO (this->name, runner, out); + + ret = dict_get_str (dict, "hooks_args", &hooks_args); + if (ret) + gf_log (this->name, GF_LOG_DEBUG, + "No Hooks Arguments."); + else + gf_log (this->name, GF_LOG_DEBUG, + "Hooks Args = %s", hooks_args); + + if (hooks_args) + runner_argprintf (runner, "%s", hooks_args); + +out: + return; +} + + int glusterd_hooks_set_volume_args (dict_t *dict, runner_t *runner) { @@ -191,6 +219,8 @@ glusterd_hooks_set_volume_args (dict_t *dict, runner_t *runner) runner_argprintf (runner, "%s=%s", key, value); } + glusterd_hooks_add_custom_args (dict, runner); + ret = 0; out: return ret; @@ -258,15 +288,7 @@ glusterd_hooks_add_op_args (runner_t *runner, glusterd_op_t op, break; case GD_OP_GSYNC_CREATE: - ret = dict_get_str (op_ctx, "hooks_args", &hooks_args); - if (ret) - gf_log ("", GF_LOG_DEBUG, - "No Hooks Arguments."); - else - gf_log ("", GF_LOG_DEBUG, - "Hooks Args = %s", hooks_args); - if (hooks_args) - runner_argprintf (runner, "%s", hooks_args); + glusterd_hooks_add_custom_args (op_ctx, runner); break; case GD_OP_ADD_BRICK: diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index d22b0c571db..01244409146 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -51,11 +51,36 @@ #include <signal.h> #include <sys/wait.h> +extern char ss_brick_path[PATH_MAX]; +extern char local_node_hostname[PATH_MAX]; +static int +glusterd_set_shared_storage (dict_t *dict, char *key, char *value, + char **op_errstr); + +/* Valid options for all volumes to be listed in the * + * valid_all_vol_opts table. To add newer options to * + * all volumes, we can just add more entries to this * + * table * + */ +glusterd_all_vol_opts valid_all_vol_opts[] = { + { GLUSTERD_QUORUM_RATIO_KEY }, + { GLUSTERD_SHARED_STORAGE_KEY }, + { NULL }, +}; + #define ALL_VOLUME_OPTION_CHECK(volname, key, ret, op_errstr, label) \ do { \ - gf_boolean_t _all = !strcmp ("all", volname); \ - gf_boolean_t _ratio = !strcmp (key, \ - GLUSTERD_QUORUM_RATIO_KEY); \ + gf_boolean_t _all = !strcmp ("all", volname); \ + gf_boolean_t _ratio = _gf_false; \ + int32_t i = 0; \ + \ + for (i = 0; valid_all_vol_opts[i].option; i++) { \ + if (!strcmp (key, valid_all_vol_opts[i].option)) { \ + _ratio = _gf_true; \ + break; \ + } \ + } \ + \ if (_all && !_ratio) { \ ret = -1; \ *op_errstr = gf_strdup ("Not a valid option for all " \ @@ -678,6 +703,71 @@ out: } static int +glusterd_validate_shared_storage (char *key, char *value, char *errstr) +{ + int32_t ret = -1; + int32_t exists = -1; + int32_t count = -1; + xlator_t *this = NULL; + + this = THIS; + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + GF_VALIDATE_OR_GOTO (this->name, key, out); + GF_VALIDATE_OR_GOTO (this->name, value, out); + GF_VALIDATE_OR_GOTO (this->name, errstr, out); + + ret = 0; + + if (strcmp (key, GLUSTERD_SHARED_STORAGE_KEY)) { + goto out; + } + + if ((strcmp (value, "enable")) && + (strcmp (value, "disable"))) { + snprintf (errstr, PATH_MAX, + "Invalid option(%s). Valid options " + "are 'enable' and 'disable'", value); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + ret = -1; + goto out; + } + + if (strcmp (value, "enable")) { + goto out; + } + + exists = glusterd_check_volume_exists (GLUSTER_SHARED_STORAGE); + if (exists) { + snprintf (errstr, PATH_MAX, + "Shared storage volume("GLUSTER_SHARED_STORAGE + ") already exists."); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + ret = -1; + goto out; + } + + ret = glusterd_count_connected_peers (&count); + if (ret) { + snprintf (errstr, PATH_MAX, + "Failed to calculate number of connected peers."); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + goto out; + } + + if (count <= 1) { + snprintf (errstr, PATH_MAX, + "More than one node should " + "be up/present in the cluster to enable this option"); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + ret = -1; + goto out; + } + +out: + return ret; +} + +static int glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr) { int ret = -1; @@ -692,7 +782,7 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr) int trash_path_len = 0; int count = 0; int dict_count = 0; - char errstr[2048] = {0, }; + char errstr[PATH_MAX] = {0, }; glusterd_volinfo_t *volinfo = NULL; glusterd_brickinfo_t *brickinfo = NULL; dict_t *val_dict = NULL; @@ -996,6 +1086,14 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr) } } + ret = glusterd_validate_shared_storage (key, value, errstr); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Failed to validate shared " + "storage volume options"); + goto out; + } + if (!strcmp(key, "features.trash-dir") && trash_enabled) { if (strchr (value, '/')) { snprintf (errstr, sizeof (errstr), @@ -1921,7 +2019,8 @@ out: } static int -glusterd_op_set_all_volume_options (xlator_t *this, dict_t *dict) +glusterd_op_set_all_volume_options (xlator_t *this, dict_t *dict, + char **op_errstr) { char *key = NULL; char *key_fixed = NULL; @@ -1945,6 +2044,7 @@ glusterd_op_set_all_volume_options (xlator_t *this, dict_t *dict) "invalid key,value pair in 'volume set'"); goto out; } + ret = glusterd_check_option_exists (key, &key_fixed); if (ret <= 0) { gf_log (this->name, GF_LOG_ERROR, "Invalid key %s", key); @@ -1955,6 +2055,13 @@ glusterd_op_set_all_volume_options (xlator_t *this, dict_t *dict) if (key_fixed) key = key_fixed; + ret = glusterd_set_shared_storage (dict, key, value, op_errstr); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Failed to set shared storage option"); + goto out; + } + /* If the key is cluster.op-version, set conf->op_version to the value * if needed and save it. */ @@ -2033,6 +2140,82 @@ out: } static int +glusterd_set_shared_storage (dict_t *dict, char *key, char *value, + char **op_errstr) +{ + int32_t ret = -1; + int32_t exists = -1; + int32_t count = -1; + char hooks_args[PATH_MAX] = {0, }; + char errstr[PATH_MAX] = {0, }; + xlator_t *this = NULL; + + this = THIS; + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + GF_VALIDATE_OR_GOTO (this->name, dict, out); + GF_VALIDATE_OR_GOTO (this->name, key, out); + GF_VALIDATE_OR_GOTO (this->name, value, out); + GF_VALIDATE_OR_GOTO (this->name, op_errstr, out); + + ret = 0; + + if (strcmp (key, GLUSTERD_SHARED_STORAGE_KEY)) { + goto out; + } + + /* Re-create the brick path so as to be * + * able to re-use it * + */ + ret = recursive_rmdir (ss_brick_path); + if (ret) { + snprintf (errstr, PATH_MAX, + "Failed to remove shared " + "storage brick(%s). " + "Reason: %s", ss_brick_path, + strerror (errno)); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + ret = -1; + goto out; + } + + ret = mkdir_p (ss_brick_path, 0777, _gf_true); + if (-1 == ret) { + snprintf (errstr, PATH_MAX, + "Failed to create shared " + "storage brick(%s). " + "Reason: %s", ss_brick_path, + strerror (errno)); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + goto out; + } + + if (is_origin_glusterd (dict)) { + snprintf(hooks_args, sizeof(hooks_args), + "is_originator=1,local_node_hostname=%s", + local_node_hostname); + } else { + snprintf(hooks_args, sizeof(hooks_args), + "is_originator=0,local_node_hostname=%s", + local_node_hostname); + } + + ret = dict_set_dynstr_with_alloc (dict, "hooks_args", hooks_args); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to set" + " hooks_args in dict."); + goto out; + } + +out: + if (ret && strlen(errstr)) { + *op_errstr = gf_strdup (errstr); + } + + return ret; +} + + +static int glusterd_op_set_volume (dict_t *dict, char **errstr) { int ret = 0; @@ -2086,7 +2269,8 @@ glusterd_op_set_volume (dict_t *dict, char **errstr) } if (strcasecmp (volname, "all") == 0) { - ret = glusterd_op_set_all_volume_options (this, dict); + ret = glusterd_op_set_all_volume_options (this, dict, + &op_errstr); goto out; } diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.h b/xlators/mgmt/glusterd/src/glusterd-op-sm.h index 749e3806ca6..42b4252c73b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.h +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.h @@ -163,6 +163,10 @@ typedef enum cli_cmd_type_ { ALL_HEAL_XL, } cli_cmd_type; +typedef struct glusterd_all_volume_options { + char *option; +} glusterd_all_vol_opts; + int glusterd_op_sm_new_event (glusterd_op_sm_event_type_t event_type, glusterd_op_sm_event_t **new_event); diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 447fce561c0..098e489d7ae 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -1467,6 +1467,15 @@ glusterd_rpc_friend_add (call_frame_t *frame, xlator_t *this, goto out; } + ret = dict_set_dynstr_with_alloc (peer_data, + "hostname_in_cluster", + peerinfo->hostname); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Unable to add hostname of the peer"); + goto out; + } + if (priv->op_version >= GD_OP_VERSION_3_6_0) { ret = glusterd_add_missed_snaps_to_export_dict (peer_data); if (ret) { diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c index cabe4335416..a3de0c30ac4 100644 --- a/xlators/mgmt/glusterd/src/glusterd-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-sm.c @@ -34,6 +34,8 @@ #include "glusterd-snapshot-utils.h" #include "glusterd-server-quorum.h" +char local_node_hostname[PATH_MAX] = {0, }; + static struct cds_list_head gd_friend_sm_queue; static char *glusterd_friend_sm_state_names[] = { @@ -729,6 +731,7 @@ glusterd_ac_handle_friend_add_req (glusterd_friend_sm_event_t *event, void *ctx) int32_t op_ret = -1; int32_t op_errno = 0; xlator_t *this = NULL; + char *hostname = NULL; this = THIS; GF_ASSERT (this); @@ -833,6 +836,15 @@ glusterd_ac_handle_friend_add_req (glusterd_friend_sm_event_t *event, void *ctx) new_event->ctx = new_ev_ctx; + ret = dict_get_str (ev_ctx->vols, "hostname_in_cluster", + &hostname); + if (ret || !hostname) { + gf_log (this->name, GF_LOG_DEBUG, + "Unable to fetch local hostname from peer"); + } else + strncpy (local_node_hostname, hostname, + sizeof(local_node_hostname)); + glusterd_friend_sm_inject_event (new_event); new_event = NULL; diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index ce63bd2079b..7825031f706 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -62,7 +62,7 @@ #include "lvm-defaults.h" -char snap_mount_folder[PATH_MAX]; +char snap_mount_dir[PATH_MAX]; struct snap_create_args_ { xlator_t *this; dict_t *dict; @@ -4604,7 +4604,7 @@ glusterd_snap_brick_create (glusterd_volinfo_t *snap_volinfo, GF_ASSERT (brickinfo); snprintf (snap_brick_mount_path, sizeof (snap_brick_mount_path), - "%s/%s/brick%d", snap_mount_folder, snap_volinfo->volname, + "%s/%s/brick%d", snap_mount_dir, snap_volinfo->volname, brick_count + 1); ret = mkdir_p (snap_brick_mount_path, 0777, _gf_true); @@ -4794,7 +4794,7 @@ glusterd_add_brick_to_snap_volume (dict_t *dict, dict_t *rsp_dict, * <snap-uuid>/<original-brick#>/snap-brick-dir * */ snprintf (snap_brick_path, sizeof(snap_brick_path), - "%s/%s/brick%d%s", snap_mount_folder, + "%s/%s/brick%d%s", snap_mount_dir, snap_vol->volname, brick_count+1, snap_brick_dir); diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 0ff70bdfd78..5e99ee99550 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -9759,3 +9759,34 @@ glusterd_disallow_op_for_tier (glusterd_volinfo_t *volinfo, glusterd_op_t op, out: return ret; } + +int32_t +glusterd_count_connected_peers (int32_t *count) +{ + glusterd_peerinfo_t *peerinfo = NULL; + glusterd_conf_t *conf = NULL; + int32_t ret = -1; + xlator_t *this = NULL; + + this = THIS; + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + conf = this->private; + GF_VALIDATE_OR_GOTO (this->name, conf, out); + GF_VALIDATE_OR_GOTO (this->name, count, out); + + *count = 1; + + rcu_read_lock (); + cds_list_for_each_entry_rcu (peerinfo, &conf->peers, uuid_list) { + /* Find peer who is connected and is a friend */ + if ((peerinfo->connected) && + (peerinfo->state.state == GD_FRIEND_STATE_BEFRIENDED)) { + (*count)++; + } + } + rcu_read_unlock (); + + ret = 0; +out: + return ret; +} diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 57eecca8fb1..69f16a29edc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -657,4 +657,8 @@ glusterd_defrag_rpc_get (glusterd_defrag_info_t *defrag); struct rpc_clnt* glusterd_defrag_rpc_put (glusterd_defrag_info_t *defrag); + +int32_t +glusterd_count_connected_peers (int32_t *count); + #endif diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index ec107b55bf7..3e49fab37d4 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -1740,6 +1740,12 @@ struct volopt_map_entry glusterd_volopt_map[] = { .voltype = "features/trash", .op_version = GD_OP_VERSION_3_7_0, }, + { .key = GLUSTERD_SHARED_STORAGE_KEY, + .voltype = "mgmt/glusterd", + .value = "disable", + .type = GLOBAL_DOC, + .op_version = GD_OP_VERSION_3_7_1, + }, #if USE_GFDB /* no GFDB means tiering is disabled */ /* tier translator - global tunables */ diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 5bdeb753f4a..407089af493 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -62,7 +62,8 @@ extern struct rpcsvc_program gd_svc_cli_trusted_progs; extern struct rpc_clnt_program gd_brick_prog; extern struct rpcsvc_program glusterd_mgmt_hndsk_prog; -extern char snap_mount_folder[PATH_MAX]; +extern char snap_mount_dir[PATH_MAX]; +char ss_brick_path[PATH_MAX]; rpcsvc_cbk_program_t glusterd_cbk_prog = { .progname = "Gluster Callback", @@ -1115,18 +1116,18 @@ glusterd_stop_uds_listener (xlator_t *this) } static int -glusterd_init_snap_folder (xlator_t *this) +glusterd_find_correct_var_run_dir (xlator_t *this, char *var_run_dir) { int ret = -1; struct stat buf = {0,}; - GF_ASSERT (this); + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + GF_VALIDATE_OR_GOTO (this->name, var_run_dir, out); - /* Snapshot volumes are mounted under /var/run/gluster/snaps folder. - * But /var/run is normally a symbolic link to /run folder, which + /* /var/run is normally a symbolic link to /run dir, which * creates problems as the entry point in the mtab for the mount point * and glusterd maintained entry point will be different. Therefore - * identify the correct run folder and use it for snap volume mounting. + * identify the correct run dir and use it */ ret = lstat (GLUSTERD_VAR_RUN_DIR, &buf); if (ret != 0) { @@ -1136,20 +1137,38 @@ glusterd_init_snap_folder (xlator_t *this) goto out; } - /* If /var/run is symlink then use /run folder */ + /* If /var/run is symlink then use /run dir */ if (S_ISLNK (buf.st_mode)) { - strcpy (snap_mount_folder, GLUSTERD_RUN_DIR); + strcpy (var_run_dir, GLUSTERD_RUN_DIR); } else { - strcpy (snap_mount_folder, GLUSTERD_VAR_RUN_DIR); + strcpy (var_run_dir, GLUSTERD_VAR_RUN_DIR); } - strcat (snap_mount_folder, GLUSTERD_DEFAULT_SNAPS_BRICK_DIR); + ret = 0; +out: + return ret; +} + +static int +glusterd_init_var_run_dirs (xlator_t *this, char *var_run_dir, + char *dir_to_be_created) +{ + int ret = -1; + struct stat buf = {0,}; + char abs_path[PATH_MAX] = {0, }; + + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + GF_VALIDATE_OR_GOTO (this->name, var_run_dir, out); + GF_VALIDATE_OR_GOTO (this->name, dir_to_be_created, out); + + snprintf (abs_path, sizeof(abs_path), "%s%s", + var_run_dir, dir_to_be_created); - ret = stat (snap_mount_folder, &buf); + ret = stat (abs_path, &buf); if ((ret != 0) && (ENOENT != errno)) { gf_log (this->name, GF_LOG_ERROR, "stat fails on %s, exiting. (errno = %d)", - snap_mount_folder, errno); + abs_path, errno); ret = -1; goto out; } @@ -1157,19 +1176,19 @@ glusterd_init_snap_folder (xlator_t *this) if ((!ret) && (!S_ISDIR(buf.st_mode))) { gf_log (this->name, GF_LOG_CRITICAL, "Provided snap path %s is not a directory," - "exiting", snap_mount_folder); + "exiting", abs_path); ret = -1; goto out; } if ((-1 == ret) && (ENOENT == errno)) { - /* Create missing folders */ - ret = mkdir_p (snap_mount_folder, 0777, _gf_true); + /* Create missing dirs */ + ret = mkdir_p (abs_path, 0777, _gf_true); if (-1 == ret) { gf_log (this->name, GF_LOG_CRITICAL, "Unable to create directory %s" - " ,errno = %d", snap_mount_folder, errno); + " ,errno = %d", abs_path, errno); goto out; } } @@ -1246,21 +1265,22 @@ out: int init (xlator_t *this) { - int32_t ret = -1; - rpcsvc_t *rpc = NULL; - rpcsvc_t *uds_rpc = NULL; - glusterd_conf_t *conf = NULL; - data_t *dir_data = NULL; - struct stat buf = {0,}; - char storedir [PATH_MAX] = {0,}; - char workdir [PATH_MAX] = {0,}; - char cmd_log_filename [PATH_MAX] = {0,}; - int first_time = 0; - char *mountbroker_root = NULL; - int i = 0; - int total_transport = 0; - char *valgrind_str = NULL; - char *transport_type = NULL; + int32_t ret = -1; + rpcsvc_t *rpc = NULL; + rpcsvc_t *uds_rpc = NULL; + glusterd_conf_t *conf = NULL; + data_t *dir_data = NULL; + struct stat buf = {0,}; + char storedir[PATH_MAX] = {0,}; + char workdir[PATH_MAX] = {0,}; + char cmd_log_filename[PATH_MAX] = {0,}; + int first_time = 0; + char *mountbroker_root = NULL; + int i = 0; + int total_transport = 0; + char *valgrind_str = NULL; + char *transport_type = NULL; + char var_run_dir[PATH_MAX] = {0,}; #ifndef GF_DARWIN_HOST_OS { @@ -1322,14 +1342,35 @@ init (xlator_t *this) gf_log (this->name, GF_LOG_INFO, "Using %s as working directory", workdir); - ret = glusterd_init_snap_folder (this); + ret = glusterd_find_correct_var_run_dir (this, var_run_dir); + if (ret) { + gf_log (this->name, GF_LOG_CRITICAL, "Unable to find " + "the correct var run dir"); + exit (1); + } + + ret = glusterd_init_var_run_dirs (this, var_run_dir, + GLUSTERD_DEFAULT_SNAPS_BRICK_DIR); + if (ret) { + gf_log (this->name, GF_LOG_CRITICAL, "Unable to create " + "snap backend dir"); + exit (1); + } + snprintf (snap_mount_dir, sizeof(snap_mount_dir), "%s%s", + var_run_dir, GLUSTERD_DEFAULT_SNAPS_BRICK_DIR); + + ret = glusterd_init_var_run_dirs (this, var_run_dir, + GLUSTER_SHARED_STORAGE_BRICK_DIR); if (ret) { gf_log (this->name, GF_LOG_CRITICAL, "Unable to create " - "snap backend folder"); + "shared storage brick"); exit (1); } + snprintf (ss_brick_path, sizeof(ss_brick_path), "%s%s", + var_run_dir, GLUSTER_SHARED_STORAGE_BRICK_DIR); + snprintf (cmd_log_filename, PATH_MAX, "%s/cmd_history.log", DEFAULT_LOG_FILE_DIRECTORY); ret = gf_cmd_log_init (cmd_log_filename); diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index a4b0bfdf1a1..7e3c8129a94 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -47,6 +47,8 @@ #define GEO_CONF_MAX_OPT_VALS 6 #define GLUSTERD_CREATE_HOOK_SCRIPT "/hooks/1/gsync-create/post/" \ "S56glusterd-geo-rep-create-post.sh" +#define GLUSTER_SHARED_STORAGE "gluster_shared_storage" +#define GLUSTERD_SHARED_STORAGE_KEY "cluster.enable-shared-storage" #define GANESHA_HA_CONF CONFDIR "/ganesha-ha.conf" #define GLUSTERD_SNAPS_MAX_HARD_LIMIT 256 @@ -507,6 +509,7 @@ typedef enum { #define GLUSTERD_VOL_SNAP_DIR_PREFIX "snaps" #define GLUSTERD_DEFAULT_SNAPS_BRICK_DIR "/gluster/snaps" +#define GLUSTER_SHARED_STORAGE_BRICK_DIR "/gluster/ss_brick" #define GLUSTERD_VAR_RUN_DIR "/var/run" #define GLUSTERD_RUN_DIR "/run" |