build_test_filter
+assert_DIR
+rm -rf $DIR/[Rdfs][0-9]*
+
# global array to store mirror IDs
declare -a mirror_array
get_mirror_ids() {
}
run_test 45 "Verify setstripe/getstripe with YAML with FLR file"
+verify_46() {
+ local src=$1
+ local dst=$2
+ local msg_prefix=$3
+
+ $LFS setstripe --copy=$src $dst || error "setstripe $dst failed"
+
+ local layout1=$(get_layout_param $src)
+ local layout2=$(get_layout_param $dst)
+ # compare their layout info
+ [ "$layout1" == "$layout2" ] ||
+ error "$msg_prefix $src <=> $dst layouts are not equal"
+}
+
+test_46() {
+ [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return
+
+ local file=$DIR/$tdir/$tfile
+ test_mkdir $DIR/$tdir
+
+ ########################### 1. PFL file #############################
+ echo " ** 1. PFL file"
+ rm -f $file
+ $LFS setstripe -E1m -c2 -o0,1 -E2m -c2 -E3m -o1,0 -E4m -c1 -E-1 $file ||
+ error "1. Create PFL $file failed"
+
+ rm -f $file.copy
+ verify_46 $file $file.copy "1. PFL file"
+
+ ########################### 2. plain file ###########################
+ echo " ** 2. plain file"
+ rm -f $file
+ $LFS setstripe -c2 -o0,1 -i1 $file ||
+ error "2. Create plain $file failed"
+
+ rm -f $file.copy
+ verify_46 $file $file.copy "2. plain file"
+
+ ########################### 3. FLR file #############################
+ echo " ** 3. FLR file"
+ rm -f $file
+ $LFS setstripe -N -E1m -c2 -o0,1 -E4m -c1 -Eeof -N -E16m -Eeof $file ||
+ error "3. Create FLR $file failed"
+
+ rm -f $file.copy
+ verify_46 $file $file.copy "3. FLR file"
+
+ local dir=$DIR/$tdir/dir
+ ########################### 4. PFL dir ##############################
+ echo " ** 4. PFL dir"
+ test_mkdir $dir
+ $LFS setstripe -E1m -c2 -E2m -c1 -E-1 $dir ||
+ error "4. setstripe PFL $dir failed"
+
+ test_mkdir $dir.copy
+ verify_46 $dir $dir.copy "3. PFL dir"
+
+ ########################### 5. plain dir ############################
+ echo " ** 5. plain dir"
+ $LFS setstripe -c2 -i-1 $dir || error "4. setstripe plain $dir failed"
+
+ verify_46 $dir $dir.copy "5. plain dir"
+
+ ########################### 6. FLR dir ##############################
+ echo " ** 6. FLR dir"
+ $LFS setstripe -N -E1m -c2 -E2m -c1 -Eeof -N -E4m -Eeof $dir ||
+ error "6. setstripe FLR $dir failed"
+
+ verify_46 $dir $dir.copy "6. FLR dir"
+}
+run_test 46 "Verify setstripe --copy option"
+
ctrl_file=$(mktemp /tmp/CTRL.XXXXXX)
lock_file=$(mktemp /var/lock/FLR.XXXXXX)
" [--stripe-count|-c <stripe_count>]\n" \
" [--stripe-index|-i <start_ost_idx>]\n" \
" [--stripe-size|-S <stripe_size>]\n" \
- " [--layout|-L <pattern>]\n" \
+ " [--layout|-L <pattern>]\n" \
" [--pool|-p <pool_name>]\n" \
" [--ost|-o <ost_indices>]\n" \
- " [--yaml|-y <yaml_template_file>]\n"
+ " [--yaml|-y <yaml_template_file>]\n" \
+ " [--copy=<lustre_src>]\n"
#define SSM_HELP_COMMON \
"\tstripe_count: Number of OSTs to stripe over (0=fs default, -1 all)\n" \
"\t stripe_size.\n" \
"\tyaml_template_file:\n" \
"\t YAML layout template file, can't be used with -c,\n" \
- "\t -i, -S, -p, -o, or -E arguments.\n"
+ "\t -i, -S, -p, -o, or -E arguments.\n" \
+ "\tlustre_src: Lustre file/dir whose layout info is used to set\n" \
+ "\t another lustre file or directory, can't used with\n" \
+ "\t -c, -i, -S, -p, -o, or -E arguments.\n"
#define MIRROR_CREATE_HELP \
"\tmirror_count: Number of mirrors to be created with the upcoming\n" \
LFS_MIRROR_FLAGS_OPT,
LFS_MIRROR_ID_OPT,
LFS_MIRROR_STATE_OPT,
+ LFS_LAYOUT_COPY,
};
/* functions */
__u16 mirror_id = 0;
char cmd[PATH_MAX];
bool from_yaml = false;
+ bool from_copy = false;
char *template = NULL;
struct option long_opts[] = {
.name = "flags", .has_arg = required_argument},
{ .val = LFS_MIRROR_ID_OPT,
.name = "mirror-id", .has_arg = required_argument},
+ { .val = LFS_LAYOUT_COPY,
+ .name = "copy", .has_arg = required_argument},
{ .val = 'c', .name = "stripe-count", .has_arg = required_argument},
{ .val = 'c', .name = "stripe_count", .has_arg = required_argument},
/* find { .val = 'C', .name = "ctime", .has_arg = required_argument }*/
}
break;
}
+ case LFS_LAYOUT_COPY:
+ from_copy = true;
+ template = optarg;
+ break;
case 'b':
if (!migrate_mode) {
fprintf(stderr,
goto error;
}
- if (from_yaml && (setstripe_args_specified(&lsa) || layout != NULL)) {
+ if (from_yaml && from_copy) {
+ fprintf(stderr,
+ "%s: can't specify --yaml and --copy together\n",
+ progname);
+ goto error;
+ }
+
+ if ((from_yaml || from_copy) &&
+ (setstripe_args_specified(&lsa) || layout != NULL)) {
fprintf(stderr, "error: %s: can't specify --yaml with "
"-c, -S, -i, -o, -p or -E options.\n",
argv[0]);
argv[0], template);
goto error;
}
+ } else if (from_copy) {
+ layout = llapi_layout_get_by_path(template, 0);
+ if (layout == NULL) {
+ fprintf(stderr,
+ "%s: can't create composite layout from file %s.\n",
+ progname, template);
+ goto error;
+ }
}
for (fname = argv[optind]; fname != NULL; fname = argv[++optind]) {