Whamcloud - gitweb
LU-9679 general: add missing spaces to folded strings.
[fs/lustre-release.git] / lustre / utils / lctl.c
index 4ed25e8..bbf262c 100644 (file)
@@ -54,6 +54,36 @@ static int jt_opt_ignore_errors(int argc, char **argv) {
         return 0;
 }
 
+static int jt_pcc_list_commands(int argc, char **argv);
+static int jt_pcc(int argc, char **argv);
+
+/**
+ * command_t pccdev_cmdlist - lctl pcc commands.
+ */
+command_t pccdev_cmdlist[] = {
+       { .pc_name = "add", .pc_func = jt_pcc_add,
+         .pc_help = "Add a PCC backend to a client.\n"
+               "usage: lctl pcc add <mntpath> <pccpath> [--param|-p <param>]\n"
+               "\tmntpath: Lustre mount point.\n"
+               "\tpccpath: Path of the PCC backend.\n"
+               "\tparam:   Setting parameters for PCC backend.\n" },
+       { .pc_name = "del", .pc_func = jt_pcc_del,
+         .pc_help = "Delete the specified PCC backend on a client.\n"
+               "usage: clt pcc del <mntpath> <pccpath>\n" },
+       { .pc_name = "clear", .pc_func = jt_pcc_clear,
+         .pc_help = "Remove all PCC backend on a client.\n"
+               "usage: lctl pcc clear <mntpath>\n" },
+       { .pc_name = "list", .pc_func = jt_pcc_list,
+         .pc_help = "List all PCC backends on a client.\n"
+               "usage: lctl pcc list <mntpath>\n" },
+       { .pc_name = "list-commands", .pc_func = jt_pcc_list_commands,
+         .pc_help = "list commands supported by lctl pcc"},
+       { .pc_name = "help", .pc_func = Parser_help, .pc_help = "help" },
+       { .pc_name = "exit", .pc_func = Parser_quit, .pc_help = "quit" },
+       { .pc_name = "quit", .pc_func = Parser_quit, .pc_help = "quit" },
+       { .pc_help = NULL }
+};
+
 command_t cmdlist[] = {
        /* Metacommands */
        {"===== metacommands =======", NULL, 0, "metacommands"},
@@ -84,13 +114,13 @@ command_t cmdlist[] = {
        {"===== network config =====", NULL, 0, "network config"},
        {"--net", jt_opt_net, 0, "run <command> after selecting network <net>\n"
         "usage: --net <tcp/o2ib/...> <command>"},
-       {"network", jt_ptl_network, 0, "configure LNET"
+       {"network", jt_ptl_network, 0, "configure LNET\n"
         "usage: network up|down"},
-       {"net", jt_ptl_network, 0, "configure LNET"
+       {"net", jt_ptl_network, 0, "configure LNET\n"
         "usage: net up|down"},
-       {"list_nids", jt_ptl_list_nids, 0, "list local NIDs"
+       {"list_nids", jt_ptl_list_nids, 0, "list local NIDs\n"
         "usage: list_nids [all]"},
-       {"which_nid", jt_ptl_which_nid, 0, "choose a NID"
+       {"which_nid", jt_ptl_which_nid, 0, "choose a NID\n"
         "usage: which_nid NID [NID...]"},
        {"replace_nids", jt_replace_nids, 0,
         "replace primary NIDs for a device\n"
@@ -321,7 +351,7 @@ command_t cmdlist[] = {
         "add a range to a nodemap\n"
         "usage: nodemap_del_range <nid_range>"},
        {"nodemap_modify", jt_nodemap_modify, 0,
-        "modify a nodemap parameters"
+        "modify a nodemap parameters\n"
         "usage: nodemap_modify nodemap_name param value"},
        {"nodemap_add_idmap", jt_nodemap_add_idmap, 0,
         "add a UID or GID mapping to a nodemap"},
@@ -349,6 +379,15 @@ command_t cmdlist[] = {
         "deregister an existing changelog user\n"
         "usage: --device <mdtname> changelog_deregister <id>"},
 
+       /* Persistent Client Cache (PCC) commands */
+       {"=== Persistent Client Cache ===", NULL, 0, "PCC user management"},
+       {"pcc", jt_pcc, pccdev_cmdlist,
+        "lctl commands used to interact with PCC features:\n"
+        "lctl pcc add    - add a PCC backend to a client\n"
+        "lctl pcc del    - delete a PCC backend on a client\n"
+        "lctl pcc clear  - remove all PCC backends on a client\n"
+        "lctl pcc list   - list all PCC backends on a client\n"},
+
        /* Device configuration commands */
        {"== device setup (these are not normally used post 1.4) ==",
                NULL, 0, "device config"},
@@ -483,45 +522,39 @@ command_t cmdlist[] = {
         "                   [-t | --type lfsck_type[,lfsck_type...]]\n"
         "                   [-w | --wait]"},
 #endif /* HAVE_SERVER_SUPPORT */
-       {"==== obsolete (DANGEROUS) ====", NULL, 0, "obsolete (DANGEROUS)"},
-       /* some test scripts still use these */
        {"cfg_device", jt_obd_device, 0,
         "set current device to <name>\n"
         "usage: device <name>"},
        {"recover", jt_obd_recover, 0,
         "try to restore a lost connection immediately\n"
         "usage: recover [MDC/OSC device]"},
-       /* saving for sanity 44a */
-       {"lov_getconfig", jt_obd_lov_getconfig, 0,
-        "read lov configuration from an mds device\n"
-        "usage: lov_getconfig <mountpoint>"},
        /* Llog operations */
        {"llog_catlist", jt_llog_catlist, 0,
-        "list all catalog logs on current device.\n"
+        "list all catalog files on current device.\n"
         "usage: llog_catlist"},
        {"llog_info", jt_llog_info, 0,
         "print log header information.\n"
-        "usage: llog_info <logname|[FID]>\n"
-        "       oid, ogr and ogen are hexadecimal."},
+        "usage: llog_info <logname|FID>\n"},
        {"llog_print", jt_llog_print, 0,
         "print log content information.\n"
-        "usage: llog_print <logname|[FID]> [start_index [end_index]]\n"
-        "       print all records from index 1 by default."},
+        "usage: llog_print <logname|FID> [--start <index>] [--end <index>j]\n"
+        "       print all records by default, or within given index range."},
+       {"llog_cancel", jt_llog_cancel, 0,
+        "cancel one record in specified log.\n"
+        "usage:llog_cancel <logname|FID> --log_idx <idx>\n"},
        {"llog_check", jt_llog_check, 0,
-        "print log content information.\n"
-        "usage: llog_check <logname|[FID]> [start_index] [end_index]\n"
+        "verify that log content is valid.\n"
+        "usage: llog_check <logname|FID> [--start <index>] [--end <index>j]\n"
         "       check all records from index 1 by default."},
-       {"llog_cancel", jt_llog_cancel, 0,
-        "cancel one record in log.\n"
-        "This command supports both positional and optional arguments\n"
-        "usage (positional args): "
-        "llog_cancel <catalog name|[FID]> [log id] <index>\n"
-        "usage (optional args): "
-        "llog_cancel --catalog <catalog id|catalog name> --log_id <log_id> "
-        "--log_idx <index>"},
        {"llog_remove", jt_llog_remove, 0,
         "remove one log from catalog or plain log, erase it from disk.\n"
-        "usage: llog_remove <catalog name|[FID]> <log id>"},
+        "usage: llog_remove <logname|FID> [--log_id <id>]"},
+       {"==== obsolete (DANGEROUS) ====", NULL, 0, "obsolete (DANGEROUS)"},
+       /* some test scripts still use these */
+       /* saving for sanity 44a */
+       {"lov_getconfig", jt_obd_lov_getconfig, 0,
+        "read lov configuration from an mds device\n"
+        "usage: lov_getconfig <mountpoint>"},
        /* network operations */
        {"add_interface", jt_ptl_add_interface, 0, "add interface entry\n"
         "usage: add_interface ip [netmask]"},
@@ -540,6 +573,55 @@ command_t cmdlist[] = {
        { 0, 0, 0, NULL }
 };
 
+/**
+ * jt_pcc_list_commands() - List lctl pcc commands.
+ * @argc: The count of command line arguments.
+ * @argv: Array of strings for command line arguments.
+ *
+ * This function lists lctl pcc commands defined in pccdev_cmdlist[].
+ *
+ * Return: 0 on success.
+ */
+static int jt_pcc_list_commands(int argc, char **argv)
+{
+       char buffer[81] = "";
+
+       Parser_list_commands(pccdev_cmdlist, buffer, sizeof(buffer),
+                            NULL, 0, 4);
+
+       return 0;
+}
+
+/**
+ * jt_pcc() - Parse and execute lctl pcc commands.
+ * @argc: The count of lctl pcc command line arguments.
+ * @argv: Array of strings for lctl pcc command line arguments.
+ *
+ * This function parses lfs pcc commands and performs the
+ * corresponding functions specified in pccdev_cmdlist[].
+ *
+ * Return: 0 on success or an error code on failure.
+ */
+static int jt_pcc(int argc, char **argv)
+{
+       char cmd[PATH_MAX];
+       int rc = 0;
+
+       setlinebuf(stdout);
+
+       Parser_init("lctl-pcc > ", pccdev_cmdlist);
+
+       snprintf(cmd, sizeof(cmd), "%s %s", program_invocation_short_name,
+                argv[0]);
+       program_invocation_short_name = cmd;
+       if (argc > 1)
+               rc = Parser_execarg(argc - 1, argv + 1, pccdev_cmdlist);
+       else
+               rc = Parser_commands();
+
+       return rc < 0 ? -rc : rc;
+}
+
 int lctl_main(int argc, char **argv)
 {
         int rc;