X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Flnetctl.c;h=2328d00b119fa77a7e4b2271d0181ad26149ab70;hb=3e5c6620fd0b0511498d14d38e8610d08f6da7b3;hp=b75f684aeabdbe998171951245d0ba516a586963;hpb=bf5c2d232f708e8ac1f7b2a123d9ba92bff672f1;p=fs%2Flustre-release.git diff --git a/lnet/utils/lnetctl.c b/lnet/utils/lnetctl.c index b75f684..2328d00 100644 --- a/lnet/utils/lnetctl.c +++ b/lnet/utils/lnetctl.c @@ -83,6 +83,8 @@ static int jt_peers(int argc, char **argv); static int jt_set_ni_value(int argc, char **argv); static int jt_set_peer_ni_value(int argc, char **argv); static int jt_calc_service_id(int argc, char **argv); +static int jt_set_response_tracking(int argc, char **argv); +static int jt_set_recovery_limit(int argc, char **argv); command_t cmd_list[] = { {"lnet", jt_lnet, 0, "lnet {configure | unconfigure} [--all]"}, @@ -91,7 +93,10 @@ command_t cmd_list[] = { {"routing", jt_routing, 0, "routing {show | help}"}, {"set", jt_set, 0, "set {tiny_buffers | small_buffers | large_buffers" " | routing | numa_range | max_interfaces" - " | discovery}"}, + " | discovery | drop_asym_route | retry_count" + " | transaction_timeout | health_sensitivity" + " | recovery_interval | router_sensitivity" + " | response_tracking | recovery_limit}"}, {"import", jt_import, 0, "import FILE.yaml"}, {"export", jt_export, 0, "export FILE.yaml"}, {"stats", jt_stats, 0, "stats {show | help}"}, @@ -216,14 +221,24 @@ command_t set_cmds[] = { {"router_sensitivity", jt_set_rtr_sensitivity, 0, "router sensitivity %\n" "\t100 - router interfaces need to be fully healthy to be used\n" "\t<100 - router interfaces can be used even if not healthy\n"}, + {"response_tracking", jt_set_response_tracking, 0, + "Set the behavior of response tracking\n" + "\t0 - Only LNet pings and discovery pushes utilize response tracking\n" + "\t1 - GETs are eligible for response tracking\n" + "\t2 - PUTs are eligible for response tracking\n" + "\t3 - Both PUTs and GETs are eligible for response tracking (default)\n" + "\tNote: Regardless of the value of the response_tracking parameter LNet\n" + "\t pings and discovery pushes always utilize response tracking\n"}, + {"recovery_limit", jt_set_recovery_limit, 0, + "Set how long LNet will attempt to recover unhealthy interfaces.\n" + "\t0 - Recover indefinitely (default)\n" + "\t>0 - Recover for the specified number of seconds.\n"}, { 0, 0, 0, NULL } }; command_t peer_cmds[] = { {"add", jt_add_peer_nid, 0, "add a peer NID\n" - "\t--prim_nid: Primary NID of the peer. If not provided then the first\n" - "\t NID in the list becomes the Primary NID of a newly created\n" - "\t peer. \n" + "\t--prim_nid: Primary NID of the peer.\n" "\t--nid: one or more peer NIDs\n" "\t--non_mr: create this peer as not Multi-Rail capable\n" "\t--ip2nets: specify a range of nids per peer"}, @@ -336,6 +351,64 @@ out: return rc; } +static int jt_set_response_tracking(int argc, char **argv) +{ + long int value; + int rc; + struct cYAML *err_rc = NULL; + + rc = check_cmd(set_cmds, "set", "response_tracking", 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 response_tracking value", + &err_rc); + cYAML_print_tree2file(stderr, err_rc); + cYAML_free_tree(err_rc); + return -1; + } + + rc = lustre_lnet_config_response_tracking(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_recovery_limit(int argc, char **argv) +{ + long int value; + int rc; + struct cYAML *err_rc = NULL; + + rc = check_cmd(set_cmds, "set", "recovery_limit", 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_limit value", + &err_rc); + cYAML_print_tree2file(stderr, err_rc); + cYAML_free_tree(err_rc); + return -1; + } + + rc = lustre_lnet_config_recovery_limit(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_max_intf(int argc, char **argv) { long int value; @@ -1376,6 +1449,18 @@ static int jt_show_global(int argc, char **argv) goto out; } + rc = lustre_lnet_show_response_tracking(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + goto out; + } + + rc = lustre_lnet_show_recovery_limit(-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); @@ -1669,6 +1754,56 @@ static int jt_export(int argc, char **argv) err_rc = NULL; } + rc = lustre_lnet_show_retry_count(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_transaction_to(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_hsensitivity(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_recov_intrv(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_rtr_sensitivity(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_lnd_timeout(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_response_tracking(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + cYAML_free_tree(err_rc); + err_rc = NULL; + } + + rc = lustre_lnet_show_recovery_limit(-1, &show_rc, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) { + cYAML_print_tree2file(stderr, err_rc); + cYAML_free_tree(err_rc); + err_rc = NULL; + } + if (show_rc != NULL) { cYAML_print_tree2file(f, show_rc); cYAML_free_tree(show_rc); @@ -1682,13 +1817,11 @@ static int jt_export(int argc, char **argv) static int jt_peer_nid_common(int argc, char **argv, int cmd) { - int rc = LUSTRE_CFG_RC_NO_ERR, opt, num_nids, num_nidstrs, i; + int rc = LUSTRE_CFG_RC_NO_ERR, opt; bool is_mr = true; char *prim_nid = NULL, *nidstr = NULL; char err_str[LNET_MAX_STR_LEN] = "Error"; - char *nidstrarray[LNET_MAX_STR_LEN]; struct cYAML *err_rc = NULL; - lnet_nid_t lnet_nidlist[LNET_MAX_NIDS_PER_PEER]; const char *const short_opts = "k:mn:"; const struct option long_opts[] = { @@ -1715,7 +1848,7 @@ static int jt_peer_nid_common(int argc, char **argv, int cmd) rc = LUSTRE_CFG_RC_BAD_PARAM; snprintf(err_str, LNET_MAX_STR_LEN, "Unrecognized option '-%c'", opt); - goto out; + goto build_error; } is_mr = false; break; @@ -1727,63 +1860,19 @@ static int jt_peer_nid_common(int argc, char **argv, int cmd) } } - if (!(nidstr || prim_nid)) { - rc = LUSTRE_CFG_RC_BAD_PARAM; - snprintf(err_str, LNET_MAX_STR_LEN, - "--prim_nid or --nid (or both) must be specified"); - goto out; - } - - if (!nidstr) { - /* We were only provided a primary nid */ - num_nids = 0; - if (cmd == LNETCTL_ADD_CMD) - rc = lustre_lnet_config_peer_nidlist(prim_nid, - lnet_nidlist, - num_nids, is_mr, - -1, &err_rc); - else - rc = lustre_lnet_del_peer_nidlist(prim_nid, - lnet_nidlist, - num_nids, -1, - &err_rc); - - goto out; - } - - rc = tokenize_nidstr(nidstr, &nidstrarray[0], err_str); - if (rc <= 0) + rc = lustre_lnet_modify_peer(prim_nid, nidstr, is_mr, cmd, + -1, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) goto out; - num_nidstrs = rc; - - for (i = 0; i < num_nidstrs; i++) { - rc = lustre_lnet_parse_nidstr(nidstrarray[i], lnet_nidlist, - LNET_MAX_NIDS_PER_PEER, err_str); - if (rc < 0) - goto out; - - num_nids = rc; - - if (cmd == LNETCTL_ADD_CMD) - rc = lustre_lnet_config_peer_nidlist(prim_nid, - lnet_nidlist, - num_nids, is_mr, - -1, &err_rc); - else - rc = lustre_lnet_del_peer_nidlist(prim_nid, - lnet_nidlist, - num_nids, -1, - &err_rc); - } +build_error: + cYAML_build_error(rc, -1, "peer", + cmd == LNETCTL_ADD_CMD ? "add" : "del", + err_str, &err_rc); out: - if (rc != LUSTRE_CFG_RC_NO_ERR) { - cYAML_build_error(rc, -1, "peer", - cmd == LNETCTL_ADD_CMD ? "add" : "del", - err_str, &err_rc); + if (rc != LUSTRE_CFG_RC_NO_ERR) cYAML_print_tree2file(stderr, err_rc); - } cYAML_free_tree(err_rc);