Skip to content

Option for DavMail to abort on failure #360

@protist

Description

@protist

I'm using the Arch Linux systemd service to launch DavMail. This generally works fine. However, DavMail often fails, usually when booting the computer. When it is failing, there is no tray icon (I have davmail.server=false). Presumably DavMail fails because the panel/tray/bus isn't available yet.

While it's failing, I get the following loop in journalctl, repeated 4 times every 5 minutes.

Jun 24 10:39:50 hostname davmail[951]: 2024-06-24 10:39:50,448 ERROR [CaldavConnection-38404] davmail  - DavMail configuration exception:
Jun 24 10:39:50 hostname davmail[951]: O365Interactive not supported in headless mode
Jun 24 10:39:50 hostname davmail[951]: davmail.exception.DavMailException: DavMail configuration exception:
Jun 24 10:39:50 hostname davmail[951]: O365Interactive not supported in headless mode
Jun 24 10:39:50 hostname davmail[951]:         at davmail.exchange.ExchangeSessionFactory.getInstance(ExchangeSessionFactory.java:168)
Jun 24 10:39:50 hostname davmail[951]:         at davmail.exchange.ExchangeSessionFactory.getInstance(ExchangeSessionFactory.java:93)
Jun 24 10:39:50 hostname davmail[951]:         at davmail.caldav.CaldavConnection.run(CaldavConnection.java:178)

DavMail does try and reconnect, but none of these attempt work. From the message, presumably this is because it can't connect to the GUI session. The only way to get it working again is by manually restarting the systemd service.

Presumably in order to attempt reconnections, the DavMail process does not abort, and thus the systemd service itself reports as active.

$ systemctl --user status davmail@foobar.service
● davmail@foobar.service - DavMail for foober
     Loaded: loaded (/usr/lib/systemd/user/davmail@.service; enabled; preset: enabled)
     Active: active (running) since Sun 2024-06-23 21:43:39 AEST; 13h ago
 Invocation: bd5fa86d76fd4c3ebc387033185fb3d2
   Main PID: 951 (java)
      Tasks: 30 (limit: 77036)
     Memory: 131.7M (peak: 149.6M)
        CPU: 3.247s
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/app-davmail.slice/davmail@foobar.service
             └─951 java -Xmx512M -Dsun.net.inetaddr.ttl=60 -Djdk.gtk.version=2.2 -cp "/usr/share/davmail/davmail.jar:/usr/share/java/swt.jar:/usr/share/java/javafx-base.jar:/usr/share/java/javafx-controls.jar:/usr/share/java/javafx-fxml.jar:/usr/share/java/javafx-graphics.jar:/usr>

There seem to be two issues here. Firstly, DavMail seems to be retrying the wrong thing. Instead of retrying to connect, it should (also) try and connect to the GUI session again.
However, given that DavMail cannot reconnect by itself, is there a way to get it abort on failure immediately instead? Then systemd can restart the service. Either way, does it seem "neater" for systemd to take care of reattempts anyway?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions