Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MON-103295 default mariadb plugins directory is configurable and set by default according to the os #1421

Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/docker/Dockerfile.centreon-collect-mysql-alma9-test
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ dnf --best install -y gcc \
gdb \
git \
openssh-server \
mariadb-connector-c \
mysql-server \
mysql \
gnutls \
Expand All @@ -42,8 +43,8 @@ dnf clean all

echo "install robot and dependencies"

pip3 install -U robotframework robotframework-databaselibrary robotframework-httpctrl robotframework-examples pymysql python-dateutil psutil
pip3 install grpcio grpcio_tools py-cpuinfo cython unqlite gitpython boto3 robotframework-requests
pip3 install -U robotframework robotframework-databaselibrary robotframework-httpctrl robotframework-examples pymysql python-dateutil psutil
pip3 install grpcio grpcio_tools py-cpuinfo cython unqlite gitpython boto3 robotframework-requests cryptography

cd /tmp/collect

Expand Down
4 changes: 2 additions & 2 deletions .github/scripts/collect-prepare-test-robot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ if [ $database_type == 'mysql' ]; then
sleep 5
echo "########################### Init centreon database ############################"

mysql -e "CREATE USER IF NOT EXISTS 'centreon'@'localhost' IDENTIFIED WITH mysql_native_password BY 'centreon'"
mysql -e "CREATE USER IF NOT EXISTS 'root_centreon'@'localhost' IDENTIFIED WITH mysql_native_password BY 'centreon'"
mysql -e "CREATE USER IF NOT EXISTS 'centreon'@'localhost' IDENTIFIED BY 'centreon'"
mysql -e "CREATE USER IF NOT EXISTS 'root_centreon'@'localhost' IDENTIFIED BY 'centreon'"
else
echo "########################### Start MariaDB ######################################"
if [ "$distrib" = "ALMALINUX" ]; then
Expand Down
5 changes: 4 additions & 1 deletion broker/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,15 @@ endif()
if(OS_DISTRIBUTOR STREQUAL "Debian" OR OS_DISTRIBUTOR STREQUAL "Ubuntu")
message(STATUS "deb based os")
add_definitions("-DMYSQL_SOCKET=\"/var/run/mysqld/mysqld.sock\"")
add_definitions("-DDEFAULT_MARIADB_EXTENSION_DIR=\"/usr/lib/x86_64-linux-gnu/libmariadb3/plugin\"")
elseif(OS_DISTRIBUTOR STREQUAL "CentOS" OR OS_DISTRIBUTOR STREQUAL "RedHat")
message(STATUS "rpm based os")
add_definitions("-DMYSQL_SOCKET=\"/var/lib/mysql/mysql.sock\"")
add_definitions("-DDEFAULT_MARIADB_EXTENSION_DIR=\"/usr/lib64/mariadb/plugin\"")
else()
message(STATUS "other os: ${OS_DISTRIBUTOR}")
add_definitions("-DMYSQL_SOCKET=/tmp/mysql.sock")
add_definitions("-DMYSQL_SOCKET=\"/tmp/mysql.sock\"")
add_definitions("-DDEFAULT_MARIADB_EXTENSION_DIR=\"/usr/lib/x86_64-linux-gnu/libmariadb3/plugin\"")
endif()

