Use C++11 RNG in mysqlmon tests

The glib re-entrant random number generation functions crashe on CentOS 7
for no apparent reason. As the C++11 random number library provides a more
versatile, widely supported and simple method of acquiring random numbers,
it should be used instead.
This commit is contained in:
Markus Mäkelä
2018-07-08 20:22:52 +03:00
parent e6cf20ea29
commit 5c4926b899
2 changed files with 10 additions and 30 deletions

View File

@ -17,6 +17,7 @@
#include <sstream> #include <sstream>
#include <thread> #include <thread>
#include <vector> #include <vector>
#include <random>
#include "testconnections.h" #include "testconnections.h"
#include "fail_switch_rejoin_common.cpp" #include "fail_switch_rejoin_common.cpp"
@ -105,15 +106,8 @@ private:
: m_id(id) : m_id(id)
, m_verbose(verbose) , m_verbose(verbose)
, m_value(1) , m_value(1)
, m_rand_dist(0.0, 1.0)
{ {
ss_debug(int rv);
unsigned int seed = (time(NULL) << m_id);
ss_debug(rv =) initstate_r(seed, m_initstate, sizeof(m_initstate), &m_random_data);
ss_dassert(rv == 0);
ss_debug(rv=) srandom_r(seed, &m_random_data);
ss_dassert(rv == 0);
} }
enum action_t enum action_t
@ -234,11 +228,7 @@ private:
double random_decimal_fraction() const double random_decimal_fraction() const
{ {
int32_t r; return m_rand_dist(m_rand_gen);
ss_debug(int rv=) random_r(&m_random_data, &r);
ss_dassert(rv == 0);
return double(r) / RAND_MAX;
} }
void run(const char* zHost, int port, const char* zUser, const char* zPassword) void run(const char* zHost, int port, const char* zUser, const char* zPassword)
@ -375,8 +365,8 @@ private:
size_t m_id; size_t m_id;
bool m_verbose; bool m_verbose;
size_t m_value; size_t m_value;
char m_initstate[INITSTATE_SIZE]; mutable std::mt19937 m_rand_gen;
mutable struct random_data m_random_data; mutable std::uniform_real_distribution<double> m_rand_dist;
static size_t s_nClients; static size_t s_nClients;
static size_t s_nRows; static size_t s_nRows;

View File

@ -17,6 +17,7 @@
#include <sstream> #include <sstream>
#include <thread> #include <thread>
#include <vector> #include <vector>
#include <random>
#include "testconnections.h" #include "testconnections.h"
#include "fail_switch_rejoin_common.cpp" #include "fail_switch_rejoin_common.cpp"
@ -108,15 +109,8 @@ private:
: m_id(id) : m_id(id)
, m_verbose(verbose) , m_verbose(verbose)
, m_value(1) , m_value(1)
, m_rand_dist(0.0, 1.0)
{ {
ss_debug(int rv);
unsigned int seed = (time(NULL) << m_id);
ss_debug(rv =) initstate_r(seed, m_initstate, sizeof(m_initstate), &m_random_data);
ss_dassert(rv == 0);
ss_debug(rv=) srandom_r(seed, &m_random_data);
ss_dassert(rv == 0);
} }
enum action_t enum action_t
@ -237,11 +231,7 @@ private:
double random_decimal_fraction() const double random_decimal_fraction() const
{ {
int32_t r; return m_rand_dist(m_rand_gen);
ss_debug(int rv=) random_r(&m_random_data, &r);
ss_dassert(rv == 0);
return double(r) / RAND_MAX;
} }
void run(const char* zHost, int port, const char* zUser, const char* zPassword) void run(const char* zHost, int port, const char* zUser, const char* zPassword)
@ -378,8 +368,8 @@ private:
size_t m_id; size_t m_id;
bool m_verbose; bool m_verbose;
size_t m_value; size_t m_value;
char m_initstate[INITSTATE_SIZE]; mutable std::mt19937 m_rand_gen;
mutable struct random_data m_random_data; mutable std::uniform_real_distribution<double> m_rand_dist;
static size_t s_nClients; static size_t s_nClients;
static size_t s_nRows; static size_t s_nRows;