Discussion:
[PATCH] rpcbind.service: Not pulling the rpcbind.target
(too old to reply)
Steve Dickson
2017-12-14 17:05:44 UTC
Permalink
Raw Message
According to systemd.special(7) manpage:

rpcbind.target
The portmapper/rpcbind pulls in this target and orders itself before it, to indicate its availability. systemd automatically adds dependencies of type After= for this target unit to all SysV init script service units with an LSB header referring to the "$portmap" facility.

Signed-off-by: Steve Dickson <***@redhat.com>
---
systemd/rpcbind.service.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..2b49c24 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@

# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Wants=rpcbind.socket rpcbind.target
+After=rpcbind.socket rpcbind.target

[Service]
Type=notify
--
2.14.3
Uoti Urpala
2017-12-14 17:48:12 UTC
Permalink
Raw Message
Post by Steve Dickson
rpcbind.target
The portmapper/rpcbind pulls in this target and orders itself
before it, to indicate its availability. systemd automatically adds
dependencies of type After= for this target unit to all SysV init
script service units with an LSB header referring to the "$portmap"
facility.
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..2b49c24 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@
# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Wants=rpcbind.socket rpcbind.target
+After=rpcbind.socket rpcbind.target
Is this needed when the service has socket activation support? If the
only interaction with it is through the socket, it shouldn't matter
even if the service is not actually up yet - clients can already open
connections to the socket regardless.

And regardless, that "After" for rpcbind.target seems backwards.
Shouldn't it be "Before", so that the target being up signals that the
service has already been started?

Not directly related, but if that comment is accurate and the socket
should be used "no matter what", perhaps that should be "Requires"
instead of "Wants" so that if the socket could not be opened for some
reason, the service fails instead of starting without socket
activation?
Steve Dickson
2017-12-14 18:24:59 UTC
Permalink
Raw Message
Post by Uoti Urpala
Post by Steve Dickson
rpcbind.target
The portmapper/rpcbind pulls in this target and orders itself
before it, to indicate its availability. systemd automatically adds
dependencies of type After= for this target unit to all SysV init
script service units with an LSB header referring to the "$portmap"
facility.
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..2b49c24 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@
# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Wants=rpcbind.socket rpcbind.target
+After=rpcbind.socket rpcbind.target
Is this needed when the service has socket activation support? If the
only interaction with it is through the socket, it shouldn't matter
even if the service is not actually up yet - clients can already open
connections to the socket regardless.
Well things are working as is... but this man page paragraph
was pointed out to me so I though these Wants and After were needed.

So you saying this patch is not needed?
Post by Uoti Urpala
And regardless, that "After" for rpcbind.target seems backwards.
Shouldn't it be "Before", so that the target being up signals that the
service has already been started?
I think this makes sense... So if the patch is needed I'll add
Before=rpcbind.target and remove the target from the After=
Post by Uoti Urpala
Not directly related, but if that comment is accurate and the socket
should be used "no matter what", perhaps that should be "Requires"
instead of "Wants" so that if the socket could not be opened for some
reason, the service fails instead of starting without socket
activation?
I was afraid of opening a can a worms here... :-)

So you are saying Wants and After should be changed to

Requires=rpcbind.socket
Before=rpcbind.target

