Bug 1296123
Summary: | skyring binary is not service | ||
---|---|---|---|
Product: | [Red Hat Storage] Red Hat Storage Console | Reporter: | Martin Kudlej <mkudlej> |
Component: | core | Assignee: | Shubhendu Tripathi <shtripat> |
core sub component: | configuration | QA Contact: | Martin Bukatovic <mbukatov> |
Status: | CLOSED CURRENTRELEASE | Docs Contact: | |
Severity: | high | ||
Priority: | unspecified | CC: | mbukatov, nthomas, sankarshan, shtripat |
Version: | 2 | Keywords: | TestBlocker |
Target Milestone: | beta | ||
Target Release: | 2 | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Whiteboard: | |||
Fixed In Version: | rhscon-ceph-0.0.23-1.el7scon.x86_64, rhscon-core-0.0.24-1.el7scon.x86_64, rhscon-ui-0.0.39-1.el7scon.noarch | Doc Type: | Bug Fix |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2018-11-19 05:30:19 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | |||
Bug Blocks: | 1311521, 1326788, 1326854 |
Description
Martin Kudlej
2016-01-06 11:53:03 UTC
service skyringd start service skyringd status service skyringd stop Using rhscon-core-0.0.8-2.el7.x86_64, I see that skyringd service is available: ~~~ # systemctl list-unit-files | grep skyring skyringd.service static # systemctl status skyringd ● skyringd.service - skyring server Loaded: loaded (/usr/lib/systemd/system/skyringd.service; static; vendor preset: disabled) Active: active (running) since Fri 2016-02-12 13:51:03 CET; 6min ago Process: 31668 ExecStart=/etc/init.d/skyringd start (code=exited, status=0/SUCCESS) Main PID: 31673 (skyring) CGroup: /system.slice/skyringd.service ├─31673 /usr/bin/skyring └─31693 /var/lib/skyring/providers/bigfin {"config":{"host":"0.0.0.0","httpPort":8080,"supportedversions":[1]},"logging":{"logToStderr":false,"filename":"/var/log/skyring/skyring.log"... Feb 12 13:51:03 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Starting skyring server... Feb 12 13:51:03 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Started skyring server. Feb 12 13:51:03 mbukatov-usm1-server.os1.phx2.redhat.com skyringd[31668]: Starting skyring: ~~~ That said, I see a big problem with the way it has been implemented: Systemd service file is just a wrapper. It doesn't start skyring process directly, but it calls system v style init script which then starts the skyring process, see: ~~~ # systemctl cat skyringd # /usr/lib/systemd/system/skyringd.service [Unit] Description=skyring server [Service] Type=forking KillMode=process ExecStart=/etc/init.d/skyringd start ExecStop=/etc/init.d/skyringd stop # file /etc/init.d/skyringd /etc/init.d/skyringd: POSIX shell script, ASCII text executable # wc -l /etc/init.d/skyringd 105 /etc/init.d/skyringd ~~~ Such approach is not acceptable for a brand new service. Moreover no systemd features could be configured/used this way. Eg. instead of hacking handling of pid and lock files in a shell init script, you can specify it in a systemd service file. This direclty leads to several problems, such as (note that the list below doesn't cover all possible problems): 1) systemd is not avare of any skyring socket: ~~~ # systemctl list-sockets --all | grep skyring # ~~~ note: compare this with sshd: ~~~ # systemctl list-sockets --all | grep ssh [::]:22 sshd.socket ~~~ 2) systemd is not aware of skyring service dependencies: ~~~ # systemctl list-dependencies skyringd | grep -i mongo # ~~~ note: I would expect to see mongob here 3) When I ask journalctl for logs of skyringd service, I see just list of start and stop events. I would expect to see more details in the journal logs. Eg. I started a create cluster task and still see nothing in the logs. ~~~ # journalctl -u skyringd -- Logs begin at Tue 2016-02-09 12:56:17 CET, end at Fri 2016-02-12 14:03:43 CET. -- Feb 09 13:35:59 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Starting skyring server... Feb 09 13:35:59 mbukatov-usm1-server.os1.phx2.redhat.com skyringd[26966]: Starting skyring: Feb 09 13:35:59 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Started skyring server. Feb 09 13:36:00 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Started skyring server. Feb 12 13:50:50 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Stopping skyring server... Feb 12 13:50:52 mbukatov-usm1-server.os1.phx2.redhat.com skyringd[31602]: Stopping skyring: [ OK ] Feb 12 13:50:52 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Stopped skyring server. Feb 12 13:51:03 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Starting skyring server... Feb 12 13:51:03 mbukatov-usm1-server.os1.phx2.redhat.com systemd[1]: Started skyring server. Feb 12 13:51:03 mbukatov-usm1-server.os1.phx2.redhat.com skyringd[31668]: Starting skyring: ~~~ Moreover: looking at /usr/bin/skyring-setup.sh script, it's obvious that some of the stuff here should be moved into systemd service file (eg. list of services required by skyring: salt-master, influxdb and mongod. Also if there is proper systemd service file this will not happen: 2016-02-19T12:28:16.782+01:00 ERROR ldapauth.go:366 AddUser] User admin already exists 2016-02-19T12:28:16.782+01:00 ERROR auth.go:37 AddDefaultUser] Unable to create default User:user already exists 2016-02-19T12:28:16.785+01:00 INFO skyring.go:500 InitializeApplication] Starting clusters syncing 2016-02-19T12:28:16.785+01:00 INFO main.go:187 start] Starting the providers 2016-02-19T12:28:16.785+01:00 DEBUG provider-conf.go:53 LoadProviderConfig] File Name: ceph.conf 2016-02-19T12:28:16.786+01:00 DEBUG provider-conf.go:68 LoadProviderConfig] Collection:%!(EXTRA []conf.ProviderInfo=[{{ceph bigfin} []}]) 2016-02-19T12:28:16.786+01:00 INFO skyring.go:92 StartProviders] Config:%!(EXTRA []conf.ProviderInfo=[{{ceph bigfin} []}]) 2016-02-19T12:28:16.786+01:00 DEBUG skyring.go:95 StartProviders] Config:%!(EXTRA conf.ProviderInfo={{ceph bigfin} []}) 2016-02-19T12:28:16.798+01:00 INFO main.go:194 start] Starting event listener 2016-02-19T12:28:16.801+01:00 CRITICAL listener.go:134 StartListener] listen error:listen unix /var/run/.skyring-event: bind: address already in use Also note that with the current service file it's not possible to enable the service. Which means that skyring service would not be running after reboot, and a manual start is required. ~~~ # systemctl enable skyringd.service The unit files have no [Install] section. They are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: 1) A unit may be statically enabled by being symlinked from another unit's .wants/ or .requires/ directory. 2) A unit's purpose may be to act as a helper for some other unit which has a requirement dependency on it. 3) A unit may be started when needed via activation (socket, path, timer, D-Bus, udev, scripted systemctl call, ...). # systemctl status skyringd.service ● skyringd.service - skyring server Loaded: loaded (/usr/lib/systemd/system/skyringd.service; static; vendor preset: disabled) Active: active (running) since Fri 2016-03-18 16:06:09 CET; 4min 52s ago Main PID: 3610 (skyring) CGroup: /system.slice/skyringd.service ├─3610 /usr/bin/skyring └─3631 /var/lib/skyring/providers/bigfin {"config":{"host":"0.0.0.0","httpPort":8080,"supportedversions":[1]},"logging":{"logToStderr":false,"fi... # ~~~ Checking rhscon-core-0.0.41-1.el7scon.x86_64 Skyring now has a proper systemd service unit file: * start, stop and restart is possible * enable/disable of the service works * both mongod and salt-master services are specified as dependencies (starting skyring would start them if they are not running) Moreover, I'm able to check logs via journal using: ~~~ # journalctl -u skyring ~~~ |