mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-28 20:02:00 +03:00
Configurable data payload size for dbsim.
This commit is contained in:
@ -34,10 +34,13 @@ db::client::client(db::server& server,
|
|||||||
, client_state_(mutex_, cond_, server_state_, client_service_, client_id, mode)
|
, client_state_(mutex_, cond_, server_state_, client_service_, client_id, mode)
|
||||||
, client_service_(*this)
|
, client_service_(*this)
|
||||||
, se_trx_(server.storage_engine())
|
, se_trx_(server.storage_engine())
|
||||||
|
, data_()
|
||||||
, random_device_()
|
, random_device_()
|
||||||
, random_engine_(random_device_())
|
, random_engine_(random_device_())
|
||||||
, stats_()
|
, stats_()
|
||||||
{ }
|
{
|
||||||
|
data_.resize(params.max_data_size);
|
||||||
|
}
|
||||||
|
|
||||||
void db::client::start()
|
void db::client::start()
|
||||||
{
|
{
|
||||||
@ -119,18 +122,23 @@ void db::client::run_one_transaction()
|
|||||||
assert(transaction.active());
|
assert(transaction.active());
|
||||||
assert(err == 0);
|
assert(err == 0);
|
||||||
std::uniform_int_distribution<size_t> uniform_dist(0, params_.n_rows);
|
std::uniform_int_distribution<size_t> uniform_dist(0, params_.n_rows);
|
||||||
const size_t data(uniform_dist(random_engine_));
|
const size_t randkey(uniform_dist(random_engine_));
|
||||||
std::ostringstream os;
|
::memcpy(data_.data(), &randkey,
|
||||||
os << data;
|
std::min(sizeof(randkey), data_.size()));
|
||||||
wsrep::key key(wsrep::key::exclusive);
|
wsrep::key key(wsrep::key::exclusive);
|
||||||
key.append_key_part("dbms", 4);
|
key.append_key_part("dbms", 4);
|
||||||
unsigned long long client_key(client_state_.id().get());
|
unsigned long long client_key(client_state_.id().get());
|
||||||
key.append_key_part(&client_key, sizeof(client_key));
|
key.append_key_part(&client_key, sizeof(client_key));
|
||||||
key.append_key_part(&data, sizeof(data));
|
key.append_key_part(&randkey, sizeof(randkey));
|
||||||
err = client_state_.append_key(key);
|
err = client_state_.append_key(key);
|
||||||
|
size_t bytes_to_append(data_.size());
|
||||||
|
if (params_.random_data_size)
|
||||||
|
{
|
||||||
|
bytes_to_append = std::uniform_int_distribution<size_t>(
|
||||||
|
1, data_.size())(random_engine_);
|
||||||
|
}
|
||||||
err = err || client_state_.append_data(
|
err = err || client_state_.append_data(
|
||||||
wsrep::const_buffer(os.str().c_str(),
|
wsrep::const_buffer(data_.data(), bytes_to_append));
|
||||||
os.str().size()));
|
|
||||||
return err;
|
return err;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ namespace db
|
|||||||
db::client_state client_state_;
|
db::client_state client_state_;
|
||||||
db::client_service client_service_;
|
db::client_service client_service_;
|
||||||
db::storage_engine::transaction se_trx_;
|
db::storage_engine::transaction se_trx_;
|
||||||
|
wsrep::mutable_buffer data_;
|
||||||
std::random_device random_device_;
|
std::random_device random_device_;
|
||||||
std::default_random_engine random_engine_;
|
std::default_random_engine random_engine_;
|
||||||
struct stats stats_;
|
struct stats stats_;
|
||||||
|
@ -67,6 +67,10 @@ db::params db::parse_args(int argc, char** argv)
|
|||||||
"number of transactions run by a client")
|
"number of transactions run by a client")
|
||||||
("rows", po::value<size_t>(¶ms.n_rows),
|
("rows", po::value<size_t>(¶ms.n_rows),
|
||||||
"number of rows per table")
|
"number of rows per table")
|
||||||
|
("max-data-size", po::value<size_t>(¶ms.max_data_size),
|
||||||
|
"maximum size of data payload (default 8)")
|
||||||
|
("random-data-size", po::value<bool>(¶ms.random_data_size),
|
||||||
|
"randomized payload data size (default 0)")
|
||||||
("alg-freq", po::value<size_t>(¶ms.alg_freq),
|
("alg-freq", po::value<size_t>(¶ms.alg_freq),
|
||||||
"ALG frequency")
|
"ALG frequency")
|
||||||
("sync-wait", po::value<bool>(¶ms.sync_wait),
|
("sync-wait", po::value<bool>(¶ms.sync_wait),
|
||||||
|
@ -31,6 +31,8 @@ namespace db
|
|||||||
size_t n_clients;
|
size_t n_clients;
|
||||||
size_t n_transactions;
|
size_t n_transactions;
|
||||||
size_t n_rows;
|
size_t n_rows;
|
||||||
|
size_t max_data_size; // Maximum size of write set data payload.
|
||||||
|
bool random_data_size; // If true, randomize data payload size.
|
||||||
size_t alg_freq;
|
size_t alg_freq;
|
||||||
bool sync_wait;
|
bool sync_wait;
|
||||||
std::string topology;
|
std::string topology;
|
||||||
@ -45,6 +47,8 @@ namespace db
|
|||||||
, n_clients(0)
|
, n_clients(0)
|
||||||
, n_transactions(0)
|
, n_transactions(0)
|
||||||
, n_rows(1000)
|
, n_rows(1000)
|
||||||
|
, max_data_size(8)
|
||||||
|
, random_data_size(false)
|
||||||
, alg_freq(0)
|
, alg_freq(0)
|
||||||
, sync_wait(false)
|
, sync_wait(false)
|
||||||
, topology()
|
, topology()
|
||||||
|
Reference in New Issue
Block a user