steved
Uoti Urpala
2017-12-14 18:47:10 UTC
Permalink
Raw Message
Post by Steve Dickson
Post by Uoti Urpala
Post by Steve Dickson
+Wants=rpcbind.socket rpcbind.target
+After=rpcbind.socket rpcbind.target
Is this needed when the service has socket activation support? If the
only interaction with it is through the socket, it shouldn't matter
even if the service is not actually up yet - clients can already open
connections to the socket regardless.
Well things are working as is... but this man page paragraph
was pointed out to me so I though these Wants and After were needed.
So you saying this patch is not needed?
I'm not familiar enough with rpcbind stuff to say with certainty that
it wouldn't be needed, but at least it seems plausible to me that it
would not be. The mechanism described on the man page is a way to
implement ordering if needed, but if the early availability of the
socket means ordering is never an issue, then it can be ignored.
Post by Steve Dickson
Post by Uoti Urpala
And regardless, that "After" for rpcbind.target seems backwards.
Shouldn't it be "Before", so that the target being up signals that the
service has already been started?
I think this makes sense... So if the patch is needed I'll add
Before=rpcbind.target and remove the target from the After=
Yes.
Post by Steve Dickson
Post by Uoti Urpala
Not directly related, but if that comment is accurate and the socket
should be used "no matter what", perhaps that should be "Requires"
instead of "Wants" so that if the socket could not be opened for some
reason, the service fails instead of starting without socket
activation?
I was afraid of opening a can a worms here... :-)
So you are saying Wants and After should be changed to
Requires=rpcbind.socket
Before=rpcbind.target
Depends on the exact semantics you want. "Wants" means that systemd
will try to start the socket if the service is started, but will
continue with the service start even if the dependency fails.
"Requires" guarantees that the service will never be started without
the socket active - if opening the socket fails, then the service start
will return failure too. If you know that the socket unit should always
be used, or the service will either fail or do the wrong thing without
it (such as open a socket with parameters different from what was
configured for the socket unit, and which the admin didn't expect) then
Requires may be more appropriate.
Steve Dickson
2017-12-14 20:20:03 UTC
Permalink
Raw Message
Post by Uoti Urpala
Post by Steve Dickson
Post by Uoti Urpala
Post by Steve Dickson
+Wants=rpcbind.socket rpcbind.target
+After=rpcbind.socket rpcbind.target
Is this needed when the service has socket activation support? If the
only interaction with it is through the socket, it shouldn't matter
even if the service is not actually up yet - clients can already open
connections to the socket regardless.
Well things are working as is... but this man page paragraph
was pointed out to me so I though these Wants and After were needed.
So you saying this patch is not needed?
I'm not familiar enough with rpcbind stuff to say with certainty that
it wouldn't be needed, but at least it seems plausible to me that it
would not be. The mechanism described on the man page is a way to
implement ordering if needed, but if the early availability of the
socket means ordering is never an issue, then it can be ignored.
Post by Steve Dickson
Post by Uoti Urpala
And regardless, that "After" for rpcbind.target seems backwards.
Shouldn't it be "Before", so that the target being up signals that the
service has already been started?
I think this makes sense... So if the patch is needed I'll add
Before=rpcbind.target and remove the target from the After=
Yes.
Post by Steve Dickson
Post by Uoti Urpala
Not directly related, but if that comment is accurate and the socket
should be used "no matter what", perhaps that should be "Requires"
instead of "Wants" so that if the socket could not be opened for some
reason, the service fails instead of starting without socket
activation?
I was afraid of opening a can a worms here... :-)
So you are saying Wants and After should be changed to
Requires=rpcbind.socket
Before=rpcbind.target
Depends on the exact semantics you want. "Wants" means that systemd
will try to start the socket if the service is started, but will
continue with the service start even if the dependency fails.
"Requires" guarantees that the service will never be started without
the socket active - if opening the socket fails, then the service start
will return failure too. If you know that the socket unit should always
be used, or the service will either fail or do the wrong thing without
it (such as open a socket with parameters different from what was
configured for the socket unit, and which the admin didn't expect) then
Requires may be more appropriate.
I think I agree with you... thanks!

steved.
Post by Uoti Urpala
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
More majordomo info at http://vger.kernel.org/majordomo-info.html
Lennart Poettering
2017-12-14 18:05:51 UTC
Permalink
Raw Message
Post by Steve Dickson
rpcbind.target
The portmapper/rpcbind pulls in this target and
orders itself before it, to indicate its availability. systemd
automatically adds dependencies of type After= for this target
unit to all SysV init script service units with an LSB header
referring to the "$portmap" facility.
---
systemd/rpcbind.service.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..2b49c24 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@
# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Wants=rpcbind.socket rpcbind.target
+After=rpcbind.socket rpcbind.target
The last line should be:

After=rpcbind.socket
Before=rpcbind.target

Lennart
--
Lennart Poettering, Red Hat
Steve Dickson
2017-12-15 13:00:47 UTC
Permalink
Raw Message
According to systemd.special(7) manpage:

rpcbind.target
The portmapper/rpcbind pulls in this target and orders itself
before it, to indicate its availability. systemd automatically
adds dependencies of type After= for this target unit to
all SysV init script service units with an LSB header
referring to the "$portmap" facility.

Signed-off-by: Steve Dickson <***@redhat.com>
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1431574
---
systemd/rpcbind.service.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..9dbc82c 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@

# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Requires=rpcbind.socket
+Before=rpcbind.target

[Service]
Type=notify
--
2.14.3
Lennart Poettering
2017-12-15 14:52:04 UTC
Permalink
Raw Message
Post by Steve Dickson
rpcbind.target
The portmapper/rpcbind pulls in this target and orders itself
before it, to indicate its availability. systemd automatically
adds dependencies of type After= for this target unit to
all SysV init script service units with an LSB header
referring to the "$portmap" facility.
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1431574
---
systemd/rpcbind.service.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..9dbc82c 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@
# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Requires=rpcbind.socket
+Before=rpcbind.target
You should still pull in rpcbind.target as the man page
says. i.e. "Wants=rpcbind.target" really should be there.

Lennart
--
Lennart Poettering, Red Hat
Steve Dickson
2017-12-15 18:26:25 UTC
Permalink
Raw Message
Post by Lennart Poettering
Post by Steve Dickson
rpcbind.target
The portmapper/rpcbind pulls in this target and orders itself
before it, to indicate its availability. systemd automatically
adds dependencies of type After= for this target unit to
all SysV init script service units with an LSB header
referring to the "$portmap" facility.
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1431574
---
systemd/rpcbind.service.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/systemd/rpcbind.service.in b/systemd/rpcbind.service.in
index f8cfa9f..9dbc82c 100644
--- a/systemd/rpcbind.service.in
+++ b/systemd/rpcbind.service.in
@@ -6,8 +6,8 @@ RequiresMountsFor=@statedir@
# Make sure we use the IP addresses listed for
# rpcbind.socket, no matter how this unit is started.
-Wants=rpcbind.socket
-After=rpcbind.socket
+Requires=rpcbind.socket
+Before=rpcbind.target
You should still pull in rpcbind.target as the man page
says. i.e. "Wants=rpcbind.target" really should be there.
Duly noted... and changed!

thanks!

steved.
Post by Lennart Poettering
Lennart
Loading...