diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/src/cli-cmd-volume.c | 203 | ||||
-rw-r--r-- | cli/src/cli-cmd.h | 11 |
2 files changed, 0 insertions, 214 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 52b5adb6129..15f448b5ba2 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -187,154 +187,6 @@ out: return ret; } -gf_ai_compare_t -cli_cmd_compare_addrinfo (struct addrinfo *first, struct addrinfo *next) -{ - int ret = -1; - struct addrinfo *tmp1 = NULL; - struct addrinfo *tmp2 = NULL; - char firstip[NI_MAXHOST] = {0.}; - char nextip[NI_MAXHOST] = {0,}; - - for (tmp1 = first; tmp1 != NULL; tmp1 = tmp1->ai_next) { - ret = getnameinfo (tmp1->ai_addr, tmp1->ai_addrlen, firstip, - NI_MAXHOST, NULL, 0, NI_NUMERICHOST); - if (ret) - return GF_AI_COMPARE_ERROR; - for (tmp2 = next; tmp2 != NULL; tmp2 = tmp2->ai_next) { - ret = getnameinfo (tmp2->ai_addr, tmp2->ai_addrlen, nextip, - NI_MAXHOST, NULL, 0, NI_NUMERICHOST); - if (ret) - return GF_AI_COMPARE_ERROR; - if (!strcmp (firstip, nextip)) { - return GF_AI_COMPARE_MATCH; - } - } - } - return GF_AI_COMPARE_NO_MATCH; -} - -/* Check for non optimal brick order for replicate : - * Checks if bricks belonging to a replicate volume - * are present on the same server - */ -int32_t -cli_cmd_check_brick_order (struct cli_state *state, const char *bricks, - int brick_count, int sub_count) -{ - int ret = -1; - int i = 0; - int j = 0; - int k = 0; - addrinfo_list_t *ai_list = NULL; - addrinfo_list_t *ai_list_tmp1 = NULL; - addrinfo_list_t *ai_list_tmp2 = NULL; - char *brick = NULL; - char *brick_list = NULL; - char *brick_list_dup = NULL; - char *tmpptr = NULL; - struct addrinfo *ai_info = NULL; - gf_answer_t answer = GF_ANSWER_NO; - const char *failed_question = NULL; - const char *found_question = NULL; - failed_question = "Failed to perform brick order check. " - "Do you want to continue creating the volume? "; - found_question = "Multiple bricks of a replicate volume are present" - " on the same server. This setup is not optimal.\n" - "Do you still want to continue creating the volume? "; - - GF_ASSERT (bricks); - GF_ASSERT (brick_count > 0); - GF_ASSERT (sub_count > 0); - - ai_list = malloc (sizeof (addrinfo_list_t)); - ai_list->info = NULL; - INIT_LIST_HEAD (&ai_list->list); - brick_list = gf_strdup (bricks); - if (brick_list == NULL) { - gf_log ("cli", GF_LOG_DEBUG, "failed to allocate memory"); - goto check_failed; - } - brick_list_dup = brick_list; - /* Resolve hostnames and get addrinfo */ - while (i < brick_count) { - ++i; - brick = strtok_r (brick_list, " \n", &tmpptr); - brick_list = tmpptr; - if (brick == NULL) - goto check_failed; - brick = strtok_r (brick, ":", &tmpptr); - if (brick == NULL) - goto check_failed; - ret = getaddrinfo (brick, NULL, NULL, &ai_info); - if (ret) - goto check_failed; - ai_list_tmp1 = malloc (sizeof (addrinfo_list_t)); - if (ai_list_tmp1 == NULL) - goto check_failed; - ai_list_tmp1->info = ai_info; - list_add_tail (&ai_list_tmp1->list, &ai_list->list); - ai_list_tmp1 = NULL; - } - - i = 0; - ai_list_tmp1 = list_entry (ai_list->list.next, addrinfo_list_t, list); - - /* Check for bad brick order */ - while (i < brick_count) { - ++i; - ai_info = ai_list_tmp1->info; - ai_list_tmp1 = list_entry (ai_list_tmp1->list.next, - addrinfo_list_t, list); - if ( 0 == i % sub_count) { - j = 0; - continue; - } - ai_list_tmp2 = ai_list_tmp1; - k = j; - while (k < sub_count - 1) { - ++k; - ret = cli_cmd_compare_addrinfo (ai_info, - ai_list_tmp2->info); - if (GF_AI_COMPARE_ERROR == ret) - goto check_failed; - if (GF_AI_COMPARE_MATCH == ret) - goto found_bad_brick_order; - ai_list_tmp2 = list_entry (ai_list_tmp2->list.next, - addrinfo_list_t, list); - } - ++j; - } - gf_log ("cli", GF_LOG_INFO, "Brick order okay"); - ret = 0; - goto out; - -check_failed: - gf_log ("cli", GF_LOG_INFO, "Failed bad brick order check"); - answer = cli_cmd_get_confirmation(state, failed_question); - if (GF_ANSWER_YES == answer) - ret = 0; - goto out; - -found_bad_brick_order: - gf_log ("cli", GF_LOG_INFO, "Bad brick order found"); - answer = cli_cmd_get_confirmation (state, found_question); - if (GF_ANSWER_YES == answer) - ret = 0; -out: - ai_list_tmp2 = NULL; - i = 0; - GF_FREE (brick_list_dup); - list_for_each_entry (ai_list_tmp1, &ai_list->list, list) { - if (ai_list_tmp1->info) - freeaddrinfo (ai_list_tmp1->info); - free (ai_list_tmp2); - ai_list_tmp2 = ai_list_tmp1; - } - free (ai_list_tmp2); - return ret; -} - int cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word, const char **words, int wordcount) @@ -369,61 +221,6 @@ cli_cmd_volume_create_cbk (struct cli_state *state, struct cli_cmd_word *word, parse_error = 1; goto out; } - /*Check brick order if type is replicate*/ - ret = dict_get_int32 (options, "type", &type); - if (ret) { - gf_log ("cli", GF_LOG_ERROR, "Could not get brick type"); - goto out; - } - if ((type == GF_CLUSTER_TYPE_REPLICATE) || - (type == GF_CLUSTER_TYPE_STRIPE_REPLICATE) || - (type == GF_CLUSTER_TYPE_DISPERSE)) { - if ((ret = dict_get_str (options, "bricks", - &brick_list)) != 0) { - gf_log ("cli", GF_LOG_ERROR, "Bricks check : Could " - "not retrieve bricks " - "list"); - goto out; - } - if ((ret = dict_get_int32 (options, "count", - &brick_count)) != 0) { - gf_log ("cli", GF_LOG_ERROR, "Bricks check : Could " - "not retrieve brick " - "count"); - goto out; - } - - if (type != GF_CLUSTER_TYPE_DISPERSE) { - if ((ret = dict_get_int32 (options, "replica-count", - &sub_count)) != 0) { - gf_log ("cli", GF_LOG_ERROR, "Bricks check : " - "Could not retrieve " - "replica count"); - goto out; - } - gf_log ("cli", GF_LOG_INFO, "Replicate cluster type found." - " Checking brick order."); - } else { - ret = dict_get_int32 (options, "disperse-count", - &sub_count); - if (ret) { - gf_log ("cli", GF_LOG_ERROR, "Bricks check : " - "Could not retrieve " - "disperse count"); - goto out; - } - gf_log ("cli", GF_LOG_INFO, "Disperse cluster type found. " - "Checking brick order."); - } - ret = cli_cmd_check_brick_order (state, brick_list, - brick_count, sub_count); - if (ret) { - gf_log("cli", GF_LOG_INFO, "Not creating volume " - "because of bad brick " - "order"); - goto out; - } - } ret = dict_get_str (options, "transport", &trans_type); if (ret) { diff --git a/cli/src/cli-cmd.h b/cli/src/cli-cmd.h index 91d15b7e170..cf036928ddf 100644 --- a/cli/src/cli-cmd.h +++ b/cli/src/cli-cmd.h @@ -74,17 +74,6 @@ typedef struct cli_profile_info_ { double percentage_avg_latency; } cli_profile_info_t; -typedef struct addrinfo_list { - struct list_head list; - struct addrinfo *info; -} addrinfo_list_t; - -typedef enum { - GF_AI_COMPARE_NO_MATCH = 0, - GF_AI_COMPARE_MATCH = 1, - GF_AI_COMPARE_ERROR = 2 -} gf_ai_compare_t; - typedef struct cli_cmd_volume_get_ctx_ cli_cmd_volume_get_ctx_t; int cli_cmd_volume_register (struct cli_state *state); |