include_directories(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ class database_config {
int get_connections_count() const;
unsigned get_max_commit_delay() const;
unsigned get_category() const;
const std::string& get_extension_directory() const {
return _extension_directory;
}

void set_type(std::string const& type);
void set_host(std::string const& host);
Expand All @@ -87,6 +90,9 @@ class database_config {
void set_queries_per_transaction(int qpt);
void set_check_replication(bool check_replication);
void set_category(unsigned category);
void set_extension_directory(std::string const& extension_directory) {
_extension_directory = extension_directory;
}

database_config auto_commit_conf() const;

Expand All @@ -105,6 +111,8 @@ class database_config {
int _connections_count;
unsigned _max_commit_delay;
unsigned _category;
// where mariadb will find extension such as caching_sha2_password.so
std::string _extension_directory;
};

std::ostream& operator<<(std::ostream& s, const database_config cfg);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ class mysql_connection {
const std::string _pwd;
const std::string _name;
const int _port;
const std::string _extension_directory;
const unsigned _max_second_commit_delay;
time_t _last_commit;
std::atomic<connection_state> _state;
Expand Down
18 changes: 14 additions & 4 deletions broker/core/sql/src/database_config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ std::ostream& operator<<(std::ostream& s, const database_config cfg) {
s << " queries per transaction:" << cfg.get_queries_per_transaction()
<< " check replication:" << cfg.get_check_replication()
<< " connection count:" << cfg.get_connections_count()
<< " max commit delay:" << cfg.get_max_commit_delay() << 's';
<< " max commit delay:" << cfg.get_max_commit_delay() << 's'
<< " extension_directory" << cfg.get_extension_directory();
return s;
}

Expand All @@ -49,7 +50,8 @@ database_config::database_config()
: _queries_per_transaction(1),
_check_replication(true),
_connections_count(1),
_category(SHARED) {}
_category(SHARED),
_extension_directory(DEFAULT_MARIADB_EXTENSION_DIR) {}

/**
* Constructor.
Expand Down Expand Up @@ -90,14 +92,16 @@ database_config::database_config(const std::string& type,
_check_replication(check_replication),
_connections_count(connections_count),
_max_commit_delay(max_commit_delay),
_category(SHARED) {}
_category(SHARED),
_extension_directory(DEFAULT_MARIADB_EXTENSION_DIR) {}

/**
* Build a database configuration from a configuration set.
*
* @param[in] cfg Endpoint configuration.
*/
database_config::database_config(config::endpoint const& cfg) {
database_config::database_config(config::endpoint const& cfg)
: _extension_directory(DEFAULT_MARIADB_EXTENSION_DIR) {
std::map<std::string, std::string>::const_iterator it, end;
end = cfg.params.end();

Expand Down Expand Up @@ -212,6 +216,11 @@ database_config::database_config(config::endpoint const& cfg) {
}
} else
_max_commit_delay = 5;

it = cfg.params.find("extension_directory");
if (it != end) {
_extension_directory = it->second;
}
}

/**
Expand Down Expand Up @@ -557,6 +566,7 @@ void database_config::_internal_copy(database_config const& other) {
_check_replication = other._check_replication;
_connections_count = other._connections_count;
_max_commit_delay = other._max_commit_delay;
_extension_directory = other._extension_directory;
}

/**
Expand Down
7 changes: 7 additions & 0 deletions broker/core/sql/src/mysql_connection.cc
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,9 @@ bool mysql_connection::_try_to_reconnect() {
uint32_t timeout = 10;
mysql_options(_conn, MYSQL_OPT_CONNECT_TIMEOUT, &timeout);

mysql_optionsv(_conn, MYSQL_PLUGIN_DIR,
(const void*)_extension_directory.c_str());

if (!mysql_real_connect(_conn, _host.c_str(), _user.c_str(), _pwd.c_str(),
_name.c_str(), _port,
(_socket == "" ? nullptr : _socket.c_str()),
Expand Down Expand Up @@ -830,6 +833,9 @@ void mysql_connection::_run() {
uint32_t timeout = 10;
mysql_options(_conn, MYSQL_OPT_CONNECT_TIMEOUT, &timeout);

mysql_optionsv(_conn, MYSQL_PLUGIN_DIR,
(const void*)_extension_directory.c_str());

while (config::applier::mode != config::applier::finished &&
!mysql_real_connect(_conn, _host.c_str(), _user.c_str(),
_pwd.c_str(), _name.c_str(), _port,
Expand Down Expand Up @@ -1076,6 +1082,7 @@ mysql_connection::mysql_connection(
_pwd(db_cfg.get_password()),
_name(db_cfg.get_name()),
_port(db_cfg.get_port()),
_extension_directory(db_cfg.get_extension_directory()),
_max_second_commit_delay(db_cfg.get_max_commit_delay()),
_last_commit(db_cfg.get_queries_per_transaction() > 1
? 0
Expand Down
42 changes: 21 additions & 21 deletions common/inc/com/centreon/common/perfdata.hh
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,17 @@ class perfdata {
enum data_type { gauge = 0, counter, derive, absolute, automatic };

private:
double _critical;
double _critical_low;
float _critical;
float _critical_low;
bool _critical_mode;
double _max;
double _min;
float _max;
float _min;
std::string _name;
std::string _unit;
double _value;
float _value;
data_type _value_type;
double _warning;
double _warning_low;
float _warning;
float _warning_low;
bool _warning_mode;

public:
Expand All @@ -48,30 +48,30 @@ class perfdata {
perfdata();
~perfdata() noexcept = default;

double critical() const { return _critical; }
void critical(double c) { _critical = c; }
double critical_low() const { return _critical_low; }
void critical_low(double c) { _critical_low = c; }
float critical() const { return _critical; }
void critical(float c) { _critical = c; }
float critical_low() const { return _critical_low; }
void critical_low(float c) { _critical_low = c; }
bool critical_mode() const { return _critical_mode; }
void critical_mode(bool val) { _critical_mode = val; }
double max() const { return _max; }
void max(double val) { _max = val; }
double min() const { return _min; }
void min(double val) { _min = val; }
float max() const { return _max; }
void max(float val) { _max = val; }
float min() const { return _min; }
void min(float val) { _min = val; }
const std::string& name() const { return _name; }
void name(const std::string&& val) { _name = val; }
void resize_name(size_t new_size);
const std::string& unit() const { return _unit; }
void resize_unit(size_t new_size);
void unit(const std::string&& val) { _unit = val; }
double value() const { return _value; }
void value(double val) { _value = val; }
float value() const { return _value; }
void value(float val) { _value = val; }
data_type value_type() const { return _value_type; };
void value_type(data_type val) { _value_type = val; }
double warning() const { return _warning; }
void warning(double val) { _warning = val; }
double warning_low() const { return _warning_low; }
void warning_low(double val) { _warning_low = val; }
float warning() const { return _warning; }
void warning(float val) { _warning = val; }
float warning_low() const { return _warning_low; }
void warning_low(float val) { _warning_low = val; }
bool warning_mode() const { return _warning_mode; }
void warning_mode(bool val) { _warning_mode = val; }
};
Expand Down
56 changes: 28 additions & 28 deletions common/tests/perfdata_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -78,29 +78,29 @@ TEST(PerfData, Assign) {
p1.warning_mode(false);

// Check objects properties values.
ASSERT_FALSE(fabs(p1.critical() - 9432.5) > 0.00001);
ASSERT_FALSE(fabs(p1.critical_low() - 1000.0001) > 0.00001);
ASSERT_FALSE(fabs(p1.critical() - 9432.5f) > 0.00001f);
ASSERT_TRUE(fabs(p1.critical_low() - 1000.0001f) < 0.0001f);
ASSERT_FALSE(!p1.critical_mode());
ASSERT_FALSE(fabs(p1.max() - 123.0) > 0.00001);
ASSERT_FALSE(fabs(p1.min() - 843.876) > 0.00001);
ASSERT_FALSE(fabs(p1.max() - 123.0f) > 0.00001f);
ASSERT_TRUE(fabs(p1.min() - 843.876f) < 0.0001f);
ASSERT_FALSE(p1.name() != "baz");
ASSERT_FALSE(p1.unit() != "qux");
ASSERT_FALSE(fabs(p1.value() - 3485.9) > 0.00001);
ASSERT_TRUE(fabs(p1.value() - 3485.9f) < 0.0001f);
ASSERT_FALSE(p1.value_type() != perfdata::derive);
ASSERT_FALSE(fabs(p1.warning() - 3612.0) > 0.00001);
ASSERT_FALSE(fabs(p1.warning_low() + 987579.0) > 0.01);
ASSERT_FALSE(fabs(p1.warning() - 3612.0f) > 0.00001f);
ASSERT_FALSE(fabs(p1.warning_low() + 987579.0f) > 0.01f);
ASSERT_FALSE(p1.warning_mode());
ASSERT_FALSE(fabs(p2.critical() - 42.0) > 0.00001);
ASSERT_FALSE(fabs(p2.critical_low() + 456.032) > 0.00001);
ASSERT_FALSE(fabs(p2.critical() - 42.0f) > 0.00001f);
ASSERT_FALSE(fabs(p2.critical_low() + 456.032f) > 0.00001f);
ASSERT_FALSE(p2.critical_mode());
ASSERT_FALSE(fabs(p2.max() - 76.3) > 0.00001);
ASSERT_FALSE(fabs(p2.min() - 567.2) > 0.00001);
ASSERT_FALSE(fabs(p2.max() - 76.3f) > 0.00001f);
ASSERT_FALSE(fabs(p2.min() - 567.2f) > 0.00001f);
ASSERT_FALSE(p2.name() != "foo");
ASSERT_FALSE(p2.unit() != "bar");
ASSERT_FALSE(fabs(p2.value() - 52189.912) > 0.00001);
ASSERT_FALSE(fabs(p2.value() - 52189.912f) > 0.00001f);
ASSERT_FALSE(p2.value_type() != perfdata::counter);
ASSERT_FALSE(fabs(p2.warning() - 4548.0) > 0.00001);
ASSERT_FALSE(fabs(p2.warning_low() - 42.42) > 0.00001);
ASSERT_FALSE(fabs(p2.warning() - 4548.0f) > 0.00001f);
ASSERT_FALSE(fabs(p2.warning_low() - 42.42f) > 0.00001f);
ASSERT_FALSE(!p2.warning_mode());
}

Expand Down Expand Up @@ -141,29 +141,29 @@ TEST(PerfData, CopyCtor) {
p1.warning_mode(false);

// Check objects properties values.
ASSERT_FALSE(fabs(p1.critical() - 9432.5) > 0.00001);
ASSERT_FALSE(fabs(p1.critical_low() - 1000.0001) > 0.00001);
ASSERT_FALSE(fabs(p1.critical() - 9432.5f) > 0.00001f);
ASSERT_FALSE(fabs(p1.critical_low() - 1000.0001f) > 0.00001f);
ASSERT_FALSE(!p1.critical_mode());
ASSERT_FALSE(fabs(p1.max() - 123.0) > 0.00001);
ASSERT_FALSE(fabs(p1.min() - 843.876) > 0.00001);
ASSERT_FALSE(fabs(p1.max() - 123.0f) > 0.00001f);
ASSERT_FALSE(fabs(p1.min() - 843.876f) > 0.00001f);
ASSERT_FALSE(p1.name() != "baz");
ASSERT_FALSE(p1.unit() != "qux");
ASSERT_FALSE(fabs(p1.value() - 3485.9) > 0.00001);
ASSERT_FALSE(fabs(p1.value() - 3485.9f) > 0.00001f);
ASSERT_FALSE(p1.value_type() != perfdata::derive);
ASSERT_FALSE(fabs(p1.warning() - 3612.0) > 0.00001);
ASSERT_FALSE(fabs(p1.warning_low() + 987579.0) > 0.01);
ASSERT_FALSE(fabs(p1.warning() - 3612.0f) > 0.00001f);
ASSERT_FALSE(fabs(p1.warning_low() + 987579.0f) > 0.01f);
ASSERT_FALSE(p1.warning_mode());
ASSERT_FALSE(fabs(p2.critical() - 42.0) > 0.00001);
ASSERT_FALSE(fabs(p2.critical_low() + 456.032) > 0.00001);
ASSERT_FALSE(fabs(p2.critical() - 42.0f) > 0.00001f);
ASSERT_FALSE(fabs(p2.critical_low() + 456.032f) > 0.00001f);
ASSERT_FALSE(p2.critical_mode());
ASSERT_FALSE(fabs(p2.max() - 76.3) > 0.00001);
ASSERT_FALSE(fabs(p2.min() - 567.2) > 0.00001);
ASSERT_FALSE(fabs(p2.max() - 76.3f) > 0.00001f);
ASSERT_FALSE(fabs(p2.min() - 567.2f) > 0.00001f);
ASSERT_FALSE(p2.name() != "foo");
ASSERT_FALSE(p2.unit() != "bar");
ASSERT_FALSE(fabs(p2.value() - 52189.912) > 0.00001);
ASSERT_FALSE(fabs(p2.value() - 52189.912f) > 0.00001f);
ASSERT_FALSE(p2.value_type() != perfdata::counter);
ASSERT_FALSE(fabs(p2.warning() - 4548.0) > 0.00001);
ASSERT_FALSE(fabs(p2.warning_low() - 42.42) > 0.00001);
ASSERT_FALSE(fabs(p2.warning() - 4548.0f) > 0.00001f);
ASSERT_FALSE(fabs(p2.warning_low() - 42.42f) > 0.00001f);
ASSERT_FALSE(!p2.warning_mode());
}

Expand Down
1 change: 0 additions & 1 deletion tests/mysql_docker_conf/centreon16.cnf
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[mysqld]
#mariadb conf optimized for a 16Gb ram machine
port = 3306
default-authentication-plugin=mysql_native_password

max_heap_table_size=1G
open_files_limit = 32000
Expand Down
Loading