#include <getopt.h>
#include <string.h>
#include <mntent.h>
+#include <portals/api-support.h>
#include <portals/ptlctl.h>
#include <liblustre.h>
#include <linux/lustre_idl.h>
-#include <lustre/liblustreapi.h>
-#include <lustre/lustre_user.h>
+#include <linux/lustre_user.h>
#include "parser.h"
#include "obdctl.h"
+extern int op_find(char *path, struct obd_uuid *obduuid, int recursive,
+ int verbose, int quiet);
+extern int op_check(int type_num, char **obd_type_p, char *dir);
+extern int op_catinfo(char *dir, char *keyword, char *node_name);
+
/* all functions */
static int lfs_setstripe(int argc, char **argv);
+static int lfs_dirstripe(int argc, char **argv);
static int lfs_find(int argc, char **argv);
static int lfs_getstripe(int argc, char **argv);
static int lfs_osts(int argc, char **argv);
/* all avaialable commands */
command_t cmdlist[] = {
{"setstripe", lfs_setstripe, 0,
- "Create a new file with a specific striping pattern or\n"
- "Set the default striping pattern on an existing directory\n"
- "usage: setstripe <filename|dirname> <stripe size> <stripe start> <stripe count>\n"
+ "To create a new file with a specific striping pattern.\n"
+ "usage: setstripe <filename> <stripe size> <stripe start> <stripe count>\n"
"\tstripe size: Number of bytes in each stripe (0 default)\n"
"\tstripe start: OST index of first stripe (-1 default)\n"
- "\tstripe count: Number of OSTs to stripe over (0 default, -1 all)"},
+ "\tstripe count: Number of OSTs to stripe over (0 default)"},
+ {"dirstripe", lfs_dirstripe, 0,
+ "To create a new dir with a specific striping pattern.\n"
+ "usage: dirstripe <dirname> <stripe count> [<mds idx list>]\n"
+ "\tstripe count: Number of MDSes to stripe over (0 default)\n"
+ "\tmds idx list: List of MDS servers to contain the dir (not implemented)"},
+
{"find", lfs_find, 0,
- "To list the extended attributes for a given filename or files in a\n"
- "directory or recursively for all files in a directory tree.\n"
+ "To list the extended attributes for a given filename or files in a directory "
+ "or recursively for all files in a directory tree.\n"
"usage: find [--obd <uuid>] [--quiet | --verbose] [--recursive] <dir|file> ..."},
{"getstripe", lfs_getstripe, 0,
"To list the striping pattern for given filename.\n"
"usage:getstripe <filename>"},
{"check", lfs_check, 0,
- "Display the status of MDS or OSTs (as specified in the command)\n"
+ "Display the status of MDS or OSTs (as specified in the command) "
"or all the servers (MDS and OSTs).\n"
"usage: check <osts|mds|servers>"},
{"catinfo", lfs_catinfo, 0,
"Show information of specified type logs.\n"
- "usage: catinfo {keyword} [node name]\n"
- "\tkeywords are one of followings: config, deletions.\n"
- "\tnode name must be provided when use keyword config."},
+ "usage: catinfo <keyword> [node name]"
+ "keywords are one of followings: config, deletions.\n"
+ "client node name must be provided when use keyword config."},
{"osts", lfs_osts, 0, "osts"},
{"help", Parser_help, 0, "help"},
{"exit", Parser_quit, 0, "quit"},
return CMD_HELP;
}
- result = llapi_file_create(argv[1], st_size, st_offset, st_count, 0);
+ result = op_create_file(argv[1], st_size, st_offset, st_count);
if (result)
fprintf(stderr, "error: %s: create stripe file failed\n",
argv[0]);
return result;
}
+static int lfs_dirstripe(int argc, char **argv)
+{
+ int result;
+ int st_count;
+ char *end;
+
+ if (argc != 3)
+ return CMD_HELP;
+
+ // get the stripe size
+ st_count = strtoul(argv[2], &end, 0);
+ if (*end != '\0') {
+ fprintf(stderr, "error: %s: bad count '%s'\n",
+ argv[0], argv[2]);
+ return CMD_HELP;
+ }
+
+ result = op_create_dir(argv[1], st_count);
+ if (result)
+ fprintf(stderr, "error: %s: create stripe dir failed\n",
+ argv[0]);
+
+ return result;
+}
+
static int lfs_find(int argc, char **argv)
{
struct option long_opts[] = {
return CMD_HELP;
do {
- rc = llapi_find(argv[optind], obduuid, recursive,verbose,quiet);
+ rc = op_find(argv[optind], obduuid, recursive, verbose, quiet);
} while (++optind < argc && !rc);
if (rc)
optind = 1;
do {
- rc = llapi_find(argv[optind], obduuid, 0, 0, 0);
+ rc = op_find(argv[optind], obduuid, 0, 0, 0);
} while (++optind < argc && !rc);
if (rc)
} else {
mnt = getmntent(fp);
while (feof(fp) == 0 && ferror(fp) ==0) {
- if (llapi_is_lustre_mnttype(mnt->mnt_type)) {
- rc = llapi_find(mnt->mnt_dir, obduuid, 0, 0, 0);
+ if (strcmp(mnt->mnt_type, "lustre_lite") == 0) {
+ rc = op_find(mnt->mnt_dir, obduuid, 0, 0, 0);
if (rc)
- fprintf(stderr,
- "error: lfs osts failed on %s\n",
- mnt->mnt_dir);
+ fprintf(stderr, "error: lfs osts failed for %s\n",
+ mnt->mnt_dir);
}
mnt = getmntent(fp);
}
int rc;
FILE *fp;
struct mntent *mnt = NULL;
- int num_types = 1;
- char *obd_types[2];
+ int type_num = 1;
+ char *obd_type_p[2];
char obd_type1[4];
char obd_type2[4];
if (argc != 2)
return CMD_HELP;
- obd_types[1] = obd_type1;
- obd_types[2] = obd_type2;
-
- if (strcmp(argv[1], "osts") == 0) {
- strcpy(obd_types[0], "osc");
- } else if (strcmp(argv[1], "mds") == 0) {
- strcpy(obd_types[0], "mdc");
- } else if (strcmp(argv[1], "servers") == 0) {
- num_types = 2;
- strcpy(obd_types[0], "osc");
- strcpy(obd_types[1], "mdc");
+ obd_type_p[1]=obd_type1;
+ obd_type_p[2]=obd_type2;
+
+ if (strcmp(argv[1],"osts")==0) {
+ strcpy(obd_type_p[0],"osc");
+ } else if (strcmp(argv[1],"mds")==0) {
+ strcpy(obd_type_p[0],"mdc");
+ } else if (strcmp(argv[1],"servers")==0) {
+ type_num=2;
+ strcpy(obd_type_p[0],"osc");
+ strcpy(obd_type_p[1],"mdc");
} else {
fprintf(stderr, "error: %s: option '%s' unrecognized\n",
argv[0], argv[1]);
} else {
mnt = getmntent(fp);
while (feof(fp) == 0 && ferror(fp) ==0) {
- if (llapi_is_lustre_mnttype(mnt->mnt_type))
+ if (strcmp(mnt->mnt_type, "lustre_lite") == 0)
break;
mnt = getmntent(fp);
}
endmntent(fp);
}
-
- rc = llapi_target_check(num_types, obd_types, mnt->mnt_dir);
+
+ rc = op_check(type_num,obd_type_p,mnt->mnt_dir);
if (rc)
fprintf(stderr, "error: %s: %s status failed\n",
argv[0],argv[1]);
-
+
return rc;
}
FILE *fp;
struct mntent *mnt = NULL;
int rc;
-
+
if (argc < 2 || (!strcmp(argv[1],"config") && argc < 3))
return CMD_HELP;
fp = setmntent(MOUNTED, "r");
if (fp == NULL) {
- fprintf(stderr, "setmntent(%s): %s:", MOUNTED,
+ fprintf(stderr, "setmntent(%s): %s:", MOUNTED,
strerror(errno));
} else {
mnt = getmntent(fp);
while (feof(fp) == 0 && ferror(fp) == 0) {
- if (llapi_is_lustre_mnttype(mnt->mnt_type))
+ if (strcmp(mnt->mnt_type, "lustre_lite") == 0)
break;
mnt = getmntent(fp);
}
if (mnt) {
if (argc == 3)
- rc = llapi_catinfo(mnt->mnt_dir, argv[1], argv[2]);
+ rc = op_catinfo(mnt->mnt_dir, argv[1], argv[2]);
else
- rc = llapi_catinfo(mnt->mnt_dir, argv[1], NULL);
+ rc = op_catinfo(mnt->mnt_dir, argv[1], NULL);
} else {
fprintf(stderr, "no lustre_lite mounted.\n");
rc = -1;
int rc;
setlinebuf(stdout);
-
+
ptl_initialize(argc, argv);
if (obd_initialize(argc, argv) < 0)
exit(2);
if (dbg_initialize(argc, argv) < 0)
exit(3);
-
+
Parser_init("lfs > ", cmdlist);
if (argc > 1) {