From mboxrd@z Thu Jan 1 00:00:00 1970 From: Guoqing Jiang Subject: Re: [PATCH] udev rules: introduce rules for cluster-md to confirm device Date: Tue, 1 Aug 2017 16:05:03 +0800 Message-ID: <5980362F.9040909@suse.com> References: <20170801031504.8452-1-gqjiang@suse.com> <87o9rzvr2r.fsf@notabene.neil.brown.name> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <87o9rzvr2r.fsf@notabene.neil.brown.name> Sender: linux-raid-owner@vger.kernel.org To: NeilBrown , linux-raid@vger.kernel.org Cc: jes.sorensen@gmail.com List-Id: linux-raid.ids On 08/01/2017 12:40 PM, NeilBrown wrote: > On Tue, Aug 01 2017, Guoqing Jiang wrote: > >> For cluster scenario, add device is different with native raid. >> When a node issues adds a device, then the node will broadcast >> a message with UUID to other nodes in the cluster. If receiving >> node can find the device with the specific UUID, it must confirm >> the device, otherwise reports it is missing. >> >> Signed-off-by: Guoqing Jiang >> --- >> Makefile | 6 ++++-- >> udev-md-clustered-confirm-device.rules | 20 ++++++++++++++++++++ >> 2 files changed, 24 insertions(+), 2 deletions(-) >> create mode 100644 udev-md-clustered-confirm-device.rules >> >> diff --git a/Makefile b/Makefile >> index 021d3ad..0977f27 100644 >> --- a/Makefile >> +++ b/Makefile >> @@ -256,8 +256,10 @@ install-man: mdadm.8 md.4 mdadm.conf.5 mdmon.8 >> $(INSTALL) -D -m 644 md.4 $(DESTDIR)$(MAN4DIR)/md.4 >> $(INSTALL) -D -m 644 mdadm.conf.5 $(DESTDIR)$(MAN5DIR)/mdadm.conf.5 >> >> -install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules udev-md-raid-creating.rules >> - @for file in 01-md-raid-creating.rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules ; \ >> +install-udev: udev-md-raid-arrays.rules udev-md-raid-assembly.rules udev-md-raid-creating.rules \ >> + udev-md-clustered-confirm-device.rules >> + @for file in 01-md-raid-creating.rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules \ >> + 69-md-clustered-confirm-device.rules ; \ >> do sed -e 's,BINDIR,$(BINDIR),g' udev-$${file#??-} > .install.tmp.1 && \ >> $(ECHO) $(INSTALL) -D -m 644 udev-$${file#??-} $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \ >> $(INSTALL) -D -m 644 .install.tmp.1 $(DESTDIR)$(UDEVDIR)/rules.d/$$file ; \ >> diff --git a/udev-md-clustered-confirm-device.rules b/udev-md-clustered-confirm-device.rules >> new file mode 100644 >> index 0000000..d763e27 >> --- /dev/null >> +++ b/udev-md-clustered-confirm-device.rules >> @@ -0,0 +1,20 @@ >> +# do not edit this file, it will be overwritten on update >> + >> +SUBSYSTEM!="block", GOTO="clustermd_end" >> + >> +# handle md arrays >> +KERNEL!="md*", GOTO="clustermd_end" >> +ENV{DEVTYPE}!="disk", GOTO="clustermd_end" >> + >> +# Based on the received UUID, node confirms the device if >> +# it is found by blkid, otherwise the node reports it is >> +# missing. >> +ACTION=="change", ENV{EVENT}=="ADD_DEVICE", ENV{DEVICE_UUID}=="?*", ENV{RAID_DISK}=="?*", \ >> +PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", RESULT!="", \ >> +RUN+="BINDIR/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:$result" >> + >> +ACTION=="change", ENV{EVENT}=="ADD_DEVICE", ENV{DEVICE_UUID}=="?*", ENV{RAID_DISK}=="?*", \ >> +PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", RESULT=="", \ >> +RUN+="BINDIR/mdadm --manage $env{DEVNAME} --cluster-confirm $env{RAID_DISK}:missing" >> + >> +LABEL="clustermd_end" >> -- >> 2.10.0 > This can run "blkid" twice, which seems wasteful. > I think it would be best to skip to the end if ACTION != "change" and if > event != ADD_DEVICE etc. > Then > PROGRAM="BINDIR/blkid -o device -t UUID_SUB=$env{DEVICE_UUID}", ENV{".mdadm.blkid"} = "$result" > > Then have two rules which tests ENV{".mdadm.blkid"} and run one of the > two mdadm commands. Thanks for the suggestion! I will send v2 soon. Cheers, Guoqing