phosphor-mapper: oneshots should restart on failure

This makes the oneshot services that wait on the mapper or manipulate
mapper state more resilient to guarantee that they succeeded even if
they encounter an unexpected and unhandled error.

Tested:
    On zaius prior to applying some mapper fixes to make sure that these
    services do restart when they hit ENOBUFS. The system eventually
    proceeds as normal.

Change-Id: Iea74004d6347db59c32f9f1602b5053c8252ca90
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/common/recipes-phosphor/dbus/phosphor-mapper/mapper-wait@.service b/common/recipes-phosphor/dbus/phosphor-mapper/mapper-wait@.service
index 14a657a..f7744e2 100644
--- a/common/recipes-phosphor/dbus/phosphor-mapper/mapper-wait@.service
+++ b/common/recipes-phosphor/dbus/phosphor-mapper/mapper-wait@.service
@@ -4,8 +4,19 @@
 After=obmc-mapper.target
 
 [Service]
-Type=oneshot
+# We are using a Type=simple service instead of the normal Type=oneshot
+# since Type=oneshot can't have Restart= lines
+# https://github.com/systemd/systemd/issues/2582
+# Unfortunately Type=oneshot services halt any services which order after
+# the oneshot on the completion of ExecStart= lines. For Type=simple, the
+# halting is only until ExecStartPre lines have completed and ExecStart has
+# begun executing. Since we want to wait for the `mapper wait` process to
+# finish, it must be an ExecStartPre. All Type=simple services require an
+# ExecStart so we use `true` as a placeholder to satisfy the requirement.
+Type=simple
 RemainAfterExit=yes
-Restart=no
-ExecStart=/usr/bin/env mapper wait %I
+Restart=on-failure
+TimeoutStartSec=infinity
+ExecStartPre=/usr/bin/env mapper wait %I
+ExecStart=/usr/bin/env true
 SyslogIdentifier=mapper