X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Flnetctl.c;h=504e189dd5d52e2a4f06f6ac265c5e11f02d7a88;hb=c3a836364892cacbc4737645893b094971c6ec49;hp=e6e4255aadca1769652dec0c3273aee5698af20d;hpb=c0ad398fd71610c42b7ed06f8d2ca722daa01391;p=fs%2Flustre-release.git diff --git a/lnet/utils/lnetctl.c b/lnet/utils/lnetctl.c index e6e4255..504e189 100644 --- a/lnet/utils/lnetctl.c +++ b/lnet/utils/lnetctl.c @@ -48,6 +48,7 @@ static int jt_show_net(int argc, char **argv); static int jt_show_routing(int argc, char **argv); static int jt_show_stats(int argc, char **argv); static int jt_show_peer(int argc, char **argv); +static int jt_show_recovery(int argc, char **argv); static int jt_show_global(int argc, char **argv); static int jt_set_tiny(int argc, char **argv); static int jt_set_small(int argc, char **argv); @@ -55,6 +56,7 @@ static int jt_set_large(int argc, char **argv); static int jt_set_numa(int argc, char **argv); static int jt_set_retry_count(int argc, char **argv); static int jt_set_transaction_to(int argc, char **argv); +static int jt_set_recov_intrv(int argc, char **argv); static int jt_set_hsensitivity(int argc, char **argv); static int jt_add_peer_nid(int argc, char **argv); static int jt_del_peer_nid(int argc, char **argv); @@ -72,6 +74,7 @@ static int jt_route(int argc, char **argv); static int jt_net(int argc, char **argv); static int jt_routing(int argc, char **argv); static int jt_set(int argc, char **argv); +static int jt_debug(int argc, char **argv); static int jt_stats(int argc, char **argv); static int jt_global(int argc, char **argv); static int jt_peers(int argc, char **argv); @@ -89,6 +92,7 @@ command_t cmd_list[] = { {"import", jt_import, 0, "import FILE.yaml"}, {"export", jt_export, 0, "export FILE.yaml"}, {"stats", jt_stats, 0, "stats {show | help}"}, + {"debug", jt_debug, 0, "debug recovery {local | peer}"}, {"global", jt_global, 0, "global {show | help}"}, {"peer", jt_peers, 0, "peer {add | del | show | help}"}, {"ping", jt_ping, 0, "ping nid,[nid,...]"}, @@ -159,6 +163,13 @@ command_t stats_cmds[] = { { 0, 0, 0, NULL } }; +command_t debug_cmds[] = { + {"recovery", jt_show_recovery, 0, "list recovery queues\n" + "\t--local : list local recovery queue\n" + "\t--peer : list peer recovery queue\n"}, + { 0, 0, 0, NULL } +}; + command_t global_cmds[] = { {"show", jt_show_global, 0, "show global variables\n"}, { 0, 0, 0, NULL } @@ -190,6 +201,8 @@ command_t set_cmds[] = { {"health_sensitivity", jt_set_hsensitivity, 0, "sensitivity to failure\n" "\t0 - turn off health evaluation\n" "\t>0 - sensitivity value not more than 1000\n"}, + {"recovery_interval", jt_set_recov_intrv, 0, "interval to ping in seconds (at least 1)\n" + "\t>0 - time in seconds between pings\n"}, { 0, 0, 0, NULL } }; @@ -348,6 +361,34 @@ static int jt_set_numa(int argc, char **argv) return rc; } +static int jt_set_recov_intrv(int argc, char **argv) +{ + long int value; + int rc; + struct cYAML *err_rc = NULL; + + rc = check_cmd(set_cmds, "set", "recovery_interval", 2, argc, argv); + if (rc) + return rc; + + rc = parse_long(argv[1], &value); + if (rc != 0) { + cYAML_build_error(-1, -1, "parser", "set", + "cannot parse recovery interval value", &err_rc); + cYAML_print_tree2file(stderr, err_rc); + cYAML_free_tree(err_rc); + return -1; + } + + rc = lustre_lnet_config_recov_intrv(value, -1, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) + cYAML_print_tree2file(stderr, err_rc); + + cYAML_free_tree(err_rc); + + return rc; +} + static int jt_set_hsensitivity(int argc, char **argv) { long int value; @@ -675,6 +716,8 @@ static int jt_add_route(int argc, char **argv) continue; } break; + case '?': + print_help(route_cmds, "route", "add"); default: return 0; } @@ -776,6 +819,8 @@ static int jt_add_ni(int argc, char **argv) strlen(optarg), 0, UINT_MAX, &global_cpts); break; + case '?': + print_help(net_cmds, "net", "add"); default: return 0; } @@ -831,6 +876,8 @@ static int jt_del_route(int argc, char **argv) case 'g': gateway = optarg; break; + case '?': + print_help(route_cmds, "route", "del"); default: return 0; } @@ -879,6 +926,8 @@ static int jt_del_ni(int argc, char **argv) goto out; } break; + case '?': + print_help(net_cmds, "net", "del"); default: return 0; } @@ -943,6 +992,8 @@ static int jt_show_route(int argc, char **argv) case 'v': detail = 1; break; + case '?': + print_help(route_cmds, "route", "show"); default: return 0; } @@ -971,10 +1022,10 @@ static int set_value_helper(int argc, char **argv, int rc, opt; struct cYAML *err_rc = NULL; - const char *const short_options = "h:n:a"; + const char *const short_options = "t:n:a"; static const struct option long_options[] = { { .name = "nid", .has_arg = required_argument, .val = 'n' }, - { .name = "health", .has_arg = required_argument, .val = 'h' }, + { .name = "health", .has_arg = required_argument, .val = 't' }, { .name = "all", .has_arg = no_argument, .val = 'a' }, { .name = NULL } }; @@ -988,12 +1039,13 @@ static int set_value_helper(int argc, char **argv, case 'n': nid = optarg; break; - case 'h': - if (parse_long(argv[optind++], &healthv) != 0) + case 't': + if (parse_long(optarg, &healthv) != 0) healthv = -1; break; case 'a': all = true; + break; default: return 0; } @@ -1019,6 +1071,46 @@ static int jt_set_peer_ni_value(int argc, char **argv) return set_value_helper(argc, argv, lustre_lnet_config_peer_ni_healthv); } +static int jt_show_recovery(int argc, char **argv) +{ + int rc, opt; + struct cYAML *err_rc = NULL, *show_rc = NULL; + + const char *const short_options = "lp"; + static const struct option long_options[] = { + { .name = "local", .has_arg = no_argument, .val = 'l' }, + { .name = "peer", .has_arg = no_argument, .val = 'p' }, + { .name = NULL } }; + + rc = check_cmd(debug_cmds, "recovery", NULL, 0, argc, argv); + if (rc) + return rc; + + while ((opt = getopt_long(argc, argv, short_options, + long_options, NULL)) != -1) { + switch (opt) { + case 'l': + rc = lustre_lnet_show_local_ni_recovq(-1, &show_rc, &err_rc); + break; + case 'p': + rc = lustre_lnet_show_peer_ni_recovq(-1, &show_rc, &err_rc); + break; + default: + return 0; + } + } + + if (rc != LUSTRE_CFG_RC_NO_ERR) + cYAML_print_tree2file(stderr, err_rc); + else if (show_rc) + cYAML_print_tree(show_rc); + + cYAML_free_tree(err_rc); + cYAML_free_tree(show_rc); + + return rc; +} + static int jt_show_net(int argc, char **argv) { char *network = NULL; @@ -1051,6 +1143,8 @@ static int jt_show_net(int argc, char **argv) detail = 1; } break; + case '?': + print_help(net_cmds, "net", "show"); default: return 0; } @@ -1159,6 +1253,12 @@ static int jt_show_global(int argc, char **argv) goto out; } + rc = lustre_lnet_show_recov_intrv(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + goto out; + } + if (show_rc) cYAML_print_tree(show_rc); @@ -1224,6 +1324,17 @@ static int jt_stats(int argc, char **argv) return Parser_execarg(argc - 1, &argv[1], stats_cmds); } +static int jt_debug(int argc, char **argv) +{ + int rc; + + rc = check_cmd(debug_cmds, "recovery", NULL, 2, argc, argv); + if (rc) + return rc; + + return Parser_execarg(argc - 1, &argv[1], debug_cmds); +} + static int jt_global(int argc, char **argv) { int rc; @@ -1507,6 +1618,8 @@ static int jt_add_peer_nid(int argc, char **argv) case 'm': non_mr = true; break; + case '?': + print_help(peer_cmds, "peer", "add"); default: return 0; } @@ -1594,6 +1707,8 @@ static int jt_del_peer_nid(int argc, char **argv) nids = nids2; rc = LUSTRE_CFG_RC_OUT_OF_MEM; break; + case '?': + print_help(peer_cmds, "peer", "del"); default: return 0; } @@ -1657,6 +1772,8 @@ static int jt_show_peer(int argc, char **argv) detail = 1; } break; + case '?': + print_help(peer_cmds, "peer", "show"); default: return 0; }