supervisor: drop unused Upstart code, always use libsystemd
Since we don't support Ubuntu 14.04 anymore, we can drop Upstart related code from supervisor.[cc|hh]. Also, "#ifdef HAVE_LIBSYSTEMD" was for compiling Scylla on older distribution which does not provide libsystemd, we nolonger need this since we always build Scylla on latest Fedora. Dropping HAVE_LIBSYSTEMD also means removing libsystemd from optional_packages in configure.py, make it required library. Note that we still may run Scylla without systemd such as our Docker image, but sd_notify() does nothing when systemd does not detected, so we can ignore such case. Reference: https://www.freedesktop.org/software/systemd/man/sd_notify.html Reference: https://github.com/systemd/systemd/blob/master/src/libsystemd/sd-daemon/sd-daemon.c
This commit is contained in:
25
configure.py
25
configure.py
@@ -510,7 +510,6 @@ scylla_core = (['database.cc',
|
||||
'frozen_mutation.cc',
|
||||
'memtable.cc',
|
||||
'schema_mutations.cc',
|
||||
'supervisor.cc',
|
||||
'utils/logalloc.cc',
|
||||
'utils/large_bitset.cc',
|
||||
'utils/buffer_input_stream.cc',
|
||||
@@ -1087,34 +1086,14 @@ else:
|
||||
# a list element means a list of alternative packages to consider
|
||||
# the first element becomes the HAVE_pkg define
|
||||
# a string element is a package name with no alternatives
|
||||
optional_packages = [['libsystemd', 'libsystemd-daemon']]
|
||||
optional_packages = [[]]
|
||||
pkgs = []
|
||||
|
||||
# Lua can be provided by lua53 package on Debian-like
|
||||
# systems and by Lua on others.
|
||||
pkgs.append('lua53' if have_pkg('lua53') else 'lua')
|
||||
|
||||
|
||||
def setup_first_pkg_of_list(pkglist):
|
||||
# The HAVE_pkg symbol is taken from the first alternative
|
||||
upkg = pkglist[0].upper().replace('-', '_')
|
||||
for pkg in pkglist:
|
||||
if have_pkg(pkg):
|
||||
pkgs.append(pkg)
|
||||
defines.append('HAVE_{}=1'.format(upkg))
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
for pkglist in optional_packages:
|
||||
if isinstance(pkglist, str):
|
||||
pkglist = [pkglist]
|
||||
if not setup_first_pkg_of_list(pkglist):
|
||||
if len(pkglist) == 1:
|
||||
print('Missing optional package {pkglist[0]}'.format(**locals()))
|
||||
else:
|
||||
alternatives = ':'.join(pkglist[1:])
|
||||
print('Missing optional package {pkglist[0]} (or alteratives {alternatives})'.format(**locals()))
|
||||
pkgs.append('libsystemd')
|
||||
|
||||
|
||||
compiler_test_src = '''
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 ScyllaDB
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is part of Scylla.
|
||||
*
|
||||
* Scylla is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Scylla is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Scylla. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "supervisor.hh"
|
||||
#include "log.hh"
|
||||
#include <seastar/core/print.hh>
|
||||
#include <csignal>
|
||||
#include <cstdlib>
|
||||
|
||||
#ifdef HAVE_LIBSYSTEMD
|
||||
#include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
extern logger startlog;
|
||||
|
||||
const sstring supervisor::scylla_upstart_job_str("scylla-server");
|
||||
const sstring supervisor::upstart_job_env("UPSTART_JOB");
|
||||
const sstring supervisor::systemd_ready_msg("READY=1");
|
||||
const sstring supervisor::systemd_status_msg_prefix("STATUS");
|
||||
|
||||
sstring supervisor::get_upstart_job_env() {
|
||||
const char* upstart_job = std::getenv(upstart_job_env.c_str());
|
||||
return !upstart_job ? "" : upstart_job;
|
||||
}
|
||||
|
||||
bool supervisor::try_notify_upstart(sstring msg, bool ready) {
|
||||
static const sstring upstart_job_str(get_upstart_job_env());
|
||||
|
||||
if (upstart_job_str != scylla_upstart_job_str) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ready) {
|
||||
std::raise(SIGSTOP);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void supervisor::try_notify_systemd(sstring msg, bool ready) {
|
||||
#ifdef HAVE_LIBSYSTEMD
|
||||
if (ready) {
|
||||
sd_notify(0, format("{}\n{}={}\n", systemd_ready_msg, systemd_status_msg_prefix, msg).c_str());
|
||||
} else {
|
||||
sd_notify(0, format("{}={}\n", systemd_status_msg_prefix, msg).c_str());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void supervisor::notify(sstring msg, bool ready) {
|
||||
startlog.info("{}", msg);
|
||||
|
||||
if (try_notify_upstart(msg, ready) == true) {
|
||||
return;
|
||||
} else {
|
||||
try_notify_systemd(msg, ready);
|
||||
}
|
||||
}
|
||||
@@ -22,25 +22,35 @@
|
||||
#pragma once
|
||||
|
||||
#include <seastar/core/sstring.hh>
|
||||
#include <seastar/core/print.hh>
|
||||
#include "seastarx.hh"
|
||||
#include <systemd/sd-daemon.h>
|
||||
#include "log.hh"
|
||||
|
||||
extern logger startlog;
|
||||
|
||||
class supervisor {
|
||||
public:
|
||||
static const sstring scylla_upstart_job_str;
|
||||
static const sstring upstart_job_env;
|
||||
static const sstring systemd_ready_msg;
|
||||
static constexpr auto systemd_ready_msg = "READY=1";
|
||||
/** A systemd status message has a format <status message prefix>=<message> */
|
||||
static const sstring systemd_status_msg_prefix;
|
||||
static constexpr auto systemd_status_msg_prefix = "STATUS";
|
||||
public:
|
||||
/**
|
||||
* @brief Notify the Supervisor with the given message.
|
||||
* @param msg message to notify the Supervisor with
|
||||
* @param ready set to TRUE when scylla service becomes ready
|
||||
*/
|
||||
static void notify(sstring msg, bool ready = false);
|
||||
static inline void notify(sstring msg, bool ready = false) {
|
||||
startlog.info("{}", msg);
|
||||
try_notify_systemd(msg, ready);
|
||||
}
|
||||
|
||||
private:
|
||||
static void try_notify_systemd(sstring msg, bool ready);
|
||||
static bool try_notify_upstart(sstring msg, bool ready);
|
||||
static sstring get_upstart_job_env();
|
||||
static inline void try_notify_systemd(sstring msg, bool ready) {
|
||||
if (ready) {
|
||||
sd_notify(0, format("{}\n{}={}\n", systemd_ready_msg, systemd_status_msg_prefix, msg).c_str());
|
||||
} else {
|
||||
sd_notify(0, format("{}={}\n", systemd_status_msg_prefix, msg).c_str());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user