Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
July
June
May
April
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
List overview
Download
lvm2-commits
September 2016
----- 2025 -----
July 2025
June 2025
May 2025
April 2025
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
lvm2-commits@lists.fedorahosted.org
7 participants
101 discussions
Start a n
N
ew thread
master - tests: fix raid rebuild tests to work with older target versions
by Heinz Mauelshagen
22 Sep '16
22 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=cb4892dd6067da84…
Commit: cb4892dd6067da84833d261ffc19fba4f7086fb0 Parent: 38a6a39daa2967970da0017ac96e40af1c7fbc7b Author: Heinz Mauelshagen <heinzm(a)redhat.com> AuthorDate: Thu Sep 22 23:18:14 2016 +0200 Committer: Heinz Mauelshagen <heinzm(a)redhat.com> CommitterDate: Thu Sep 22 23:18:14 2016 +0200 tests: fix raid rebuild tests to work with older target versions Pre 1.9 dm-raid targets status output was racy, which caused the device status chars to be unreliable _during_ synchronization. This shows paritcularly with tiny test devices used. Enhance lvchange-rebuild-raid.sh to not check status chars _during_ synchronization. Just check afterwards. --- WHATS_NEW | 1 + test/shell/lvchange-rebuild-raid.sh | 42 ++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index aedacee..6a178e6 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.166 - ===================================== + Fix lvchange-rebuild-raid.sh to cope with older target versions. Use dm_config_parse_without_dup_node_check() to speedup metadata reading. Fix lvconvert --repair regression Fix reported origin lv field for cache volumes. (2.02.133) diff --git a/test/shell/lvchange-rebuild-raid.sh b/test/shell/lvchange-rebuild-raid.sh index f15c5ef..40d8bc4 100644 --- a/test/shell/lvchange-rebuild-raid.sh +++ b/test/shell/lvchange-rebuild-raid.sh @@ -18,7 +18,7 @@ aux have_raid 1 3 2 || skip aux prepare_vg 8 -# Delay 1st leg so that rebuilding status characters can be read +# Delay legs so that rebuilding status characters can be read for d in $(< DEVICES) do aux delay_dev "$d" 0 15 $(get first_extent_sector "$d") @@ -37,92 +37,108 @@ aux wait_for_sync $vg $lv1 not lvchange --yes --rebuild "$dev1" --rebuild "$dev2" $vg/$lv1 not check raid_leg_status $vg $lv1 "aAaAAAAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" -# Rebuild 1st and 3nd device from different mirror groups is fine. +# Rebuild 1st and 3rd device from different mirror groups is fine. lvchange --yes --rebuild "$dev1" --rebuild "$dev3" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAaAAAAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAaAAAAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild devices 1, 3, 6 from different mirror groups is fine. lvchange --yes --rebuild "$dev1" --rebuild "$dev3" --rebuild "$dev6" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAaAAaAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAaAAaAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild devices 1, 3, 5 and 6 with 5+6 being # being a whole mirror group needs to be rejected. not lvchange --yes --rebuild "$dev1" --rebuild "$dev3" --rebuild "$dev6" --rebuild "$dev5" $vg/$lv1 not check raid_leg_status $vg $lv1 "aAaAaaAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild devices 1, 3, 5 and 7 from different mirror groups is fine. lvchange --yes --rebuild "$dev1" --rebuild "$dev3" --rebuild "$dev5" --rebuild "$dev7" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAaAaAaA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAaAaAaA" aux wait_for_sync $vg $lv1 # Rebuild devices 2, 4, 6 and 8 from different mirror groups is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev4" --rebuild "$dev6" --rebuild "$dev8" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAaAaAa" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAaAaAa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" ############################################## # Create an 8-legged raid1 and rebuild selected PVs lvremove --yes $vg/$lv1 lvcreate --yes --type raid1 -m 7 -l 2 -n $lv1 $vg aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuilding all raid1 legs needs to be rejected. not lvchange --yes --rebuild "$dev1" --rebuild "$dev2" --rebuild "$dev3" --rebuild "$dev4" \ --rebuild "$dev5" --rebuild "$dev6" --rebuild "$dev7" --rebuild "$dev8" $vg/$lv1 not check raid_leg_status $vg $lv1 "aaaaaaaa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuilding all but the raid1 master leg is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev3" --rebuild "$dev4" \ --rebuild "$dev5" --rebuild "$dev6" --rebuild "$dev7" --rebuild "$dev8" $vg/$lv1 -check raid_leg_status $vg $lv1 "Aaaaaaaa" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "Aaaaaaaa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuilding the raid1 master leg is fine. lvchange --yes --rebuild "$dev1" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAAAAAAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAAAAAAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild legs on devices 2, 4, 6 and 8 is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev4" --rebuild "$dev6" --rebuild "$dev8" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAaAaAa" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAaAaAa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" ############################################## # Create an 6-legged raid6 and rebuild selected PVs lvremove --yes $vg/$lv1 lvcreate --yes --type raid6 -i 4 -l 2 -n $lv1 $vg aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding all raid6 stripes needs to be rejected. not lvchange --yes --rebuild "$dev1" --rebuild "$dev2" --rebuild "$dev3" \ --rebuild "$dev4" --rebuild "$dev5" --rebuild "$dev6" $vg/$lv1 not check raid_leg_status $vg $lv1 "aaaaaa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding more than 2 raid6 stripes needs to be rejected. not lvchange --yes --rebuild "$dev2" --rebuild "$dev4" --rebuild "$dev6" $vg/$lv1 not check raid_leg_status $vg $lv1 "AaAaAa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding any 1 raid6 stripe is fine. lvchange --yes --rebuild "$dev2" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAAAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAAAA" aux wait_for_sync $vg $lv1 lvchange --yes --rebuild "$dev5" $vg/$lv1 -check raid_leg_status $vg $lv1 "AAAAaA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AAAAaA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding any 2 raid6 stripes is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev4" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAaAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAaAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" lvchange --yes --rebuild "$dev1" --rebuild "$dev5" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAAAaA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAAAaA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" vgremove -ff $vg
1
0
0
0
master - tests: fix raid rebuild tests to work with older target versions
by Heinz Mauelshagen
22 Sep '16
22 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=0cb8f392178eed96…
Commit: 0cb8f392178eed9695a57cc7d9c0e684386db445 Parent: 38a6a39daa2967970da0017ac96e40af1c7fbc7b Author: Heinz Mauelshagen <heinzm(a)redhat.com> AuthorDate: Thu Sep 22 23:10:13 2016 +0200 Committer: Heinz Mauelshagen <heinzm(a)redhat.com> CommitterDate: Thu Sep 22 23:10:13 2016 +0200 tests: fix raid rebuild tests to work with older target versions Pre 1.9 dm-raid targets status output was racy, which caused the device status chars to be unreliable _during_ synchronization. This shows paritcularly with tiny test devices used. Enhance lvchange-rebuild-raid.sh to not check status chars _during_ synchronization. Just check afterwards. --- WHATS_NEW | 1 + test/shell/lvchange-rebuild-raid.sh | 42 ++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index aedacee..6a178e6 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.166 - ===================================== + Fix lvchange-rebuild-raid.sh to cope with older target versions. Use dm_config_parse_without_dup_node_check() to speedup metadata reading. Fix lvconvert --repair regression Fix reported origin lv field for cache volumes. (2.02.133) diff --git a/test/shell/lvchange-rebuild-raid.sh b/test/shell/lvchange-rebuild-raid.sh index f15c5ef..40d8bc4 100644 --- a/test/shell/lvchange-rebuild-raid.sh +++ b/test/shell/lvchange-rebuild-raid.sh @@ -18,7 +18,7 @@ aux have_raid 1 3 2 || skip aux prepare_vg 8 -# Delay 1st leg so that rebuilding status characters can be read +# Delay legs so that rebuilding status characters can be read for d in $(< DEVICES) do aux delay_dev "$d" 0 15 $(get first_extent_sector "$d") @@ -37,92 +37,108 @@ aux wait_for_sync $vg $lv1 not lvchange --yes --rebuild "$dev1" --rebuild "$dev2" $vg/$lv1 not check raid_leg_status $vg $lv1 "aAaAAAAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" -# Rebuild 1st and 3nd device from different mirror groups is fine. +# Rebuild 1st and 3rd device from different mirror groups is fine. lvchange --yes --rebuild "$dev1" --rebuild "$dev3" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAaAAAAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAaAAAAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild devices 1, 3, 6 from different mirror groups is fine. lvchange --yes --rebuild "$dev1" --rebuild "$dev3" --rebuild "$dev6" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAaAAaAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAaAAaAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild devices 1, 3, 5 and 6 with 5+6 being # being a whole mirror group needs to be rejected. not lvchange --yes --rebuild "$dev1" --rebuild "$dev3" --rebuild "$dev6" --rebuild "$dev5" $vg/$lv1 not check raid_leg_status $vg $lv1 "aAaAaaAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild devices 1, 3, 5 and 7 from different mirror groups is fine. lvchange --yes --rebuild "$dev1" --rebuild "$dev3" --rebuild "$dev5" --rebuild "$dev7" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAaAaAaA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAaAaAaA" aux wait_for_sync $vg $lv1 # Rebuild devices 2, 4, 6 and 8 from different mirror groups is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev4" --rebuild "$dev6" --rebuild "$dev8" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAaAaAa" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAaAaAa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" ############################################## # Create an 8-legged raid1 and rebuild selected PVs lvremove --yes $vg/$lv1 lvcreate --yes --type raid1 -m 7 -l 2 -n $lv1 $vg aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuilding all raid1 legs needs to be rejected. not lvchange --yes --rebuild "$dev1" --rebuild "$dev2" --rebuild "$dev3" --rebuild "$dev4" \ --rebuild "$dev5" --rebuild "$dev6" --rebuild "$dev7" --rebuild "$dev8" $vg/$lv1 not check raid_leg_status $vg $lv1 "aaaaaaaa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuilding all but the raid1 master leg is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev3" --rebuild "$dev4" \ --rebuild "$dev5" --rebuild "$dev6" --rebuild "$dev7" --rebuild "$dev8" $vg/$lv1 -check raid_leg_status $vg $lv1 "Aaaaaaaa" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "Aaaaaaaa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuilding the raid1 master leg is fine. lvchange --yes --rebuild "$dev1" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAAAAAAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAAAAAAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" # Rebuild legs on devices 2, 4, 6 and 8 is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev4" --rebuild "$dev6" --rebuild "$dev8" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAaAaAa" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAaAaAa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAAAA" ############################################## # Create an 6-legged raid6 and rebuild selected PVs lvremove --yes $vg/$lv1 lvcreate --yes --type raid6 -i 4 -l 2 -n $lv1 $vg aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding all raid6 stripes needs to be rejected. not lvchange --yes --rebuild "$dev1" --rebuild "$dev2" --rebuild "$dev3" \ --rebuild "$dev4" --rebuild "$dev5" --rebuild "$dev6" $vg/$lv1 not check raid_leg_status $vg $lv1 "aaaaaa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding more than 2 raid6 stripes needs to be rejected. not lvchange --yes --rebuild "$dev2" --rebuild "$dev4" --rebuild "$dev6" $vg/$lv1 not check raid_leg_status $vg $lv1 "AaAaAa" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding any 1 raid6 stripe is fine. lvchange --yes --rebuild "$dev2" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAAAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAAAA" aux wait_for_sync $vg $lv1 lvchange --yes --rebuild "$dev5" $vg/$lv1 -check raid_leg_status $vg $lv1 "AAAAaA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AAAAaA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" # Rebuilding any 2 raid6 stripes is fine. lvchange --yes --rebuild "$dev2" --rebuild "$dev4" $vg/$lv1 -check raid_leg_status $vg $lv1 "AaAaAA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "AaAaAA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" lvchange --yes --rebuild "$dev1" --rebuild "$dev5" $vg/$lv1 -check raid_leg_status $vg $lv1 "aAAAaA" +aux have_raid 1 8 && check raid_leg_status $vg $lv1 "aAAAaA" aux wait_for_sync $vg $lv1 +check raid_leg_status $vg $lv1 "AAAAAA" vgremove -ff $vg
1
0
0
0
master - tests: fix raid repair tests to work with older target versions
by Heinz Mauelshagen
22 Sep '16
22 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=5282450520c40a8d…
Commit: 5282450520c40a8d2431ab60ccc80dcaffc9c05d Parent: 38a6a39daa2967970da0017ac96e40af1c7fbc7b Author: Heinz Mauelshagen <heinzm(a)redhat.com> AuthorDate: Thu Sep 22 17:28:20 2016 +0200 Committer: Heinz Mauelshagen <heinzm(a)redhat.com> CommitterDate: Thu Sep 22 17:28:20 2016 +0200 tests: fix raid repair tests to work with older target versions Pre 1.8 dm-raid targets status output was racy, which caused the device status chars to be unreliable _during_ synchronization. This shows paritcularly with tiny test devices used. Enhance lvconvert-repair-raid.sh to not check status chars _during_ synchronization. Just check afterwards. --- WHATS_NEW | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index aedacee..e22e606 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.166 - ===================================== + Fix lvconvert-repair-raid.sh to cope with older target versions. Use dm_config_parse_without_dup_node_check() to speedup metadata reading. Fix lvconvert --repair regression Fix reported origin lv field for cache volumes. (2.02.133)
1
0
0
0
master - tests: raid repair needs devices in-sync
by Zdenek Kabelac
22 Sep '16
22 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=38a6a39daa296797…
Commit: 38a6a39daa2967970da0017ac96e40af1c7fbc7b Parent: eb6b2a11e3548f7598c726787494be2c3ea4dca1 Author: Zdenek Kabelac <zkabelac(a)redhat.com> AuthorDate: Thu Sep 22 15:46:18 2016 +0200 Committer: Zdenek Kabelac <zkabelac(a)redhat.com> CommitterDate: Thu Sep 22 15:46:18 2016 +0200 tests: raid repair needs devices in-sync Though I'm not quite sure why we push this limit on user, current --repair logic requires user to wait outside of command. TODO: I'm not quite sure this repair logic is 'the most wanted'. --- test/shell/lvconvert-cache-raid.sh | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/test/shell/lvconvert-cache-raid.sh b/test/shell/lvconvert-cache-raid.sh index ebb9f79..3807493 100644 --- a/test/shell/lvconvert-cache-raid.sh +++ b/test/shell/lvconvert-cache-raid.sh @@ -60,7 +60,10 @@ lvconvert --yes --type cache-pool --poolmetadata $vg/cpool_meta $vg/cpool lvcreate -n corigin --type cache --cachepool $vg/cpool -l 10 lvchange --syncaction repair $vg/cpool_cmeta +aux wait_for_sync $vg cpool_cmeta + lvchange --syncaction repair $vg/cpool_cdata +aux wait_for_sync $vg cpool_cdata lvconvert --repair -y $vg/cpool_cmeta lvconvert --repair -y $vg/cpool_cdata
1
0
0
0
master - tests: check for TRIM support
by Zdenek Kabelac
22 Sep '16
22 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=eb6b2a11e3548f75…
Commit: eb6b2a11e3548f7598c726787494be2c3ea4dca1 Parent: f1cad4c7103ac0edc0b724217b50d062326deb43 Author: Zdenek Kabelac <zkabelac(a)redhat.com> AuthorDate: Thu Sep 22 15:37:52 2016 +0200 Committer: Zdenek Kabelac <zkabelac(a)redhat.com> CommitterDate: Thu Sep 22 15:37:52 2016 +0200 tests: check for TRIM support passdown can really work only on discardable device. Skip 'status' test when PV does no support discard. --- test/shell/lvchange-thin.sh | 23 +++++++++++++++-------- 1 files changed, 15 insertions(+), 8 deletions(-) diff --git a/test/shell/lvchange-thin.sh b/test/shell/lvchange-thin.sh index f943401..b5a6a86 100644 --- a/test/shell/lvchange-thin.sh +++ b/test/shell/lvchange-thin.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (C) 2013 Red Hat, Inc. All rights reserved. +# Copyright (C) 2013-2016 Red Hat, Inc. All rights reserved. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions @@ -25,24 +25,31 @@ vgcreate -s 128k $vg2 "$dev3" lvcreate -L10M -T $vg/pool +# When PV does not support discard +# tests for checking thin-pool discard passdown are skipped +pvmajor=$(get pv_field "$dev1" major) +pvminor=$(get pv_field "$dev1" minor) +test "$(< /sys/dev/block/$pvmajor\:$pvminor/queue/discard_granularity)" -ne "0" || \ + no_discard=1 + # # Check change operations on a thin-pool without any thin LV # # discards_ARG (default is passdown) -check grep_dmsetup status $vg-pool " discard_passdown" || { +test -n "$no_discard" || check grep_dmsetup status $vg-pool " discard_passdown" || { # trace device layout grep -r "" /sys/block/* die "Device was expected to support passdown" } -lvchange -vvvv --discards nopassdown $vg/pool +lvchange --discards nopassdown $vg/pool check grep_dmsetup table $vg-pool " no_discard_passdown" -check grep_dmsetup status $vg-pool " no_discard_passdown" +test -n "$no_discard" || check grep_dmsetup status $vg-pool " no_discard_passdown" lvchange --discards passdown $vg/pool check grep_dmsetup table $vg-pool -v "passdown" -check grep_dmsetup status $vg-pool " discard_passdown" - +test -n "$no_discard" || check grep_dmsetup status $vg-pool " discard_passdown" +exit # zero_ARG (default is 'yes') check grep_dmsetup table $vg-pool -v "zeroing" lvchange --zero n $vg/pool @@ -112,10 +119,10 @@ lvchange --deltag foo $vg/pool # discards_ARG lvchange --discards nopassdown $vg/pool check grep_dmsetup table $vg-pool-tpool " no_discard_passdown" -check grep_dmsetup status $vg-pool-tpool " no_discard_passdown" +test -n "$no_discard" || check grep_dmsetup status $vg-pool-tpool " no_discard_passdown" lvchange --discards passdown $vg/pool check grep_dmsetup table $vg-pool-tpool -v "passdown" -check grep_dmsetup status $vg-pool-tpool " discard_passdown" +test -n "$no_discard" || check grep_dmsetup status $vg-pool-tpool " discard_passdown" # zero_ARG lvchange --zero n $vg/pool
1
0
0
0
master - config: use config_tree_from_string_without_dup_node_check throughout code to construct metadata trees
by Zdenek Kabelac
21 Sep '16
21 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=f1cad4c7103ac0ed…
Commit: f1cad4c7103ac0edc0b724217b50d062326deb43 Parent: 045772aa30ba1c5ab9dff730ce25ca6346c7150a Author: Peter Rajnoha <prajnoha(a)redhat.com> AuthorDate: Wed Sep 21 14:59:14 2016 +0200 Committer: Zdenek Kabelac <zkabelac(a)redhat.com> CommitterDate: Wed Sep 21 18:18:15 2016 +0200 config: use config_tree_from_string_without_dup_node_check throughout code to construct metadata trees --- WHATS_NEW | 1 + daemons/lvmetad/lvmetad-core.c | 2 +- daemons/lvmlockd/lvmlockd-core.c | 2 +- lib/cache/lvmcache.c | 2 +- lib/format_text/export.c | 3 ++- libdaemon/client/daemon-client.c | 2 +- libdaemon/server/daemon-server.c | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index f7b39b9..aedacee 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.166 - ===================================== + Use dm_config_parse_without_dup_node_check() to speedup metadata reading. Fix lvconvert --repair regression Fix reported origin lv field for cache volumes. (2.02.133) Always specify snapshot cow LV for monitoring not internal LV. (2.02.165) diff --git a/daemons/lvmetad/lvmetad-core.c b/daemons/lvmetad/lvmetad-core.c index ebaca78..36a5cec 100644 --- a/daemons/lvmetad/lvmetad-core.c +++ b/daemons/lvmetad/lvmetad-core.c @@ -599,7 +599,7 @@ static void mark_outdated_pv(lvmetad_state *s, const char *vgid, const char *pvi outdated_pvs = dm_hash_lookup(s->vgid_to_outdated_pvs, vgid); if (!outdated_pvs) { - if (!(outdated_pvs = dm_config_from_string("outdated_pvs/pv_list = []")) || + if (!(outdated_pvs = config_tree_from_string_without_dup_node_check("outdated_pvs/pv_list = []")) || !(cft_vgid = make_text_node(outdated_pvs, "vgid", dm_pool_strdup(outdated_pvs->mem, vgid), outdated_pvs->root, NULL))) abort(); diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c index 8fcbdec..4d96e67 100644 --- a/daemons/lvmlockd/lvmlockd-core.c +++ b/daemons/lvmlockd/lvmlockd-core.c @@ -4431,7 +4431,7 @@ static void client_recv_action(struct client *cl) return; } - req.cft = dm_config_from_string(req.buffer.mem); + req.cft = config_tree_from_string_without_dup_node_check(req.buffer.mem); if (!req.cft) { log_error("client recv %u config_from_string error", cl->id); buffer_destroy(&req.buffer); diff --git a/lib/cache/lvmcache.c b/lib/cache/lvmcache.c index 6ce778d..5e402f0 100644 --- a/lib/cache/lvmcache.c +++ b/lib/cache/lvmcache.c @@ -1275,7 +1275,7 @@ struct volume_group *lvmcache_get_vg(struct cmd_context *cmd, const char *vgname /* Build config tree from vgmetadata, if not yet cached */ if (!vginfo->cft && !(vginfo->cft = - dm_config_from_string(vginfo->vgmetadata))) + config_tree_from_string_without_dup_node_check(vginfo->vgmetadata))) goto_bad; if (!(vg = import_vg_from_config_tree(vginfo->cft, fid))) diff --git a/lib/format_text/export.c b/lib/format_text/export.c index 810c932..1ecc362 100644 --- a/lib/format_text/export.c +++ b/lib/format_text/export.c @@ -22,6 +22,7 @@ #include "text_export.h" #include "lvm-version.h" #include "toolcontext.h" +#include "config-util.h" #include <stdarg.h> #include <time.h> @@ -1077,7 +1078,7 @@ struct dm_config_tree *export_vg_to_config_tree(struct volume_group *vg) return_NULL; } - if (!(vg_cft = dm_config_from_string(buf))) { + if (!(vg_cft = config_tree_from_string_without_dup_node_check(buf))) { log_error("Error parsing metadata for VG %s.", vg->name); dm_free(buf); return_NULL; diff --git a/libdaemon/client/daemon-client.c b/libdaemon/client/daemon-client.c index 413d757..5ce1fc0 100644 --- a/libdaemon/client/daemon-client.c +++ b/libdaemon/client/daemon-client.c @@ -120,7 +120,7 @@ daemon_reply daemon_send(daemon_handle h, daemon_request rq) reply.error = errno; if (buffer_read(h.socket_fd, &reply.buffer)) { - reply.cft = dm_config_from_string(reply.buffer.mem); + reply.cft = config_tree_from_string_without_dup_node_check(reply.buffer.mem); if (!reply.cft) reply.error = EPROTO; } else diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c index 0e37dfb..6af6de9 100644 --- a/libdaemon/server/daemon-server.c +++ b/libdaemon/server/daemon-server.c @@ -444,7 +444,7 @@ static void *_client_thread(void *state) if (!buffer_read(ts->client.socket_fd, &req.buffer)) goto fail; - req.cft = dm_config_from_string(req.buffer.mem); + req.cft = config_tree_from_string_without_dup_node_check(req.buffer.mem); if (!req.cft) fprintf(stderr, "error parsing request:\n %s\n", req.buffer.mem);
1
0
0
0
master - config: add config_tree_from_string_without_dup_node_check to replace dm_config_from_string where needed
by Zdenek Kabelac
21 Sep '16
21 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=045772aa30ba1c5a…
Commit: 045772aa30ba1c5ab9dff730ce25ca6346c7150a Parent: e40fbd08c8e3da43d07aabe58bd5549105056908 Author: Peter Rajnoha <prajnoha(a)redhat.com> AuthorDate: Wed Sep 21 14:42:16 2016 +0200 Committer: Zdenek Kabelac <zkabelac(a)redhat.com> CommitterDate: Wed Sep 21 18:18:15 2016 +0200 config: add config_tree_from_string_without_dup_node_check to replace dm_config_from_string where needed --- libdaemon/client/config-util.c | 15 +++++++++++++++ libdaemon/client/config-util.h | 2 ++ 2 files changed, 17 insertions(+), 0 deletions(-) diff --git a/libdaemon/client/config-util.c b/libdaemon/client/config-util.c index e262182..93f3d0a 100644 --- a/libdaemon/client/config-util.c +++ b/libdaemon/client/config-util.c @@ -161,6 +161,21 @@ void chain_node(struct dm_config_node *cn, } +struct dm_config_tree *config_tree_from_string_without_dup_node_check(const char *config_settings) +{ + struct dm_config_tree *cft; + + if (!(cft = dm_config_create())) + return_NULL; + + if (!dm_config_parse_without_dup_node_check(cft, config_settings, config_settings + strlen(config_settings))) { + dm_config_destroy(cft); + return_NULL; + } + + return cft; +} + struct dm_config_node *make_config_node(struct dm_config_tree *cft, const char *key, struct dm_config_node *parent, diff --git a/libdaemon/client/config-util.h b/libdaemon/client/config-util.h index 38f36af..485161f 100644 --- a/libdaemon/client/config-util.h +++ b/libdaemon/client/config-util.h @@ -66,4 +66,6 @@ struct dm_config_node *config_make_nodes(struct dm_config_tree *cft, struct dm_config_node *pre_sib, ...); +struct dm_config_tree *config_tree_from_string_without_dup_node_check(const char *config_settings); + #endif /* _LVM_DAEMON_CONFIG_UTIL_H */
1
0
0
0
master - config: parse config tree without dup node checking if it's metadata tree
by Zdenek Kabelac
21 Sep '16
21 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=e40fbd08c8e3da43…
Commit: e40fbd08c8e3da43d07aabe58bd5549105056908 Parent: 7563e69cf13126af5889de147c092b9d2e490648 Author: Peter Rajnoha <prajnoha(a)redhat.com> AuthorDate: Wed Sep 21 14:27:15 2016 +0200 Committer: Zdenek Kabelac <zkabelac(a)redhat.com> CommitterDate: Wed Sep 21 18:16:05 2016 +0200 config: parse config tree without dup node checking if it's metadata tree --- lib/config/config.c | 13 +++++++++---- lib/config/config.h | 2 +- lib/format_text/import.c | 4 ++-- tools/toollib.c | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/config/config.c b/lib/config/config.c index 820a744..6ad04e5 100644 --- a/lib/config/config.c +++ b/lib/config/config.c @@ -496,7 +496,7 @@ int override_config_tree_from_profile(struct cmd_context *cmd, int config_file_read_fd(struct dm_config_tree *cft, struct device *dev, off_t offset, size_t size, off_t offset2, size_t size2, checksum_fn_t checksum_fn, uint32_t checksum, - int checksum_only) + int checksum_only, int no_dup_node_check) { char *fb, *fe; int r = 0; @@ -547,8 +547,13 @@ int config_file_read_fd(struct dm_config_tree *cft, struct device *dev, if (!checksum_only) { fe = fb + size + size2; - if (!dm_config_parse(cft, fb, fe)) - goto_out; + if (no_dup_node_check) { + if (!dm_config_parse_without_dup_node_check(cft, fb, fe)) + goto_out; + } else { + if (!dm_config_parse(cft, fb, fe)) + goto_out; + } } r = 1; @@ -596,7 +601,7 @@ int config_file_read(struct dm_config_tree *cft) } r = config_file_read_fd(cft, cf->dev, 0, (size_t) info.st_size, 0, 0, - (checksum_fn_t) NULL, 0, 0); + (checksum_fn_t) NULL, 0, 0, 0); if (!cf->keep_open) { if (!dev_close(cf->dev)) diff --git a/lib/config/config.h b/lib/config/config.h index f0202b6..8a7d6c3 100644 --- a/lib/config/config.h +++ b/lib/config/config.h @@ -239,7 +239,7 @@ struct dm_config_tree *config_open(config_source_t source, const char *filename, int config_file_read_fd(struct dm_config_tree *cft, struct device *dev, off_t offset, size_t size, off_t offset2, size_t size2, checksum_fn_t checksum_fn, uint32_t checksum, - int skip_parse); + int skip_parse, int no_dup_node_check); int config_file_read(struct dm_config_tree *cft); struct dm_config_tree *config_file_open_and_read(const char *config_file, config_source_t source, struct cmd_context *cmd); diff --git a/lib/format_text/import.c b/lib/format_text/import.c index 629884b..62dee8f 100644 --- a/lib/format_text/import.c +++ b/lib/format_text/import.c @@ -56,7 +56,7 @@ int text_vgsummary_import(const struct format_type *fmt, (dev && !config_file_read_fd(cft, dev, offset, size, offset2, size2, checksum_fn, vgsummary->mda_checksum, - checksum_only))) { + checksum_only, 1))) { log_error("Couldn't read volume group metadata."); goto out; } @@ -130,7 +130,7 @@ struct volume_group *text_vg_import_fd(struct format_instance *fid, if ((!dev && !config_file_read(cft)) || (dev && !config_file_read_fd(cft, dev, offset, size, offset2, size2, checksum_fn, checksum, - skip_parse))) + skip_parse, 1))) goto_out; if (skip_parse) { diff --git a/tools/toollib.c b/tools/toollib.c index ec6f2f7..9127d85 100644 --- a/tools/toollib.c +++ b/tools/toollib.c @@ -1386,7 +1386,7 @@ int get_cache_params(struct cmd_context *cmd, NULL))) goto_out; - if (!dm_config_parse(current, str, str + strlen(str))) + if (!dm_config_parse_without_dup_node_check(current, str, str + strlen(str))) goto_out; }
1
0
0
0
master - libdm: add dm_config_parse_without_dup_node_check
by Zdenek Kabelac
21 Sep '16
21 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=7563e69cf13126af…
Commit: 7563e69cf13126af5889de147c092b9d2e490648 Parent: 094488ffab4837fa14069b81a15e0a6bdaca8a73 Author: Peter Rajnoha <prajnoha(a)redhat.com> AuthorDate: Wed Sep 21 14:25:24 2016 +0200 Committer: Zdenek Kabelac <zkabelac(a)redhat.com> CommitterDate: Wed Sep 21 18:15:18 2016 +0200 libdm: add dm_config_parse_without_dup_node_check Introduce function for config parsing tree without checking for duplicate nodes. --- WHATS_NEW_DM | 1 + libdm/.exported_symbols.DM_1_02_135 | 1 + libdm/libdevmapper.h | 1 + libdm/libdm-config.c | 47 +++++++++++++++++++++++------------ 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index edb1e70..7d32dff 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,6 @@ Version 1.02.135 - ===================================== + Introduce new dm_config_parse_without_dup_node_check(). Version 1.02.134 - 7th September 2016 ===================================== diff --git a/libdm/.exported_symbols.DM_1_02_135 b/libdm/.exported_symbols.DM_1_02_135 new file mode 100644 index 0000000..dceeb4e --- /dev/null +++ b/libdm/.exported_symbols.DM_1_02_135 @@ -0,0 +1 @@ +dm_config_parse_without_dup_node_check diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h index 5790486..97c3e51 100644 --- a/libdm/libdevmapper.h +++ b/libdm/libdevmapper.h @@ -3333,6 +3333,7 @@ struct dm_config_tree { struct dm_config_tree *dm_config_create(void); struct dm_config_tree *dm_config_from_string(const char *config_settings); int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *end); +int dm_config_parse_without_dup_node_check(struct dm_config_tree *cft, const char *start, const char *end); void *dm_config_get_custom(struct dm_config_tree *cft); void dm_config_set_custom(struct dm_config_tree *cft, void *custom); diff --git a/libdm/libdm-config.c b/libdm/libdm-config.c index dcb7c3f..90e3405 100644 --- a/libdm/libdm-config.c +++ b/libdm/libdm-config.c @@ -50,6 +50,7 @@ struct parser { int line; /* line number we are on */ struct dm_pool *mem; + int no_dup_node_check; /* whether to disable dup node checking */ }; struct config_output { @@ -170,7 +171,7 @@ static struct dm_config_node *_config_reverse(struct dm_config_node *head) return middle; } -int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *end) +static int _do_dm_config_parse(struct dm_config_tree *cft, const char *start, const char *end, int no_dup_node_check) { /* TODO? if (start == end) return 1; */ @@ -183,6 +184,7 @@ int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *e p->fe = end; p->tb = p->te = p->fb; p->line = 1; + p->no_dup_node_check = no_dup_node_check; _get_token(p, TOK_SECTION_E); if (!(cft->root = _file(p))) @@ -193,6 +195,16 @@ int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *e return 1; } +int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *end) +{ + return _do_dm_config_parse(cft, start, end, 0); +} + +int dm_config_parse_without_dup_node_check(struct dm_config_tree *cft, const char *start, const char *end) +{ + return _do_dm_config_parse(cft, start, end, 1); +} + struct dm_config_tree *dm_config_from_string(const char *config_settings) { struct dm_config_tree *cft; @@ -509,7 +521,8 @@ static struct dm_config_node *_make_node(struct dm_pool *mem, /* when mem is not NULL, we create the path if it doesn't exist yet */ static struct dm_config_node *_find_or_make_node(struct dm_pool *mem, struct dm_config_node *parent, - const char *path) + const char *path, + int no_dup_node_check) { const char *e; struct dm_config_node *cn = parent ? parent->child : NULL; @@ -526,18 +539,20 @@ static struct dm_config_node *_find_or_make_node(struct dm_pool *mem, /* hunt for the node */ cn_found = NULL; - while (cn) { - if (_tok_match(cn->key, path, e)) { - /* Inefficient */ - if (!cn_found) - cn_found = cn; - else - log_warn("WARNING: Ignoring duplicate" - " config node: %s (" - "seeking %s)", cn->key, path); - } + if (!no_dup_node_check) { + while (cn) { + if (_tok_match(cn->key, path, e)) { + /* Inefficient */ + if (!cn_found) + cn_found = cn; + else + log_warn("WARNING: Ignoring duplicate" + " config node: %s (" + "seeking %s)", cn->key, path); + } - cn = cn->sib; + cn = cn->sib; + } } if (!cn_found && mem) { @@ -588,7 +603,7 @@ static struct dm_config_node *_section(struct parser *p, struct dm_config_node * return NULL; } - if (!(root = _find_or_make_node(p->mem, parent, str))) + if (!(root = _find_or_make_node(p->mem, parent, str, p->no_dup_node_check))) return_NULL; if (p->t == TOK_SECTION_B) { @@ -912,7 +927,7 @@ typedef const struct dm_config_node *node_lookup_fn(const void *start, const cha static const struct dm_config_node *_find_config_node(const void *start, const char *path) { struct dm_config_node dummy = { .child = (void *) start }; - return _find_or_make_node(NULL, &dummy, path); + return _find_or_make_node(NULL, &dummy, path, 0); } static const struct dm_config_node *_find_first_config_node(const void *start, const char *path) @@ -1395,7 +1410,7 @@ static int _override_path(const char *path, struct dm_config_node *node, void *b struct dm_config_tree *cft = baton; struct dm_config_node dummy, *target; dummy.child = cft->root; - if (!(target = _find_or_make_node(cft->mem, &dummy, path))) + if (!(target = _find_or_make_node(cft->mem, &dummy, path, 0))) return_0; if (!(target->v = _clone_config_value(cft->mem, node->v))) return_0;
1
0
0
0
master - Revert "lvconvert: fix (automatic) raid repair regression"
by Alasdair Kergon
21 Sep '16
21 Sep '16
Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c2f65806f62a49f6…
Commit: c2f65806f62a49f6f3da59e721f7a1d03326c009 Parent: 094488ffab4837fa14069b81a15e0a6bdaca8a73 Author: Alasdair G Kergon <agk(a)redhat.com> AuthorDate: Wed Sep 21 16:05:08 2016 +0100 Committer: Alasdair G Kergon <agk(a)redhat.com> CommitterDate: Wed Sep 21 16:05:08 2016 +0100 Revert "lvconvert: fix (automatic) raid repair regression" This reverts commit 5d455b28fce16fce20f33279fe3b1b682c57e619. This change depends on the kernel version, so should detect this and behave accordingly. --- WHATS_NEW | 1 - daemons/dmeventd/plugins/raid/dmeventd_raid.c | 42 ++-------- lib/metadata/lv.c | 6 ++ lib/metadata/raid_manip.c | 2 +- test/shell/lvconvert-repair-raid.sh | 104 +----------------------- tools/lvconvert.c | 18 ++++ 6 files changed, 39 insertions(+), 134 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index f7b39b9..faddb9f 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,6 +1,5 @@ Version 2.02.166 - ===================================== - Fix lvconvert --repair regression Fix reported origin lv field for cache volumes. (2.02.133) Always specify snapshot cow LV for monitoring not internal LV. (2.02.165) Fix lvchange --discard|--zero for active thin-pool. diff --git a/daemons/dmeventd/plugins/raid/dmeventd_raid.c b/daemons/dmeventd/plugins/raid/dmeventd_raid.c index bec594a..770fbc6 100644 --- a/daemons/dmeventd/plugins/raid/dmeventd_raid.c +++ b/daemons/dmeventd/plugins/raid/dmeventd_raid.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2016 Red Hat, Inc. All rights reserved. + * Copyright (C) 2005-2015 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -13,20 +13,14 @@ */ #include "lib.h" -#include "defaults.h" #include "dmeventd_lvm.h" #include "libdevmapper-event.h" -/* Hold enough elements for the mximum number of RAID images */ -#define RAID_DEVS_ELEMS ((DEFAULT_RAID_MAX_IMAGES + 63) / 64) - struct dso_state { struct dm_pool *mem; char cmd_lvscan[512]; char cmd_lvconvert[512]; - uint64_t raid_devs[RAID_DEVS_ELEMS]; int failed; - int warned; }; DM_EVENT_LOG_FN("raid") @@ -37,39 +31,20 @@ static int _process_raid_event(struct dso_state *state, char *params, const char { struct dm_status_raid *status; const char *d; - int dead = 0, r = 1; if (!dm_get_status_raid(state->mem, params, &status)) { log_error("Failed to process status line for %s.", device); return 0; } - d = status->dev_health; - while ((d = strchr(d, 'D'))) { - uint32_t dev = (uint32_t)(d - status->dev_health); - - if (!(state->raid_devs[dev / 64] & (1 << (dev % 64)))) - log_error("Device #%u of %s array, %s, has failed.", - dev, status->raid_type, device); - - state->raid_devs[dev / 64] |= (1 << (dev % 64)); - d++; - dead = 1; - } - - if (dead) { - if (status->insync_regions < status->total_regions) { - if (!state->warned) - log_warn("WARNING: waiting for resynchronization to finish " - "before initiating repair on RAID device %s", device); - - state->warned = 1; - goto out; /* Not yet done syncing with accessible devices */ - } - + if ((d = strchr(status->dev_health, 'D'))) { if (state->failed) goto out; /* already reported */ + log_error("Device #%d of %s array, %s, has failed.", + (int)(d - status->dev_health), + status->raid_type, device); + state->failed = 1; if (!dmeventd_lvm2_run_with_lock(state->cmd_lvscan)) log_warn("WARNING: Re-scan of RAID device %s failed.", device); @@ -77,7 +52,8 @@ static int _process_raid_event(struct dso_state *state, char *params, const char /* if repair goes OK, report success even if lvscan has failed */ if (!dmeventd_lvm2_run_with_lock(state->cmd_lvconvert)) { log_info("Repair of RAID device %s failed.", device); - r = 0; + dm_pool_free(state->mem, status); + return 0; } } else { state->failed = 0; @@ -88,7 +64,7 @@ static int _process_raid_event(struct dso_state *state, char *params, const char out: dm_pool_free(state->mem, status); - return r; + return 1; } void process_event(struct dm_task *dmt, diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c index 70036f9..03d52ae 100644 --- a/lib/metadata/lv.c +++ b/lib/metadata/lv.c @@ -1017,6 +1017,12 @@ int lv_raid_image_in_sync(const struct logical_volume *lv) return 0; } + if (!lv_raid_percent(raid_seg->lv, &percent)) + return_0; + + if (percent == DM_PERCENT_100) + return 1; + /* Find out which sub-LV this is. */ for (s = 0; s < raid_seg->area_count; s++) if (seg_lv(raid_seg, s) == lv) diff --git a/lib/metadata/raid_manip.c b/lib/metadata/raid_manip.c index deb88a2..e5fdf4f 100644 --- a/lib/metadata/raid_manip.c +++ b/lib/metadata/raid_manip.c @@ -3658,7 +3658,7 @@ static int _lv_raid_rebuild_or_replace(struct logical_volume *lv, return 0; } - if (!_raid_in_sync(lv)) { + if (!mirror_in_sync() && !_raid_in_sync(lv)) { log_error("Unable to replace devices in %s/%s while it is" " not in-sync.", lv->vg->name, lv->name); return 0; diff --git a/test/shell/lvconvert-repair-raid.sh b/test/shell/lvconvert-repair-raid.sh index b51d8fe..1ef91c4 100644 --- a/test/shell/lvconvert-repair-raid.sh +++ b/test/shell/lvconvert-repair-raid.sh @@ -22,52 +22,11 @@ aux lvmconf 'allocation/maximise_cling = 0' \ aux prepare_vg 8 -function delay -{ - for d in $(< DEVICES) - do - aux delay_dev "$d" 0 $1 $(get first_extent_sector "$d") - done -} - # It's possible small raid arrays do have problems with reporting in-sync. # So try bigger size -RAID_SIZE=32 - -# Fast sync and repair afterwards -delay 0 - -# RAID1 dual-leg single replace after initial sync -lvcreate --type raid1 -m 1 -L $RAID_SIZE -n $lv1 $vg "$dev1" "$dev2" -aux wait_for_sync $vg $lv1 -aux disable_dev "$dev2" -lvconvert -y --repair $vg/$lv1 -vgreduce --removemissing $vg -aux enable_dev "$dev2" -vgextend $vg "$dev2" -lvremove -ff $vg/$lv1 - -# Delayed sync to allow for repair during rebuild -delay 50 - -# RAID1 triple-leg single replace during initial sync -lvcreate --type raid1 -m 2 -L $RAID_SIZE -n $lv1 $vg "$dev1" "$dev2" "$dev3" -aux disable_dev "$dev2" "$dev3" -not lvconvert -y --repair $vg/$lv1 -aux wait_for_sync $vg $lv1 -lvconvert -y --repair $vg/$lv1 -vgreduce --removemissing $vg -aux enable_dev "$dev2" "$dev3" -vgextend $vg "$dev2" "$dev3" -lvremove -ff $vg/$lv1 - - -# Larger RAID size possible for striped RAID RAID_SIZE=64 -# Fast sync and repair afterwards -delay 0 -# RAID5 single replace after initial sync +# RAID5 single replace lvcreate --type raid5 -i 2 -L $RAID_SIZE -n $lv1 $vg "$dev1" "$dev2" "$dev3" aux wait_for_sync $vg $lv1 aux disable_dev "$dev3" @@ -75,69 +34,16 @@ lvconvert -y --repair $vg/$lv1 vgreduce --removemissing $vg aux enable_dev "$dev3" vgextend $vg "$dev3" -lvremove -ff $vg/$lv1 +lvremove -ff $vg -# Delayed sync to allow for repair during rebuild -delay 50 - -# RAID5 single replace during initial sync -lvcreate --type raid5 -i 2 -L $RAID_SIZE -n $lv1 $vg "$dev1" "$dev2" "$dev3" -aux disable_dev "$dev3" -not lvconvert -y --repair $vg/$lv1 -aux wait_for_sync $vg $lv1 -lvconvert -y --repair $vg/$lv1 -vgreduce --removemissing $vg -aux enable_dev "$dev3" -vgextend $vg "$dev3" -lvremove -ff $vg/$lv1 - -# Fast sync and repair afterwards -delay 0 - -# RAID6 double replace after initial sync +# RAID6 double replace lvcreate --type raid6 -i 3 -L $RAID_SIZE -n $lv1 $vg \ "$dev1" "$dev2" "$dev3" "$dev4" "$dev5" aux wait_for_sync $vg $lv1 aux disable_dev "$dev4" "$dev5" lvconvert -y --repair $vg/$lv1 vgreduce --removemissing $vg -aux enable_dev "$dev4" "$dev5" -vgextend $vg "$dev4" "$dev5" -lvremove -ff $vg/$lv1 - -# Delayed sync to allow for repair during rebuild -delay 50 - -# RAID6 single replace after initial sync -lvcreate --type raid6 -i 3 -L $RAID_SIZE -n $lv1 $vg \ - "$dev1" "$dev2" "$dev3" "$dev4" "$dev5" -aux disable_dev "$dev4" -not lvconvert -y --repair $vg/$lv1 -delay 0 # Fast sync and repair afterwards -aux disable_dev "$dev4" # Need to disable again after changing delay -aux wait_for_sync $vg $lv1 -lvconvert -y --repair $vg/$lv1 -vgreduce --removemissing $vg aux enable_dev "$dev4" -vgextend $vg "$dev4" -lvremove -ff $vg/$lv1 - -# Delayed sync to allow for repair during rebuild -delay 50 - -# RAID10 single replace after initial sync -lvcreate --type raid10 -m 1 -i 2 -L $RAID_SIZE -n $lv1 $vg \ - "$dev1" "$dev2" "$dev3" "$dev4" -aux disable_dev "$dev4" -not lvconvert -y --repair $vg/$lv1 -delay 0 # Fast sync and repair afterwards -aux disable_dev "$dev4" # Need to disable again after changing delay -aux disable_dev "$dev1" -aux wait_for_sync $vg $lv1 -lvconvert -y --repair $vg/$lv1 -vgreduce --removemissing $vg -aux enable_dev "$dev4" -vgextend $vg "$dev4" -lvremove -ff $vg/$lv1 - +aux enable_dev "$dev5" +vgextend $vg "$dev4" "$dev5" vgremove -ff $vg diff --git a/tools/lvconvert.c b/tools/lvconvert.c index 3607247..18010d5 100644 --- a/tools/lvconvert.c +++ b/tools/lvconvert.c @@ -1973,6 +1973,24 @@ static int _lvconvert_raid(struct logical_volume *lv, struct lvconvert_params *l return 0; } + if (!lv_raid_percent(lv, &sync_percent)) { + log_error("Unable to determine sync status of %s.", + display_lvname(lv)); + return 0; + } + + if (sync_percent != DM_PERCENT_100) { + log_warn("WARNING: %s is not in-sync.", display_lvname(lv)); + log_warn("WARNING: Portions of the array may be unrecoverable."); + + /* + * The kernel will not allow a device to be replaced + * in an array that is not in-sync unless we override + * by forcing the array to be considered "in-sync". + */ + init_mirror_in_sync(1); + } + _lvconvert_raid_repair_ask(cmd, lp, &replace); if (replace) {
1
0
0
0
← Newer
1
2
3
4
5
6
...
11
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
Results per page:
10
25
50
100
200