[SERVER-42716] Incorrect dependency on multi-user.target causes dependency loop for systemd Created: 08/Aug/19  Updated: 08/Aug/19  Resolved: 08/Aug/19

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: 4.0.11
Fix Version/s: None

Type: Bug Priority: Critical - P2
Reporter: Pavel Odintsov Assignee: Unassigned
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Duplicate
duplicates SERVER-42603 Recent service file change may cause ... Closed
Operating System: ALL
Participants:

 Description   

Hello!

I noticed quite serious issue in your official systemd unit file for MongoDB 4.0.11 in Ubuntu 18.04.

Your current systemd unit file looks like:

[Unit]
Description=MongoDB Database Server
After=multi-user.target
Documentation=https://docs.mongodb.org/manual[Service]
User=mongodb
Group=mongodb
EnvironmentFile=-/etc/default/mongod
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings[Install]
WantedBy=multi-user.target

You may notice two following sections:

After=multi-user.target
...
[Install]
WantedBy=multi-user.target

First "After" is not required at all. Systemd will run service on multi-user.target level because you have correct configuration in "Install" section.

And this "After=multi-user.target" dependency causes serious problems for any service which runs on same run level but requires mongodb because it creates dependency cycle which prevents proper loading of application which depend on MongoDB.

It may happen with any application which configured this way:

[Unit]
Description=App with MongoDB dependency 
After=mongod.service
 
[Service]
Type=forking
ExecStart=...
PIDFile=...
 
[Install]
WantedBy=multi-user.target

It will cause following issues from systemd perspective:

[    3.649328] systemd[1]: multi-user.target: Found ordering cycle on app.service/start
[    3.658031] systemd[1]: multi-user.target: Found dependency on mongod.service/start
[    3.665973] systemd[1]: multi-user.target: Found dependency on multi-user.target/start
[    3.674482] systemd[1]: multi-user.target: Job app.service/start deleted to break ordering cycle starting with multi-user.target/start

Please check this issue. It's quite serious one because it causes issues for any application which depends on MongoDB.



 Comments   
Comment by Danny Hatcher (Inactive) [ 08/Aug/19 ]

This issue has been reported and resolved in SERVER-42603 so I will close this ticket as a duplicate. Please let us know if that fix does not resolve the issue.

Generated at Thu Feb 08 05:01:14 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.