idmapd upstart job ends in an inconsistent state if /usr is a separate partition
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
nfs-utils (Ubuntu) |
Fix Released
|
Medium
|
Steve Langasek | ||
Lucid |
Fix Released
|
Medium
|
Steve Langasek | ||
Maverick |
Fix Released
|
Medium
|
Steve Langasek | ||
Natty |
Fix Released
|
Medium
|
Steve Langasek |
Bug Description
Because the idmapd upstart job uses a script line instead of directly exec'ing the server, in the case where /usr is a separate partition and not yet mounted at the time the job is started (e.g., because an NFS mount is attempted in parallel to an fsck of /usr), the job will fail to start and get wedged in a 'start/running' state with no associated PID (upstart bug #545673). If we exec the daemon directly, upstart will detect the exec() failure and respawn as needed.
This partially addresses the problems described in bug #643289, and is worth SRUing in its own right even though it doesn't provide a complete solution for all users.
SRU justification: race conditions in the nfs-utils upstart jobs cause NFS client startup to be unreliable in certain configurations in lucid and above, a regression vs. pre-upstart releases of Ubuntu.
Although this upload includes the removal of the rpc_pipefs job (moving its functionality into the gssd and idmapd jobs for simplicity), the real risk of regression here is very small. There are no changes to the start/stop conditions to the gssd or idmapd jobs, only a change to the script rule for the idmapd job. This should have *no effect* except in the case where /usr/sbin/
TEST CASE:
1. configure a system with /usr on a separate partition.
2. install nfs-common from the release (or -updates) pocket.
3. configure an NFSv4 mount in /etc/fstab to trigger idmapd to start before /usr is mounted. (The nfsv4 mount does not have to actually be mountable. Here is an example entry:
borges:/ /home/devel nfs4 sec=krb5i,proto=tcp 0 0
)
4. boot and verify with 'service idmapd' that the idmapd service is left in state 'start/running', with no associated process.
5. install nfs-common from the -proposed pocket and reboot.
6. verify with 'service idmapd' that the idmapd service has been successfully started, and is in state 'start/running' with an associated pid.
Changed in nfs-utils (Ubuntu): | |
status: | New → Triaged |
importance: | Undecided → Medium |
assignee: | nobody → Steve Langasek (vorlon) |
Changed in nfs-utils (Ubuntu Lucid): | |
status: | New → Triaged |
Changed in nfs-utils (Ubuntu Maverick): | |
status: | New → Triaged |
Changed in nfs-utils (Ubuntu Natty): | |
status: | New → Triaged |
Changed in nfs-utils (Ubuntu Lucid): | |
importance: | Undecided → Medium |
Changed in nfs-utils (Ubuntu Maverick): | |
importance: | Undecided → Medium |
Changed in nfs-utils (Ubuntu Natty): | |
importance: | Undecided → Medium |
Changed in nfs-utils (Ubuntu Lucid): | |
assignee: | nobody → Steve Langasek (vorlon) |
Changed in nfs-utils (Ubuntu Maverick): | |
assignee: | nobody → Steve Langasek (vorlon) |
Changed in nfs-utils (Ubuntu Natty): | |
assignee: | nobody → Steve Langasek (vorlon) |
Changed in nfs-utils (Ubuntu Natty): | |
status: | Triaged → In Progress |
description: | updated |
Changed in nfs-utils (Ubuntu Maverick): | |
status: | Triaged → In Progress |
Changed in nfs-utils (Ubuntu Lucid): | |
status: | Triaged → In Progress |
Changed in nfs-utils (Ubuntu Natty): | |
status: | Fix Committed → Fix Released |
Changed in nfs-utils (Ubuntu Natty): | |
status: | Fix Released → Fix Committed |
tags: | added: testcase |
tags: | added: verification-done |
tags: | removed: verification-done-natty |
tags: | removed: verification-done-lucid verification-needed |
This bug was fixed in the package nfs-utils - 1:1.2.2-4ubuntu8
---------------
nfs-utils (1:1.2.2-4ubuntu8) oneiric; urgency=low
* debian/ nfs-common. idmapd. upstart: don't use a script unnecessarily for
our job when we can exec directly - making the job more resilient in
the face of races with /usr being mounted. LP: #811823.
* Drop rpc_pipefs.conf; this has gotten far more complicated than it
should be, just do the mount in-line in each of the gssd and idmapd
jobs.
-- Steve Langasek <email address hidden> Sun, 17 Jul 2011 02:23:01 -0700