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:
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user