On 03/28/2017 at 03:50 PM, Dave Young wrote:
On 03/27/17 at 12:07pm, Xunlei Pang wrote:
> We met a problem that the kdump emergency service failed to
> start when the target dump timeout(we passed "rd.timeout=30"
> to kdump), it reported "Transaction is destructive" messages:
>
> [ TIME ] Timed out waiting for device dev-mapper-fedora\x2droot.device.
> [DEPEND] Dependency failed for Initrd Root Device.
> [ SKIP ] Ordering cycle found, skipping System Initialization
> [DEPEND] Dependency failed for /sysroot.
> [DEPEND] Dependency failed for Initrd Root File System.
> [DEPEND] Dependency failed for Reload Configuration from the Real Root.
> [ SKIP ] Ordering cycle found, skipping System Initialization
> [ SKIP ] Ordering cycle found, skipping Initrd Default Target
> [DEPEND] Dependency failed for File System Check on /dev/mapper/fedora-root.
> [ OK ] Reached target Initrd File Systems.
> [ OK ] Stopped dracut pre-udev hook.
> [ OK ] Stopped dracut cmdline hook.
> Starting Setup Virtual Console...
> Starting Kdump Emergency...
> [ OK ] Reached target Initrd Default Target.
> [ OK ] Stopped dracut initqueue hook.
> Failed to start kdump-error-handler.service: Transaction is destructive.
> See system logs and 'systemctl status kdump-error-handler.service' for
details.
> [FAILED] Failed to start Kdump Emergency.
> See 'systemctl status emergency.service' for details.
> [DEPEND] Dependency failed for Emergency Mode.
>
> This is because in case of root failure, initrd-root-fs.target
> will trigger systemd emergency target which requires the systemd
> emergency service actually is kdump-emergency.service, then our
> kdump-emergency.service starts kdump-error-handler.service with
> "systemctl isolate"(see 99kdumpbase/kdump-emergency.service, we
> replace systemd's with this one under kdump).
>
> This will lead to systemd two contradictable jobs queued as an
> atomic transaction:
> job 1) the emergency service gets started by initrd-root-fs.target
> job 2) the emergency service gets stopped due to "systemctl isolate"
> thereby throwing "Transaction is destructive".
>
> In order to solve it, we can utilize "IgnoreOnIsolate=yes" for
> both kdump-emergency.service and kdump-emergency.target to avoid
> being isolated, then they can keep going on as expected in case
> of failures.
>
> We add kdump-emergency.target dedicated to kdump the similar way
> as did for kdump-emergency.service(i.e. will replace systemd's
> emergency.target with kdump-emergency.target under kdump), and
> adds "IgnoreOnIsolate=yes" into both of them.
Is the kdump-emergency.target mandatory to make the isolate working?
Yes, both kdump-emergency.sevice and kdump-emergency.target need
"IgnoreOnIsolate=yes".
Regards,
Xunlei