From: Lennart Poettering <lennart@poettering.net>
To: Andrey Borzenkov <arvidjaar@mail.ru>
Cc: Tomasz Torcz <tomek@pipebreaker.pl>,
systemd-devel@lists.freedesktop.org, linux-raid@vger.kernel.org
Subject: Re: [systemd-devel] systemd kills mdmon if it was started manually by user
Date: Tue, 8 Feb 2011 10:48:43 +0100 [thread overview]
Message-ID: <20110208094843.GD11446@tango.0pointer.de> (raw)
In-Reply-To: <AANLkTik7dd5SHkuBVrS6LLDR9v57GsFjjxDKQKPp-YVL@mail.gmail.com>
On Fri, 04.02.11 22:55, Andrey Borzenkov (arvidjaar@mail.ru) wrote:
> >> That's right, but the names are not known in advance and can change
> >> between reboots. This means such units have to be generated
> >> dynamically, exist until reboot (ramfs?) and be removed when array is
> >> destroyed. Not sure it is really manageable.
> >
> > Hmm? It should be sufficient to just write the service template properly
> > ("mdmon@.service") and then instantiate it when needed with "systemctl
> > start mdmon@xyz.service" or something equivalent. itMs a matter of
> > issuing a single dbus call.
> >
> >> And which instance should generate them? mdadm?
> >
> > i think it is much nicer to spawn the necessary mdadm service instance
> > from a udev rule,
>
> Yes, this can be done relatively easily; as proof of concept:
>
> SUBSYSTEM!="block", GOTO="systemd_md_end"
> ACTION!="change", GOTO="systemd_md_end"
> KERNEL!="md*", GOTO="systemd_md_end"
> ATTR{md/metadata_version}=="external:[A-Za-z]*", RUN+="/bin/systemctl
> start mdmon@%k.service"
> LABEL="systemd_md_end"
Nah, it's much better to simply use the SYSTEMD_WANTS var on the device.
Something like this:
...., ENV{SYSTEMD_WANTS}="mdmon@%k.service"
That way the device unit will simply have a wants dep on the service
unit, and this is prefectly discoverable.
> Setting SYSTEMD_WANTS would be more elegant solution, but it does not
> work with current systemd implementation. It is capable of starting
> requested units only on "add" event (effectively the very first time
> device becomes plugged), while mdmon must be started on "change"
> event, as only then we know whether mdmon is required at all.
Oha, so you are actually aware of SYSTEMD_WANTS. Hmm. I need to think
about this. Why does md employ the change event? Is this really
necessary, smells a bit foul.
> Running mdmon via systemd in this way opens up interesting
> possibility. E.g. service could be declared "immortal" and be exempt
> from usual shutdown sequence ... or is it possible to do already?
A service needs to conflict with shutdown.target to be shut down when we
go down normally. If your service does not conflict with shutdown.target
then it will stay around and be killed only after systemd is gone and
PID1 is systemd-shutdown which then kills all processes remaining
(independent of any idea of "service") and the unmounts all file
systems. Normally all services conflict with shutdown.target implicitly,
which you can turn off by setting DefaultDependencies=.
> Actually it can be implemented even without mdadm patches; apparently
> it is possible to suppress normal starting of mdmon by setting
> MDADM_NO_MDMON=1
A this point mdmon is simply broken: if glibc or mdmon itself (or any
lib it is using) is upgraded, then mdmon will keep referencing the old
.so or binary as long as it is running. This means that the fs these
files are on cannot be remounted r/o. However mdmon insists on being
shutdown only after all fs got remounted ro. So you have a cyclic
ordering loop here: mdmon wants to be shut down after the remount, but
we need to shut it down before the remount.
This is unfixable unless a) mdmon learns reexecution of itself without
losing state (like most init systems so), or b) mdmon would stop
insisting on being shutdown only after the remount.
In my eyes b) is very much preferebale: It should be possible to shut
down mdmon like any other service. And if then some md related code
still needs to be run on late shutdown this should be done from a new
process. I would be willing to add some hooks for this, so that we can
execute arbitrary drop-in processes as part of the final shutdown loop.
Lennart
--
Lennart Poettering - Red Hat, Inc.
next prev parent reply other threads:[~2011-02-08 9:48 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-04 8:41 systemd kills mdmon if it was started manually by user Andrey Borzenkov
2010-12-04 9:12 ` Christian Parpart
2010-12-04 12:08 ` Andrey Borzenkov
2010-12-12 13:20 ` [systemd-devel] " Luca Berra
2011-01-07 0:40 ` Lennart Poettering
[not found] ` <20101204121413.GC11336@mother.pipebreaker.pl>
[not found] ` <AANLkTi=nTSdHc55f08G9sdEK6u8eXp276VOTHHr0jmXT@mail.gmail.com>
[not found] ` <20110125034434.GC7046@tango.0pointer.de>
[not found] ` <AANLkTik189VTXYpzLFqP=MNBg=Nx-Yq6BOKURtiby++B@mail.gmail.com>
[not found] ` <20110125042814.GA9727@tango.0pointer.de>
2011-02-04 19:55 ` Andrey Borzenkov
2011-02-08 9:48 ` Lennart Poettering [this message]
2011-02-08 10:52 ` Andrey Borzenkov
2011-02-08 11:07 ` Lennart Poettering
2011-02-08 13:54 ` Andrey Borzenkov
2011-02-08 17:28 ` [systemd-devel] " Lennart Poettering
2011-10-23 8:00 ` Dan Williams
2011-10-24 8:04 ` Thomas Jarosch
2011-10-25 1:40 ` NeilBrown
2011-10-31 11:06 ` Lennart Poettering
2011-10-31 11:15 ` [systemd-devel] " Lennart Poettering
2011-11-02 0:44 ` NeilBrown
2011-11-02 1:16 ` Lennart Poettering
2011-11-02 2:03 ` NeilBrown
2011-11-02 13:32 ` Lennart Poettering
2011-11-02 14:33 ` Kay Sievers
2011-11-02 15:17 ` Lennart Poettering
2011-11-02 15:21 ` Kay Sievers
2011-11-02 15:29 ` [systemd-devel] " Lennart Poettering
2011-11-02 22:18 ` Williams, Dan J
2011-11-02 23:39 ` Lennart Poettering
2011-11-03 0:28 ` Williams, Dan J
2011-11-02 17:21 ` Williams, Dan J
2011-11-02 23:35 ` Lennart Poettering
2011-11-02 18:16 ` Williams, Dan J
2011-11-02 18:49 ` Kay Sievers
2011-11-02 19:31 ` Williams, Dan J
2011-11-02 19:51 ` Kay Sievers
2011-11-07 2:52 ` NeilBrown
2011-11-07 3:42 ` Kay Sievers
2011-11-07 4:30 ` NeilBrown
2011-11-07 12:00 ` Lennart Poettering
2011-11-07 19:09 ` Williams, Dan J
2011-11-08 14:43 ` Lennart Poettering
2011-11-08 23:27 ` Williams, Dan J
2011-11-08 0:11 ` Michal Soltys
2011-11-08 16:46 ` Michal Soltys
2011-11-08 20:32 ` Michal Soltys
2011-11-08 22:29 ` Williams, Dan J
2011-02-09 14:01 ` Lennart Poettering
2011-01-07 0:38 ` Lennart Poettering
2011-01-07 1:09 ` [systemd-devel] " Michael Biebl
2011-01-07 1:17 ` Roman Mamedov
2011-01-07 1:16 ` NeilBrown
2011-01-07 1:42 ` Lennart Poettering
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110208094843.GD11446@tango.0pointer.de \
--to=lennart@poettering.net \
--cc=arvidjaar@mail.ru \
--cc=linux-raid@vger.kernel.org \
--cc=systemd-devel@lists.freedesktop.org \
--cc=tomek@pipebreaker.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).