stop_full_debug_logging
}
+barrier_stat() {
+ if [ $(lustre_version_code mgs) -le $(version_code 2.10.0) ]; then
+ local st=$(do_facet mgs $LCTL barrier_stat $FSNAME |
+ awk '/The barrier for/ { print $7 }')
+ echo $st
+ else
+ local st=$(do_facet mgs $LCTL barrier_stat -s $FSNAME)
+ echo \'$st\'
+ fi
+}
+
+barrier_expired() {
+ local expired
+
+ if [ $(lustre_version_code mgs) -le $(version_code 2.10.0) ]; then
+ expired=$(do_facet mgs $LCTL barrier_stat $FSNAME |
+ awk '/will be expired/ { print $7 }')
+ else
+ expired=$(do_facet mgs $LCTL barrier_stat -t $FSNAME)
+ fi
+
+ echo $expired
+}
+
test_801a() {
prep_801
do_facet mgs $LCTL barrier_freeze $FSNAME 10 &
sleep 2
- local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ local b_status=$(barrier_stat)
echo "Got barrier status at: $(date)"
[ "$b_status" = "'freezing_p1'" ] ||
error "(1) unexpected barrier status $b_status"
do_facet mgs $LCTL set_param fail_val=0 fail_loc=0
wait
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'frozen'" ] ||
error "(2) unexpected barrier status $b_status"
- local expired=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/will be expired/ { print $7 }')
+ local expired=$(barrier_expired)
echo "sleep $((expired + 3)) seconds, then the barrier will be expired"
sleep $((expired + 3))
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'expired'" ] ||
error "(3) unexpected barrier status $b_status"
do_facet mgs $LCTL barrier_freeze $FSNAME 10 ||
error "(4) fail to freeze barrier"
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'frozen'" ] ||
error "(5) unexpected barrier status $b_status"
do_facet mgs $LCTL barrier_thaw $FSNAME &
sleep 2
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
echo "Got barrier status at: $(date)"
[ "$b_status" = "'thawing'" ] ||
error "(6) unexpected barrier status $b_status"
do_facet mgs $LCTL set_param fail_val=0 fail_loc=0
wait
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'thawed'" ] ||
error "(7) unexpected barrier status $b_status"
do_facet $SINGLEMDS $LCTL set_param fail_loc=0x2203
do_facet mgs $LCTL barrier_freeze $FSNAME
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'failed'" ] ||
error "(8) unexpected barrier status $b_status"
# 180 seconds should be long enough
do_facet mgs $LCTL barrier_freeze $FSNAME 180
- local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ local b_status=$(barrier_stat)
[ "$b_status" = "'frozen'" ] ||
error "(6) unexpected barrier status $b_status"
stat $DIR/$tdir/d5 || error "(7) stat should succeed"
# To guarantee taht the 'stat' is not blocked
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'frozen'" ] ||
error "(8) unexpected barrier status $b_status"
ps -p $mv_pid || error "(12) rename should be blocked"
ps -p $rm_pid || error "(13) unlink should be blocked"
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'frozen'" ] ||
error "(14) unexpected barrier status $b_status"
do_facet mgs $LCTL barrier_thaw $FSNAME
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'thawed'" ] ||
error "(15) unexpected barrier status $b_status"
do_facet mgs $LCTL barrier_freeze $FSNAME 30
- local b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ local b_status=$(barrier_stat)
[ "$b_status" = "'expired'" -o "$b_status" = "'failed'" ] || {
do_facet mgs $LCTL barrier_thaw $FSNAME
error "(2) unexpected barrier status $b_status"
do_facet mgs $LCTL barrier_freeze $FSNAME 10
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'frozen'" ] ||
error "(4) unexpected barrier status $b_status"
do_facet mgs $LCTL barrier_thaw $FSNAME
- b_status=$(do_facet mgs $LCTL barrier_stat $FSNAME |
- awk '/The barrier for/ { print $7 }')
+ b_status=$(barrier_stat)
[ "$b_status" = "'thawed'" ] ||
error "(5) unexpected barrier status $b_status"
return rc;
}
-int __jt_barrier_stat(int argc, char **argv, struct barrier_ctl *bc)
+int __jt_barrier_stat(const char *fsname, struct barrier_ctl *bc)
{
struct obd_ioctl_data data;
char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf;
memset(bc, 0, sizeof(*bc));
bc->bc_version = BARRIER_VERSION_V1;
bc->bc_cmd = BC_STAT;
- strncpy(bc->bc_name, argv[1], sizeof(bc->bc_name));
+ strncpy(bc->bc_name, fsname, sizeof(bc->bc_name));
data.ioc_inlbuf1 = (char *)bc;
data.ioc_inllen1 = sizeof(*bc);
memset(buf, 0, sizeof(rawbuf));
rc = l_ioctl(OBD_DEV_ID, OBD_IOC_BARRIER, buf);
if (rc < 0)
fprintf(stderr, "Fail to query barrier for %s: %s\n",
- argv[1], strerror(errno));
+ fsname, strerror(errno));
else
obd_ioctl_unpack(&data, buf, sizeof(rawbuf));
int jt_barrier_stat(int argc, char **argv)
{
struct barrier_ctl bc;
+ static struct option long_opt_barrier_stat[] = {
+ {
+ .val = 's',
+ .name = "state",
+ .has_arg = no_argument,
+ },
+ { .val = 't',
+ .name = "timeout",
+ .has_arg = no_argument,
+ },
+ {
+ NULL
+ }
+ };
+ const char *name;
+ int index;
+ int opt;
int rc;
+ bool state = false;
+ bool timeout = false;
+
+ while ((opt = getopt_long(argc, argv, "st", long_opt_barrier_stat,
+ &index)) != EOF) {
+ switch (opt) {
+ case 's':
+ state = true;
+ break;
+ case 't':
+ timeout = true;
+ break;
+ default:
+ return CMD_HELP;
+ }
+ }
- if (argc != 2)
+ if (optind >= argc)
return CMD_HELP;
- if (strlen(argv[1]) > 8) {
+ name = argv[optind];
+ if (strlen(name) > 8) {
fprintf(stderr, "fsname name %s is too long. "
- "It should not exceed 8.\n", argv[1]);
+ "It should not exceed 8.\n", name);
return -EINVAL;
}
- rc = __jt_barrier_stat(argc, argv, &bc);
+ rc = __jt_barrier_stat(name, &bc);
if (!rc) {
- printf("The barrier for %s is in '%s'\n",
- argv[1], barrier_status2name(bc.bc_status));
- if (bc.bc_status == BS_FREEZING_P1 ||
- bc.bc_status == BS_FREEZING_P2 ||
- bc.bc_status == BS_FROZEN)
- printf("The barrier will be expired after %d "
- "seconds\n", bc.bc_timeout);
+ if (state && !timeout)
+ printf("%s\n", barrier_status2name(bc.bc_status));
+ else if (timeout && !state)
+ printf("%d\n",
+ (bc.bc_status == BS_FREEZING_P1 ||
+ bc.bc_status == BS_FREEZING_P2 ||
+ bc.bc_status == BS_FROZEN) ?
+ bc.bc_timeout : 0);
+ else
+ printf("state: %s\ntimeout: %d seconds\n",
+ barrier_status2name(bc.bc_status),
+ (bc.bc_status == BS_FREEZING_P1 ||
+ bc.bc_status == BS_FREEZING_P2 ||
+ bc.bc_status == BS_FROZEN) ?
+ bc.bc_timeout : 0);
}
return rc;