From: Nathan Rutman Date: Fri, 13 Aug 2010 16:47:47 +0000 (+0400) Subject: b=22464 add writeconf as mount option (includes bz 23228) X-Git-Tag: 2.0.51.0~76 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=868565282f0234335e5afe13990bb8571049bdc0;hp=2fe8b2600cd7aea21149fbb9d0829129a274a472 b=22464 add writeconf as mount option (includes bz 23228) i=alexg i=adilger --- diff --git a/lustre/include/lustre_disk.h b/lustre/include/lustre_disk.h index 56ac7b0..0915d80 100644 --- a/lustre/include/lustre_disk.h +++ b/lustre/include/lustre_disk.h @@ -75,11 +75,11 @@ #define LDD_F_NEED_INDEX 0x0010 /** never registered */ #define LDD_F_VIRGIN 0x0020 -/** update the config logs for this server*/ +/** update the config logs for this server */ #define LDD_F_UPDATE 0x0040 /** rewrite the LDD */ #define LDD_F_REWRITE_LDD 0x0080 -/** regenerate all logs for this fs */ +/** regenerate config logs for this fs or server */ #define LDD_F_WRITECONF 0x0100 /** COMPAT_14 */ #define LDD_F_UPGRADE14 0x0200 @@ -194,6 +194,7 @@ struct lustre_mount_data { no other services */ #define LMD_FLG_NOMGS 0x0020 /* Only start target for servers, reusing existing MGS services */ +#define LMD_FLG_WRITECONF 0x0040 /* Rewrite config log */ #define lmd_is_client(x) ((x)->lmd_flags & LMD_FLG_CLIENT) diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index a8d8570..274b6fb 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -413,6 +413,10 @@ static int mgs_handle_target_reg(struct ptlrpc_request *req) mgs_counter_incr(req->rq_export, LPROC_MGS_TARGET_REG); mti = req_capsule_client_get(&req->rq_pill, &RMF_MGS_TARGET_INFO); + + if (mti->mti_flags & LDD_F_NEED_INDEX) + mti->mti_flags |= LDD_F_WRITECONF; + if (!(mti->mti_flags & (LDD_F_WRITECONF | LDD_F_UPGRADE14 | LDD_F_UPDATE))) { /* We're just here as a startup ping. */ diff --git a/lustre/obdclass/obd_mount.c b/lustre/obdclass/obd_mount.c index 8531464..1618a15 100644 --- a/lustre/obdclass/obd_mount.c +++ b/lustre/obdclass/obd_mount.c @@ -998,6 +998,8 @@ static int server_sb2mti(struct super_block *sb, struct mgs_target_info *mti) mti->mti_lustre_ver = LUSTRE_VERSION_CODE; mti->mti_config_ver = 0; + if (lsi->lsi_lmd->lmd_flags & LMD_FLG_WRITECONF) + ldd->ldd_flags |= LDD_F_WRITECONF; mti->mti_flags = ldd->ldd_flags; mti->mti_stripe_index = ldd->ldd_svindex; memcpy(mti->mti_uuid, ldd->ldd_uuid, sizeof(mti->mti_uuid)); @@ -1983,6 +1985,9 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd) } else if (strncmp(s1, "nomgs", 5) == 0) { lmd->lmd_flags |= LMD_FLG_NOMGS; clear++; + } else if (strncmp(s1, "writeconf", 9) == 0) { + lmd->lmd_flags |= LMD_FLG_WRITECONF; + clear++; } else if (strncmp(s1, "mgssec=", 7) == 0) { rc = lmd_parse_mgssec(lmd, s1 + 7); if (rc) diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 55d4868..05b73c7 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -101,7 +101,14 @@ start_mds() { local num=$(echo $facet | tr -d "mds") local dev=$(mdsdevname $num) echo "start mds service on `facet_active_host $facet`" - start $facet ${dev} $MDS_MOUNT_OPTS || return 94 + start $facet ${dev} $MDS_MOUNT_OPTS $@ || return 94 +} + +start_mgsmds() { + if ! combined_mgs_mds ; then + start_mgs + fi + start_mds $@ } stop_mds() { @@ -112,7 +119,7 @@ stop_mds() { start_ost() { echo "start ost1 service on `facet_active_host ost1`" - start ost1 `ostdevname 1` $OST_MOUNT_OPTS || return 95 + start ost1 `ostdevname 1` $OST_MOUNT_OPTS $@ || return 95 } stop_ost() { @@ -123,7 +130,7 @@ stop_ost() { start_ost2() { echo "start ost2 service on `facet_active_host ost2`" - start ost2 `ostdevname 2` $OST_MOUNT_OPTS || return 92 + start ost2 `ostdevname 2` $OST_MOUNT_OPTS $@ || return 92 } stop_ost2() { @@ -2440,6 +2447,40 @@ test_56() { } run_test 56 "check big indexes" +count_osts() { + do_facet mgs $LCTL get_param mgs.MGS.live.$FSNAME | grep OST | wc -l +} + +test_59() { + start_mgsmds >> /dev/null + local C1=$(count_osts) + if [ $C1 -eq 0 ]; then + start_ost >> /dev/null + C1=$(count_osts) + fi + stopall + echo "original ost count: $C1 (expect > 0)" + [ $C1 -gt 0 ] || error "No OSTs in $FSNAME log" + start_mgsmds -o writeconf >> /dev/null || error "MDT start failed" + local C2=$(count_osts) + echo "after mdt writeconf count: $C2 (expect 0)" + [ $C2 -gt 0 ] && error "MDT writeconf should erase OST logs" + echo "OST start without writeconf should fail:" + start_ost >> /dev/null && error "OST start without writeconf didn't fail" + echo "OST start with writeconf should succeed:" + start_ost -o writeconf >> /dev/null || error "OST1 start failed" + local C3=$(count_osts) + echo "after ost writeconf count: $C3 (expect 1)" + [ $C3 -eq 1 ] || error "new OST writeconf should add:" + start_ost2 -o writeconf >> /dev/null || error "OST2 start failed" + local C4=$(count_osts) + echo "after ost2 writeconf count: $C4 (expect 2)" + [ $C4 -eq 2 ] || error "OST2 writeconf should add log" + stop_ost2 >> /dev/null + cleanup_nocli >> /dev/null +} +run_test 59 "writeconf mount option" + cleanup_gss equals_msg `basename $0`: test complete [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true