From a175314c3e5827eb193872241446f2f8f5c9d33c Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 20:07:14 +0200 Subject: Adding upstream version 1:10.5.12. Signed-off-by: Daniel Baumann --- storage/tokudb/PerconaFT/src/tests/test_stress5.cc | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 storage/tokudb/PerconaFT/src/tests/test_stress5.cc (limited to 'storage/tokudb/PerconaFT/src/tests/test_stress5.cc') diff --git a/storage/tokudb/PerconaFT/src/tests/test_stress5.cc b/storage/tokudb/PerconaFT/src/tests/test_stress5.cc new file mode 100644 index 00000000..89365d19 --- /dev/null +++ b/storage/tokudb/PerconaFT/src/tests/test_stress5.cc @@ -0,0 +1,113 @@ +/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: +#ident "$Id$" +/*====== +This file is part of PerconaFT. + + +Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved. + + PerconaFT is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, + as published by the Free Software Foundation. + + PerconaFT 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 PerconaFT. If not, see . + +---------------------------------------- + + PerconaFT is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License, version 3, + as published by the Free Software Foundation. + + PerconaFT 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with PerconaFT. If not, see . +======= */ + +#ident "Copyright (c) 2006, 2015, Percona and/or its affiliates. All rights reserved." + +#include "test.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include "threaded_stress_test_helpers.h" + + +static void +stress_table(DB_ENV *env, DB **dbp, struct cli_args *cli_args) { + // + // do insertions and queries with a loader lying around doing stuff + // + + if (verbose) printf("starting creation of pthreads\n"); + const int num_threads = 5 + cli_args->num_update_threads + cli_args->num_ptquery_threads; + struct arg myargs[num_threads]; + for (int i = 0; i < num_threads; i++) { + arg_init(&myargs[i], dbp, env, cli_args); + } + struct scan_op_extra soe[2]; + + // make the forward fast scanner + soe[0].fast = true; + soe[0].fwd = true; + soe[0].prefetch = false; + myargs[0].operation_extra = &soe[0]; + myargs[0].operation = scan_op; + myargs[0].txn_flags = DB_TXN_SNAPSHOT | DB_TXN_READ_ONLY; + + // make the forward slow scanner + soe[1].fast = false; + soe[1].fwd = true; + soe[1].prefetch = false; + myargs[1].operation_extra = &soe[1]; + myargs[1].operation = scan_op; + + // make the guy that updates the db + struct loader_op_extra loe; + loe.soe = soe[0]; + loe.num_dbs = 3; + myargs[2].operation_extra = &loe; + myargs[2].operation = loader_op; + myargs[3].operation = keyrange_op; + myargs[4].operation = get_key_after_bytes_op; + + struct update_op_args uoe = get_update_op_args(cli_args, NULL); + // make the guy that updates the db + for (int i = 5; i < 5 + cli_args->num_update_threads; ++i) { + myargs[i].operation_extra = &uoe; + myargs[i].operation = update_op; + } + + // make the guy that does point queries + for (int i = 5 + cli_args->num_update_threads; i < num_threads; i++) { + myargs[i].operation = ptquery_op; + } + run_workers(myargs, num_threads, cli_args->num_seconds, false, cli_args); +} + +int +test_main(int argc, char *const argv[]) { + struct cli_args args = get_default_args(); + // let's make default checkpointing period really slow + args.env_args.checkpointing_period = 1; + parse_stress_test_args(argc, argv, &args); + stress_test_main(&args); + return 0; +} -- cgit v1.2.3